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

64 lines
7.1 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.
from pathlib import Path
import csv, hashlib, json, collections
csv.field_size_limit(20000000)
ROOT=Path(__file__).resolve().parent.parent
DOC=ROOT/'docs/investmoz/v2/auditoria-portal'
OUT=ROOT/'outputs/investmoz-portal-stability-20261011'
D=ROOT/'storage/app/private/investmoz-v2/portal-audit/portal-stability-finalize-20261011'
packet=json.loads((D/'csv-edits.json').read_text(encoding='utf-8'))
for edit in packet['files']:
with (DOC/edit['filename']).open(encoding='utf-8-sig',newline='') as f:actual=list(csv.reader(f))
expected=[r[:] for r in edit['rows']]
for patch in edit['patches']:
for name,value in patch['values'].items():expected[patch['row']][expected[0].index(name)]=value
assert actual==expected, 'Untargeted matrix/source cells changed'
matrix=packet['files'][0]
with (DOC/'matriz-requisitos.csv').open(encoding='utf-8-sig',newline='') as f:rows=list(csv.DictReader(f))
counts={'requirements':len(rows),'rows':len(rows),'source_occurrences':sum(int(r['Quantidade de linhas de origem']) for r in rows),'states':dict(collections.Counter(r['Estado'] for r in rows)),'changed_IDs':['AUD-COUNTRY-02','AUD-OPS-01'],'all_other_cells_preserved':True,'AB_C37_closed_states_preserved':True,'active_database_writes':0}
assert counts['requirements']==3393 and counts['source_occurrences']==6845
(D/'preservation-proof.json').write_text(json.dumps(counts,ensure_ascii=False,indent=2),encoding='utf-8')
rev=json.loads((OUT/'manifesto-candidata.json').read_text(encoding='utf-8'))['delivery_revision'][:12]
begin='<!-- portal-stability-20261011:begin -->'
end='<!-- portal-stability-20261011:end -->'
for file in [DOC/'relatorio-executivo.md',DOC/'backlog.md',DOC/'plano-ativacao.md',DOC/'execucao-percurso-i1-i3.md']:
relative='../../../../outputs/investmoz-portal-stability-20261011/'
block=f'''{begin}
## Estado atual — estabilização integrada QA, ativação suspensa
**A instrução de suspensão substitui qualquer passo histórico para retomar a ativação. COUNTRY02 permanece desabilitado no ativo.** A autorização anterior `13644ed74a48`/`162daff6ce08` fica registada no âmbito original, sem aprovar automaticamente os acréscimos da revisão fixa `{rev}`. Nenhuma alteração ativa nesta estabilização; Apache ativo não reiniciado.
COUNTRY02 foi demonstrado no Chromium com Apache/PHP do destino, hostname `portal-investidor.test`, HTTPS reconhecido e produção final: estado anterior → login/MFA → prévia → instalação somente050000 → replay único → perfil/PT/F5 → MZ/v3 → voltar/avançar cifrados → logout/API401/Back sem master → nova sessão/MFA/recuperação. SQL: duas colunas, zero tabelas novas, uma auditoria de instalação, duas edições cifradas; fixtures apenasQA. Backup original real restaurado (288 tabelas/31 sequências/379 ficheiros/2MFA) e backup pós-utilizaçãoQA também restaurado, preservando os dados novos.
Frente C110–C112 consolidada com C113–C117: 25 chamadas em14componentes usam utilitário CSPRNG comum; cURL/DLL corrigido só na cópiaApacheQA; OPcache isolado; GeoJSON porfeature dentro de128MiB; bootstrapMFA normal sem recifrar; mensagens consecutivas não perdem texto. Critérios e limites individuais no relatório. O clone cartográfico atual contém408registos comhash integral preservado;393é histórico. Não houve divulgação nem instalação deoutros pacotes ativos.
Ativo lido às09:40:51UTC:13contas/0organizações/0representações/79migrations/126audits;050000 ausente, flagfalse e código/config/bundle/chave/dados originais. Dados mestres legítimos/vínculos continuam necessários para a gravação real do país, mas não paraDDL. Faltam a apreciação explícita do delta e o levantamento da suspensão antes de disponibilizar. Ofertas, competências modulares, SLA, workflow/documentos/cartografia/acessibilidade/dispositivos reais mantêm os critérios próprios. A/B eC37 preservados, sem repetir os ensaios completos.
[Relatório e limitações]({relative}relatorio-estabilizacao.md) · [Causas/reprodução]({relative}casos-reproducao.md) · [Consumidores/rotas/perfis]({relative}cobertura-consumidores.md) · [Manifesto fixo]({relative}manifesto-candidata.json) · [Procedimento único e reversão]({relative}procedimento-unico.md).
Mesma matriz:3393requisitos/3393linhas/6845referências,7concluídos e3386abertos (3234parciais,145não implementados,2implementados masnãoativados,5decisões concretas). SomenteAUD-COUNTRY-02 eAUD-OPS-01 receberam critérios novos; restantes células/referências preservadas. Os blocos abaixo são histórico datado.
{end}
'''
# Keep the latest block concise and readable without changing literal IDs/hashes.
for before,after in {'somente050000':'somente 050000','apenasQA':'apenas em QA','2MFA':'2 MFA','pós-utilizaçãoQA':'pós-utilização QA','em14componentes':'em 14 componentes','cópiaApacheQA':'cópia Apache QA','porfeature':'por feature','de128MiB':'de 128 MiB','bootstrapMFA':'bootstrap MFA','contém408registos':'contém 408 registos','comhash':'com hash',';393é':'; 393 é','deoutros':'de outros','às09:40:51UTC':'às 09:40:51 UTC',':13contas/0organizações/0representações/79migrations/126audits':': 13 contas/0 organizações/0 representações/79 migrations/126 audits',';050000':'; 050000','flagfalse':'flag false','paraDDL':'para DDL','eC37':'e C37',':3393requisitos/3393linhas/6845referências':': 3393 requisitos/3393 linhas/6845 referências',',7concluídos e3386abertos':', 7 concluídos e 3386 abertos','3234parciais,145não implementados,2implementados masnãoativados,5decisões':'3234 parciais, 145 não implementados, 2 implementados mas não ativados, 5 decisões','SomenteAUD':'Somente AUD','eAUD':'e AUD'}.items():block=block.replace(before,after)
text=file.read_text(encoding='utf-8-sig')
if begin in text:
a=text.index(begin);b=text.index(end,a)+len(end);text=text[:a]+text[b:].lstrip('\r\n')
file.write_text(block+text,encoding='utf-8')
activation=ROOT/'outputs/investmoz-country02-https-activation-20261011/resultado.md'
notice=f'''<!-- portal-stability-suspension-20261011 -->
# Atualização vigente: ativação suspensa
O responsável suspendeu novas tentativas. COUNTRY02 continua desabilitado e050000 não instalado no ativo. A CA foi confirmada e a confiança demonstrada na QA; não é necessário repetir essa confirmação. A configuração ativa permanece reposta e Apache não foi reiniciado nesta estabilização. A autorização13644ed74a48/162daff6ce08 permanece registada no âmbito original, sem extensão ao delta novo. **Não executar agora os passos históricos de retoma abaixo.**
Revisão técnica fixa `{rev}`, demonstrada exclusivamenteQA: [relatório](../investmoz-portal-stability-20261011/relatorio-estabilizacao.md) e [procedimento único](../investmoz-portal-stability-20261011/procedimento-unico.md). Os resultados anteriores seguem preservados como histórico.
'''
text=activation.read_text(encoding='utf-8-sig')
assert '<!-- portal-stability-suspension-20261011 -->' not in text
activation.write_text(notice+text,encoding='utf-8')
print(json.dumps({'result':'same_matrix_preserved_documents_updated','counts':counts,'active_writes':0},ensure_ascii=False))