docs: define functional scope of validated InvesteMoz revision

This commit is contained in:
2026-10-29 21:55:14 +02:00
parent daf8623441
commit 52faf89a2c
3 changed files with 187 additions and 0 deletions
@@ -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.
@@ -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."
]
}
}
@@ -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.