import fs from 'node:fs';import path from 'node:path';import crypto from 'node:crypto';import {spawnSync} from 'node:child_process'; const read=p=>JSON.parse(fs.readFileSync(p,'utf8').replace(/^\uFEFF/,'')),sha=p=>crypto.createHash('sha256').update(fs.readFileSync(p)).digest('hex'); const state=read('C:/laragon/data/sgf-tempo/run/modular-regression-current.json');if(state.port!==55439)throw Error('Owned evidence root required');const output='docs/proofs/common-ledger-complete-cycle-20261102.json';if(fs.existsSync(output))throw Error('Completed cycle proof preserved'); const evidenceNames={ sgf_cases:'ledger-92c3465d242c/ledger-cycle-cases.json', native_cases:'ledger-native-4731dad525b5/native-cycle-cases.json', native_persisted_workflow:'ledger-native-4731dad525b5/native-cycle-workflow.json', security:'ledger-ff7852ea4305/ledger-cycle-security.json', concurrency:'ledger-92c3465d242c/ledger-cycle-race.json', sgf_http:'ledger-6811563df7af/ledger-cycle-http.json', native_http:'ledger-native-717011443eb8/ledger-cycle-http.json', sgf_final:'ledger-6811563df7af/ledger-cycle-final.json', native_final:'ledger-native-717011443eb8/ledger-cycle-final.json', native_actor:'ledger-native-717011443eb8/ledger-cycle-actor-check.json', first_effect_compatibility:'ledger-e1272b65ff5d/ledger-cases.json', sgf_demo:'ledger-f729b545c0b6/ledger-cycle-demo-http.json', native_demo:'ledger-native-18278bfce5c2/ledger-cycle-demo-http.json' }; const evidence={},artifacts=[];for(const [name,file] of Object.entries(evidenceNames)){const p=path.join(state.root,'private',file),v=read(p);if(!v.passed)throw Error('Unsuccessful evidence: '+name);evidence[name]=v;artifacts.push({file:'private/'+file,sha256:sha(p)});} const prior=['docs/proofs/sgf-financial-ledger-flow-20261102.json','docs/proofs/common-ledger-payable-20261102.json','docs/proofs/sgf-payable-paged-read-20261102.json','docs/proofs/sgf-settlement-read-isolation-20261102.json','docs/proofs/module-association-consolidation-summary-20261102.json']; let preserved=0;for(const f of prior.slice(0,2)){const j=read(f);for(const p of j.evidence){const actual=path.resolve(state.root,p.file);if(!actual.startsWith(path.resolve(state.root)+path.sep)||sha(actual)!==p.sha256)throw Error('Prior private evidence changed: '+p.file);preserved++;}} const approvedLine='02/11/2026. **Preparado, ainda não autorizado nem implementado.** Continuação agrupada do [percurso funcional financeiro → lançamento](SGF_FINANCIAL_LEDGER_FLOW_DELIVERY.md), não um pedido de aprovação de alterações técnicas pequenas.'; const scopeFile='docs/GENERAL_LEDGER_COMPLETE_SYNTHETIC_SCOPE.md',approved=fs.readFileSync(scopeFile,'utf8').replace(/^02\/11\/2026\..+$/m,approvedLine),expected=read(prior[0]).sources.find(s=>s.file===scopeFile)?.sha256,hash=crypto.createHash('sha256').update(approved).digest('hex');if(hash!==expected)throw Error('Approved scope archive differs from presented proposal'); const archive=path.join(state.root,'private/ledger-cycle-approved-scope.md');if(fs.existsSync(archive)){if(sha(archive)!==hash)throw Error('Approved archive exists with different content');}else fs.writeFileSync(archive,approved); artifacts.push({file:'private/ledger-cycle-approved-scope.md',sha256:hash}); const files=['packages/general-ledger/bootstrap.php','packages/general-ledger/README.md','packages/general-ledger/src/LedgerSchema.php','packages/general-ledger/src/PayableJournal.php','packages/general-ledger/src/LedgerCycle.php','packages/general-ledger/src/CycleSchema.php','packages/general-ledger/src/CycleWorkspace.php','packages/general-ledger/ui/cycle.php','app/Modules/Accounting/GeneralLedger.php','app/Modules/Accounting/GeneralLedgerController.php','app/Modules/Purchasing/SupplierPaymentsController.php','packages/payables/src/SettlementHttp.php','packages/payables/ui/settlements.php','resources/views/accounting/general-ledger.blade.php','resources/views/accounting/ledger-cycle-entry.blade.php','config/general_ledger.php','routes/web.php','../compras/app/Services/GeneralLedger.php','../compras/app/Http/Controllers/GeneralLedgerController.php','../compras/app/Http/Controllers/SupplierPaymentsController.php','../compras/config/general-ledger.php','../compras/routes/web.php','scripts/ledger-proof.php','scripts/ledger-run.mjs','scripts/ledger-cycle-setup.php','scripts/ledger-cycle-cases.php','scripts/ledger-cycle-security.php','scripts/ledger-cycle-race.php','scripts/ledger-cycle-final.php','scripts/ledger-http-entry.php','scripts/payable-history-sgf-proof.php','scripts/ledger-cycle-native-run.mjs','scripts/ledger-cycle-native-proof.php','scripts/ledger-cycle-native-http-router.php','scripts/ledger-cycle-http.mjs','scripts/ledger-cycle-native-demo.mjs','scripts/ledger-cycle-demo-check.mjs','scripts/summarize-ledger-cycle.mjs',scopeFile,'docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md','../compras/docs/contabilidade-ciclo-sintetico.md']; let php=0,js=0;for(const file of files){const phpFile=file.endsWith('.php')&&!file.endsWith('.blade.php'),jsFile=file.endsWith('.mjs');if(!phpFile&&!jsFile)continue;const r=spawnSync(phpFile?'C:/laragon/tools/sgf-tempo/php-8.4.27/php.exe':process.execPath,[phpFile?'-l':'--check',file],{encoding:'utf8',windowsHide:true});if(r.status!==0)throw Error('Syntax failed: '+file);phpFile?php++:js++;} const qualityFile=path.join(state.root,'private/ledger-cycle-quality.json'),quality=read(qualityFile);if(!quality.phpstan.passed||!quality.pint.passed)throw Error('Quality checks missing');artifacts.push({file:'private/ledger-cycle-quality.json',sha256:sha(qualityFile)}); const demos=['ledger-f729b545c0b6','ledger-native-18278bfce5c2'].map(n=>read(path.join(state.root,'private',n,'ledger-demo.json'))); for(const d of demos){const r=await fetch(d.url,{signal:AbortSignal.timeout(3000)});if(!r.ok||!(await r.text()).includes('data-ledger-demo="'+d.tag+'"'))throw Error('Team demo not ready');} const result={increment:'COMMON-LEDGER-COMPLETE-CYCLE-SIM-v1',authorization_date:'2026-11-02',consolidated_at_utc:new Date().toISOString(),authorization:{answer:'Autorizar o ciclo sintético proposto',approved_scope_sha256:hash,archive_matches_prior_presented_proposal:true,real_access:false,reopening:false},functional_code:true,synthetic_only:true,status:'implemented_and_tested_with_explicit_limits',tests:evidence,quality:{...quality,syntax:{php_files:php,javascript_files:js}},private_evidence:artifacts,previous_private_artifacts_verified:preserved,previous_proofs:prior.map(file=>({file,sha256:sha(file)})),implementation_sources:files.map(file=>({file,sha256:sha(file)})),team_demos:demos,core_source_single:true,native_adapter_implemented:true,installed_native_package_replaced:false,destination_flags_enabled:false,rights:{distinct_ledger:10,ledger_grants_per_new_fixture:12,financial_rights_existing_and_qa_only:true,real_grants:0},preservation:{six_pending_associations_untouched:true,blocked_cache_not_cleared:true,old_demos_not_reset:true,unrelated_work_preserved:true},limits:{visual_review_pending:true,deployment_capacity_validated:false,live_sgf_purchasing_source:false,real_chart_or_tax_policy:false,reopening:false,bank_execution:false,monetary_operations:false,new_benchmarks:false,new_indexes:false,publication:false,purchasing_activation:false,checkpoint:false,acceptance_presumed:false}}; fs.writeFileSync(output,JSON.stringify(result,null,2)+'\n');console.log(JSON.stringify({output,sgf_http:evidence.sgf_http.checks,native_http:evidence.native_http.checks,real_workers:5,prior_artifacts_verified:preserved,syntax:result.quality.syntax,demos:demos.map(d=>d.url)}));