docs(offers): prepare gated homologation readiness and recovery plan

This commit is contained in:
2026-11-14 18:47:11 +02:00
parent 9a01426864
commit d954c83b78
7 changed files with 404 additions and 2 deletions
@@ -10205,3 +10205,6 @@ Referência: `../v2/auditoria-portal/ofertas-aceitacao-final-20261114.md`. Candi
# Correcção Ofertas → contexto de investimento — QA, 14/11/2026
Após `ed2fd86f`, foi autorizada exclusivamente a correcção da continuidade. `InvestorContext` passa a recuperar a descrição da Oferta quando não existe resumo, mantendo a mesma Opportunity, os identificadores e a autorização privada. Resumo existente e edições deliberadas no dossier prevalecem. Não se copiam dados empresariais confidenciais, contactos ou preço privado; NDA/autorização do vendedor não concedem acesso ao contexto privado. A prova sintética percorre criação, submissão, revisão/aprovação, projecção pública isolada de teste, contexto/dossier, localização, pressupostos financeiros declarados, gravação/recuperação e relatórios HTML/Word. Não representa publicação real nem rentabilidade garantida. Recibo e resultados em `../v2/auditoria-portal/ofertas-correcao-contexto-qa-20261114.md` e `outputs/offers-investment-continuity-20261114/qa-result.json`; RF-MN-003 e matriz final actualizados. Mantêm-se pendências jurídicas, visuais, de imagens e email real. Sem instalação, activação pública, migrações ou alteração de dados operacionais; aguarda nova autorização para instalar.
# Preparação final de homologação privada das Ofertas — 14/11/2026
A Tempo aceitou tecnicamente `9a014268` e autorizou apenas preparação. Parecer em `../v2/auditoria-portal/ofertas-prontidao-homologacao-20261114.md`: integração privada em QA demonstrada, 48 hashes dos recibos F5/correcção conferidos e bundle Git local da candidata verificado. Sem diferenças de migrações/locks face ao recibo histórico `96f51096`; destino actual ainda por conferir. Homologação privada recomendável com publicação fechada, condicionada a revisão/schema/runtime reais, backup/restauro actual, delta e reversão compatível, e nova autorização expressa. GD/WebP ausente no PHP QA bloqueia derivadas, preservando originais; visual/móvel, email real e decisões jurídicas mantêm pendências próprias. Ensaio de correio preparado com dados sintéticos e caixa de teste a designar, sem fila/destinatários operacionais. Nenhuma instalação, migração, alteração operacional, envio de email ou activação pública nesta preparação. RF-MN-003 e matriz final distinguem aprovação técnica, instalação e publicação.
File diff suppressed because one or more lines are too long
@@ -6,6 +6,8 @@
**Actualização posterior à auditoria `ed2fd86f`:** a correcção autorizada em QA está documentada em [Ofertas → Investimento](ofertas-correcao-contexto-qa-20261114.md). O saldo actualizado nas linhas abaixo substitui apenas o estado desses critérios; conserva-se a prova original da falha. O percurso controlado com hipóteses de localização e relatório foi demonstrado; publicação operacional e restantes dependências não foram activadas.
**Preparação final após aceitação técnica expressa de `9a014268`:** [parecer de homologação privada](ofertas-prontidao-homologacao-20261114.md). Integridade das fases/correcção reconfirmada por 48 hashes; bundle local verificado. Aprovação técnica em QA aceite; instalação ainda não autorizada/executada, condicionada à conferência real do destino e backup/restauro actual. Publicação operacional permanece bloqueada. Visual, GD/derivadas e email real são critérios de avaliação pendentes, sem invalidar a prova integrada privada aceite.
## Evidência e limites
- Confirmada a ancestralidade dos commits F1 `1f2990e4`, plano `6e302db6`, F2 `91c18573`, F3 `7691cab3`, F4 `e431de8b` e F5 `528a2597`.
@@ -52,7 +54,7 @@ Na auditoria original não foram corrigidas lacunas por estar autorizada exclusi
## Plano de instalação controlada — não executado
1. **Antes de pedir autorização:** resolver/aceitar expressamente os bloqueantes aplicáveis ao âmbito a instalar, rever o novo delta, repetir os testes afectados e fechar um manifesto único com SHA da candidata e provas. Para avaliação estritamente privada, conservar NDA nulo, publicação indisponível, prazo pendente e agendamento desactivado; declarar as limitações. A candidata actual não tem aceitação integral para instalação.
1. **Antes de executar:** a Tempo aceitou tecnicamente a correcção `9a014268`. Para avaliação estritamente privada, existe parecer favorável condicionado e bundle local verificado; conservar NDA nulo, publicação indisponível, prazo pendente e agendamento desactivado. Conferir o destino, delta, backup/restauro e compatibilidade da reversão; obter autorização expressa para instalar. Não repetir provas aceites sem diferença que o justifique. Isto não constitui aceitação de publicação integral.
2. **Destino e processo:** confirmar `teste-investidor.tempo.co.mz`, revisão efectivamente instalada, ramo, árvore limpa, recibo do executor Git existente e diferença exacta desde o activo. Não usar o destino antigo do guia genérico como evidência do destino actual. Não inventar comandos/identidade de executor nem retomar uma sessão SSH histórica. Esta auditoria não consultou o servidor.
3. **Estrutura:** o delta completo `1f2990e4^..528a2597` contém **zero ficheiros de migração**. As fases reutilizam Opportunity/JSON, recursos/documentos, perfis, editorial, tarefas e auditoria. Antes de instalar, comparar em leitura o schema e o registo de migrações do destino com estas dependências. Ausência de nova migração no pacote não prova que o destino já possui todas as estruturas; qualquer falta exige plano aditivo concreto e autorização. Não executar `migrate:fresh`, seeders ou alterações a `mne`.
4. **Cópia e ensaio:** backup consistente da base, ficheiros privados, configuração e chaves existentes sob protecção; registar revisão e manifestos sem segredos. Ensaiar restauro isolado, integridade de anexos cifrados e leitura de histórico, comparando contagens/hash e identificadores com o backup. Preservar integralmente instituições, demografia, dossiers e integrações; não presumir contagens actuais a partir de recibos antigos.
@@ -0,0 +1,105 @@
# Ofertas — parecer de prontidão para homologação privada
14/11/2026. Candidata técnica aceite: **`9a01426864a47dacd97db2b4da363aba86a94df6`**. Esta passagem autoriza exclusivamente preparação; não houve instalação, alteração operacional, migração, activação pública ou envio de email.
## Parecer
**Existe validação integrada em QA suficiente para recomendar uma instalação controlada de avaliação privada, com condições de entrada. Não existe aceitação integral para operação/publicação pública.** A autorização para instalar continua separada e ainda não foi recebida nesta passagem.
O percurso demonstrado inclui criação/recuperação da Oferta, submissão, revisão/aprovação independente, projecção pública exclusivamente sintética, contexto privado autorizado no mesmo dossier, localização, hipóteses económicas declaradas, cálculo, relatório HTML/Word e recuperação. NDA e autorização do vendedor foram testados com documentos sintéticos; não conferem autorização para copiar a informação empresarial confidencial para o contexto. A prova não demonstra um investidor público a converter uma Oferta operacionalmente publicada num dossier: esse publicador não está disponível.
Condições de entrada para a futura instalação: confirmar revisão/schema/configuração/processos reais do destino; concluir backup actual e ensaio de restauro; rever o delta exacto e a reversão compatível; receber autorização expressa para a candidata e o destino. Se uma destas condições falhar, não se instala. Visual, correio real e derivadas de imagens ficam como verificações de homologação explicitamente pendentes, sem declarar o módulo concluído.
## Integridade e provas reutilizadas
Confirmada a ancestralidade F1 `1f2990e4`, plano `6e302db6`, F2 `91c18573`, F3 `7691cab3`, F4 `e431de8b`, F5 `528a2597`, auditoria `ed2fd86f` e correcção `9a014268`. **48 hashes** dos dois recibos de código/provas conferidos contra os respectivos blobs Git, todos correspondentes. Conferir na versão de cada recibo evita interpretar as actualizações documentais posteriores como corrupção das provas anteriores.
| Evidência aceite | Resultado / limite |
| --- | --- |
| F1–F5, passagem integrada original | 59 testes / 780 asserções, aprovados; não repetidos nesta preparação |
| Correcção e compatibilidade afectada | 22 / 461 aprovados; inclui 4/62 de continuidade, 11/161 de confidencialidade, 4/192 de dossiers e 3/46 de gestão nativa |
| Plano financeiro e relatórios frontend | 41 testes aprovados |
| Prova ligada ao JSON da execução PHP | 1 teste aprovado; cálculo por custos declarados e HTML/Word gerados/reabertos |
| PHPStan, tipos, lint/formatação focados | Aprovados no recibo aceite; não houve alteração funcional nesta preparação |
| Imagens sem GD | Provas aceites de upload, limite, quarentena e recusa 423 de processamento; não equivalem a validação de derivadas |
Recibo desta preparação: `outputs/offers-homologation-preparation-20261114/readiness-verification.json`. As provas anteriores mantêm-se nas pastas referidas pela matriz e pelo [recibo da correcção](ofertas-correcao-contexto-qa-20261114.md). Não somar passagens sobrepostas nem usar quantidade de testes como conclusão do portal inteiro.
## Estrutura, dependências e configuração
Foi comparada a candidata com a revisão **histórica** do recibo de homologação `96f51096`: **zero diferenças em `database/migrations`, `composer.lock` e `package-lock.json`**. Também não há migrações novas no delta das cinco fases/correcção. Não é necessário criar uma migração de Ofertas. Esta comparação de ficheiros não prova a aplicação das estruturas no servidor actual.
Pré-conferência em leitura no destino: registo de migrações e estrutura efectiva de `opportunities` (gestão, dono, organização, JSON editorial), perfis/permissões e revisão de acesso, recursos `opportunity_images/documents/locations`, `documents`, auditoria, tarefas, notificações editoriais com `opportunity_id/opportunity_version/content_hash`, dossiers/contexto e rascunhos de simulação. Conferir nome/schema das relações pela versão instalada, constraints, cifra e acesso ao armazenamento. As dependências de recursos e contexto identificam, entre outras, `2026_10_09_030000_extend_opportunity_resources` e `2026_10_16_150000_create_investor_navigation_preferences`; notificações dependem de `2026_11_13_223000_extend_editorial_notifications_to_opportunities`.
**Não executar indiscriminadamente `artisan migrate`:** existem migrações anteriores guardadas para QA isolado, incluindo a das notificações. Se faltar estrutura no destino, parar e apresentar o delta aditivo e autorização concreta; não remover guardas para aplicar um ficheiro. Não usar `migrate:fresh`, seeders, rollback estrutural destrutivo ou alterações a `mne`.
Manter versões e locks existentes. O PHP CLI QA é 8.5.11; a compatibilidade real deve ser conferida com as dependências bloqueadas, PHP-FPM/web e worker, PDO PostgreSQL/PostGIS, memória, discos privados, cifra/APP_KEY existente, scanner, fila e scheduler. Não instalar ferramentas/extensões nem actualizar versões nesta preparação. Confirmar manifesto/assets e ausência de `public/hot` no artefacto a instalar; não publicar `.env`, ficheiros privados, dependências locais ou fixtures.
Para avaliar o circuito privado, confirmar os mecanismos existentes `portal.profile_access_enabled` e `editorial_workflow.enabled` e respectivos papéis efectivos. Não os activar globalmente ou conceder permissões por inferência; diferenças para o destino têm de constar da autorização de instalação. Preservar autenticação, MFA, representação, CSRF, throttling, auditoria e transportes dos outros módulos.
## Publicação integralmente fechada
- `Opportunity` exige rascunho e `published_at=null` para Ofertas e impede remover o marcador privado; o scope público nativo exclui-as.
- Aprovar não publica; o workflow privado e percursos alternativos mantêm a recusa.
- `OfferPublicCatalogue` normal não devolve Ofertas. A injecção sintética exige ambiente de testes e identidade efectiva da base isolada; não há variável HTTP/ambiente de activação equivalente nem publicador operacional para ligar.
- Manter `private_offers.nda=null`, validade/política nulas e `expiry_scheduler_enabled=false`; não copiar documentos/snapshots sintéticos para o destino. O agendamento de expiração não é necessário para instalar em avaliação privada.
- Pós-instalação deve comprovar ausência em lista, detalhe directo, APIs, mapa, pesquisa nativa e CSV, incluindo após aprovação privada. Não basta ocultar um menu.
## GD e preservação de uploads
A conferência local nesta passagem confirmou PHP 8.5.11 **sem GD, `imagecreatetruecolor` ou `imagewebp`**. O destino actual não foi consultado: não se presume que possua a mesma configuração. `OpportunityImageProcessor::prepare` verifica a disponibilidade e devolve 423 **antes** da transacção/escrita; originais e metadados permanecem. Upload, cifra, quarentena e antimalware são percursos separados; não se deve substituir ficheiros existentes ou desactivar scan para gerar uma galeria.
Sem GD/WebP, é possível instalar para avaliação privada com esta limitação expressa, mas não aceitar processamento de derivadas/galeria. Depois de autorização adequada e num processo compatível, testar JPEG/PNG/WebP sintéticos, dimensões e memória, derivadas sem metadados sensíveis, scans individuais, hash, cifra, limite de seis e restauro lógico. Conferir os três runtimes (web/CLI/worker). Não reprocessar em lote os uploads existentes. Alteração de extensão/runtime fica fora desta preparação e exige delta próprio se necessária.
## Conferência visual e móvel autenticada preparada
Usar apenas contas e registos sintéticos identificados na homologação; autenticação e MFA normais, sem códigos na conversa. Preparar dono promotor, revisor independente com âmbito e MFA e interessado sem acesso privado; não criar/grantar contas no activo nesta passagem.
| Sessão / janela | Conferência e critério |
| --- | --- |
| Dono, desktop 1366×768 | Criar/guardar/recuperar, endereço e Oferta correctos, erros junto dos campos, descrição sem repetição/perda; subir recursos sintéticos até ao limite; botão visível; voltar sem perder edições |
| Revisor independente | Fila do Dashboard existente → Oferta exacta → decisão fundamentada por versão; conflitos e auto-aprovação recusados; nenhuma publicação |
| Dono, dossier/simulador | Mesma referência/localização, prévia e confirmação, manter resumo deliberado; rascunho/resultados e relatório recuperáveis |
| Janela 390×844 e 360×800 | Sem scroll horizontal impeditivo; menus, modais, campos, erros, anexos e acções acessíveis por toque/teclado; foco e retorno preservados |
| Conta sem âmbito/interessado | Rotas directas, contexto, ficheiros e APIs recusados; nenhum texto confidencial ou comprovativo no HTML/relatório; catálogo público vazio |
| Retirada/revisão | Estado visível e coerente, indisponibilidade imediata; reactivação exige nova validação; histórico preservado |
Registar verificador, instante, candidata servida, viewport, conta/papel sintético, rota e resultado, com capturas sem credenciais. Última evidência disponível do conector: `The browser access host is unavailable`; não foi feita nova tentativa nesta preparação. Quando o conector funcionar, identificar aba/URL antes de actuar; se continuar indisponível, usar conferência manual registada, sem ciclos de reinício ou alterações de segurança. Não converter HTML compilado em aceitação visual.
## Prova de email real preparada, não executada
O job existente `NotifyPrivateOfferDecision` requer notificações activas, destinatário na allowlist, Oferta válida e permissão efectiva reconferida antes do envio. O corpo contém referência e ligação protegida, sem descrição, contacto ou valores empresariais. Usa o transporte existente; não se acrescenta SMS ou outro motor.
Ensaiar preferencialmente numa cópia isolada com código/configuração SMTP equivalentes e dados exclusivamente sintéticos, saída de correio restrita a **uma caixa de teste indicada pela Tempo**. A caixa ainda não foi designada; não assumir um endereço operacional. Provisionar segredos pelo mecanismo existente, sem exportá-los no pacote. Não copiar utilizadores reais, consumir a fila partilhada nem mudar a allowlist/flag global da homologação afectando os restantes serviços.
Depois de autorização do ensaio, criar decisão sintética/notificação pelo serviço existente e processar apenas o job identificado. Conferir aceitação pelo transporte e recepção efectiva na caixa, referência/ligação correcta, remetente, ausência de dados reservados e comportamento após perda de permissão. Guardar ID técnico/horário e resultado, sem credenciais. A aceitação SMTP isolada não basta como entrega na caixa. Se houver reenvio por falha, registar tentativas; não prometer entrega exactamente uma vez, pois o job admite retries. Não activar notificações globais ou escoar filas acumuladas para efectuar esta prova. Nesta preparação não se enviou email.
## Decisões jurídicas ainda necessárias
1. **NDA:** exemplar e versão aprovados, referência da decisão e âmbito aplicável. O mecanismo técnico não inventa texto, assinatura válida ou concessão de transferência para relatórios. Mantém-se fechado enquanto ausente.
2. **Imóveis:** tipos de comprovativo admissíveis e tratamento a dar à titularidade/representação declarada; acesso continua interno, não se certifica direito ou licença por upload/scan.
3. **Avisos/validade:** texto aplicável à divulgação/interesse, responsabilidades e confidencialidade; prazo/política final de validade. Não escolher um prazo ou inventar exclusões jurídicas. São decisões para os comportamentos dependentes/publicação, não motivos para refazer as provas privadas aceites.
## Cópia, instalação futura e reversão
**Preparação material:** bundle Git local da candidata `9a014268`, com pré-requisito histórico `96f51096`, em `outputs/offers-homologation-preparation-20261114/offers-9a014268.bundle`; manifestos/hashes na mesma pasta. Não foi enviado ao servidor. Confirmar que o destino contém o pré-requisito e que o delta não sobrepõe alterações posteriores; não instalar por `reset --hard` nem substituir árvore com trabalho alheio.
1. **Antes de qualquer escrita:** após autorização concreta, identificar destino/revisão/schema/configuração e conferir delta completo. Qualquer diferença de estrutura, configuração partilhada, revisão ou permissões não abrangida interrompe a instalação para decisão específica.
2. **Backup actual:** cópia consistente da base, ficheiros privados e manifestos, configuração e chaves protegidas, revisão anterior e artefactos. Não imprimir segredos. Conferir hash/identificadores/contagens e ensaiar restauro isolado com leitura de documentos cifrados e histórico. O backup antigo de `96f51096` é referência histórica e não serve como backup actual. **Nenhum novo backup ou restauro do destino foi efectuado nesta passagem.**
3. **Executar pelo processo Git existente:** candidata e manifesto aprovados, dependências fixadas, assets próprios de produção e caches/workers conforme procedimento existente. Não executar migrações por rotina; não activar publicação, NDA, agendamento, destaques ou correio partilhado. Manter dados e integrações existentes.
4. **Conferir após instalar:** SHA servido/assets, HTTP e logs, autenticação/MFA/âmbito, circuitos privados sintéticos, permanência dos bloqueios públicos, integridade dos uploads e compatibilidade com oportunidades/dossiers, instituições e demografia existentes. Não reexecutar importações ou publicação de conteúdo para provar integridade. Registar diferenças de runtime/cache/sessões separadamente de dados de negócio.
5. **Reverter antes de uso:** se não existirem escritas novas de Ofertas e a revisão anterior for compatível, repor apenas código/assets/configuração alterados no âmbito aprovado e conferir novamente; conservar logs e cópias.
6. **Reverter depois de uso:** não regressar cegamente à F4 ou revisão que ignore retirada/expiração, hashes v4 ou confidencialidade. A F4 não testa `OfferAvailability` no leitor protegido. Usar recuperação compatível que preserve as guardas novas e todo o JSON/histórico/tarefas/notificações. Se não existir revisão de recuperação comprovada, suspender o acesso afectado pelo mecanismo administrativo já autorizado, sem enfraquecer autenticação e sem inventar um interruptor; preparar correcção em frente. Não apagar estados para acomodar código antigo.
7. **Restauro de dados:** não restaurar indiscriminadamente sobre actividade posterior. Delimitar o incidente, preservar as novas escritas e aprovar reconciliação/restauro próprio. Sem `down` destrutivo, perda de decisões ou alterações a `mne`.
## Matriz de decisão final
| Plano | Estado actual |
| --- | --- |
| Aprovação técnica F1–F5 e continuidade em QA | Aceite com as ressalvas documentadas; integridade reconfirmada |
| Instalação privada de avaliação em homologação | Tecnicamente recomendável, condicionada ao preflight real, backup/restauro, delta/reversão e nova autorização expressa |
| Instalação efectuada / ambiente actualmente comprovado | Não; revisão/schema/runtime actuais do destino não verificados nesta passagem |
| GD/derivadas, visual/móvel e email real | Pendentes; não impedem por si só instalar código fechado para avaliação, mas impedem declarar essas funções aceites |
| Publicação operacional / NDA real | Bloqueados; sem autorização e sem activação |
Próxima acção: decisão da Tempo sobre a instalação privada da candidata e condições acima. Esta preparação não executa essa decisão nem declara concluídas as verificações no destino.
@@ -0,0 +1,14 @@
{
"candidate": "9a01426864a47dacd97db2b4da363aba86a94df6",
"bundle": "offers-9a014268.bundle",
"bundle_sha256": "446309507638faed558922a4f1a1c515ae4cf2e47ad4e78f4e125a4f61b2ef35",
"required_git_commit": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"bundle_verification": "The bundle contains this ref:\n9a01426864a47dacd97db2b4da363aba86a94df6 refs/heads/qa/editorial-fase1-20261113\nThe bundle requires this ref:\n96f510965f70581a4b41dd94463f598b77dd7cf5 \nThe bundle uses this hash algorithm: sha1\noutputs/offers-homologation-preparation-20261114/offers-9a014268.bundle is okay\n",
"report": "docs/investmoz/v2/auditoria-portal/ofertas-prontidao-homologacao-20261114.md",
"target": "https://teste-investidor.tempo.co.mz",
"target_current_revision_verified": false,
"installation_authorized": false,
"public_activation_authorized": false,
"matrix_other_rows_preserved": true,
"acceptance": "Private QA integration accepted; controlled private homologation recommended subject to destination preflight, current backup/restore, compatible rollback and explicit authorisation."
}
@@ -0,0 +1,278 @@
{
"candidate": "9a01426864a47dacd97db2b4da363aba86a94df6",
"historical_destination_receipt": "outputs/administration-dashboard-hierarchy-20261114/destination-installation-verified.json",
"historical_destination_revision": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"destination_live_verified": false,
"phase_ancestry": {
"1f2990e4": true,
"6e302db6": true,
"91c18573": true,
"7691cab3": true,
"e431de8b": true,
"528a2597": true,
"ed2fd86f": true,
"9a014268": true
},
"receipt_hash_checks": [
{
"commit": "528a2597",
"path": "app/Console/Commands/ExpirePrivateOffers.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Http/Controllers/OfferPublicCatalogueController.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Http/Controllers/PortalEditorialWorkflowController.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Http/Controllers/PrivateOfferOperationsController.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Http/Controllers/PrivateOfferPreparationController.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Services/OfferAvailability.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Services/OfferPublicCatalogue.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Services/OpportunityProfileWorkflow.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Services/PrivateOfferConfidentiality.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Services/PrivateOfferOperations.php",
"matches": true
},
{
"commit": "528a2597",
"path": "app/Services/PrivateOfferPreparation.php",
"matches": true
},
{
"commit": "528a2597",
"path": "config/private_offers.php",
"matches": true
},
{
"commit": "528a2597",
"path": "docs/investmoz/unification/traceability-and-manual.md",
"matches": true
},
{
"commit": "528a2597",
"path": "docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv",
"matches": true
},
{
"commit": "528a2597",
"path": "docs/investmoz/v2/auditoria-portal/ofertas-fase5-fecho-qa-20261114.md",
"matches": true
},
{
"commit": "528a2597",
"path": "resources/js/components/offer-operations.tsx",
"matches": true
},
{
"commit": "528a2597",
"path": "resources/js/components/public-offer-card.tsx",
"matches": true
},
{
"commit": "528a2597",
"path": "resources/js/lib/public-offer.ts",
"matches": true
},
{
"commit": "528a2597",
"path": "resources/js/pages/management/editorial-workflow.tsx",
"matches": true
},
{
"commit": "528a2597",
"path": "resources/js/pages/offers/preparation-index.tsx",
"matches": true
},
{
"commit": "528a2597",
"path": "resources/js/pages/offers/preparation.tsx",
"matches": true
},
{
"commit": "528a2597",
"path": "resources/js/pages/offers/public-detail.tsx",
"matches": true
},
{
"commit": "528a2597",
"path": "resources/js/pages/offers/report.tsx",
"matches": true
},
{
"commit": "528a2597",
"path": "routes/console.php",
"matches": true
},
{
"commit": "528a2597",
"path": "routes/web.php",
"matches": true
},
{
"commit": "528a2597",
"path": "tests/Feature/PrivateOfferOperationsTest.php",
"matches": true
},
{
"commit": "528a2597",
"path": "outputs/offers-private-phase5-20261114/focused.log",
"matches": true
},
{
"commit": "528a2597",
"path": "outputs/offers-private-phase5-20261114/focused.xml",
"matches": true
},
{
"commit": "528a2597",
"path": "outputs/offers-private-phase5-20261114/regression.log",
"matches": true
},
{
"commit": "528a2597",
"path": "outputs/offers-private-phase5-20261114/regression.xml",
"matches": true
},
{
"commit": "528a2597",
"path": "outputs/offers-private-phase5-20261114/global-format.log",
"matches": true
},
{
"commit": "528a2597",
"path": "outputs/offers-private-phase5-20261114/build-final.log",
"matches": true
},
{
"commit": "9a014268",
"path": "app/Services/InvestorContext.php",
"matches": true
},
{
"commit": "9a014268",
"path": "tests/Feature/OfferInvestmentAcceptanceAuditTest.php",
"matches": true
},
{
"commit": "9a014268",
"path": "tests/Feature/PrivateOfferConfidentialityTest.php",
"matches": true
},
{
"commit": "9a014268",
"path": "tests/frontend/offer-investment-continuity.test.mjs",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/focused.log",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/focused.xml",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/frontend-regression.log",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/integrated-report-input.json",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/location-analysis.json",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/phpstan.log",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/private-integrated-report.docx",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/private-integrated-report.html",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/regression.log",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/regression.xml",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/report-test.log",
"matches": true
},
{
"commit": "9a014268",
"path": "outputs/offers-investment-continuity-20261114/types.log",
"matches": true
}
],
"all_hashes_match": true,
"migration_or_lockfile_delta_since_historical_destination": [],
"local_php": {
"version": "8.5.11",
"gd": false,
"imagewebp": false
},
"publication": "closed by model/workflow/native scope and normal OfferPublicCatalogue; synthetic injection only in isolated testing",
"defaults": {
"nda": null,
"validity_days": null,
"validity_policy_reference": null,
"expiry_scheduler_enabled": false
},
"installation_authorized": false,
"installation_executed": false,
"backup_current_destination_created": false,
"restore_current_destination_tested": false,
"real_email_sent": false,
"product_files_modified_this_preparation": false
}