commit de compras
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import fs from 'node:fs';
|
||||
import {validateOrigins} from './audit-module-matrix.mjs';
|
||||
import path from 'node:path';
|
||||
import crypto from 'node:crypto';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
@@ -8,14 +9,14 @@ const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
|
||||
const roots={sgf:root,compras:path.resolve(root,'../compras')};
|
||||
const planPath=path.join(root,'docs/integration/sgf-flow-plan.json');
|
||||
const digest=b=>crypto.createHash('sha256').update(b).digest('hex');
|
||||
const planBytes=fs.readFileSync(planPath), plan=JSON.parse(planBytes);
|
||||
const planBytes=fs.readFileSync(planPath), plan=JSON.parse(planBytes);validateOrigins(plan);
|
||||
const requireValue=(condition,message)=>{if(!condition)throw Error(message);};
|
||||
requireValue(plan.schema_version===1&&plan.status==='preparation_only','Unsupported plan');
|
||||
const modules=new Set(plan.modules), sourceIds=new Set(), stages=new Map();
|
||||
requireValue(modules.size===6,'Expected the six existing modules');
|
||||
const sources=plan.sources.map(s=>{
|
||||
requireValue(!sourceIds.has(s.id),'Duplicate source');sourceIds.add(s.id);
|
||||
requireValue(roots[s.repository]&&/^(app|packages|resources|docs)\//.test(s.path)&&/\.(php|js|md)$/.test(s.path),'Unexpected source path');
|
||||
requireValue(roots[s.repository]&&/^(app|packages|resources|docs|integrations|public)\//.test(s.path)&&/\.(php|js|jsx|mjs|md)$/.test(s.path),'Unexpected source path');
|
||||
const base=fs.realpathSync(roots[s.repository]), file=fs.realpathSync(path.resolve(base,s.path));
|
||||
requireValue(file.startsWith(base+path.sep)&&!s.path.split('/').includes('..'),'Source escapes repository');
|
||||
return {...s,sha256:digest(fs.readFileSync(file)),meaning:'source_present_only_not_operational_proof'};
|
||||
@@ -42,5 +43,9 @@ const report={id:plan.id,date:plan.date,kind:'static_preparation_inventory',plan
|
||||
limitations:['Source existence is not execution, parity, acceptance or deployment evidence.','Dependencies represent the selected synthetic path, not universal product eligibility rules.','No stage transition engine, inventory adapter or journal engine implemented by this inventory.'],
|
||||
preservation:{database_connections:0,source_execution:false,application_routes_changed:false,rights_changed:false,protected_six_records_untouched:true,blocked_cache_untouched:true,
|
||||
demos_changed:false,purchasing_activated:false,publication:false,checkpoint:false},visual_review_pending:true,deployment_capacity_validated:false};
|
||||
fs.writeFileSync(path.join(root,'docs/proofs/module-flow-preparation-20261102.json'),JSON.stringify(report,null,2)+'\n');
|
||||
const outputName=process.argv[2]??'module-flow-preparation-20261102.json';
|
||||
requireValue(/^[a-z0-9-]+\.json$/.test(outputName),'Proof filename required');
|
||||
const output=path.join(root,'docs/proofs',outputName);
|
||||
requireValue(!fs.existsSync(output),'Completed proof preserved; choose a new proof filename');
|
||||
fs.writeFileSync(output,JSON.stringify(report,null,2)+'\n');
|
||||
console.log(JSON.stringify({modules:modules.size,stages:stages.size,sources:sources.length,mandatory_cycles:0,kind:report.kind,database_connections:0,operational_integration_validated:false},null,2));
|
||||
|
||||
Reference in New Issue
Block a user