Files
Investidor-V2/tools/portal-next-results-docs.py
nala 287e991486
tests / ci (push) Waiting to run
oportunidades 7
2026-10-13 11:40:29 +02:00

105 lines
27 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Reconcile the existing executive report/backlog; preserve every historical block."""
from pathlib import Path
import json
ROOT=Path(__file__).resolve().parent.parent
DOC=ROOT/'docs/investmoz/v2/auditoria-portal'
PRIVATE=ROOT/'storage/app/private/investmoz-v2/portal-audit'
packet=json.loads((PRIVATE/'next-consumers-finalize-20261010/criterion-evidence.json').read_text(encoding='utf-8'))
preserved=json.loads((PRIVATE/'next-consumers-finalize-20261010/preservation-verification.json').read_text(encoding='utf-8'))
assert preserved['result']=='passed'
scope=packet['scope'];stamp=scope['at'];revision=scope['increment_revision_sha256']
def prepend(name,marker,content):
p=DOC/name;old=p.read_text(encoding='utf-8-sig');assert marker not in old,'Do not overwrite an existing historical increment'
p.write_text(f'<!-- {marker}:begin -->\n{content.strip()}\n\n<!-- {marker}:end -->\n\n'+old,encoding='utf-8')
report=f'''
## País mestre, categorias, revogação e acessibilidade — {stamp}
**Código preparado e incremento demonstrado exclusivamente em QA18097. A/B internos e C37 QA18 conservam o fecho anterior, sem repetição. Ativação separada.** Base QA `desk_restore_20261009_174726_test:55441` conferida antes de escritas. Este retrato supera pendências históricas somente nos critérios abaixo; não encerra a auditoria global.
| Requisito / consumidor | Percurso e resultado demonstrado | Critério ainda em falta |
| --- | --- | --- |
| COUNTRY02 — `/investidor/profile` e manifestação | QA21 guarda paísFR no **organizations existente**, v2; reutiliza explicitamente na declaração; prepara manifestaçãoFR com cópia da origem/v2. Mestre muda paraZA/v3; nova sessão conserva declaraçãoFR, manifestação anteriorMZ/v1 e novaFR/v2. QA23 não vê nem altera a organização(403). `source_system`, `external_id` e histórico preservados; origem da solicitação e residência não são usadas como constituição. | Funcionalidade QA demonstrada; **implementado mas não ativado**. Ativo sem050000/colunas e sem organizações cadastradas. Reutilizar/importar dados e representações autorizados pelo cadastro existente; não inferir vínculos por nome nem inventar titulares. |
| OP03/04 — imobiliário31, fundiário32, venda33, parceria34 e franquia35 | UI→preparar alteração material→editar/guardar→submeter→QA24 iniciar revisão/pareceres→aprovar→QA25 publicar ou disponibilizar restritamente. Hash aprovado=publicado; projeção publicada anterior preservada enquanto a alteração estava por aprovar. | **32 permanece aprovado internamente e publicação422** por dependência externa concreta. Não foi inventado ato competente. Restam condições semânticas específicas, Response/§27 e variantes documentais. |
| OP03/04 — concessão42, financiamento44, fornecimento46, outros48 | Mesma alteração/revisão independente/republicação visual usando os contratos QA existentes. Concessão=intenção/chamada; financiamento=procura; fornecimento=pedido de compra; outros=subtipo sintético QA identificado. Disponibilização **restrita**, sem catálogo público nem divulgação de anexos. | Direito atribuído43 e ofertas45/47 conservam provas API, mas a interface dessas modalidades ainda precisa de demonstração. Contratos experimentais QA não designam pessoas reais nem substituem decisões ativas sobre módulos/SLA. |
| OP03 — suspensão31 | Publicador25 suspende; Promotor21 recupera estado/visibilidade, solicita revisão e resubmete **sem editar conteúdo**; Validador24 revê/aprova; Publicador25 republica. Ciclo de submissão separado da versão de conteúdo, tarefa nova; tarefa concluída anterior e publicação histórica preservadas. | Outros perfis/atribuições, suspensão por consumidor e arquivo/restauração conforme regra explícita. |
| OP03 — rejeição/recurso34 | Rejeição fundamentada24→Promotor21 apresenta recurso→instância sintética independente29 reabre→nova submissão→revisão/aprovação24→republicação25. Decisão e rejeição recuperadas no histórico. Teste de política confirma403 ao próprio rejeitante **mesmo quando tem responsabilidade de recurso**. | A interface da acumulação de papéis, atribuições/coordenação/pareceres e revisões afetadas por materialidade continuam com critérios próprios. |
| PART01; SCAN01 — sala1 | QA21 autoriza e revoga PDF/PNG/JPG. QA22 recupera200/hash antes; os mesmos URLs devolvem404 **sem logout** após revogação e também numa sessão nova. Listagem remove os ficheiros; proprietário mantém200/originais/hash exato. Scans próprios anteriores continuam clean e ligados ao hash. | Não equivale a revogação em todas as organizações, biblioteca, Balcão, zonas, URLs assinadas ou derivados. Nenhum novo ficheiro, scan fictício ou duplicado criado. |
| UI01 — cinco rotas delimitadas | Chromium: teclado, atalho para conteúdo, menuEnter/Escape/foco, nomes distintos dos países, origem da cópia visível, erro associado/focado no mestre, estados nomeados. Axe e inspeção das capturas ligados ao recibo de cada página. | Leitor de ecrã, todas as rotas/condições, PDF etiquetado, móvel deste lote e dispositivos reais permanecem distintos. **Não declarar acessibilidade integral.** |
**Falhas deste lote:** C97 país ausente no cadastro mestre; C98 foco de validação antes da atualização React; C99 razão completa gravada num resumo CRM80, causando503; C100 nomes de países/erros e estados acessíveis; C101 tarefa antiga concluída reutilizada após resubmissão sem edição, causando409; C102 resumo canónico reenviado no contrato legado500, causando422; C103 main aninhado na sala de parceria, causando três violações automáticas de landmarks. C99 conserva a fundamentação completa no workflow/auditoria e limita apenas o resumo CRM. C102 conserva o texto canónico integral e limita apenas a apresentação legada. Passos/causas/provas em [casos-reproducao.md](casos-reproducao.md).
**Provas por critério:** `next-organization`, `next-sharing`, `next-workflow-categories`, `next-workflow-modular`, `next-workflow-suspension`, `next-workflow-appeal`, `next-accessibility`, `next-installer-preview` — recibos `*-chromium-20261010.json`. `next-final-persistence-qa.json` liga leituraSQL READ ONLY a cópias, tarefas, decisões, hashes e revogação; comprova preservação das provas originais A/B e oportunidade52. `next-final-scope-qa.json` liga fontes/build/recibos ao incremento **`{revision}`**. Regressão consolidada por caso único: {scope['regression']['tests']} testes/{scope['regression']['assertions']} asserções; reúne 50 casos da execução ampla e a última execução dos dois casos documentais, preservando os resultados anteriores. Estes dois ensaios usaram ClamD real e GD: três derivadas WebP320/640/1280 com scans próprios, originais preservados, exclusão lógica/recuperação e recusa404 de derivada adulterada; quarentena continua423. É prova técnica isolada, distinta da partilha visual PDF/PNG/JPG. TypeScript, buildQA, Pint, PHPStan e formatação/lint passaram; originais das alterações de formatação foram guardados e valores JSON comparados sem alteração. Essas contagens apoiam os percursos, não substituem as evidências da tabela. Tentativas interrompidas do harness foram preservadas; não são atribuídas ao portal.
**Mesma matriz:** {preserved['requirements']} requisitos/{preserved['rows']} linhas/{preserved['source_occurrences']} ocorrências;11 requisitos atualizados, referências/versões e demais células preservadas. Estados atuais: **3234 parciais,145 não implementados,5 dependentes de decisão concreta,2 implementados mas não ativados,7 concluídos e demonstrados**. Única mudança de estado: COUNTRY02 parcial→implementado mas não ativado. Os sete fechos existentes permanecem. Podem encerrar-se os **subcritérios QA** de país mestre, revogação destes três tipos e transições dos casos descritos; OP/PART/UI globais continuam parciais pelos critérios enumerados no [backlog](backlog.md).
Leitura ativa nova **21:23:40UTC**: `investemoz:5432`, transação READ ONLY/ROLLBACK;030000/040000/09-190000/050000 ausentes, organizations=0 e duas colunas país ausentes. Manifesto ativo permanece `75352185c2a85c34ab726613db864a598e301a5b342ebbc80ac8e678eed17a94`. **Zero escritas ativas; backup ativo não renovado.** Extensão050000 instalada somenteQA:2colunas/0tabelas/0organizações/0contas. O instalador autenticado exige dependências/hash/prova correspondente/MFA, regista auditoria e permite repetição sem DDL ou duplicações; ensaio de instalação a frio é política unitária isolada, não backup ativo. Preservar030000→040000→09/190000;050000 é extensão independente. Ver [plano-ativacao.md](plano-ativacao.md).
Mercado Financeiro permanece privado. Fontes oficiais aceites,408 correspondências e173 pendências territoriais (Mandie/Guro ambíguo) conservam âmbito anterior. Não foi feita importação cartográfica neste lote; não atribuir a localidades sem geometria o limite do pai.
'''
remaining=f'''
## Consumidores e critérios restantes — {stamp}
**A/B internos e C37 QA18 conservam fecho; não repetir.** País mestre e as transições/partilhas deste lote estão demonstrados no âmbito do relatório. As linhas abaixo são uma projeção legível da **mesma matriz**, não uma segunda matriz de requisitos. Ausência de prova por consumidor não é declarada falha funcional sem reprodução.
| Req. | Rota / perfil | Ação | Critério em falta / próximo trabalho executável |
| --- | --- | --- | --- |
| COUNTRY02 / OPS01 | `/investidor/profile`; representanteadmin/manager/officer, viewer e Auditor | Guardar/reutilizar país do mestre | QA encerrada nos critérios datados; falta futura instalação050000 e dados/representações reais pelo cadastro existente. Policies viewer/revogação provadas em testes isolados; Auditor31 com múltiplos papéis e representação teve campos/ações desabilitados na interface. Ativo tem0organizações; não criar cadastros paralelos nem selecionar titulares reais. |
| COUNTRY03/04; STATS01; DESK01 | `/investidor/manifestacoes/{{id}}`, `/balcao-virtual/pedidos/{{id}}`; investidor/representante/gestor | Submeter, recuperar, filtrar, mensagens/anexos/estado | País/origem e uma submissão Balcão sem duplicação já provados. Executar serviços/condições restantes, origem desconhecida, cancelamento/arquivo e filtros combinados; provar UI→persistência→estatística do conjunto próprio e recusas por perfil. Cópia de constituição não substitui origem da solicitação. |
| COUNTRY06; STATS01 | `/negocios/{{slug}}/manifestar-interesse`, `/investidor/negocios/{{id}}`, `/api/v1/existing-business/listings/{{id}}/transitions`, `/management/negocios`; público/investidor/revisor | Interesse público, revisão/publicação/mandato | Wizard e PT/FR submetidos/replay/estatística já provados. Faltam interesse ligado ao anúncio público, condições de representação/mandatos, recuperação/revisão e efeito estatístico desse consumidor. Não reutilizar a prova de Negócios como investidor único. |
| COUNTRY07; LAND01; STATS01 | `/investidor/terra-duat/{{id}}/editar`, `POST /investidor/terra-duat/{{id}}/solicitar-apoio`; proprietário/gestor autorizado | Converter apoio, recuperar, rever | PDF já provado; executar apoio→manifestação sem duplicação, quatro níveis/limpeza de descendentes, origem/país/filtros/estatística após submissão, anexos e recusas. Não inferir direito fundiário ou decisão externa. |
| COUNTRY03/04; CRM01; STATS01 | `/management/crm/leads`, `/management/interests`; gestor/Auditor | Filtrar/converter/arquivar | Ver combinações de origem/desconhecido/estado, conversão sem duplicar investidor, tarefas/responsável/próxima ação e leitura Auditor; confrontar listagem e total de cada conjunto. Não somar conjuntos como pessoas únicas. |
| GEO01/02/03 | `/management/investment/zones/{{id}}`, `/zonas/{{id}}`, `/api/v2/investment/zone-map`; gestorMFA/público | Selecionar/guardar/validar/publicar mapa | Provar cada selector, limpeza de descendentes, recuperação, geometria própria versus contexto, publicação/retirada e permissões; camada publicada não prova direito disponível. Preservar408associações;173pendentes=26distritos/147postos. Mandie/Guro continua ambíguo; localidades sem shape explícitas. |
| GEO01/03; OP02 | `/carteira/{{id}}`, `/oportunidades/{{slug}}`, `/minhas-oportunidades/{{id}}/resources`; público/Promotor/Validador | Mapas/locais/camadas/relações | Oportunidade51 e quatro níveis em projetos/clusters/corredores já demonstrados. Restam variantes de pai/nível/perfil/relações, outros mapas e tiles externos. Não repetir seletores concluídos para compensar consumidores ainda não ensaiados. |
| OP03/04 | `/minhas-oportunidades/43/view`, `/45/view`, `/47/view`; Promotor21/Validador24/Publicador25 | Direito atribuído, oferta financeira, oferta fornecimento | Provas API anteriores preservadas; verificar editor/erros/transições na interface dessas modalidades. Contratos QA42/44/46/48 e nove categorias visuais conservam âmbito. Não aplicar “pedido≤necessidade” às ofertas nem chamar intenção de direito atribuído. |
| OP03/04; perfis | `/minhas-oportunidades/{{id}}/workflow`, `/canonical-response`; Promotor/coeditor/Validador/coordenador/recurso/Publicador | Parecer/atribuição/materialidade/Response | Completar Response/§27 e condições/coleções restantes; demonstração de múltiplos papéis/coedição, fila/pareceres e tarefas por responsável; reabrir apenas revisões afetadas por alterações substantivas. Correção ortográfica não deve reiniciar tudo. Autoriza-se coedição pelos outros Promotores da organização conforme decisão anterior; não reabrir essa decisão. |
| OP01/03; perfis | `/minhas-oportunidades/{{id}}/workflow`, `/lifecycle`; Promotor/Publicador | Solicitar arquivo/arquivar/restaurar | Pergunta concreta pendente: **quem restaura uma oportunidade arquivada e para qual estado volta?** Não conceder restauração ao Promotor por inferência nem apagar histórico. Suspensão/republicação31 e recurso34 já provados, sem repetir. |
| PART01; OP02; SCAN01 | `/parcerias/salas/{{id}}/documentos/{{attachment}}`, `/partilha`; proprietário/contraparte/representante | Partilhar/retirar/recuperar | PDF/PNG/JPG sala1:200→404 na mesma sessão e sessão nova demonstrado; originais preservados. Restam outros âmbitos/organizações/perfis, candidatura/retirada/consentimento, acordo/marcos e documentação de outros consumidores. |
| LIB02; SCAN01; OP02; LAND01; DESK01 | `/documentos/{{id}}/download`, `/management/portal-services/resources/{{id}}`, `/balcao-virtual/dossiers/{{id}}/documentos/{{document}}`, `/investidor/terra-duat/{{id}}/documentos/{{attachment}}`, `/zonas/{{zone}}/anexos/{{attachment}}`; público/dono/gestor | Retirar divulgação, exportar, gerar derivada, revogar | Demonstrar antigos URLs negados após retirada/revogação em cada consumidor, PDFs/exports com hash/scan próprios, recuperação/perfis e originais preservados. Scans realClamD anteriores não são repetidos nem transferidos para ficheiros novos; pendência do scanner específica por operação. |
| UI01 | Cinco rotas do recibo atual e demais rotas; perfis autorizados | Teclado/foco/rótulos/erros/estados | Critérios delimitados revistos; faltam leitor de ecrã, condições de outros formulários, todos os controlos/mapas/contrastes, PDF etiquetado, apresentação móvel deste lote e dispositivos reais. A/B320/390px não prova dispositivos reais. |
| OPS01 | Prévia050000 e instaladores030000/040000/09-190000; titulares designados/gestorMFA | Preparar candidata global/backup/restauro | Incremento`{revision}` delimitado. Completar P0/P1 restantes; renovar backup/restauro do ativo em clone QA correspondente, compatibilidade/reversão e fingerprints antes de ação ativa. Não repetir instalações QA. |
Próximo lote independente: **apoio fundiário e interesse público→estatísticas**, zonas/consumidores territoriais restantes, retirada/revogação documental dos outros âmbitos, modalidades43/45/47 e Response/§27/materialidade, acessibilidade restante. Executar por critério com evidências e caso de reprodução somente quando falhar.
Decisões humanas separadas: arquivo/restauração acima; aprovação funcional ativa dos perfis modulares e responsabilidades; calendário/responsáveis/suplentes/pausas/escalamento do SLA **interno**, incidentes críticos imediatos versus triagem comum. Não escolher pessoas reais nem transformar prazos internos em compromisso de entidades externas. Nenhuma dessas decisões bloqueia os trabalhos independentes listados.
Mesma matriz3393requisitos/3393linhas/6845ocorrências;11linhas atualizadas. COUNTRY02→implementado mas não ativado; demais estados/versões e sete fechos existentes preservados. `next-consumers-finalize-20261010/preservation-verification.json` e `next-final-scope-qa.json` ligam critérios/provas/hashes. DOC01 é reconciliação documental; operações de documentos ligam-se a PART/LIB/SCAN/OP/LAND/DESK. Mercado Financeiro privado; sem importação ou escrita ativa.
'''
cases=f'''
## C97–C103 — casos novos deste incremento QA — {stamp}
**Ativo fora da escrita. A/B e C37 preservados.** Provas sanitizadas omitem cookies, X-XSRF-TOKEN, passwords, segredos e códigos MFA; contextos separados e alvo conferido antes de mutações. Tentativas do harness que falharam por navegação/seletor/compilação não são casos do portal.
| Caso / prioridade / requisito | Reprodução e operação afetada | Esperado / observado / causa | Correção e prova |
| --- | --- | --- | --- |
| C97 P1 COUNTRY02 | Abrir perfil como representante de uma organização existente; procurar país de constituição no cadastro mestre e reutilizar numa manifestação. | Esperado: ISO/fonte/versionamento no mestre e cópia identificada. Antes: organizations não tinha campos nem ação; declaração privada não era mestre. | Extensão050000:2colunas opcionais e serviço existente memberships/audit_events. QA21FR→cópia→ZA→nova sessão preservaMZ/FR e fontes; QA23PUT403; viewer/revogado/Auditor/múltiplos papéis unitários. `next-organization-chromium-20261010.json`; ativo ausente, não ativado. |
| C98 P1 UI01 | No editor do mestre submeter país/referência vazios; observar os erros e foco. | Esperado: erros associados e foco no primeiro campo inválido. Observado: erros renderizados depois do callback/RAF, foco não chega ao campo. Causa: atualização React ainda não comprometida. Label envolvendo textarea incluía o seu valor no nome acessível. | useEffect após atualização dos erros; htmlFor/id separado na referência; aria-invalid/describedby e alertas. Tentativas anteriores preservadas; `next-accessibility-chromium-20261010.json` valida erro/foco na revisão final. Pedido inválido não alterou o mestre. |
| C99 P0 OP03/CRM | QA21,31publicada: “Preparar alteração material”, fundamentação>80caracteres. | Esperado200, task concluída e razão completa rastreável. Observado503; stack SQLSTATE22001: tasks.outcomeVARCHAR80 recebeu a fundamentação integral. | Resumo CRM limitado80caracteres Unicode; motivo integral conserva-se no workflow/decisão/evento/auditoria. Cinco categorias completaram alteração/revisão/publicação aplicável no Chromium; teste preserva razão completa e resumo80. `next-workflow-categories-chromium-20261010.json`; SQLfinal. |
| C100 P1 UI01/COUNTRY | Abrir manifestação com três países, Balcão/negócio/fundiário e estados do workflow; consultar nomes acessíveis/erros. | Esperado: residência/constituição/origem distintas e erro associado; estado legível. Antes: vários selects tinham nome genérico“País”, erros sem referência no campo e códigos de estados sem leitura própria. | CountrySelecterror/aria-describedby, nomes distintos por consumidor e estados nomeados/traduzidos. RevisãoChromium/axe/teclado em cinco rotas delimitadas; não encerra todas as rotas/leitor de ecrã/dispositivos reais. |
| C101 P0 OP03/CRM | Suspender31; Promotor prepara revisão e resubmete **sem editar conteúdo**; Validador inicia revisão. | Esperado: tarefa aberta no novo ciclo. Observado409“Tarefa não pertence à versão aberta”; ensure reutilizou tarefa concluída porque chave só incluía conteúdo/tipo. | review_cycle separado de content_revision, chave nova por submissão; recupera vínculo concluído do caso legado só para a mesma oportunidade/tipo, guardando vínculo anterior e tarefa original. Navegador concluiu revisão→aprovação→republicação; teste before409/after25asserções preserva tarefas/conteúdo; SQLconfirma histórico. |
| C102 P0 OP04 | QA21/42: abrir editor após aprovação, alterar necessidade e guardar contrato com resumo canónico>500caracteres. | Esperado: texto integral válido e rascunho recuperável. Observado422“summary…500”; UI reenviou alias legado, validado antes de o contrato canónico ser usado. | Campos canónicos comuns são fonte única; aliases redundantes não impõem validação incompatível. Resumo legado limitado500, texto integral conserva-se no JSON canónico. Validação legada500 mantém-se quando não há contrato. Teste11asserções e quatro módulos no Chromium; SQL comprimentos/fontes/publicações. |
| C103 P1 UI01 | Abrir `/parcerias/salas/1` e executar auditoria axe de landmarks. | Esperado: um main principal único. Observado: landmark-main-is-top-level, landmark-no-duplicate-main e landmark-unique; Frame reutilizava o main do portfolio dentro do main do AppLayout. | Layout portfolio permite container sem novo main; Frame de parceria usa essa opção, preservando navegação e permissões. Reteste final: zero violações automáticas nas cinco rotas; captura/teclado/estados preservados. Não equivale a acessibilidade integral. |
Âmbito de fecho: falhas técnicas acima corrigidas e critérios QA ligados aos recibos; requisitos globais ainda parciais/instalação ativa ausente conforme [matriz-requisitos.csv](matriz-requisitos.csv) e [backlog.md](backlog.md). C37QA18 e A/B não foram reabertos.
'''
activation=f'''
## Incremento delimitado e extensão050000 — {stamp}
**Revisão QA do incremento`{revision}`; não é autorização/candidata global de ativação.** `next-final-scope-qa.json` liga fontes/build/recibos/SQL. Leitura ativa21:23:40UTC READ ONLY/ROLLBACK:030000/040000/2026_10_09_190000/050000 ausentes; organizações=0, colunas país ausentes; manifesto ativo intacto. **Backup/restauro ativo não foi renovado.** Não transportar fixtures, contas, designações ou grants QA.
| Ordem / componente | Dependências e efeito | Contagem prevista / reversão |
| --- | --- | --- |
| 1 Código/build compatíveis | Fixar candidata global, completar critérios restantesP0/P1, conferir configurações/flags, schema ativo READ ONLY e fingerprints atuais. Consumidor do mestre devolve estado controlado se050000 ausente; não presume organizações preenchidas. | Código/build; conservar revisão anterior e alterações locais. Reverter hunks/bundle conhecido, sem reset ou apagar dados/histórico. |
| 2 Backup/restauro/compatibilidade | Dump ativo e acervo privado/originais/permissões/chave estável, restauro em clone QA fresco ligado à candidata; verificar hash/extração/URLs/perfis/reversão. Provas históricas têm data/fingerprint próprio, insuficientes para este código. | Contagens reais devem sair da prévia do clone/ativo. Não declarar ready a partir de teste unitário com readiness simulado. |
| 3 030000 → 040000 → **2026_10_09_190000_prepare_investor_path** | Recursos privados→perfis/políticas→extensão do percurso. 09/190000 continua necessária e ausente; não substituída pelo Balcão07/190000. Prévia/aplicação autenticadas, somente ausentes após dependências/provas atuais. | QA já instalada: não repetir. Contagens ativas serão fixadas na prévia correspondente; não escolher os dois titulares reais nem remover privilégios ativos. Preservar cinco fases/19etapas e entidades/IDs/URLs. |
| 4 **2026_10_10_050000_extend_organization_country** | Extensão independente do mestre organizations; depende de organizations/memberships/audit_events e código compatível. Auth `/management/opportunity-resources-install/organization-country`, titular autorizado/MFA para aplicar, hash/prova atual/UUID/reason, lock/idempotência/auditoria; incoerêncialedger/schema409. Não requer nem substitui190000, não muda flags/cálculos/publicação. | Ativo: **2colunas opcionais,0tabelas,0organizações,0contas/grants**. QA já instalada; no repetirDDL. Não apagar colunas/histórico no down. Desabilitar/reverter consumidor preserva os dados; restauro verificado somente no clone e depois numa ação autorizada se necessário. |
| 5 Dados/representações do mestre | Ativo organizations=0: usar acervo/cadastros/importação autorizada e memberships existentes. País registado com fonte/versionamento; cópia explícita, anteriores preservados. Fonte oficial aceite não pede recertificação; declaração do representante não afirma decisão externa. | Não inventar dados/vínculos nem ligar por nome. Prévia futura determina organizações/associações efetivas. Cadastros ausentes não são preenchidos pela migration. |
| 6 Importação cartográfica / divulgação | Prévia/correspondências/hash/idempotência/auditoria/reversão por lote, preservando408associações e173pendentes; Mandie/Guro ambíguo. Publicar camadas/artigos/oportunidades é ação separada. Direitos externos/documentos privados continuam separados da aprovação interna/release restrito. | Nenhuma importação deste lote. Não atribuir limite do pai à localidade/parcelas. Scans realClamD comprovam só ficheiros/derivadas identificados; outras operações mantêm pendência específica. |
| 7 Disponibilização do percurso | Após instalações/dados/provas por consumidor, manter acesso direto, cinco fases19etapas e contextos retornados ao dossier. C99/C101 usam tasks existentes; C102 não cria outro contrato. | Código; tarefas antigas, razões completas, publicações/cópias anteriores preservadas. A/B/C37QA fechados não certificam automaticamente o ativo. |
Instalador050000: ensaio isolado a frio/idempotência/auditoria/MFA/dependências/recuperação de incoerência testa políticas e mecanismo. **Não é ensaio de restauro do ativo.** `ready=true` indica somente preparação correspondente; instalado e resultado funcional continuam critérios diferentes. Bootstrap/substituição/recuperação dos titulares040000 conservam provas QA e exigem designação real para habilitação ativa; nada foi alterado no ativo.
Candidata global fica pendente dos critérios do [backlog](backlog.md) e das verificações do clone. Autorização atual cobre somente implementação/testes QA. Não regenerar chaves, desativar MFA, remover cadastros/relações ou mudar valores históricos para simular sucesso.
'''
for name,marker,body in [('relatorio-executivo.md','qa-next-consumers-results-20261010',report),('backlog.md','qa-next-consumers-remaining-20261010',remaining),('casos-reproducao.md','qa-next-consumers-cases-20261010',cases),('plano-ativacao.md','qa-next-consumers-activation-20261010',activation)]:prepend(name,marker,body)
print(json.dumps({'updated_documents':4,'same_matrix':True,'active_writes':0}))