fix(offers): avoid Wayfinder report form name collision after safe deployment stop
tests / ci (push) Waiting to run

This commit is contained in:
2026-11-14 20:10:32 +02:00
parent 9cbd7fb97d
commit 1349789226
25 changed files with 1423 additions and 3 deletions
@@ -10217,3 +10217,6 @@ Por autorização específica, destino `teste-investidor.tempo.co.mz` confirmado
# Instalação autorizada das Ofertas — paragem de entrada, 14/11/2026
A Tempo autorizou expressamente `3558647e`, incluindo menus, mantendo fecho público. A verificação de entrada encontrou `main` e homologação em `96f51096`; o executor segue esse ramo. Em cumprimento da condição 4, a operação foi interrompida antes de qualquer push/pedido/instalação. Executor inactivo, zero pedidos; nenhuma migração, alteração operacional ou reversão. A instalação já está autorizada, mas a integração exacta e controlada de `3558647e` em `main` exige decisão após esta paragem; o fast-forward é possível sem força e pode accionar a instalação. Não reiniciar preparação/testes aceites para resolver esta diferença de ramo. Recibo: `outputs/offers-authorised-install-20261114/entry-blocked.json`.
# Instalação exacta das Ofertas — falha antes da promoção e correcção QA, 14/11/2026
O fast-forward autorizado `96f51096 → 3558647e` foi efectuado sem força ou commits posteriores. Janela com path automático pausado, lock exclusivo e chamada única ao executor existente, recusando qualquer outro SHA. Novo backup/restauro isolado 219 tabelas/417 ficheiros aprovado. O executor passou schema isolado 1/3106 e build, mas parou em tipos: colisão Wayfinder entre a acção GET `reportForm` e o formulário gerado para POST `report`. Sem promoção, migrações, alteração operacional ou reversão; homologação servida permanece `96f51096`, 219 tabelas/417 ficheiros reconferidos intactos. Lock libertado, path original restaurado, fila vazia. Correcção mínima em QA: acção GET `reportPage`, mesmo URL e corpo, com geração real/produção/tipos/PHPStan/Pint e 28 testes/403 asserções aprovados, numa base isolada separada da prévia. Nenhum novo push ou instalação. Relatório: `../v2/auditoria-portal/ofertas-instalacao-privada-incidente-wayfinder-20261114.md`; recibo `outputs/offers-exact-install-20261114/qa-result.json`. Nova revisão correctiva exige autorização expressa antes de integrar/instalar; publicação, correio, pagamentos e decisões jurídicas continuam nos limites anteriores.
File diff suppressed because one or more lines are too long
@@ -0,0 +1,71 @@
# Ofertas — tentativa exacta de instalação privada e correcção QA
14/11/2026. Autorização: fast-forward de `main` de `96f51096` para **`3558647e8d82092cd0e31eefbe8b9e5e9eacf573`**, sem força, sem revisões posteriores e exclusivamente para homologação privada.
**Resultado: instalação interrompida antes da promoção. A homologação mantém `96f510965f70581a4b41dd94463f598b77dd7cf5`.** O ramo remoto recebeu exactamente `3558647e`; o executor verificou e construiu essa candidata, mas recusou-a na verificação TypeScript. Nenhuma revisão posterior foi enviada ou instalada.
## Execução e salvaguarda
1. Ancestralidade confirmada e `main` inicialmente em `96f51096`; fast-forward possível, árvore local sem alterações inesperadas.
2. Janela reservada: path automático temporariamente pausado, serviço original inactivo e zero pedidos concorrentes. O lock existente `delivery.lock` foi adquirido sob o utilizador de implantação existente. O executor original não foi modificado: uma chamada única a `Delivery.deliver(3558647e)` reconfirmava o `main` real e lançava erro se encontrasse outro SHA, sem utilizar o ciclo que escolhe automaticamente revisões posteriores.
3. Backup **novo**, de 14/11/2026 às **19:51:40 Africa/Johannesburg (17:51:40 UTC)**, em `/var/backups/investmoz-offers-exact-install-3558647e-20261114/backup`. Restauro isolado aprovado para 219 tabelas, 417 ficheiros e dois conjuntos de MFA; nenhuma base operacional substituída. Cópia da release anterior preservada e integridade reconfirmada.
4. Push efectuado com referência exacta, sem força: `git push --porcelain origin 3558647e8d82092cd0e31eefbe8b9e5e9eacf573:refs/heads/main`. O remoto confirmou `96f51096..3558647e`; `ls-remote` reconfirmou o SHA integral. Os commits documentais posteriores não foram incluídos.
5. O pedido do webhook foi reservado fora da fila automática durante a janela. O build decorreu numa release separada e numa base CI isolada; a ligação `current` nunca mudou. A reserva temporária foi relançada antes do build para utilizar o mesmo UMask `0027` do serviço existente; não se modificaram as permissões/configuração do serviço original.
| Salvaguarda nova | Resultado |
| --- | --- |
| Dump de 219 tabelas | SHA256 `88152dc39367f5e59eb072f63b44d3a949e93d73ae855eccb33c3c0b9e37bf6c` |
| Arquivo de 417 ficheiros/configuração | SHA256 `aa6248e0eec3d27d58a4bbb3c16848a70dcb3524e6cafc6340b682984a8bbdb3` |
| Restauro | Rede `none`, base nova `offers_install_restore_20261114_test`, porta interna 55441; contagens/checksums e ficheiros iguais; container de ensaio removido |
| Integridade após a falha | 219/219 tabelas e 417/417 ficheiros sem diferenças face à cópia nova; sem alteração do código servido |
## Incidente concreto
O executor passou a preparação da candidata, Composer, guarda/schema isolado **1 teste / 3.106 asserções**, `npm ci` e build frontend. Parou em `npm run types:check`, antes dos unitários/frontend seguintes e antes de qualquer promoção ou `queue:restart` operacional.
O Wayfinder, com variantes de formulário, gerou em `resources/js/actions/App/Http/Controllers/PrivateOfferOperationsController.ts`:
- Linha 180: `export const reportForm` para a acção GET do formulário de denúncia;
- Linha 331: `const reportForm` como auxiliar do formulário da acção POST `report`.
O TypeScript recusou as duas declarações com **TS2395**. Não é falha de persistência, autorização, GD, estrutura ou dados. A verificação QA simplificada anterior reutilizava rotas geradas e não exercitou esta geração completa; por isso a colisão não tinha sido detectada antes da entrega. A verificação completa do executor funcionou e conservou a aplicação anterior.
Release falhada preservada para diagnóstico: `/var/www/investmoz-homologacao/releases/3558647e8d82092cd0e31eefbe8b9e5e9eacf573-a4916dfe`. Logs protegidos e recibos da chamada exacta em `/var/lib/investmoz-deploy/offers-exact-3558647e-20261114`. Não se editou essa release para contornar os tipos ou apresentar como instalado um código diferente de `3558647e`.
## Recuperação e estado real
- O manifesto servido e o recibo de instalação continuam em **`96f51096`**.
- Não houve promoção; **não foi necessário reverter código ou restaurar a base**. A release anterior permaneceu servida durante toda a tentativa.
- O lock foi libertado, o path automático voltou ao estado activo original e a fila ficou sem pedidos pendentes. O pedido reservado foi preservado no registo privado da operação, sem reexecutar automaticamente a revisão falhada.
- `main` permanece em **`3558647e`**, conforme o avanço autorizado. Não houve force push ou reversão implícita do ramo.
- Zero migrações operacionais, importações, alterações de permissões, alterações de `mne`, activações de pagamentos, emails ou publicação de Ofertas. As configurações protegidas e os dados operacionais foram reconferidos sem diferenças.
- As verificações pós-instalação do novo módulo em homologação não foram executadas: o módulo não chegou a ser instalado. Não se apresentam os testes QA como acesso autenticado real à nova versão no destino.
## Correcção mínima preparada apenas em QA
Dois pontos funcionais alterados:
| Ficheiro | Correcção |
| --- | --- |
| `app/Http/Controllers/PrivateOfferOperationsController.php` | Renomear a acção GET `reportForm` para `reportPage`; corpo e verificações intactos |
| `routes/web.php` | Apontar o mesmo GET `/{id}/denunciar` à acção `reportPage` |
Não se alteraram os URLs, verbos HTTP, acção POST `report`, permissões, serviços, dados, histórico, menu ou as cinco fases. O Wayfinder gera agora `reportPage`/`reportPageForm` para GET e `report`/`reportForm` para POST, sem colisão. Nenhuma nova funcionalidade foi iniciada.
| Verificação da correcção | Resultado |
| --- | --- |
| `php artisan wayfinder:generate --with-form` | Aprovado, geração real de acções/rotas/formulários |
| Build normal com `INVESTMOZ_QA_BUILD=0` | Aprovado; plugin Wayfinder activo, sem reutilização simplificada |
| `npm.cmd run types:check` depois desse build | Aprovado |
| PHPStan completo e Pint focado | Aprovados; zero erros PHPStan |
| Operações, denúncias, confidencialidade/NDA e continuidade | **28 testes / 403 asserções aprovados**, incluindo GET do formulário e POST das denúncias |
| Base do ensaio | `offers_wayfinder_fix_20261114_test`, loopback:55441, separada da prévia do utilizador |
| Preservação | Base da prévia não foi limpa; prova aceite de continuidade guardada/restaurada byte a byte, nova fixture retida separadamente |
Os comandos, resultados e hashes constam de `outputs/offers-exact-install-20261114/qa-result.json`. A correcção não foi enviada para `main` nem instalada: a autorização recebida limitava a instalação a `3558647e` e proibia revisões posteriores.
## Saldo e decisão necessária
**Instalação de `3558647e`: BLOQUEADA pelo build completo.** Integração técnica e dados das cinco fases preservados; correcção de compatibilidade do gerador pronta em QA nesta entrega. Nova autorização deverá identificar a revisão correctiva exacta e o fast-forward a partir do `main` actual `3558647e`, conservando instalação exclusivamente privada e as guardas de revisão/janela/salvaguarda.
Continuam pendentes, separadamente, a conferência visual/móvel autenticada no destino, processamento completo/galeria, email real restrito a caixa autorizada e as decisões jurídicas sobre NDA, comprovativos, avisos e validade. A geração corrigida não encerra essas pendências nem autoriza publicação pública.
@@ -4,6 +4,8 @@
## Parecer: APTO COM CONDIÇÕES
**Execução posterior autorizada e interrompida:** [incidente do build Wayfinder e correcção QA](ofertas-instalacao-privada-incidente-wayfinder-20261114.md). O fast-forward exacto para `3558647e` foi autorizado e efectuado; o executor recusou a candidata por TS2395 antes da promoção. Homologação preservada em `96f51096`, 219 tabelas/417 ficheiros intactos, sem migração ou reversão. Correcção mínima validada apenas em QA, dependente de nova autorização de revisão. Os estados de entrada abaixo descrevem verificações anteriores e não substituem este resultado de execução.
**Tentativa após autorização expressa de instalar `3558647e`: BLOQUEADA ANTES DE INICIAR.** A condição 4 da autorização determina interromper quando o executor usa o último `main` e este difere da candidata. `git ls-remote` confirmou `main=96f510965f70581a4b41dd94463f598b77dd7cf5`, enquanto a revisão autorizada é `3558647e8d82092cd0e31eefbe8b9e5e9eacf573`. A homologação continua em `96f51096`, executor inactivo, zero pedidos. Não se fez push, pedido, instalação, migração ou reversão. A autorização de instalação foi recebida; falta decidir a integração controlada exacta em `main` depois desta paragem. Existe fast-forward possível, sem força ou inclusão dos commits documentais posteriores, mas o push pode accionar o executor e não foi executado. Evidência: `outputs/offers-authorised-install-20261114/entry-blocked.json`. O parecer técnico e o restauro anteriormente comprovado mantêm-se; esta é uma precondição operacional concreta, não uma reprovação dos testes.
O destino é compatível com a **avaliação privada** das Ofertas. As estruturas verificadas estão presentes, não há migrações/dependências novas no delta, GD/WebP está disponível no destino e o backup/restauro actual passou. A conclusão não autoriza instalar nem declarar aceite a publicação operacional.