Cai
2026-08-24 156ea25b402479f0abc54c558bbf87f9eaaa0422
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import fs from 'node:fs';
import path from 'node:path';
import crypto from 'node:crypto';
 
const ROOT=process.cwd();
const CASE='ANA-ROBOT-INDUSTRY-001';
const AUDIT='AUDIT-ANA-ROBOT-FINAL-GATE-REBUILD-REPAIR001-REREVIEW-001';
const BATCH='BATCH-ANA-ROBOT-FINAL-GATE-PASS-SYNC-001';
const RUN='RUN-ANA-ROBOT-FINAL-GATE-PASS-SYNC-001';
const BASE='ana-data/cases/机器人案例/ANA-ROBOT-INDUSTRY-001';
const E=`${BASE}/evidence`;const M=`${BASE}/manifest`;
const INV=`${E}/final_gate_output_inventory_rebuild_repair001_20260728.csv`;
const RESULT='ana-data/result/机器人案例/ANA-ROBOT-INDUSTRY-001/result_index.md';
const REPORT='ana-data/cases/机器人案例/ANA-ROBOT-INDUSTRY-001/outputs/核心文档/机器人报告索引.md';
const MANIFEST=`${M}/artifact_manifest.csv`;
const GEN=`${M}/final_gate_pass_sync_generator_20260728.mjs`;
const OUT={audit:`${E}/final_gate_pass_audit_authority_20260728.csv`,status:`${E}/final_gate_pass_status_record_20260728.csv`,delivery:`${E}/final_gate_canonical_delivery_manifest_20260728.csv`,shared:`${E}/final_gate_pass_shared_record_authority_20260728.csv`,set:`${M}/final_gate_pass_sync_artifact_set_20260728.csv`,validation:`${M}/final_gate_pass_sync_validation_20260728.csv`};
 
const abs=r=>path.join(ROOT,...r.split('/'));const buf=r=>fs.readFileSync(abs(r));const txt=r=>buf(r).toString('utf8');const sha=b=>crypto.createHash('sha256').update(b).digest('hex');
function id(r){const b=buf(r),t=b.toString('utf8');return{sha256:sha(b),bytes:b.length,lines:t.length===0?0:t.split(/\r?\n/).length-(/(?:\r?\n)$/.test(t)?1:0)}}
const q=v=>`"${String(v??'').replaceAll('"','""')}"`;const csv=(h,rs)=>[h.map(q).join(','),...rs.map(r=>h.map(k=>q(r[k])).join(','))].join('\n')+'\n';
function parse(raw){const rs=[];let row=[],f='',z=false;for(let i=0;i<raw.length;i++){const c=raw[i];if(z){if(c==='"'&&raw[i+1]==='"'){f+='"';i++}else if(c==='"')z=false;else f+=c}else if(c==='"')z=true;else if(c===','){row.push(f);f=''}else if(c==='\n'){row.push(f.replace(/\r$/,''));rs.push(row);row=[];f=''}else f+=c}if(f||row.length){row.push(f);rs.push(row)}const h=rs.shift();return rs.filter(r=>r.some(v=>v!=='')).map(r=>Object.fromEntries(h.map((k,i)=>[k,r[i]??''])))}
function write(r,c){fs.mkdirSync(path.dirname(abs(r)),{recursive:true});fs.writeFileSync(abs(r),c,'utf8')}function absent(){for(const r of Object.values(OUT))if(fs.existsSync(abs(r)))throw new Error(`REFUSE_OVERWRITE:${r}`)}
function auditAuthority(){const lines=txt('ana-doc/机器人案例/案例审计报告.md').replaceAll('\r\n','\n').split('\n');const s=lines.findIndex(l=>l.startsWith('### ')&&l.includes(AUDIT));if(s<0)throw new Error('FINAL_AUDIT_NOT_FOUND');let e=lines.length;for(let i=s+1;i<lines.length;i++)if(lines[i].startsWith('### ')){e=i;break}const n=lines.slice(s,e).join('\n').replace(/\n+$/,'')+'\n';return[{authority_id:'FGPASSAUD-001',audit_id:AUDIT,audit_report_path:'ana-doc/机器人案例/案例审计报告.md',heading_line:s+1,end_line:e,normalization:'UTF8_NO_BOM_LF_JOIN_LINES_WITH_TERMINAL_LF_V1',entry_bytes:Buffer.byteLength(n),entry_sha256:sha(Buffer.from(n)),formal_conclusion_literal:'PASS',final_gate_status:'FINAL_GATE_PASSED_WITH_RETAINED_GAPS_AND_EXPLICIT_BOUNDARIES',case_completion_release:'RELEASED_AS_CURRENT_AUDITED_SNAPSHOT_WITH_RETAINED_GAPS',external_delivery_release:'RELEASED_CANONICAL_OUTPUTS_ONLY_WITH_RETAINED_GAPS_AND_BOUNDARY_NOTICE'}]}
function status(){return[{case_id:CASE,action_id:'NEXT-ROBOT-037',audit_id:AUDIT,final_gate_status:'FINAL_GATE_PASSED_WITH_RETAINED_GAPS_AND_EXPLICIT_BOUNDARIES',case_completion_release:'RELEASED_AS_CURRENT_AUDITED_SNAPSHOT_WITH_RETAINED_GAPS',external_delivery_release:'RELEASED_CANONICAL_OUTPUTS_ONLY_WITH_RETAINED_GAPS_AND_BOUNDARY_NOTICE',canonical_delivery_path_count:'48',canonical_entrypoint_count:'2',legacy_redirect_excluded_count:'2',database_as_of:'2026-07-24',database_boundary:'MARKET_OBSERVATION_ONLY_NOT_INVESTMENT_CONCLUSION',company_pool_boundary:'NO_AUTOMATIC_FORMAL_POOL_CHANGE',evidence_map_boundary:'45_OF_45_NO_UPGRADE',retained_gap_notice:'IFR/MIR/Omdia/AMR/ASP/BOM/company_operating/customer_contract/profit_pool/double_ring_candidates/A_B_candidate_unclassified/Stage_C_three_side/event_freshness_gaps_remain'}]}
function delivery(){const inv=parse(txt(INV));const rows=[];const rid=id(RESULT);rows.push({delivery_id:'FGDEL-001',artifact_path:RESULT,artifact_group:'CANONICAL_RESULT_ENTRY',delivery_role:'PRIMARY_ENTRYPOINT',sha256:rid.sha256,bytes:rid.bytes,lines:rid.lines,review_state:'FINAL_GATE_PASS_STATUS_REGISTERED',delivery_boundary:'RELEASED_WITH_RETAINED_GAPS_AND_BOUNDARY_NOTICE',evidence_ref:AUDIT});let n=2;for(const r of inv.filter(x=>x.artifact_group!=='LEGACY_READOUT')){rows.push({delivery_id:`FGDEL-${String(n++).padStart(3,'0')}`,artifact_path:r.artifact_path,artifact_group:r.artifact_group,delivery_role:r.artifact_path===REPORT?'PRIMARY_ENTRYPOINT':'REVIEWED_CANONICAL_OUTPUT',sha256:r.sha256,bytes:r.bytes,lines:r.lines,review_state:r.review_state,delivery_boundary:r.final_gate_disposition,evidence_ref:r.evidence_ref})}return rows}
function section(rel,marker,prefix){const ls=txt(rel).replaceAll('\r\n','\n').split('\n');const s=ls.findIndex(l=>l.startsWith(prefix)&&l.includes(marker));if(s<0)throw new Error(`MARKER_NOT_FOUND:${rel}:${marker}`);let e=ls.length;for(let i=s+1;i<ls.length;i++)if(ls[i].startsWith(prefix)){e=i;break}const n=ls.slice(s,e).join('\n').replace(/\n+$/,'')+'\n';return{start_line:s+1,end_line:e,normalized_bytes:Buffer.byteLength(n),normalized_sha256:sha(Buffer.from(n))}}
function shared(){const specs=[['EXECUTION_LOG','ana-doc/机器人案例/案例执行日志.md',RUN,'### '],['PARENT_STATUS','ana-doc/案例总纲.md','机器人案例最终门禁通过并登记当前审计快照完成','### '],['REMAINING_WORK',`${M}/remaining_work_plan_20260704.md`,'最终门禁通过后的持续事项','## '],['RESULT_INDEX',RESULT,'NEXT-ROBOT-037 最终门禁通过与交付边界','## ']];const rs=specs.map(([record_type,artifact_path,marker,prefix],i)=>({authority_id:`FGPASSSHARED-${String(i+1).padStart(3,'0')}`,record_type,artifact_path,marker,normalization:'UTF8_NO_BOM_LF_JOIN_LINES_WITH_TERMINAL_LF_V1',...section(artifact_path,marker,prefix)}));const ls=txt(`${M}/next_action_list.csv`).replaceAll('\r\n','\n').split('\n');const i=ls.findIndex(l=>l.includes('"NEXT-ROBOT-037"')&&l.includes(AUDIT));if(i<0)throw new Error('NEXT_ACTION_FINAL_ROW_NOT_FOUND');const n=ls[i]+'\n';rs.push({authority_id:'FGPASSSHARED-005',record_type:'NEXT_ACTION_ROW',artifact_path:`${M}/next_action_list.csv`,marker:AUDIT,normalization:'UTF8_NO_BOM_SINGLE_LINE_WITH_TERMINAL_LF_V1',start_line:i+1,end_line:i+1,normalized_bytes:Buffer.byteLength(n),normalized_sha256:sha(Buffer.from(n))});return rs}
function set(){const ps=[GEN,OUT.audit,OUT.status,OUT.delivery,OUT.shared,OUT.set,OUT.validation],ts=['SYNC_GENERATOR','FINAL_AUDIT_AUTHORITY','FINAL_STATUS_RECORD','CANONICAL_DELIVERY_MANIFEST','SHARED_RECORD_AUTHORITY','SYNC_EXACT_SET','VALIDATION_LAST'];return ps.map((artifact_path,i)=>({artifact_set_id:`FGPASSART-${String(i+1).padStart(3,'0')}`,generation_order:i+1,artifact_type:ts[i],artifact_path,validation_scope:i===6?'SELF_REFERENCE_EXCLUDED':'VALIDATE_FINAL_IDENTITY',manifest_policy:i===6?'APPEND_FINAL_IDENTITY_EXTERNALLY':'APPEND_FINAL_IDENTITY'}))}
function validation(a,s,d,sh,se){const rs=[];let n=1;const add=(g,o,e,v,ref='')=>rs.push({validation_id:`FGPASSVAL-${String(n++).padStart(3,'0')}`,check_group:g,object:o,expected:String(e),actual:String(v),result:String(e)===String(v)?'PASS':'FAIL',evidence_ref:ref});const info=(g,o)=>rs.push({validation_id:`FGPASSVAL-${String(n++).padStart(3,'0')}`,check_group:g,object:o,expected:'SELF_REFERENCE_EXCLUDED',actual:'SELF_REFERENCE_EXCLUDED',result:'INFO',evidence_ref:OUT.validation});add('AUDIT','authority_rows',1,a.length,OUT.audit);add('AUDIT','literal_conclusion','PASS',a[0].formal_conclusion_literal,OUT.audit);add('STATUS','final_gate','FINAL_GATE_PASSED_WITH_RETAINED_GAPS_AND_EXPLICIT_BOUNDARIES',s[0].final_gate_status,OUT.status);add('STATUS','case_completion','RELEASED_AS_CURRENT_AUDITED_SNAPSHOT_WITH_RETAINED_GAPS',s[0].case_completion_release,OUT.status);add('STATUS','external_delivery','RELEASED_CANONICAL_OUTPUTS_ONLY_WITH_RETAINED_GAPS_AND_BOUNDARY_NOTICE',s[0].external_delivery_release,OUT.status);add('DELIVERY','rows',48,d.length,OUT.delivery);add('DELIVERY','unique_paths',48,new Set(d.map(r=>r.artifact_path)).size,OUT.delivery);add('DELIVERY','entrypoints',2,d.filter(r=>r.delivery_role==='PRIMARY_ENTRYPOINT').length,OUT.delivery);add('DELIVERY','legacy_paths',0,d.filter(r=>r.artifact_path.endsWith('/summary.md')||r.artifact_path.endsWith('/readout.md')).length,OUT.delivery);add('DELIVERY','identity_mismatch',0,d.filter(r=>{const x=id(r.artifact_path);return x.sha256!==r.sha256||String(x.bytes)!==String(r.bytes)||String(x.lines)!==String(r.lines)}).length,OUT.delivery);const inv=parse(txt(INV));add('LEGACY','excluded_redirects',2,inv.filter(r=>r.artifact_group==='LEGACY_READOUT').length,INV);add('SHARED','rows',5,sh.length,OUT.shared);add('SHARED','identity_mismatch',0,sh.filter(r=>!r.normalized_sha256||!r.normalized_bytes).length,OUT.shared);const ledger=parse(txt(`${E}/formal_evidence_map_alignment_change_ledger_20260728.csv`));add('EVIDENCE_MAP','no_upgrade_rows',45,ledger.filter(r=>r.evidence_strength_effect==='NO_UPGRADE').length,`${E}/formal_evidence_map_alignment_change_ledger_20260728.csv`);const mb=buf(MANIFEST),mr=parse(mb.toString('utf8'));add('MANIFEST','prefix_rows',799,mr.length,MANIFEST);add('MANIFEST','prefix_bytes',270830,mb.length,MANIFEST);add('MANIFEST','prefix_sha256','50974010cb18f6bc834365396e6aaafb8c3609d008c45dba2d54852197f4fc45',sha(mb),MANIFEST);add('ARTIFACT_SET','rows',7,se.length,OUT.set);add('ARTIFACT_SET','unique_paths',7,new Set(se.map(r=>r.artifact_path)).size,OUT.set);info('VALIDATION_SELF_REFERENCE',OUT.validation);return rs}
function main(){if(process.argv[2]!=='--execute')throw new Error('USE_--execute');absent();const a=auditAuthority(),s=status(),d=delivery(),sh=shared(),se=set();write(OUT.audit,csv(['authority_id','audit_id','audit_report_path','heading_line','end_line','normalization','entry_bytes','entry_sha256','formal_conclusion_literal','final_gate_status','case_completion_release','external_delivery_release'],a));write(OUT.status,csv(['case_id','action_id','audit_id','final_gate_status','case_completion_release','external_delivery_release','canonical_delivery_path_count','canonical_entrypoint_count','legacy_redirect_excluded_count','database_as_of','database_boundary','company_pool_boundary','evidence_map_boundary','retained_gap_notice'],s));write(OUT.delivery,csv(['delivery_id','artifact_path','artifact_group','delivery_role','sha256','bytes','lines','review_state','delivery_boundary','evidence_ref'],d));write(OUT.shared,csv(['authority_id','record_type','artifact_path','marker','normalization','start_line','end_line','normalized_bytes','normalized_sha256'],sh));write(OUT.set,csv(['artifact_set_id','generation_order','artifact_type','artifact_path','validation_scope','manifest_policy'],se));const v=validation(a,s,d,sh,se);write(OUT.validation,csv(['validation_id','check_group','object','expected','actual','result','evidence_ref'],v));const f=v.filter(r=>r.result==='FAIL');if(f.length)throw new Error(`VALIDATION_FAIL:${f.map(r=>r.validation_id).join(',')}`);console.log(JSON.stringify({audit:a.length,status:s.length,delivery:d.length,shared:sh.length,artifacts:se.length,validation:v.length,failures:0}))}
main();