@@ -43,26 +43,27 @@ import path from 'node:path';
4343const prompt=fs.readFileSync(0,'utf8');
4444const stage=process.env.DOCGEN_STAGE;
4545const cwd=process.cwd();
46+ const tick=String.fromCharCode(96);
4647const between=(text,start,end)=>{const tail=text.split(start)[1];return tail?tail.split(end)[0]:null;};
47- const target=between(prompt,'Write exactly one JSON file: \\` ' , '\\`' ) ;
48- const write = ( rel , value ) => { if ( ! rel ) throw new Error ( 'missing output path for ' + stage ) ; const file = path . join ( cwd , rel ) ; fs . mkdirSync ( path . dirname ( file ) , { recursive :true } ) ; fs . writeFileSync ( file , JSON . stringify ( value , null , 2 ) + '\\ n' ) ; } ;
48+ const target=between(prompt,'Write exactly one JSON file: '+tick,tick );
49+ const write=(rel,value)=>{if(!rel)throw new Error('missing output path for '+stage);const file=path.join(cwd,rel);fs.mkdirSync(path.dirname(file),{recursive:true});fs.writeFileSync(file,JSON.stringify(value,null,2)+'\n');};
4950if(stage==='modelCore'){
5051 write(target,{system:{components:[{id:'resource',kind:'component',name:'Resource',statement:'HTTP resource',classification:'FACT',confidence:1,evidence:[{path:'src/Resource.java',startLine:1}]}],relationships:[],workflows:[],unknowns:[]},business:{actors:[],capabilities:[],concepts:[],businessRules:[],decisions:[],branchConditions:[],lifecycles:[],invariants:[],useCases:[],unknowns:[]},flows:{businessFlows:[],controlFlows:[],requestFlows:[],trafficFlows:[],dataFlows:[],eventFlows:[]},catalogs:{endpoints:[],messageHandlers:[],externalDependencies:[],dataStores:[],scheduledJobs:[]}});
5152}else if(stage==='modelEnterprise'){
5253 write(target,{security:{unknowns:[]},operations:{unknowns:[]},testing:{unknowns:[]},'data-governance':{unknowns:[]},decisions:{unknowns:[]},configuration:{unknowns:[]},'change-impact':{unknowns:[]},ownership:{unknowns:[]}});
5354}else if(stage==='plan'){
5455 write(target,{schemaVersion:'2.0',metadata:{description:'Fixture docs'},pages:[{id:'overview',title:'System Overview',summary:'Fixture overview.',category:'orientation',mode:'explanation',type:'overview',order:1,audience:['engineer'],coverageTags:['architecture'],query:'resource architecture',requiredSections:[],risk:'low',relatedPages:[]}]});
5556}else if(stage==='generate'){
56- const json = between ( prompt , 'Page contracts:\\ n' , '\\n\ \nFor every contract:' ) ;
57+ const json=between(prompt,'Page contracts:\n','\n \nFor every contract:');
5758 const contracts=JSON.parse(json);
5859 for(const contract of contracts){
5960 const page=contract.page;
60- const md = '---\\ ntitle: ' + JSON . stringify ( page . title ) + '\\ ndescription: ' + JSON . stringify ( page . summary ) + '\\ npageId: ' + JSON . stringify ( page . id ) + '\\ ncategory: ' + JSON . stringify ( page . category ) + '\\ nmode: ' + JSON . stringify ( page . mode ) + '\\ ntype: ' + JSON . stringify ( page . type ) + '\\ norder: ' + page . order + '\\ n---\\ n# ' + page . title + '\\n\\ n' + page . summary + '\\n\\ nThe repository exposes an HTTP resource.\ \n' ;
61+ const md='---\ntitle: '+JSON.stringify(page.title)+'\ndescription: '+JSON.stringify(page.summary)+'\npageId: '+JSON.stringify(page.id)+'\ncategory: '+JSON.stringify(page.category)+'\nmode: '+JSON.stringify(page.mode)+'\ntype: '+JSON.stringify(page.type)+'\norder: '+page.order+'\n---\n# '+page.title+'\n\ n'+page.summary+'\n\ nThe repository exposes an HTTP resource.\n';
6162 const output=path.join(cwd,contract.outputPath);fs.mkdirSync(path.dirname(output),{recursive:true});fs.writeFileSync(output,md);
6263 write(contract.traceabilityPath,{schemaVersion:'2.0',pageId:page.id,pagePath:contract.outputPath,claims:[{id:page.id+':resource',section:page.title,statement:'The repository exposes an HTTP resource.',classification:'FACT',confidence:1,evidence:[{path:'src/Resource.java',startLine:1}],sourceModelRefs:['system:resource']}]});
6364 }
6465}else if(stage==='audit'){
65- const output = between ( prompt , 'report: \\`' , '\\`' ) || '.docgen/audit/llm-risk.json' ; write ( output , { schemaVersion :'2.0' , pages :[ ] } ) ;
66+ const output=between(prompt,'report: '+tick,tick )||'.docgen/audit/llm-risk.json';write(output,{schemaVersion:'2.0',pages:[]});
6667}else{process.exitCode=2;console.error('unexpected stage '+stage);}
6768` ) ;
6869 fs . chmodSync ( file , 0o755 ) ;
0 commit comments