64 lines
7.1 KiB
Python
64 lines
7.1 KiB
Python
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))
|