diff --git a/docs/investmoz/consolidated-review-matrix-2026-10-03.md b/docs/investmoz/consolidated-review-matrix-2026-10-03.md index 80e51a97..e3aed36c 100644 --- a/docs/investmoz/consolidated-review-matrix-2026-10-03.md +++ b/docs/investmoz/consolidated-review-matrix-2026-10-03.md @@ -2043,3 +2043,35 @@ Correcções incluem contratos de dados e falhas explícitas de leitura/hash, co Execução exclusivamente em bases QA isoladas em `127.0.0.1:55441`, com contextos vazios ou clones preparados conforme as guardas originais. Os 28 originais editoriais foram recuperados de arquivo local e conferidos por SHA-256; seis testes editoriais passaram com scanner real. Preservados os originais, arquivos de fontes, ferramentas históricas, chave da aplicação, dados activos e históricos. Zero migrações/importações/escritas na base activa, push ou deployment. A alteração inclui formatação abrangente do código mantido; o manifesto de hashes identifica os ficheiros validados. **Conferência visual autenticada pendente:** a revisão automática interrompeu Computer Use por não conseguir determinar com confiança o URL actual do Chrome. Não foi declarado aceite visual de Competitividade nem encerramento transversal de ACT-01, ACT-02 ou V2-07/V2-10. Recibo e provas: [local-validation-20261029.json](unification/local-validation-20261029.json). + +### daf86234 — âmbito funcional da entrega e conferência visual dirigida + +Delta conferido contra o pai `63147312`. Revisão validada localmente; envio e instalação continuam sem confirmação. A aceitação visual está pendente por bloqueio da ferramenta, que não demonstra falha do portal. + +| Área afectada | Correcção funcional incluída | Conferência visual dirigida | +|---|---|---| +| Dossier → simulador | Ao abrir um dossier sem seleccionar uma oportunidade, o snapshot conserva as oportunidades guardadas como proveniência. Localização, regime e requisitos específicos continuam dependentes da oportunidade escolhida. | Dossier com várias oportunidades: abrir simulador, escolher cada oportunidade, guardar e reabrir; conferir escolhas, contexto específico e edições deliberadas. | +| Manifestação de interesse | A repetição do mesmo envio devolve uma confirmação estável, mesmo após evolução do pedido, sem reabrir o seu estado. A participação relativa a um negócio usa o título público correcto. A chave de envio é validada como UUID obrigatório; essa obrigação já existia antes deste commit. | Enviar interesse numa oportunidade e num negócio; repetir o envio e conferir referência, título e estado actual no acompanhamento, sem duplicação. | +| Página inicial | A gravação ou eliminação de sectores/oportunidades invalida também a chave de cache actualmente usada pela página inicial, em português e inglês, evitando apresentação de dados anteriores. | Após alteração autorizada de um sector ou oportunidade, actualizar a página inicial e conferir a informação apresentada nos idiomas afectados. | +| Classificação territorial | A selecção de localizações reutiliza directamente a consulta territorial pública existente, eliminando uma subconsulta recursiva redundante. Mantém a exclusão de referências privadas, não aprovadas ou com ascendência não pública. | Nos formulários que usam a classificação/localização da oportunidade, abrir as opções e conferir carregamento, selecção e exclusão de referências não autorizadas. A varredura QA de rotas terminou em cerca de 35 segundos; isso não é uma medição do portal instalado. | +| Consulta pública e contacto | Pedidos anónimos deixam de consultar a governação de perfis no middleware de sessão. O POST JSON de contacto deixa de carregar a navegação Inertia, evitando essa dependência de base de dados; mantém os restantes controlos da rota. | Sem autenticação, abrir as entradas públicas afectadas e enviar o formulário de contacto; conferir confirmação e apresentação dos erros de validação. | +| Leitura de artigos de agronegócio | O artigo original continua legível quando o sector/catálogo opcional de oportunidades de agronegócio ainda não foi carregado. Nessa situação, a ausência de ligações de oportunidades deixa de impedir a leitura. | Conferir o artigo de agronegócio e as suas ligações publicadas. A variante sem catálogo é ensaiada apenas em QA, sem remover cadastros do destino. | +| Administração de perfis | Repõe o directório mínimo de contas existentes e as sugestões de selecção nas atribuições e substituições: identificador, nome, email e indicadores de confirmação/MFA. A consulta continua sujeita à administração autorizada e não inclui palavras-passe ou segredos MFA. | Com administrador autorizado e MFA, conferir as sugestões de contas nas atribuições e substituições; verificar também a recusa de acesso por perfil não autorizado, sem efectuar atribuições fictícias no activo. | + +Robustez transversal: Leitura, hash e tamanho de ficheiros e divisões por expressão regular passam a tratar falhas explicitamente. Colecções preservam os seus elementos e rejeitam formas inválidas; valores estruturados indevidos em campos de texto aparecem como valor não textual em vez de [object Object]. Há ainda correcções de contratos de respostas, cabeçalhos, resultados de consultas e verificações de valores ausentes. + +Formatação abrangente do código mantido, tipos, contratos de colecções/consultas/respostas, limpeza de lint e refactorizações auxiliares não constituem novas funcionalidades de negócio. + +Fixtures de autenticação/MFA/publicação, isolamento de bases e ficheiros QA, isolamento dos manifestos de fontes e correcções das expectativas dos testes são suporte da validação, sem novas regras organizacionais. + +Quatro migrações editoriais/de navegação existentes passam a aceitar também a guarda QA isolada já existente. Não são quatro migrações funcionais novas nem prova de execução no destino. + +Competitividade e a compatibilidade dos filtros provinciais já estavam reconciliadas no pai 63147312; não são anunciadas como novas funcionalidades de daf86234. + +Os totais de testes demonstram a validação técnica registada; não comprovam push, instalação, publicação editorial ou aceitação visual. + +A conferência visual é limitada aos ecrãs/percursos afectados e pode ser realizada pela equipa, com registo na mesma matriz: revisão instalada, URL/percurso, perfil/âmbito autorizado, acção, resultado e evidência. O bloqueio da ferramenta não demonstra falha do portal. + +Mantêm-se os estados dos requisitos amplos ACT-01, ACT-02 e V2-07/V2-10. + +Ficheiros e testes por correcção: campo `delivery_scope` do [recibo existente](unification/local-validation-20261029.json). Este aditamento documenta o commit de implementação; não altera código executável nem repete a validação técnica já registada. diff --git a/docs/investmoz/unification/local-validation-20261029.json b/docs/investmoz/unification/local-validation-20261029.json index 0f282396..6f555351 100644 --- a/docs/investmoz/unification/local-validation-20261029.json +++ b/docs/investmoz/unification/local-validation-20261029.json @@ -538,5 +538,128 @@ "temporary_postgresql_cluster_stopped": true, "existing_application_processes_stopped": 0, "qa_backups_and_evidence_retained": true + }, + "delivery_scope": { + "implementation_commit": "daf8623441f1d88804e7fef34a3f2b807e1a39b9", + "comparison_base": "63147312e2fdb6dc235bcb2763f47d8b1aeeac3c", + "confirmation": { + "local_validation": "passed", + "push": "not_confirmed", + "installation": "not_confirmed", + "visual_acceptance": "pending" + }, + "functional_corrections": [ + { + "area": "Dossier → simulador", + "change": "Ao abrir um dossier sem seleccionar uma oportunidade, o snapshot conserva as oportunidades guardadas como proveniência. Localização, regime e requisitos específicos continuam dependentes da oportunidade escolhida.", + "code": [ + "app/Services/InvestorContext.php" + ], + "tests": [ + "tests/Feature/InvestmentOpportunityChoicesTest.php", + "tests/Feature/InvestmentPortfolioContinuityTest.php", + "tests/Feature/InvestmentConsumerScopeTest.php" + ], + "visual": "Dossier com várias oportunidades: abrir simulador, escolher cada oportunidade, guardar e reabrir; conferir escolhas, contexto específico e edições deliberadas." + }, + { + "area": "Manifestação de interesse", + "change": "A repetição do mesmo envio devolve uma confirmação estável, mesmo após evolução do pedido, sem reabrir o seu estado. A participação relativa a um negócio usa o título público correcto. A chave de envio é validada como UUID obrigatório; essa obrigação já existia antes deste commit.", + "code": [ + "app/Http/Controllers/Api/V1/InterestRequestController.php" + ], + "tests": [ + "tests/Feature/InterestSubmissionTest.php", + "tests/Feature/BusinessMarketplacePublicTest.php" + ], + "visual": "Enviar interesse numa oportunidade e num negócio; repetir o envio e conferir referência, título e estado actual no acompanhamento, sem duplicação." + }, + { + "area": "Página inicial", + "change": "A gravação ou eliminação de sectores/oportunidades invalida também a chave de cache actualmente usada pela página inicial, em português e inglês, evitando apresentação de dados anteriores.", + "code": [ + "app/Providers/AppServiceProvider.php" + ], + "tests": [ + "tests/Feature/PublicPortalNavigationTest.php" + ], + "visual": "Após alteração autorizada de um sector ou oportunidade, actualizar a página inicial e conferir a informação apresentada nos idiomas afectados." + }, + { + "area": "Classificação territorial", + "change": "A selecção de localizações reutiliza directamente a consulta territorial pública existente, eliminando uma subconsulta recursiva redundante. Mantém a exclusão de referências privadas, não aprovadas ou com ascendência não pública.", + "code": [ + "app/Services/OpportunityClassification.php" + ], + "tests": [ + "tests/Feature/InvestmentTerritoryTest.php", + "tests/Feature/PortalAuditRoutesTest.php" + ], + "visual": "Nos formulários que usam a classificação/localização da oportunidade, abrir as opções e conferir carregamento, selecção e exclusão de referências não autorizadas. A varredura QA de rotas terminou em cerca de 35 segundos; isso não é uma medição do portal instalado." + }, + { + "area": "Consulta pública e contacto", + "change": "Pedidos anónimos deixam de consultar a governação de perfis no middleware de sessão. O POST JSON de contacto deixa de carregar a navegação Inertia, evitando essa dependência de base de dados; mantém os restantes controlos da rota.", + "code": [ + "app/Http/Middleware/PortalProfileSession.php", + "routes/investment.php" + ], + "tests": [ + "tests/Unit/PortalContactTest.php", + "tests/Feature/PublicPortalNavigationTest.php" + ], + "visual": "Sem autenticação, abrir as entradas públicas afectadas e enviar o formulário de contacto; conferir confirmação e apresentação dos erros de validação." + }, + { + "area": "Leitura de artigos de agronegócio", + "change": "O artigo original continua legível quando o sector/catálogo opcional de oportunidades de agronegócio ainda não foi carregado. Nessa situação, a ausência de ligações de oportunidades deixa de impedir a leitura.", + "code": [ + "app/Services/CorridorAgribusinessOpportunities.php" + ], + "tests": [ + "tests/Feature/LegacyContentTest.php", + "tests/Feature/LegacyEditorialWorkflowTest.php" + ], + "visual": "Conferir o artigo de agronegócio e as suas ligações publicadas. A variante sem catálogo é ensaiada apenas em QA, sem remover cadastros do destino." + }, + { + "area": "Administração de perfis", + "change": "Repõe o directório mínimo de contas existentes e as sugestões de selecção nas atribuições e substituições: identificador, nome, email e indicadores de confirmação/MFA. A consulta continua sujeita à administração autorizada e não inclui palavras-passe ou segredos MFA.", + "code": [ + "app/Http/Controllers/PortalProfileController.php", + "resources/js/pages/profiles/administration.tsx" + ], + "tests": [ + "tests/Feature/OpportunityPromotionTest.php" + ], + "visual": "Com administrador autorizado e MFA, conferir as sugestões de contas nas atribuições e substituições; verificar também a recusa de acesso por perfil não autorizado, sem efectuar atribuições fictícias no activo." + } + ], + "cross_cutting_robustness": { + "change": "Leitura, hash e tamanho de ficheiros e divisões por expressão regular passam a tratar falhas explicitamente. Colecções preservam os seus elementos e rejeitam formas inválidas; valores estruturados indevidos em campos de texto aparecem como valor não textual em vez de [object Object]. Há ainda correcções de contratos de respostas, cabeçalhos, resultados de consultas e verificações de valores ausentes.", + "code": [ + "app/Support/CheckedFile.php", + "app/Support/CheckedPattern.php", + "app/Support/StructuredData.php", + "resources/js/lib/input-text.ts" + ], + "tests": [ + "tests/Unit/CheckedFileTest.php", + "tests/Unit/StructuredDataTest.php", + "tests/frontend/input-text.test.mjs" + ], + "visual": "Nos formulários e documentos efectivamente usados nos percursos acima, conferir mensagens, valores recuperados e prévias. Dados inválidos e falhas de I/O são ensaiados em QA; não provocar corrupção no activo." + }, + "technical_support": [ + "Formatação abrangente do código mantido, tipos, contratos de colecções/consultas/respostas, limpeza de lint e refactorizações auxiliares não constituem novas funcionalidades de negócio.", + "Fixtures de autenticação/MFA/publicação, isolamento de bases e ficheiros QA, isolamento dos manifestos de fontes e correcções das expectativas dos testes são suporte da validação, sem novas regras organizacionais.", + "Quatro migrações editoriais/de navegação existentes passam a aceitar também a guarda QA isolada já existente. Não são quatro migrações funcionais novas nem prova de execução no destino." + ], + "scope_boundaries": [ + "Competitividade e a compatibilidade dos filtros provinciais já estavam reconciliadas no pai 63147312; não são anunciadas como novas funcionalidades de daf86234.", + "Os totais de testes demonstram a validação técnica registada; não comprovam push, instalação, publicação editorial ou aceitação visual.", + "A conferência visual é limitada aos ecrãs/percursos afectados e pode ser realizada pela equipa, com registo na mesma matriz: revisão instalada, URL/percurso, perfil/âmbito autorizado, acção, resultado e evidência. O bloqueio da ferramenta não demonstra falha do portal.", + "Mantêm-se os estados dos requisitos amplos ACT-01, ACT-02 e V2-07/V2-10." + ] } } diff --git a/docs/investmoz/unification/traceability-and-manual.md b/docs/investmoz/unification/traceability-and-manual.md index c9d5722b..e4daecc5 100644 --- a/docs/investmoz/unification/traceability-and-manual.md +++ b/docs/investmoz/unification/traceability-and-manual.md @@ -7580,3 +7580,35 @@ Correcções incluem contratos de dados e falhas explícitas de leitura/hash, co Execução exclusivamente em bases QA isoladas em `127.0.0.1:55441`, com contextos vazios ou clones preparados conforme as guardas originais. Os 28 originais editoriais foram recuperados de arquivo local e conferidos por SHA-256; seis testes editoriais passaram com scanner real. Preservados os originais, arquivos de fontes, ferramentas históricas, chave da aplicação, dados activos e históricos. Zero migrações/importações/escritas na base activa, push ou deployment. A alteração inclui formatação abrangente do código mantido; o manifesto de hashes identifica os ficheiros validados. **Conferência visual autenticada pendente:** a revisão automática interrompeu Computer Use por não conseguir determinar com confiança o URL actual do Chrome. Não foi declarado aceite visual de Competitividade nem encerramento transversal de ACT-01, ACT-02 ou V2-07/V2-10. Recibo e provas: [local-validation-20261029.json](local-validation-20261029.json). + +### daf86234 — âmbito funcional da entrega e conferência visual dirigida + +Delta conferido contra o pai `63147312`. Revisão validada localmente; envio e instalação continuam sem confirmação. A aceitação visual está pendente por bloqueio da ferramenta, que não demonstra falha do portal. + +| Área afectada | Correcção funcional incluída | Conferência visual dirigida | +|---|---|---| +| Dossier → simulador | Ao abrir um dossier sem seleccionar uma oportunidade, o snapshot conserva as oportunidades guardadas como proveniência. Localização, regime e requisitos específicos continuam dependentes da oportunidade escolhida. | Dossier com várias oportunidades: abrir simulador, escolher cada oportunidade, guardar e reabrir; conferir escolhas, contexto específico e edições deliberadas. | +| Manifestação de interesse | A repetição do mesmo envio devolve uma confirmação estável, mesmo após evolução do pedido, sem reabrir o seu estado. A participação relativa a um negócio usa o título público correcto. A chave de envio é validada como UUID obrigatório; essa obrigação já existia antes deste commit. | Enviar interesse numa oportunidade e num negócio; repetir o envio e conferir referência, título e estado actual no acompanhamento, sem duplicação. | +| Página inicial | A gravação ou eliminação de sectores/oportunidades invalida também a chave de cache actualmente usada pela página inicial, em português e inglês, evitando apresentação de dados anteriores. | Após alteração autorizada de um sector ou oportunidade, actualizar a página inicial e conferir a informação apresentada nos idiomas afectados. | +| Classificação territorial | A selecção de localizações reutiliza directamente a consulta territorial pública existente, eliminando uma subconsulta recursiva redundante. Mantém a exclusão de referências privadas, não aprovadas ou com ascendência não pública. | Nos formulários que usam a classificação/localização da oportunidade, abrir as opções e conferir carregamento, selecção e exclusão de referências não autorizadas. A varredura QA de rotas terminou em cerca de 35 segundos; isso não é uma medição do portal instalado. | +| Consulta pública e contacto | Pedidos anónimos deixam de consultar a governação de perfis no middleware de sessão. O POST JSON de contacto deixa de carregar a navegação Inertia, evitando essa dependência de base de dados; mantém os restantes controlos da rota. | Sem autenticação, abrir as entradas públicas afectadas e enviar o formulário de contacto; conferir confirmação e apresentação dos erros de validação. | +| Leitura de artigos de agronegócio | O artigo original continua legível quando o sector/catálogo opcional de oportunidades de agronegócio ainda não foi carregado. Nessa situação, a ausência de ligações de oportunidades deixa de impedir a leitura. | Conferir o artigo de agronegócio e as suas ligações publicadas. A variante sem catálogo é ensaiada apenas em QA, sem remover cadastros do destino. | +| Administração de perfis | Repõe o directório mínimo de contas existentes e as sugestões de selecção nas atribuições e substituições: identificador, nome, email e indicadores de confirmação/MFA. A consulta continua sujeita à administração autorizada e não inclui palavras-passe ou segredos MFA. | Com administrador autorizado e MFA, conferir as sugestões de contas nas atribuições e substituições; verificar também a recusa de acesso por perfil não autorizado, sem efectuar atribuições fictícias no activo. | + +Robustez transversal: Leitura, hash e tamanho de ficheiros e divisões por expressão regular passam a tratar falhas explicitamente. Colecções preservam os seus elementos e rejeitam formas inválidas; valores estruturados indevidos em campos de texto aparecem como valor não textual em vez de [object Object]. Há ainda correcções de contratos de respostas, cabeçalhos, resultados de consultas e verificações de valores ausentes. + +Formatação abrangente do código mantido, tipos, contratos de colecções/consultas/respostas, limpeza de lint e refactorizações auxiliares não constituem novas funcionalidades de negócio. + +Fixtures de autenticação/MFA/publicação, isolamento de bases e ficheiros QA, isolamento dos manifestos de fontes e correcções das expectativas dos testes são suporte da validação, sem novas regras organizacionais. + +Quatro migrações editoriais/de navegação existentes passam a aceitar também a guarda QA isolada já existente. Não são quatro migrações funcionais novas nem prova de execução no destino. + +Competitividade e a compatibilidade dos filtros provinciais já estavam reconciliadas no pai 63147312; não são anunciadas como novas funcionalidades de daf86234. + +Os totais de testes demonstram a validação técnica registada; não comprovam push, instalação, publicação editorial ou aceitação visual. + +A conferência visual é limitada aos ecrãs/percursos afectados e pode ser realizada pela equipa, com registo na mesma matriz: revisão instalada, URL/percurso, perfil/âmbito autorizado, acção, resultado e evidência. O bloqueio da ferramenta não demonstra falha do portal. + +Mantêm-se os estados dos requisitos amplos ACT-01, ACT-02 e V2-07/V2-10. + +Ficheiros e testes por correcção: campo `delivery_scope` do [recibo existente](local-validation-20261029.json). Este aditamento documenta o commit de implementação; não altera código executável nem repete a validação técnica já registada.