"""Targeted updates of the SAME audit matrix via an Artifact Tool editing packet.""" from pathlib import Path from collections import Counter import csv,json,hashlib,shutil csv.field_size_limit(20_000_000) ROOT=Path(__file__).resolve().parent.parent;DOC=ROOT/'docs/investmoz/v2/auditoria-portal';PRIVATE=ROOT/'storage/app/private/investmoz-v2/portal-audit';OUT=ROOT/'outputs/investmoz-country02-https-20261011' read=lambda p:json.loads(Path(p).read_text(encoding='utf-8-sig'));sha=lambda p:hashlib.sha256(Path(p).read_bytes()).hexdigest() manifest=read(OUT/'manifesto-candidata.json');envelope=read(OUT/'manifesto-pacote.json');code=manifest['code_hash'];revision=manifest['delivery_revision'];backup=manifest['backup'] assert manifest['ready_for_review'] and manifest['active_writes']==0 PACKET=PRIVATE/'country-https-results-20261011';PACKET.mkdir(exist_ok=False) tag='[COUNTRY02 HTTPS QA 11/10/2026] ' note=f"Entrega {revision[:12]}, código {code[:12]}, produção d172b5c4f1a1. Chromium https://country02-qa.test:18443, CA CurrentUser/Root confirmada pelo utilizador, sem bypassTLS: contexto seguro/subtle/UUID disponíveis, TLS1.3. Login/MFA→prévia→confirmação/050000→perfil→guardarPT→F5→atualizarMZ/versão3→voltar/avançar cifrados→logout/API401→voltar mostra login sem master→nova sessão/MFA recupera país/referência. 47recursos/hash, cookies própriosQA host-only/Secure/HttpOnly/Lax/path/, IDs de sessão SHA256 confirmam regeneração. Uma instalação/auditoria, 2colunas nullable/0tabelas e duas edições auditadas com snapshots cifrados recuperados; fixtures sintéticas sóQA depois da instalação. Flagoff/on preserva país/versão/proveniência. C110,C111 e novoC112 demonstrados neste âmbitoQA; C112 limpa chave do histórico na respostaFortify depois de invalidar a sessão. MainApp/.env/Apache/build/base ativa intactos; A/B eC37 preservados." gap="QA COUNTRY02 completo nos critérios incluídos. Falta exclusivamente disponibilização/ativação da revisão162daff6ce08/13644ed74a48 e HTTPShttps://portal-investidor.test com certificado separado preparado, confiança manual e configuração/reversão revistas; prévia/POST reais somente050000 com gestorlegítimo/MFA e flagCOUNTRY02. Backup<=24h ebaseline/hashes/prévia/cadeia/SAN/expiração/key confirmados antes doPOST; interromper perante divergência. Sem organizações/vínculos legítimos no ativo, gravaçãoreal aguarda o fluxo autorizado: não inferir relações/atribuir representantes. Não reinstalar030/040/190. As25chamadasUUID externas permanecem no backlog, distinguindo inferência porcallsite de falha funcional reproduzida." criteria="Demonstrado: percursoHTTPS completo, histórico ArrayBuffer cifrado/private,no-store, chave daoperação estável (C110HTTP preservado), MFA real sintético, sessão regenerada, país/version/provenancepersistidos, Back/Forward, logout401 e Back comlogin, nova sessão, 47assetssemconteúdomisto, flagoff/on semperda, auditoriaSQL. Aceitaçãoativa: autorizar revisão/configTLS exatas; backup correspondente<=24h; certificado reconhecido na origemativa; Source/build/target/preview correspondentes; POSTautenticadoonly050000; 2colunas/0tabelas/contas/org/vínculos; umrecibo; habilitaronlyCOUNTRY02, permissões egravaçãoreal se cadastrolegítimo existir; reversãoflag/source/config mantendohistórico. Não repetirA/B/C37 integralmente." history={'at':manifest['at'],'code_hash':code,'delivery_revision':revision,'evidence':note,'remaining':gap,'acceptance':criteria,'case_status':manifest['case_status'],'previous_current_claims':None,'backup':backup,'ready_for_review':True,'active_writes':0,'package':envelope['archive'],'package_sha256':envelope['archive_sha256']} packet={'files':[]} for name in ['matriz-requisitos.csv','backlog-priorizado.csv']: file=DOC/name;rows=list(csv.reader(file.open(encoding='utf-8-sig',newline='')));headers=rows[0];shutil.copyfile(file,PACKET/(name+'.before'));patches=[] for i,row in enumerate(rows[1:],1): values=dict(zip(headers,row)) if values['ID'] not in ['AUD-COUNTRY-02','AUD-OPS-01']:continue country=values['ID']=='AUD-COUNTRY-02' if name=='matriz-requisitos.csv': versions=json.loads(values['Critérios e versões por origem (JSON)']);entry={**history,'previous_current_claims':{k:values[k] for k in ['Estado','Lacuna','Critério de aceitação','Disponibilidade ativa']}} if isinstance(versions,list):versions.append({'country_https_qa_20261011':entry}) else:versions['country_https_qa_20261011']=entry patch={'Implementação encontrada':values['Implementação encontrada']+'\n'+tag+note,'Evidência funcional':values['Evidência funcional']+'\n'+tag+note+' outputs/investmoz-country02-https-20261011/REVER-CANDIDATA.md,chromium-https.json,persistencia-qa.json.', 'Disponibilidade ativa':f"SnapshotREADONLY {backup['verified_at']}: investemoz5432, fonte36f7722ce5a5/manifesto75352185c2a85, sem050000/país/flagCOUNTRY02. Código {code[:12]}/produção d172b5c4f1a1 somenteQA/preparado. Apache/TLSativo não alterados; certificadoativo preparado mas não instalado/confiado.", 'Lacuna':tag+gap if country else values['Lacuna']+'\n'+tag+'C110/C111/C112QA resolvidos; ativaçãoHTTPS separada.25chamadasUUID foraCOUNTRY02 continuam abertas: rotas/perfis/ações/estado e prioridade em uuid-backlog.md/json. Simulador público autoguardar/calcular e040000confirmar são prioridades do ambienteHTTP atual; outrosramos sóapósinstalação/flag/autorização.', 'Critério de aceitação':values['Critério de aceitação']+'\n'+tag+criteria,'Versões divergentes':values['Versões divergentes']+'\n'+tag+'c68/36 e d28/54 preservados; revisão13644ed74a48/código162daff6ce08 incluiHTTPS e respostaFortifyC112. FechosanterioresA/B/C37 mantidos; C111HTTP histórico permanece válido e resolvido apenas pela nova origemHTTPSQA.', 'Critérios e versões por origem (JSON)':json.dumps(versions,ensure_ascii=False,separators=(',',':')), 'Interface':values['Interface']+'\n'+tag+'PercursoHTTPS deCOUNTRY02 demonstrado. Voltar apóslogout mostra login sem dados privados e preserva destino/profile; voltar/avançar autenticados recuperamMZ.47recursosconferidos, conteúdo misto0 e errosJS0. Certificado reconhecido sem bypass. Não amplia aceitação de outros consumidores/perfis/A/B/C37.', 'API':values['API']+'\n'+tag+'LoginMFA/sessionregeneration, preview/apply050000, 2PUTcountry303, recuperaçãoGETprofile200 e acessoapóslogout401. UUIDserverC110 preservado; só050000, sem030/040/190.', 'Gravação':values['Gravação']+'\n'+tag+'Clonecountry_candidate_20261011_074430_test:55441,288tabelas/2colunas/1auditinstalação/2auditspais; null→PT→MZ/versão3. Snapshotscifradosantes/depois recuperados, originaisintactos. Uma fixtureorg/membership explicitamenteQA apósinstalação; zeroentidadesautomáticas ouativas.', 'Recuperação':values['Recuperação']+'\n'+tag+'F5/Back/Forward cifrados,nova sessão/MFA devolvem MZ e fonte/version3; logout impedeAPI e visualização pelo histórico. Flagoff/on mantém exatamente o master. BackupMFAoriginal2 envelopes recuperados e arquivos/sequências conferidos.', 'Resultado apresentado':values['Resultado apresentado']+'\n'+tag+'Código preparado e QA demonstrada; COUNTRY02 implementado mas nãoativado. Pacote pronto para revisão/autorização; ativo nãoalterado. Pendências globais e25UUID preservadas.'} else: patch={'Pendência':tag+gap if country else values['Pendência']+'\n'+tag+'25chamadasUUID externas em14componentes; guardarUUIDdeoperação pelo mecanismo existente, estável nasrepetições; priorizar públicoSimulador e040000; não ativar módulos externos nem assumir deHTTPS a idempotência de cada operação.', 'Correção/componentes':values['Correção/componentes']+'\n'+tag+note, 'Aceitação':values['Aceitação']+'\n'+tag+criteria, 'Ordem do próximo lote':'COUNTRY02 QA completo e candidata13644ed74a48/código162daff6ce08. Obter autorização exclusivaHTTPS+bundle/C112+050000/flagcountry, revalidarTLS/hash/backup eprévia;25UUIDindependentes permanecempriorizados. A/B/C37preservados.'} if country:patch['Estado']='implementado mas não ativado' patches.append({'row':i,'values':patch}) assert len(patches)==2 packet['files'].append({'filename':name,'rows':rows,'input_sha256':sha(file),'allowed_columns':list({k for p in patches for k in p['values']}),'patches':patches}) (PACKET/'csv-edits.json').write_text(json.dumps(packet,ensure_ascii=False),encoding='utf-8') summary=f'''**COUNTRY02 demonstrado em QA HTTPS**, entrega `{revision[:12]}`, código `{code[:12]}`, compilação `d172b5c4f1a1`. Chromium em **https://country02-qa.test:18443**, certificado reconhecido após confirmação manual da CA temporária no CurrentUser/Root, sem bypass. TLS1.3/contexto seguro/WebCrypto, cookies próprios Secure/HttpOnly/Lax/host-only, regeneração dos IDs de sessão comprovada por hashes sanitizados e47recursos conferidos sem conteúdo misto. Login/MFA → prévia/confirmar/instalar050000 → perfil → guardarPT/F5 → atualizarMZ/versão3 → voltar/avançar cifrados → logout401 e Back com formulário de login sem master → nova sessão/MFA recuperaMZ/fonte. C111 fechado no âmbitoQAHTTPS com cifragem/private,no-store preservados. C112 encontrado e corrigido: respostaFortify limpa a chave do histórico depois da invalidação da sessão. C110HTTP/UUIDserver e aceitesA/B/C37 preservados. As correções estão preparadas em cópia isolada, não noApache ativo. SQL confirma288tabelas, duas colunasnullable, uma instalação/auditoria e duas edições do país com snapshotscifrados null→PT→MZ recuperáveis. Fixturesorg/vínculo/conta sóQA e depois da instalação. Nenhum030/040/190. Flagoff/on conserva país/versão/proveniência. Backup/restauro **{backup['verified_at']}**, ativo READ ONLY para cloneQA:288tabelas/31sequências/282ficheiros/zeroausentes/2envelopesMFAoriginais recuperados. Correspondência de códigoativo36 e candidatanova162 explicitada; validade<=24h revalidada antes da ativação. **Pronto para revisão e autorização, não ativado.** Proposta concreta de HTTPS **https://portal-investidor.test** com certificado/chain/SAN/chave separados daQA, ainda não confiados ou instalados no ativo; vhostApache e APP_URL/cookie/HTTPS e reversão preparados. `httpd -t` passou somente em cópia privada, semreload. O âmbito proposto inclui as três fontes corrigidas, bundle, HTTPS, somente050000 e flagCOUNTRY02. Nenhuma organização/representação real é inventada; escrita real exige cadastro/vínculo legítimos. Stop antesPOST se backup/TLS/hash/alvo/prévia divergir. Não inclui030/040/190, cartografia, perfis, ofertas, SLA ou25UUID. 25chamadasUUID em14componentes permanecem no backlog por rota/perfil/ação e evidência: inferências deHTTP distinguidas de falhas reproduzidas. Prioridade para simulador público/autoguardar/calcular e040000 ao confirmar; outros ramos só se instalados/habilitados/autorizados. [Backlog legível](../../../../outputs/investmoz-country02-https-20261011/uuid-backlog.md). [Revisão, critérios, pacote, certificados públicos e reversão](../../../../outputs/investmoz-country02-https-20261011/REVER-CANDIDATA.md). Na mesma matriz, somente AUD-COUNTRY-02 passa de com falha para implementado mas não ativado; AUD-OPS-01 continua parcial. Os3393requisitos/6845referências continuam com7encerrados e3386abertos, sem ampliação indevida dos fechos. Os textos anteriores permanecem como histórico. ''' for a,b in {'e47recursos':'e 47 recursos','instalar050000':'instalar 050000','guardarPT':'guardar PT','atualizarMZ':'atualizar MZ','recuperaMZ':'recupera MZ','âmbitoQAHTTPS':'âmbito QA HTTPS','respostaFortify':'resposta Fortify','C110HTTP/UUIDserver':'C110 HTTP/UUID servidor','aceitesA/B/C37':'aceites A/B/C37','noApache':'no Apache','confirma288tabelas':'confirma 288 tabelas','colunasnullable':'colunas nullable','snapshotscifrados':'snapshots cifrados','Fixturesorg/vínculo/conta':'Fixtures org/vínculo/conta','sóQA':'só QA','Nenhum030/040/190':'Nenhum 030/040/190','Flagoff/on':'Flag off/on','cloneQA':'clone QA','288tabelas/31sequências/282ficheiros/zeroausentes/2envelopesMFAoriginais':'288 tabelas/31 sequências/282 ficheiros/zero ausentes/2 envelopes MFA originais','códigoativo36':'código ativo 36','candidatanova162':'candidata nova 162','daQA':'da QA','vhostApache':'vhost Apache','semreload':'sem reload','somente050000':'somente 050000','flagCOUNTRY02':'flag COUNTRY02','antesPOST':'antes do POST','inclui030/040/190':'inclui 030/040/190','ou25UUID':'ou 25 UUID','25chamadasUUID em14componentes':'25 chamadas UUID em 14 componentes','deHTTP':'de HTTP','e040000':'e 040000','Os3393requisitos/6845referências':'Os 3393 requisitos/6845 referências','com7encerrados e3386abertos':'com 7 encerrados e 3386 abertos'}.items():summary=summary.replace(a,b) marker='country-https-qa-20261011' section='\n\n## COUNTRY02 HTTPS — candidata preparada e QA demonstrada\n\n'+summary+'\n\n\n' for name in ['relatorio-executivo.md','backlog.md','plano-ativacao.md']: file=DOC/name;old=file.read_text(encoding='utf-8-sig');assert marker not in old;file.write_text(section+old,encoding='utf-8') file=DOC/'casos-reproducao.md';old=file.read_text(encoding='utf-8-sig') case='''## C111 e C112 — HTTPS QA 11/10/2026 **C111 fechado somente na origem HTTPS QA**: certificado SAN country02-qa.test reconhecido pelo Chromium/Windows após confirmação do utilizador, TLS1.3 e contexto seguro. Mantidos Inertia::encryptHistory e private,no-store. Percurso COUNTRY02 completo e 47 recursos conferidos. HTTP histórico continua incapaz de usar WebCrypto; ativação requer HTTPS correspondente e autorização própria. C110 e A/B/C37 preservados. **C112 — histórico privado depois de logout.** Rota/perfil: /investidor/profile, gestor sintético representado no clone country_candidate_20261011_074430_test:55441. Reprodução anterior à correção: login/MFA→perfil privado→voltar/avançar→logout→Back. Esperado: servidor recusa dados privados e histórico não os restaura, pedindo autenticação. Observado: API401 mas Back recuperava a organização privada no histórico. Causa: Fortify invalidava a sessão no servidor, mas o cliente mantinha a chave do histórico cifrado. Correção na cópia QA: binding da LogoutResponse em AppServiceProvider chama Inertia::clearHistory depois da invalidação/regeneração, preservando a resposta Fortify e a cifragem. Teste: Back mostra login sem master, API401, sessão regenerada e nova sessão/MFA recupera dados após autorização. C112 fechado neste âmbito QA; não se considera instalado no ativo. [Provas/reversão](../../../../outputs/investmoz-country02-https-20261011/REVER-CANDIDATA.md). Falhas do ensaio separadas: APIRequestContext sem DNSdoChromium e ficheirofavicon ausente na cópiaQA. Corrigidos mecanismo de pedido/sanitização de diagnóstico e cópia dofaviconoriginal. Nenhum cookie, senha, secretMFA oucódigo consta das evidências finais. Sessões temporáriasQA invalidadas ao terminar. Não declarados como falhas da API/instalador; históricos preservados. ''' file.write_text(case+old,encoding='utf-8') print(json.dumps({'packet':PACKET.name,'changed_rows_per_csv':2,'state_change':'AUD-COUNTRY-02: implemented but inactive','cases':'C110/C111/C112 QA demonstrated; A/B/C37 preserved','active_writes':0}))