| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // Production access is read only: function source, contract, write audit and current scope.
- import fs from 'node:fs';
- import crypto from 'node:crypto';
- import assert from 'node:assert/strict';
- import {invoke,classRows} from '../server/scripts/platform-client.mjs';
- const output='work/S4-classroom-contract-check-20261103-03.json';
- assert.equal(fs.existsSync(output),false,'Preserve prior audit');
- const taskBase='KSF-真实资料-20261102-01',sessionId='btrFqkz0yw';
- const normalize=s=>s.replace(/\r\n/g,'\n');
- const workshop=normalize(fs.readFileSync('server/src/workshop.mjs','utf8').replace(/^export /gm,''));
- const core=normalize(fs.readFileSync('server/src/core.mjs','utf8').replace(/^export /gm,''));
- const names=['ksfSaveWorkshopTask','ksfCreateProjectFromOpportunity','ksfTransitionProject','ksfGetWorkshopProject'];
- const block=(text,start,end)=>{
- const at=text.indexOf(start);assert.ok(at>=0);const finish=text.indexOf(end,at+start.length);assert.ok(finish>at);
- return text.slice(at,finish).trim();
- };
- const relevantBlocks=[
- ...names.map(name=>({name,code:block(workshop,'app.handlers.'+name+'=',name==='ksfGetWorkshopProject'?'\n const fields=':'\n app.handlers.')})),
- {name:'reportOf',code:block(workshop,'function reportOf(','\n app.handlers.ksfSaveWorkshopTask=')},
- {name:'session/project/event helpers',code:block(workshop,'const own=','\n const contract=app.handlers.ksfGetIngestContract;')},
- {name:'write idempotency operation',code:block(core,'async function operation(','\n function validateValue(')}
- ];
- const handoff=fs.readFileSync('F:/文档/工作坊当前资料/47-发给王刚001-S4课堂项目与桌面评估.txt','utf8');
- const requestIds=[...handoff.matchAll(/requestId=(KSF-[^\s。;]+)/gu)].map(m=>m[1]);
- assert.equal(requestIds.length,12);assert.equal(new Set(requestIds).size,12);
- const series=['S3-份量候选','S3-项目基线','S4'].map(s=>taskBase+':'+s);
- const pointer={__type:'Pointer',className:'KfSession',objectId:sessionId};
- let step='read source and audit';
- try{
- const inspected=JSON.parse(fs.readFileSync('work/S4-classroom-deployed-handler-inspection-20261103.json','utf8'));
- const functionSnapshots=names.map(name=>{
- const info=inspected.find(x=>x.name===name),code=fs.readFileSync('work/S4-deployed-'+name+'-20261103.js','utf8');
- assert.equal(crypto.createHash('sha256').update(code).digest('hex'),info.codeSha256);
- return{name,objectId:info.id,path:'/'+name,code};
- });
- const settled=await Promise.allSettled([
- invoke('ksfGetIngestContract',{}),Promise.resolve(functionSnapshots),
- classRows('KsfOperation',{requestId:{$in:requestIds}}),
- classRows('KfArtifact',{reportSeriesKey:{$in:series}}),
- classRows('KfOpportunity',{$or:[{opportunitySeriesKey:taskBase+':portion-fit'},{sessionRef:pointer}]}),
- classRows('KfProject',{sessionRef:pointer}),
- invoke('ksfGetRecord',{className:'KfSession',objectId:sessionId})
- ]);
- const failed=settled.flatMap((r,i)=>r.status==='rejected'?[i]:[]);assert.deepEqual(failed,[],'Read group failed (indexes only)');
- const [contractResponse,functions,operations,artifacts,opportunities,projects,sessionResponse]=settled.map(r=>r.value);
- assert.equal(contractResponse.http,200);assert.equal(contractResponse.body?.result?.ok,true);
- assert.equal(sessionResponse.http,200);assert.equal(sessionResponse.body?.result?.ok,true);
- const contract=contractResponse.body.result.data,session=sessionResponse.body.result.data.record;
- step='deployed command implementation';
- const sourceChecks=[];
- for(const name of names){
- const matches=functions.filter(x=>x.name===name);assert.equal(matches.length,1);
- const row=matches[0],code=normalize(row.code);
- const blockChecks=relevantBlocks.map(part=>({name:part.name,matched:code.includes(part.code)}));
- const check={name,functionObjectId:row.objectId,path:row.path,
- sha256:crypto.createHash('sha256').update(row.code).digest('hex'),
- includesExactLocalWorkshopModule:code.includes(workshop),includesExactLocalCoreModule:code.includes(core),
- relevantCommandBlocks:blockChecks};
- sourceChecks.push(check);
- assert.ok(blockChecks.every(x=>x.matched),name+' relevant command and helper code equality');
- }
- step='current scope and write history';
- assert.equal(operations.length,0);assert.equal(artifacts.length,0);assert.equal(opportunities.length,0);assert.equal(projects.length,0);
- assert.equal(session.stageCode,'S3');assert.equal(session.dataMode,'live');assert.equal(session.workshopKey,taskBase);
- const reportTypes=contract.reportTypes.map(x=>x.code);
- assert.ok(reportTypes.includes('workshop_auxiliary'));assert.ok(!reportTypes.includes('opportunity_card'));assert.ok(!reportTypes.includes('assessment_report'));
- const result={ok:true,at:new Date().toISOString(),readOnly:true,productionBusinessWrites:0,
- contract:{schemaVersion:contract.schemaVersion,contractRevision:contract.contractRevision,release:contract.release,
- workshopProjectTransition:contract.capabilities.workshopProjectTransition,projectTransition:contract.capabilities.projectTransition,
- reportTypes,workshop:contract.workshop},
- deployedCodeChecks:sourceChecks,checkedRequestIds:requestIds,matchedWriteAuditRows:operations.length,
- history:{newSeriesArtifacts:0,opportunities:0,projects:0},systemStage:'S3',
- decisions:{artifactTypeSeparateFromReportType:true,reportType:'workshop_auxiliary',artifactSubtype:'classroom_task',
- commandPayloadSeparateFromTableFields:true,projectKeyStoredInMeta:true,toStageAppliedToStageCode:true,
- enterpriseApprovalIsResponseOnly:true,opportunityKeyBecomesSeriesKey:true,claimKindSuppliedByHandler:'hypothesis',
- opportunityVersionInheritsReportVersion:true,statusBeforeProject:'candidate'},
- limits:['No remote filesystem/process inspection by Codex','No claim of local CLI read-request count from KsfOperation audit',
- 'Whole-module equality check retained separately; this audit compares the relevant command bodies and helper functions',
- 'Read-only live checks do not guarantee future write outcome; stop rules remain in force']};
- fs.writeFileSync(output,JSON.stringify(result,null,2)+'\n',{flag:'wx'});
- console.log(JSON.stringify({ok:true,contractRevision:result.contract.contractRevision,deployedFunctionsMatched:sourceChecks.length,
- matchedWriteAuditRows:0,newSeriesArtifacts:0,opportunities:0,projects:0,systemStage:'S3',decisions:result.decisions},null,2));
- }catch(error){
- const result={ok:false,step,errorCode:'S4_CLASSROOM_CONTRACT_CHECK_STOPPED',readOnly:true,productionBusinessWrites:0,
- checkLine:error.stack?.match(/verify-S4-classroom-contract\.mjs:(\d+):/)?.[1]??null};
- fs.writeFileSync(output,JSON.stringify(result,null,2)+'\n',{flag:'wx'});console.error(JSON.stringify(result,null,2));process.exitCode=1;
- }
|