@customize-agent/server 4.61.18 → 4.61.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +2 -2
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +1 -1
  5. package/.next/routes-manifest.json +1 -1
  6. package/.next/server/chunks/1710.js +1 -1
  7. package/.next/server/chunks/2292.js +3 -3
  8. package/.next/server/chunks/5037.js +6 -4
  9. package/.next/server/chunks/5763.js +2 -2
  10. package/.next/server/chunks/8176.js +1 -1
  11. package/.next/server/chunks/8570.js +1 -1
  12. package/.next/server/pages/404.html +1 -1
  13. package/.next/server/pages/500.html +1 -1
  14. package/.next/server/pages/documents.html +1 -1
  15. package/.next/server/pages/generation/[id].html +1 -1
  16. package/.next/server/pages/generation.html +1 -1
  17. package/.next/server/pages/jobs.html +1 -1
  18. package/.next/server/pages/knowledge/file-detail.html +1 -1
  19. package/.next/server/pages/knowledge/files.html +1 -1
  20. package/.next/server/pages/knowledge/manage.html +1 -1
  21. package/.next/server/pages/knowledge/source-preview.html +1 -1
  22. package/.next/server/pages/knowledge.html +1 -1
  23. package/.next/server/pages/models.html +1 -1
  24. package/.next/server/pages/settings.html +1 -1
  25. package/.next/server/pages/skills/[id]/edit.html +1 -1
  26. package/.next/server/pages/skills/[id].html +1 -1
  27. package/.next/server/pages/skills/new.html +1 -1
  28. package/.next/server/pages/skills.html +1 -1
  29. package/.next/server/pages-manifest.json +31 -31
  30. package/package.json +1 -1
  31. /package/.next/static/{64dedc015186d5e91b1f3db5f8926f02c23e1469ae5174b18ad286d4747d2fff → fd1217de641078aba72de10a892465bd7ea9bd0189ade955c584eadf9cd77a18}/_buildManifest.js +0 -0
  32. /package/.next/static/{64dedc015186d5e91b1f3db5f8926f02c23e1469ae5174b18ad286d4747d2fff → fd1217de641078aba72de10a892465bd7ea9bd0189ade955c584eadf9cd77a18}/_ssgManifest.js +0 -0
@@ -35,12 +35,14 @@ writingOutline 是小节写作大纲:逐块核单元是否按块主题/载体
35
35
  **建议替换文本**(v21):有明确修法的 finding(删句/改句/合并/移表/改单元格),在 proposedText 给出逐字可落的整句或整格替换文本;作者按文本落笔后复审。只写方向性指引的不要用 proposedText。
36
36
  **整段重写**(v21):段落单元经局部修订仍无法修复时,在 unitReplacement 给出该单元的完整替换文本(完整段落、不带引号与元信息);程序逐字落笔并照常复审。表格/图件不得用 unitReplacement,用 findings+proposedText。
37
37
  必须调用 submit_review_result 提交结果;自由文本不算审查结果。
38
- 审查提示版本:${l.dT}`;function T(a,b,c=!1){return(0,e.bF)(a,[...b],c).sort((a,b)=>a.id.localeCompare(b.id)).map(b=>({issue:b,transitions:a.issueTransitions(b.id)}))}function U(a,b=M){if(!a||a.responseMetadata?.completed===!1||a.responseMetadata?.protocolFailure||!Array.isArray(a.toolCalls)||1!==a.toolCalls.length||"submit_review_result"!==a.toolCalls[0].name)return!1;let c=a.toolCalls.find(a=>"submit_review_result"===a.name);if(!c)return!1;try{return 0===(0,k.validateJsonAgainstSchema)(JSON.parse(c.arguments),b).length}catch{return!1}}function V(a){return"string"==typeof a?[a]:Array.isArray(a)?a.flatMap(V):a&&"object"==typeof a?Object.values(a).flatMap(V):[]}function W(a,b){let c=Array.isArray(a.criterionIds)?a.criterionIds.map(String):[];if(c.length)return c;let d=Array.isArray(a.sectionIds)?a.sectionIds.map(String):[];return b.criteria.filter(a=>d.includes(String(a.sectionId??""))).map(a=>a.id)}async function X(a){if(a={...a,diagnostics:a.diagnostics??(0,v.dS)()},a.signal?.aborted)throw a.signal.reason??Error("REVIEW_CALL_CANCELLED_BEFORE_DISPATCH");let b={...I,...a.budget??{}};if(void 0!==b.maxUnitsPerBatch&&(!Number.isSafeInteger(b.maxUnitsPerBatch)||b.maxUnitsPerBatch<1)||!Number.isSafeInteger(b.maxSourceFilesPerBatch)||b.maxSourceFilesPerBatch<1||void 0!==b.maxInputCharacters&&(!Number.isSafeInteger(b.maxInputCharacters)||b.maxInputCharacters<1e3))throw Error("REVIEW_INPUT_BUDGET_INVALID");let c=[...new Set(a.unitEntityIds.map(a=>String(a).trim()).filter(Boolean))].sort();if(!c.length)throw Error("REVIEW_UNITS_REQUIRED");let d=a.responses?.length?T(a.store,new Set(c),!0).map(a=>a.issue):[],e=(a.responses??[]).map(a=>{let b=d.filter(b=>b.evidence.includes("finding-key:"+a.findingKey)&&(!a.issueId||b.id===a.issueId)&&(!a.unitEntityId||b.scope.entityIds.includes(a.unitEntityId)));if(1!==b.length){if(b.length)throw Error("REVIEW_RESPONSE_FINDING_AMBIGUOUS");let c=d.filter(b=>!a.unitEntityId||b.scope.entityIds.includes(a.unitEntityId)).map(a=>a.evidence.find(a=>a.startsWith("finding-key:"))?.slice("finding-key:".length)??a.id).filter(Boolean).slice(0,12);throw Error(`REVIEW_RESPONSE_FINDING_NOT_FOUND:responses 引用的 findingKey「${a.findingKey}」${a.issueId?` / issueId「${a.issueId}」`:""}不在本批单元未关闭缺陷中;可用 findingKey:${c.join("、")||"无"}。`)}let e=b[0];if(!a.unitEntityId&&1!==e.scope.entityIds.filter(a=>c.includes(a)).length)throw Error("REVIEW_RESPONSE_FINDING_AMBIGUOUS");return{...a,issueId:e.id,unitEntityId:a.unitEntityId??e.scope.entityIds.find(a=>c.includes(a))}}),f=b=>{let c=a.store.entity(b)?.value,d=Array.isArray(c?.sectionIds)?String(c.sectionIds[0]??""):"",e="string"==typeof c?.subsectionId?c.subsectionId:"";return`${d}\u0000${e}`},g=new Map;for(let a of c)g.set(f(a),[...g.get(f(a))??[],a]);let h=[],i=[],j=b.maxUnitsPerBatch,k=()=>{i.length&&(h.push(i),i=[])};for(let a of g.values()){if(!j){i.push(...a);continue}if(a.length>j){k();for(let b=0;b<a.length;b+=j)h.push(a.slice(b,b+j));continue}i.length&&i.length+a.length>j&&k(),i.push(...a),i.length>=j&&k()}k();let m=[],n=!1!==a.includeSourceCoverage,p=async(c,d)=>{let f=await Y({...a,unitEntityIds:c,budget:b,responses:e.filter(a=>c.includes(a.unitEntityId)),...d?{}:{includeSourceCoverage:!1}});if(f.split&&c.length>1){let a=Math.ceil(c.length/2);await p(c.slice(0,a),d),await p(c.slice(a),!1);return}if(!f.ok&&"source-coverage"!==a.reviewKind&&d&&f.error?.startsWith("REVIEW_INPUT_BUDGET_EXCEEDED"))return void await p(c,!1);m.push(f)};for(let[a,b]of h.entries()){let c=n&&0===a;await p(b,c),c&&(n=!1)}if(1===m.length)return m[0];let q=m.flatMap(a=>a.units),r=m.every(a=>a.ok);return{version:"construction-review-invocation-v1",ok:r,sourceReviewPolicyVersion:o.pO,applicationVersion:H,invocationId:"review-invocation:"+a.runId+":"+F(m.map(a=>a.invocationId)).slice(0,24),principal:m[0].principal,inputHash:F(m.map(a=>a.inputHash)),targetHash:F(m.map(a=>a.targetHash)),responseHash:F(m.map(a=>a.responseHash)),units:q,assessments:m.flatMap(a=>a.assessments??[]),findings:m.flatMap(a=>a.findings??[]),sourceOpinions:m.flatMap(a=>a.sourceOpinions??[]),...m.some(a=>a.ungroundedSourceOpinions?.length)?{ungroundedSourceOpinions:m.flatMap(a=>a.ungroundedSourceOpinions??[])}:{},...m.some(a=>a.rejectedResolves?.length)?{rejectedResolves:m.flatMap(a=>a.rejectedResolves??[])}:{},...m.some(a=>a.reviewAdjustments?.length)?{reviewAdjustments:m.flatMap(a=>a.reviewAdjustments??[])}:{},...m.some(a=>a.incompleteFindingNotes?.length)?{incompleteFindingNotes:m.flatMap(a=>a.incompleteFindingNotes??[])}:{},...m.some(a=>a.skippedDuplicateFindings?.length)?{skippedDuplicateFindings:m.flatMap(a=>a.skippedDuplicateFindings??[])}:{},note:m.map(a=>a.note).filter(a=>!!a).join(";"),promptVersion:l.dT,attempt:1,...r?{}:{retryable:m.some(a=>a.retryable),error:m.filter(a=>!a.ok).map(a=>a.error).filter(Boolean).join(";")},readSet:{units:q,evidenceIds:[...new Set(m.flatMap(a=>a.readSet?.evidenceIds??[]))],sourceFiles:[...new Set(m.flatMap(a=>a.readSet?.sourceFiles??[]))]},toolCalls:m.reduce((a,b)=>a+(b.toolCalls??0),0),batchReceipts:m.map(a=>({invocationId:a.invocationId,inputHash:a.inputHash,ok:a.ok,units:a.units.map(a=>a.id),...a.error?{error:a.error}:{}})),...m.find(a=>a.sourceCoverage)?.sourceCoverage?{sourceCoverage:m.find(a=>a.sourceCoverage).sourceCoverage}:{},usage:1===m.length?m[0].usage:m.map(a=>a.usage)}}async function Y(a){let b,c,g,h,p,v,J,K,L=a.principal??"independent-review:"+a.store.identity.documentId,N=[...new Set(a.unitEntityIds.map(a=>String(a).trim()).filter(Boolean))].map(b=>{let c=a.store.entity(b);if(!c)throw Error(`REVIEW_UNIT_NOT_FOUND:${b}`);return{entity:c,value:function(a){if("writing-unit"!==a.kind||a.deleted||!a.value)throw Error(`REVIEW_UNIT_NOT_WRITING:${a.id}`);return a.value}(c)}});if(!N.length)throw Error("REVIEW_UNITS_REQUIRED");let S="source-coverage"===a.reviewKind,X=P(S),Y=Q(S);for(let a of N){let b="string"==typeof a.value.responsibilityId?a.value.responsibilityId:"";if(b&&b===L)throw Error(`REVIEW_PRINCIPAL_AUTHOR_DENIED:${L} 是单元 ${a.entity.id} 的作者,不能作为审查主体`)}let{context:Z,contextUnitRefs:$,frozenTenderResponsePlan:_,tenderBinding:aa,referenceReads:ab,referenceErrors:ac,findingBasis:ad,requestConfigurationHash:ae,targetHash:af,responseHash:ag,requestKey:ah,unreferenced:ai,criteria:aj,sourceSummaries:ak,sourceCoverage:al}=function(a,b){let c=function(a){let b=(0,s.frozenModelConfigurationForRun)(a.diagnostics);if(!b||!a.callKind||!b.models.active)return;let c="independent-review"===a.callKind?b.models.roles?.reviewer??b.models.active:b.models.active,d=b.models.list.find(a=>a.name===c.name&&a.provider===c.provider);if(!d||!b.providers[d.provider])return;let e=b.providers[d.provider];return u({version:"frozen-planning-single-model-v5",model:{name:d.name,provider:d.provider,thinking:d.thinking??"follow-task"},endpointHash:u([e.baseUrl,e.protocol,e.directEndpoint]),selectionRules:[t.f.toString()]})}({diagnostics:a.diagnostics,callKind:"independent-review"});if(!c)throw Error("REVIEW_FROZEN_MODEL_IDENTITY_REQUIRED");let e="source-coverage"===a.reviewKind,g=F({model:c,system:P(e),resultSchema:Q(e),promptReferences:z.HF,sourcePromptTables:A.Gf,parameters:{temperature:0,taskKind:"agent-action",requireToolCall:!0,useProviderDefaultOutput:!0,maxTokens:a.maxTokens??null}}),h=new Set(b.flatMap(a=>{let b=a.value;return Array.isArray(b.sectionIds)?b.sectionIds.map(String):[]})),i=a.contract.criteria.filter(a=>h.has(String(a.sectionId??""))).map(a=>G({id:a.id,sectionId:a.sectionId??null,chapterId:a.chapterId,description:a.description,dimension:a.dimension,applicable:a.applicable,...a.notApplicableReason?{notApplicableReason:a.notApplicableReason}:{}})),j=new Map,k={entities:[],groups:[]},m=[];for(let c of b)for(let b of[...Array.isArray(c.value.references)?c.value.references:[],...Array.isArray(c.value.assertions)?c.value.assertions.map(a=>a.reference??{}):[]])if("evidence"===b.kind&&"string"==typeof b.evidenceId){let c=function(a,b){return(a.sourceControls??[]).find(a=>a.factId===b&&"verified-source-excerpt"===a.roleId)}(a.project,b.evidenceId);j.set("evidence:"+b.evidenceId,G({evidenceId:b.evidenceId,quote:"string"==typeof b.quote?b.quote:null,frozenValue:c?.value??null,sourceFile:c?.sourceFile??null,sourceSpan:c?.sourceRef?.sourceSpan??null,found:!!c}))}else if("decision"===b.kind&&"string"==typeof b.entityId){let c=a.store.entity(b.entityId);if(!c||c.deleted||c.version!==b.entityVersion){m.push(`decision:${b.entityId}@${b.entityVersion} 当前缺失、已删除或已改版`);continue}k.entities.push({id:c.id,version:c.version});let d="document-execution-baseline"===c.id||c.value?.version==="construction-execution-baseline-v1"?G({...c,value:function(a){let b=Array.isArray(a.sharedMemberOwners)?a.sharedMemberOwners:[];return{...(0,B.PI)(a),..."string"==typeof a.origin?{origin:a.origin}:{},..."string"==typeof a.generatedAt?{generatedAt:a.generatedAt}:{},..."string"==typeof a.allocationBasis?{allocationBasis:a.allocationBasis}:{},..."string"==typeof a.allocationSetHash?{allocationSetHash:a.allocationSetHash}:{},..."string"==typeof a.workPackageSetHash?{workPackageSetHash:a.workPackageSetHash}:{},omittedInternalLedger:{field:"sharedMemberOwners",count:b.length,reading:"跨包成员归属是内部计量台账,不进入审查证据;审查只核单元实际引用的阶段/里程碑/机械/材料/劳动力事实,不据此判缺失。"}}}(c.value)}):c;j.set("decision:"+c.id,G({kind:"decision",entityId:c.id,entityVersion:c.version,entity:d}))}else if("certificate"===b.kind&&"string"==typeof b.certificateId){let c,d,e,g=a.store.certificate(b.certificateId);if(!g?.valid){m.push(`certificate:${b.certificateId} 当前缺失或已失效`);continue}if(k.entities.push(...g.reads.entities),k.groups.push(...g.reads.groups),j.has("certificate:"+b.certificateId))continue;let h=g.evaluation.value.result;if(h?.compilerVersion===f.wb){c=[];let f=h.compilation?.compiled?.jobs;if(Array.isArray(f))for(let d of f){let e=d?.id,f="string"==typeof e?g.reads.entities.find(a=>a.id===e):void 0,h=f?.version?a.store.entityVersion(f.id,f.version):void 0;if(!h||h.deleted||"construction-operation"!==h.kind){m.push(`certificate:${b.certificateId} 原读集作业 ${String(e)}@${f?.version??"unknown"} 内容不可用`);continue}c.some(a=>a.id===h.id)||c.push(h)}else m.push(`certificate:${b.certificateId} 原编译作业输入目录缺失`);d=[];let i=new Map,j=(a,c)=>{if("string"!=typeof a||!a.trim()||i.has(a)&&i.get(a)!==c)return void m.push(`certificate:${b.certificateId} 原作业定义引用 ${String(a)} 类型或身份不明`);i.set(a,c)};for(let a of c){j(a.value?.calendarId,"work-calendar");let c=a.value?.requirements;if(Array.isArray(c))for(let a of c)j(a?.resourcePoolId,"resource-pool");else m.push(`certificate:${b.certificateId} 原作业 ${a.id} 资源定义引用目录缺失`)}for(let[c,e]of[...i].sort(([a],[b])=>a.localeCompare(b))){let f=g.reads.entities.find(a=>a.id===c),h=f?.version?a.store.entityVersion(c,f.version):void 0;if(!h||h.deleted||h.kind!==e){m.push(`certificate:${b.certificateId} 原读集定义 ${c}@${f?.version??"unknown"} 内容不可用`);continue}d.push(h)}e=function(a,b,c,d,e,f){let g=new Map;for(let a of b.workPackages??[])for(let b of a.members??[]){if(!b?.id||!b.entry)continue;let a=G(b.entry),d=g.get(b.id);if(d&&(0,r.Fu)(d)!==(0,r.Fu)(a)){f.push(`certificate:${c} 当前清单成员 ${b.id} 对应不同条目`);continue}g.set(b.id,a)}let h=[],i=[],j=new Map;for(let b of d.entities){if(null===b.version)continue;let d=a.entityVersion(b.id,b.version);if(!d||d.deleted){f.push(`certificate:${c} 原读集实体 ${b.id}@${b.version} 内容不可用`);continue}j.set(b.id,d)}let k=(a,b)=>{("string"!=typeof a||j.get(a)?.kind!==b)&&f.push(`certificate:${c} 原依赖 ${String(a)} 缺少固定版本的 ${b} 内容`)};for(let a of e){k(a.value?.workPackageId,"work-package");let b=a.value?.components;if(Array.isArray(b))for(let a of b)k(a?.allocationId,"source-allocation");else f.push(`certificate:${c} 原作业 ${a.id} 缺少分配引用目录`)}for(let a of j.values())"source-allocation"===a.kind&&k(a.value?.memberId,"source-member");for(let a of j.values()){if(!["source-member","source-allocation","work-package"].includes(a.kind)||h.some(b=>b.id===a.id&&b.version===a.version)||(h.push(a),"source-member"!==a.kind))continue;let d="string"==typeof a.value?.memberId?a.value.memberId:a.id,e=g.get(d);if(!e){f.push(`certificate:${c} 原清单成员 ${d} 在当前冻结工作包中没有同一身份条目`);continue}let j=e.sourceFile,k="string"==typeof j?b.sourceVersionPolicy.sources[j]:void 0,l="string"==typeof j?b.sources[j]?.sha256:void 0,m=a.value?.sourceIdentity;if(a.value?.memberId!==a.id||a.value?.sourceFile!==j||a.value?.originalEntryHash!==(0,r.Fu)(e)||a.value.quantity!==e.quantity||a.value.unit!==e.unit||!k||l!==k.parsedSha256||m?.sourceSha256!==k.sourceSha256||m?.parsedSha256!==k.parsedSha256){f.push(`certificate:${c} 原清单成员 ${d} 的当前条目特征与原冻结身份不符`);continue}i.push({memberId:d,entry:e,sourceIdentity:a.value?.sourceIdentity??null})}return{entities:h,originalEntries:i}}(a.store,a.project,b.certificateId,g.reads,c,m)}j.set("certificate:"+b.certificateId,G({kind:"certificate",certificateId:b.certificateId,valid:g.valid,reads:g.reads,evaluation:g.evaluation,...c?{operationInputs:c,definitionInputs:d,quantityInputs:e}:{}}))}let p=new Set;for(let a of b)a.value.planChart&&p.add(a.entity.id);let q=(0,o.vx)(a.store,a.project,{documentHash:F(b.map(a=>[a.entity.id,a.entity.version]))}),v=(0,r.Fu)([a.store.workspaceId,a.sourceReviewScope??"document",o.pO]),w=(0,o.ik)(a.project),J=a.sourceCursor?.version==="source-review-cursor-v1"&&Array.isArray(a.sourceCursor.sourceIds)&&Array.isArray(a.sourceCursor.completedSourceIds)&&a.sourceCursor.sourceSnapshotHash===w&&a.sourceCursor.scopeHash===v?a.sourceCursor:void 0,K=[...new Set([...J?.sourceIds??[],...q.unreferenced])].filter(b=>!!a.project.sources[b]).sort(),L=K.filter(b=>!q.unreferenced.includes(b)||(!a.sourceCursor||J?.completedSourceIds.includes(b))&&q.opinions.some(a=>a.filePath===b)&&!q.conflicts.includes(b)),M=K.filter(a=>!L.includes(a)),N=a.sourceCursor?L.length:Math.max(0,Math.trunc(Number(a.sourceOffset??0))||0),R=a.sourceCursor?M:q.unreferenced,S=!1===a.includeSourceCoverage?[]:R.slice(a.sourceCursor?0:N,(a.sourceCursor?0:N)+a.budget.maxSourceFilesPerBatch),U=!1===a.includeSourceCoverage?R.length?N:null:(a.sourceCursor?S.length:N+S.length)<R.length?N+S.length:null,X={version:"source-review-cursor-v1",sourceSnapshotHash:w,scopeHash:v,sourceIds:K,completedSourceIds:L,offset:L.length},Y=function(a,b,c,d){if(!c.length)return[];let e=new Map((a.sourceVersionPolicy?.documents??[]).map(a=>[a.sourceFile,a])),f=new Map,g=new Map;if(b?.trim())try{(0,x.VD)(b,b=>{for(let d of c)try{let c=b.parsedFileFingerprint(d);if(c.sha256!==a.sources[d]?.sha256){g.set(d,"source-identity-mismatch");continue}let e=b.listChunks({relativePath:d,limit:3});f.set(d,{content:e.map(a=>a.content).join("\n"),chunksTruncated:c.chunks>e.length})}catch{g.set(d,"index-unavailable")}})}catch{for(let a of c)g.set(a,"index-unavailable")}return c.map(b=>{let c=e.get(b),h=c?.title?.trim()||b.split("/").at(-1)||b,i=f.get(b),j=(i?.content??"").trim(),k=j.slice(0,d);return{filePath:b,sha256:a.sources[b]?.sha256??"",title:h,sourceType:function(a,b){if(b||/补疑|补遗|答疑|澄清/u.test(a))return"clarification";if(/招标文件/u.test(a))return"tender";if(/清单|工程量/u.test(a)||/\.(?:xlsx?|csv)$/iu.test(a))return"bill-of-quantities";if(/图纸/u.test(a)||/\.(?:dwg|dxf)$/iu.test(a))return"drawing";let c=/\.([a-z0-9]+)$/iu.exec(a)?.[1]?.toLowerCase();return c?`document:${c}`:"other"}(b,c?.isClarification===!0),excerpt:k,excerptTruncated:!!i?.chunksTruncated||j.length>k.length,...!k?{excerptUnavailableReason:g.get(b)??(i?"no-text-excerpt":"index-unavailable")}:{}}})}(a.project,a.projectRoot,S,a.budget.maxSourceExcerptChars??I.maxSourceExcerptChars),Z=Y.filter(a=>a.excerptTruncated).length,$=Y.filter(a=>!a.excerpt).length,_={total:K.length,reviewed:S,offset:N,nextOffset:U,sourcesTruncated:Z,sourcesWithoutExcerpt:$,cursor:X,missingSourceIds:M},aa=a.responses??[],ab=new Set(b.map(a=>a.entity.id)),ac=T(a.store,ab),ad=ac.map(({issue:a})=>({findingKey:a.evidence.find(a=>a.startsWith("finding-key:"))?.slice("finding-key:".length)??"",issueId:a.id,unitEntityIds:a.scope.entityIds,reviewedVersions:a.scope.versions,principal:a.raisedBy,state:a.state,title:a.title,detail:a.detail,recheck:a.recheck,evidence:a.evidence.filter(a=>!a.startsWith("finding-key:"))})),ae=F([aa,aa.length?ad:[]]),af=new Set(S),ag=[...new Set(b.flatMap(a=>Array.isArray(a.value.sectionIds)?a.value.sectionIds.map(String):[]))],ah=function(a){let b,c=[];for(;;){let d=a.entityPage({groupKey:"writing-units",...b?{afterId:b}:{},limit:200});for(let a of d.entities){let b=(0,C.iC)(a);if(!b)continue;let d=a.value??{};c.push({unit:b,entityId:a.id,entityVersion:a.version,entityHash:(0,r.Fu)(a),responsibilityId:String(d.responsibilityId??""),purpose:String(d.purpose??""),sectionIds:Array.isArray(d.sectionIds)?d.sectionIds.map(String):[]})}if(!d.nextAfterId)break;b=d.nextAfterId}return c}(a.store),ai=ah.map(a=>({unit:a.unit,entityId:a.entityId,sectionIds:a.sectionIds})),aj=(0,E.ut)({contract:a.contract,units:ai}),ak=(0,E.Lz)({units:ai,carriers:aj}),al=new Map(ah.map((a,b)=>[a.entityId,ak.units[b]])),am=function(a){let b=[...new Set(a.sectionIds.filter(Boolean))];if(!b.length)return{markdown:"",issues:[],renderedUnits:new Map};let c=a.units.map(a=>({unit:a.unit,entityId:a.entityId,sectionIds:a.sectionIds}));try{let d=(0,D.V)({contract:a.contract,units:a.units,outputPlacements:a.outputPlacements,originalFormRenderer:a.originalFormRenderer,...a.sectionPlans?{sectionPlans:a.sectionPlans}:{},scopeSectionIds:b}),e=(0,E.ut)({contract:a.contract,units:c}),f=(0,E.Lz)({units:c,carriers:e}),g=new Map(a.contract.sections.map(a=>[a.id,a.title])),h=new Map;for(let[d,e]of f.units.entries()){let f=c[d]?.sectionIds.find(a=>b.includes(a));f&&h.set(c[d].entityId,(0,D.OX)(e,g.get(f)??"",void 0,void 0,c[d].entityId,a.originalFormRenderer))}let i=new Set(b);return{markdown:[d.chapters.map(a=>a.content).join("\n\n"),d.appendixMarkdown].filter(Boolean).join("\n\n"),issues:d.issues.filter(a=>!a.sectionId||i.has(a.sectionId)),renderedUnits:h}}catch(a){return{markdown:"",issues:[],renderedUnits:new Map,error:a instanceof Error?a.message:String(a)}}}({contract:a.contract,units:ah,outputPlacements:(0,d.rL)(a.tenderResponsePlan),originalFormRenderer:(0,d.iP)(a.tenderResponsePlan),sectionIds:ag,...a.sectionPlans?{sectionPlans:a.sectionPlans}:{}}),an=a.tenderResponsePlan&&JSON.parse(JSON.stringify(a.tenderResponsePlan)),ao=(0,y.tenderResponseProjection)(an,ag),ap=(0,y.tenderResponseBinding)(ao,ag),aq={};for(let a of b)aq[a.entity.id]=ah.filter(b=>{if(b.entityId===a.entity.id)return!1;let c=a.value,d=Array.isArray(c.sectionIds)?c.sectionIds.map(String):[];if(c.subsectionId&&b.unit.subsectionId===c.subsectionId&&b.sectionIds.some(a=>d.includes(a))||(Array.isArray(c.referencedCoverageItemIds)?c.referencedCoverageItemIds:[]).some(a=>b.unit.coverageItemIds?.includes(String(a))))return!0;let e=V([c.text,c.caption,c.rows,c.nodes,c.edges,c.notes]),f=aj.byUnitId.get(b.entityId);return e.some(a=>[...a.matchAll(/\{\{\s*(?:table|figure|carrier)\s*:\s*([^}]+?)\s*\}\}/gu)].some(a=>a[1]===b.entityId||a[1]===b.unit.id&&b.sectionIds.some(a=>d.includes(a)))||f&&a.includes(f.label))}).map(a=>({id:a.entityId,version:a.entityVersion})).sort((a,b)=>a.id.localeCompare(b.id));let ar=new Set(Object.values(aq).flatMap(a=>a.map(a=>a.id))),as=ah.filter(a=>ar.has(a.entityId)&&!ab.has(a.entityId));k.entities.push(...Object.values(aq).flat());let at=[...b.map(a=>({entityId:a.entity.id,value:a.value})),...as.map(a=>({entityId:a.entityId,value:a.unit}))],au=[...new Set(ag)].flatMap(b=>{let c=a.sectionPlans?.get(b);return c?[{planId:c.planId,sectionPlanHash:c.sectionPlanHash,sectionId:b,subsections:c.subsections.filter(a=>at.some(b=>b.value.subsectionId===a.subsectionId)).map(a=>({subsectionId:a.subsectionId,title:a.title,primaryCarrier:a.primaryCarrier,coverageItemIds:a.coverageItemIds,referencedCoverageItemIds:a.referencedCoverageItemIds,requiredOutputId:a.requiredOutputId??null,factKeys:a.factKeys,quantityKeys:a.quantityKeys,role:a.role??"content",contentContract:a.contentContract??null,writingOutline:a.writingOutline??[]})),directory:c.subsections.map(a=>({subsectionId:a.subsectionId,title:a.title,...a.requiredOutputId?{requiredOutputId:a.requiredOutputId}:{}}))}]:[]}),av=new Set(at.flatMap(a=>[...Array.isArray(a.value.coverageItemIds)?a.value.coverageItemIds:[],...Array.isArray(a.value.referencedCoverageItemIds)?a.value.referencedCoverageItemIds:[]]).map(String)),aw=new Set(at.map(a=>String(a.value.outputId??""))),ax=b.every(a=>a.value.subsectionId&&au.some(b=>b.subsections.some(b=>b.subsectionId===a.value.subsectionId)))&&ao?{...ao,sections:ao.sections.map(a=>{let b=a.contentContract,c=b?.coverageItems??[],d=c.filter(a=>av.has(String(a.id))),e=new Set(d.map(a=>String(a.text))),f=new Set(c.map(a=>String(a.text))),g=(a.requirements??[]).filter(a=>e.has(String(a.text))||!f.has(String(a.text))),h=(a.requiredOutputs??[]).filter(a=>aw.has(String(a.id))||au.some(b=>b.subsections.some(b=>b.requiredOutputId===a.id))),i=new Set(g.flatMap(a=>a.obligationId?[String(a.obligationId)]:[]));return{...a,requirements:g,requiredOutputs:h,...b?{contentContract:{...b,questions:g.map(a=>a.text),coverageItems:d,methodRequirements:(b.methodRequirements??[]).filter(a=>e.has(a)),methodPlan:{methods:(b.methodRequirements??[]).filter(a=>e.has(a))},outputForms:h.map(a=>({form:a.form,element:a.basis,allowed:a.allowed})),obligationIds:[...i],obligationSources:(b.obligationSources??[]).filter(a=>i.has(String(a.obligationId)))}}:{}}})}:ao,ay=(a,b)=>{let c=al.get(a)??b;return G({...c,text:"paragraph"===c.kind?null:c.text,..."paragraph"===c.kind?{renderedText:am.renderedUnits.get(a)??c.text}:{},unitEntityId:a})},az=b.flatMap(b=>{let c=(0,l.S2)(a.store).find(c=>c.value.reviewerId===(a.principal??"independent-review:"+a.store.identity.documentId)&&1===c.value.unitRefs.length&&c.value.unitRefs[0].id===b.entity.id&&(0,l.O4)(a.store,c.value,void 0,(0,l.IQ)(a.bidComposition,a.bidCompositionSources),an));if(!c)return[];if(c.value.reviewContinuation)return[{unitEntityId:b.entity.id,...c.value.reviewContinuation}];let d=W(b.value,a.contract).filter(a=>!c.value.levels.some(b=>b.criterionId===a));return d.length?[{unitEntityId:b.entity.id,basisHash:(0,r.Fu)([c.id,c.value.reviewInvocationId??"",c.value.levels]),criterionIds:d,priorLevels:c.value.levels.map(a=>({...a,reviewInvocationId:a.reviewInvocationId??c.value.reviewInvocationId}))}]:[]}),aA=G({documentId:a.store.identity.documentId,principal:a.principal??"independent-review:"+a.store.identity.documentId,promptVersion:l.dT,...a.bidComposition?{bidComposition:{spec:a.bidComposition,sources:a.bidCompositionSources??[],qualification:"frozen-input-not-professional-acceptance"}}:{},...ax?{tenderResponse:ax}:{},...a.structurePlan?{structurePlan:{planId:a.structurePlan.planId,planHash:a.structurePlan.planHash}}:{},...au.length?{sectionPlans:au}:{},reviewScope:{unitEntityIds:[...ab],currentUnitsOnly:!0,deferredUnits:ah.filter(a=>!ab.has(a.entityId)&&!as.some(b=>b.entityId===a.entityId)&&a.sectionIds.some(a=>ag.includes(a))).map(a=>({unitEntityId:a.entityId,version:a.entityVersion,subsectionId:a.unit.subsectionId??null,heading:a.unit.heading??null,caption:a.unit.caption??null,coverageItemIds:a.unit.coverageItemIds??[],outputId:a.unit.outputId??null}))},publicationIssues:am.issues.filter(a=>!a.unitId||ab.has(a.unitId)||as.some(b=>b.entityId===a.unitId)),relatedUnits:as.map(a=>({...ay(a.entityId,a.unit),version:a.entityVersion,reviewTask:"context-only"})),...am.error?{renderedSectionError:am.error}:{},units:b.map(b=>{let c=ay(b.entity.id,b.value),d=c.renderedText;return{unitEntityId:b.entity.id,version:b.entity.version,kind:c.kind,heading:c.heading??null,outputId:c.outputId??null,deliveryPlacement:c.deliveryPlacement??null,originalFormContractHash:c.originalFormContractHash??null,formFieldBindings:c.formFieldBindings??[],tableRowGroups:c.tableRowGroups??[],notes:c.notes??[],text:c.text??null,columns:c.columns??null,rows:c.rows??null,...d?{renderedText:d}:{},...void 0!==c.caption?{caption:c.caption}:{},...void 0!==c.layout?{layout:c.layout}:{},...void 0!==c.planChart?{planChart:c.planChart,...p.has(b.entity.id)?{planFigure:!0}:{}}:{},nodes:c.nodes??null,edges:c.edges??null,criterionIds:W(c,a.contract),coverageItemIds:c.coverageItemIds??[],referencedCoverageItemIds:c.referencedCoverageItemIds??[],...void 0!==c.decisionReason?{decisionReason:c.decisionReason}:{},...void 0!==c.carrierRevisionReason?{carrierRevisionReason:c.carrierRevisionReason}:{},subsectionId:c.subsectionId??null,blockId:c.blockId??null,planHash:c.planHash??null,sectionPlanHash:c.sectionPlanHash??null,standardCitations:c.standardCitations??[],contentContractHash:c.contentContractHash??null,claims:c.claims??[],implementations:c.implementations??[],references:c.references??[],assertions:c.assertions??[]}}),criteria:i,evidence:[...j.values()],responses:aa,existingFindings:ad,projectBasicInfo:(0,n.ZC)(a.project.facts),...az.length?{assessmentContinuation:az}:{},sourceCoverage:{unreferenced:S,unreferencedSummaries:Y,total:R.length,offset:N,nextOffset:U,sourcesTruncated:Z,sourcesWithoutExcerpt:$,missingOpinions:q.missingOpinions.filter(a=>af.has(a))},instruction:"逐条准则给出档位与证据;有缺陷写 findings;units仅含本次被审单元:段落renderedText是已解析正文引用的读者文本,只送一份;表图caption与结构字段按发布层编号,列/行/节点/关系/notes保留真实内容,不再重复发送整节正文和同一份HTML/mermaid。内部标记和装配前未编号不是正文缺陷;题注/引用问题以publicationIssues为准。relatedUnits只提供当前单元实际引用、共同覆盖或同小节片段的上下文,不给它们登记本次assessment。reviewScope.deferredUnits是其它单元的身份目录,不代表它们内容缺失;不要要求当前单元重写其职责。节级完整性另由全量计划和收口门核验,不能凭未送达原文认定其它单元合格或缺失。assessmentContinuation若存在,是同一单元版本和规则下的先前独审档位及待补准则;必须逐条补齐criterionIds并给真实证据,不要求作者改正文触发复审,程序保留先前独审来源。existingFindings 是本批单元上仍未关闭的原审查缺陷,**无论作者是否提供 responses,都必须逐条给出 retain 或 resolve**,遗漏视为本次审查未完成;复核须保留 issueId、单元和 key,只能处置本审查主体提出的问题。resolve 必须逐字引用本单元实际送达的正文或冻结引用内容(至少6字),并在 detail 说明如何满足原复验条件;作者声明、合成 key 或未送达文字不能代替关闭证据。evidence 中的 decision.entity 是所引已提交版本的内容;若带 omittedInternalLedger,表示该内部计量台账未进入审查证据,审查只核送达的阶段/里程碑/机械/材料/劳动力事实,不据此判缺失。certificate.evaluation 是原计算结果及引擎/输入身份,reads 是该证书实际验身读集;certificate.operationInputs若存在,是原编译作业在证书原读集中的完整历史实体;须核原method/continuityBasis、前序predecessors.basis、资源requirements.basis及原参数,不能用id/from/lag或声明字符串代替技术适用与来源充分判断;缺工程依据应如实列未测或具体缺陷。certificate.definitionInputs若存在,是这些原作业实际引用的日历与资源池完整历史定义;须核原日历basis、资源capacityBasis及名称/量纲/时间窗口的工程对象、用途、条件和来源充分性。编译窗口/容量、定义非空或数学有效均不代表依据已核定,不把原声明当专业认证。certificate.quantityInputs若存在,是原计算读集中的清单成员、原分配与工作包完整历史实体;originalEntries附这些成员的完整清单对象与项目特征(仅当今日条目与原冻结身份一致时才附)。须核工程对象、项目特征、计量单位与范围、分配份额及工作包范围;数量、id、单位或算式有效不代表对象相同、份额正确或工程适用,缺原对象应如实列未测或具体缺陷。须核对断言对象、用途、条件、量纲与计算范围,valid 仅表示依赖尚未失效,不代表专业适用、计算充分或全工程通过。planFigure=true表示该图由项目执行基准直接渲染(总进度计划横道图/里程碑网络图),不是局部证书图;须核其日期、里程碑与正文一致。图件的caption与layout是实际图题及作者拟定的相对区域/线路;须结合所引依据独立核对空间关系和适用性,relative-schematic不代表实测坐标、比例或已通过的施工布置。只对 sourceCoverage.unreferenced 里的文件给来源处置意见;同页的 unreferencedSummaries 给出每份来源的 sha256、标题、类型与正文摘录,每条意见的 evidence 必须逐字引用该来源摘要 excerpt 中的实际文字——引用不到就是没有依据,该来源保持未测。"+(null===U?"":"本页之后仍有未引用来源:作者会带 sourceOffset 继续提交下一页。")+(au.length?"sectionPlans 是本批单元的冻结节计划:逐单元核 subsectionId 是否属于该节、heading 是否与计划小节标题一致、coverageItemIds 是否由正确小节主载、requiredOutputId 是否由正确形态的真实表/图承接;非点名输出的primaryCarrier/contentContract.carrier是编辑首选,有服务器记录的carrierRevisionReason、decisionReason及对位实现片段时可用更适合载体,不因首选形态差异单独判缺陷;计划外标题/小节/输出、同一契约项多主载、必出输出缺失或段落替代都写具体缺陷。writingOutline 是小节的写作大纲:逐块核单元是否按块的主题/载体提交(blockId 认领),是否把多个互不统属的主题堆进同一段,是否漏写块;块只是组织手段,不按字数判缺陷。":"")+"**写作质量维度**(按具体块/句子/单元格定位,不用“太长/表格太多”作 finding):①段落主题——每段只回答一个问题并有主题句;混写范围/措施/责任/验收的,指出应拆成哪些块。②载体匹配——表是可对照矩阵(行是同类对象、列是共同字段、单元格是值/条件/岗位/判据),不是把散文按行切开;并列项应列表;流程/关系/层次/空间/时序应图;段落承担判断/措施/理由/接口。③项目基本信息——第一章第一节正文开始部分必须有项目基本信息表,固定两列“项目/内容”,字段来自冻结事实(projectBasicInfo 给了字段名与值),缺失标“待核”;不写口径/来源/核验状态第三列;表内项目名称/地点/范围/工期/质量等事实不得在正文重复。④去重——同一事实/要求/控制值只由一个主载体认领,其他位置引用表号/节号/结论;跨节重复同一要求写 finding。⑤逻辑顺序——先对象/判断,再措施/控制,再验收/责任/接口;顺序倒置写 finding。⑥信息密度——每句至少提供一个判断/条件/措施/控制值/验收/岗位/接口/风险/依据;套话、无依据因果、原文整段搬运作 finding。⑦依据——数字、标准、义务有当前来源;无依据因果或把规划摘要当原文写 finding。"+(a.bidComposition?"bidComposition为本运行冻结规则及来源,须独立核匿名、禁图/禁表、封面/附表和实际格式是否适用并满足;来源SHA、提取字段或声明不等于工程采用、语义判断或验收通过,未决适用性/澄清冲突须列具体缺陷。":"")+(ax?"tenderResponse 是本批章节的招标响应合同:逐条核 requirements 是否有实际正文/表/图回答,同text不同source须分别核原quote的对象/范围/条件,不按概括要求相同就合并为已满足;requiredOutputs 是否实际产出,allowed=false 的冲突如实列缺陷,不得静默省略;requiredOutputs.source保留原规划出处,须核完整quote的对象/范围/条件,同名元素的不同原出处不能合并为已满足。kind=outline缺fileBinding时filePath只是原声明;fileBinding仅记录该quote在本次冻结解析文件内的逐字匹配及原parsedSha256/quoteHash,不认证物理原件、专业解释或工程适用,也不授永久当前资格;原字、文件名或元数据非空均不等于真实来源充分/工程适用已核定,缺失时如实未测,不补猜来源。必守 mustNotInclude/globalRules(不复述清单全表、不单独写编制依据/规范目录、不出现系统内部词、不写通用空话、不跨节重复);重点难点须具备对象/约束或风险/后果/控制值/责任岗位/依据。":"")});e&&Y.length&&(aA.sourceApplicationContext=G({scope:"document",contractId:a.contract.id,sections:a.contract.sections.map(a=>({sectionId:a.id,title:a.title,chapterId:a.chapterId,responsibility:a.responsibility})),structure:a.structurePlan?.chapters.map(a=>({title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope.slice(0,240),coverageItemIds:a.coverageItemIds,requiredOutputs:a.requiredOutputs.map(a=>({outputId:a.outputId,element:a.element}))}))}))??[],tenderResponse:an?{globalRules:an.globalRules,sections:an.sections.map(a=>({sectionId:a.sectionId??"",title:a.title??"",requirements:(a.requirements??[]).map(a=>{let b=a.source&&"object"==typeof a.source?a.source:{},c=String(b.quote??"");return{text:String(a.text??""),...a.obligationId?{obligationId:String(a.obligationId)}:{},...b.filePath||b.page||b.clause?{source:{...b.filePath?{filePath:String(b.filePath)}:{},...b.page?{page:String(b.page)}:{},...b.clause?{clause:String(b.clause)}:{},...c?{quote:c.slice(0,400),...c.length>400?{quoteTruncated:!0}:{}}:{}}}:{}}}),requiredOutputs:(a.requiredOutputs??[]).map(a=>({outputId:a.id??null,form:a.form??null,element:a.basis??a.element??null,allowed:a.allowed??null,...a.obligationId?{obligationId:String(a.obligationId)}:{}}))}))}:null,reading:"本节不适用不等于全文不适用;对照 structure 的章节对象与 tenderResponse 的完整义务文本判断全篇相关性。source.quote 如带 quoteTruncated 只是原引文摘要截短,义务 text 与 source 定位仍在;摘录不是完整文件,无法排除相关性时查当前页来源原文,不得据首段缺失给 not-required。"})),e&&(aA.units=[],aA.relatedUnits=[],aA.criteria=[],aA.evidence=[],aA.reviewScope={scope:"document",currentUnitsOnly:!1},delete aA.sectionPlans,delete aA.tenderResponse,delete aA.existingFindings,delete aA.publicationIssues,delete aA.renderedSectionError,delete aA.assessmentContinuation,aA.instruction=O);let aB={policyVersion:o.pO,scopeHash:v,reviewed:Y,documentScope:Y.length?aA.sourceApplicationContext:null},aC=(0,r.xi)(k),aD=e?F([a.store.identity.documentId,a.contract.id,aA.principal,aB,l.dT,H,g,aA.structurePlan,aA.sourceApplicationContext,...a.bidComposition?[aA.bidComposition]:[]]):F([a.store.identity.documentId,a.contract.id,aA.principal,aA.units,aA.criteria,aA.evidence,aB,(0,r.Fu)(aA.assessmentContinuation??null),l.dT,H,g,aA.relatedUnits,{unitEntityIds:[...ab],currentUnitsOnly:!0},aq,aC,aA.publicationIssues,aA.structurePlan,aA.sectionPlans,ap,...a.bidComposition?[aA.bidComposition]:[],...ax?[ax]:[]]);return{context:aA,contextUnitRefs:aq,referenceReads:aC,referenceErrors:m,findingBasis:ac,requestConfigurationHash:g,frozenTenderResponsePlan:an,tenderBinding:ap,targetHash:F([aD,q.missingOpinions.filter(a=>af.has(a))]),responseHash:ae,requestKey:F([aD,aa]),unreferenced:S,criteria:i,sourceSummaries:Y,sourceCoverage:_}}(a,N),am=a.store.reviewInvocation(ah),an=a.store.reviewDispatch(ah),ao=am.response,ap=an.dispatch?.input.header??ao,aq=ap?.findingBasis??ad,ar=ap?.targetHash??af,as=ap?.responseHash??ag,at=ap?.inputHash??F([ar,as]),au=ap?.invocationId??`review-invocation:${a.runId}:${at.slice(0,24)}`,av=`review-invocation-${at.slice(0,32)}.json`,aw=()=>({units:N.map(a=>({id:a.entity.id,version:a.entity.version})),evidenceIds:Array.isArray(Z.evidence)?Z.evidence.map(a=>String(a.evidenceId??"")).filter(Boolean):[],sourceFiles:Object.keys(a.project.sources??{})}),ax=(b,c,d=!1,e=!1,f)=>{let g={version:"construction-review-invocation-v1",ok:!1,invocationId:au,principal:L,inputHash:at,targetHash:ar,responseHash:as,requestKey:ah,requestConfigurationHash:ae,units:N.map(a=>({id:a.entity.id,version:a.entity.version})),error:b,promptVersion:l.dT,attempt:1,...c?{modelIdentity:c}:{},...d?{retryable:!0}:{},...e?{split:!0}:{},readSet:aw(),toolCalls:0,...!1===a.includeSourceCoverage?{}:{sourceCoverage:al}};try{(0,q.tv)(a.artifactDir,`review-failure-${at.slice(0,16)}-${(0,j.randomUUID)()}.json`,{...g,...void 0!==f?{rawResponse:f}:{}},a.runId)}catch{}return g},ay=a=>a?`${a.provider}:${a.model}`:void 0,az=b=>{try{return(0,q.tv)(a.artifactDir,av,JSON.parse((0,r.V5)(b)),a.runId),b}catch(a){return{...ax(`审查回执文件发布失败(SQLite结果已保存):${a instanceof Error?a.message:String(a)}`,b.modelIdentity,!0),resultPersisted:!0}}};if(am.result){let b=a.store.inspectReviewResult(ah,b=>{if(!b.receipt)return!1;if("source-coverage"===a.reviewKind)return!0;if(!b.state?.reads||!b.state.findingHash)return!1;let{reads:c,findingHash:d}=b.state;return!(c.entities.some(b=>(a.store.entity(b.id)?.version??null)!==b.version)||c.groups.some(b=>a.store.group(b.key).version!==b.version))&&d===(0,r.Fu)(T(a.store,new Set(N.map(a=>a.entity.id))))&&(b.receipt.assessments??[]).every(b=>{let c=a.store.entity(b.assessmentId),d=c&&(0,l.fv)(c.value).value;return!!(d&&(0,l.O4)(a.store,d,void 0,Z.bidComposition?(0,r.Fu)(Z.bidComposition):void 0,_))})});if(!b?.current)return{...ax("REVIEW_RESULT_STALE:原结果已持久保存,但当前问题/档位/依赖状态已改变;不自动重审"),resultPersisted:!0};let c=b.result.receipt,d=(0,q.HM)(a.artifactDir,av,a.runId);if(!i().existsSync(d))return{...az(c),cached:!0};try{if(i().readFileSync(d,"utf8")!==(0,r.V5)(c))throw Error("原文件与SQLite原结果字节不一致")}catch(a){return{...ax(`REVIEW_RESULT_ARTIFACT_MISMATCH:${a instanceof Error?a.message:String(a)}`),cached:!0,resultPersisted:!0}}return{...c,cached:!0}}if(an.dispatch&&!an.ready)return ax(`REVIEW_DISPATCH_IN_FLIGHT:原请求仍由实际进程占有(${an.reason});不重派`);if(ac.length)return ax("REVIEW_REFERENCE_INVALID:"+ac.join(";"));let aA=G({documentId:Z.documentId,principal:Z.principal,promptVersion:Z.promptVersion,...Z.bidComposition?{bidComposition:Z.bidComposition}:{},...Z.tenderResponse?{tenderResponse:(0,y.tenderResponseForPrompt)(Z.tenderResponse)}:{},...Z.structurePlan?{structurePlan:Z.structurePlan}:{},...Z.sectionPlans?{sectionPlans:Z.sectionPlans}:{},projectBasicInfo:Z.projectBasicInfo,criteria:Z.criteria,instruction:Z.instruction}),aB=new Set(["documentId","principal","promptVersion","bidComposition","tenderResponse","structurePlan","sectionPlans","projectBasicInfo","criteria","instruction"]),aC=G(Object.fromEntries(Object.entries(Z).filter(([a])=>!aB.has(a)))),aD=ak.length?(0,z.yA)(aC):(0,z.dk)(aC),aE=X+"\n\n"+(0,z.dk)(aA),aF=aD.length+aE.length;try{(0,q.tv)(a.artifactDir,`review-input-breakdown-${at.slice(0,16)}-${(0,j.randomUUID)()}.json`,{runId:a.runId,requestKey:ah,inputHash:at,sourceCoverageOnly:S,unitCount:N.length,characters:{system:aE.length,variable:aD.length,total:aF,units:JSON.stringify(Z.units??[]).length,relatedUnits:JSON.stringify(Z.relatedUnits??[]).length,evidence:JSON.stringify(Z.evidence??[]).length,sectionPlans:JSON.stringify(Z.sectionPlans??[]).length,tenderResponse:JSON.stringify(Z.tenderResponse??null).length,sourceSummaries:JSON.stringify(ak).length,sourceApplicationContext:JSON.stringify(Z.sourceApplicationContext??null).length,existingFindings:JSON.stringify(Z.existingFindings??[]).length}},a.runId)}catch{}if(void 0!==a.budget.maxInputCharacters&&aF>a.budget.maxInputCharacters)return ax(`REVIEW_INPUT_BUDGET_EXCEEDED:本批 ${N.length} 个单元、${aF} 字符超过审查输入上限 ${a.budget.maxInputCharacters};未审单元:${N.map(a=>a.entity.id).join("、")}。`+(N.length>1?"程序会拆成更小批次重试。":ak.length&&!S?"本批来源覆盖转为独立审查;先核单元输入预算。":"单个审查输入仍超限;保持未审,不得用相同输入重复调用。"),void 0,N.length>1||!!(ak.length&&!S),N.length>1);let aG=ap?void 0:a.store.captureReadSnapshot({entityIds:[...N.map(a=>a.entity.id),...N.map(a=>(0,l.Fw)(L,[a.entity.id]))],groupKeys:[],context:{type:"independent-review",requestKey:ah}}).reads,aH=ap?.reads??(0,r.xi)({entities:[...aG.entities,...ab.entities],groups:[...aG.groups,...ab.groups]});if(N.some(a=>aH.entities.find(b=>b.id===a.entity.id)?.version!==a.entity.version))return ax("REVIEW_INPUT_VERSION_CHANGED:实际输入与读取快照不一致",void 0,!0);let aI=[{name:"submit_review_result",description:S?"提交来源覆盖续页结果:只写 sourceOpinions 来源处置意见;assessments/findings 留空。":"提交独立审查结果:逐单元逐准则档位、findings 与来源处置意见。",parameters:Y}];ak.length&&a.projectRoot&&aI.push({name:"read_review_source",description:"读取本页来源的冻结原文。offset为字符偏移;按nextOffset继续直至末页后方可判全文not-required。可同轮查多份资料。",parameters:{type:"object",additionalProperties:!1,required:["filePath"],properties:{filePath:{type:"string"},offset:{type:"integer",minimum:0}}}});let aJ=[...new Set(N.flatMap(a=>Array.isArray(a.value.sectionIds)?a.value.sectionIds.map(String):[]))],aK=an.dispatch,aL=b=>{let c=b.filter(a=>U(a.response,Y));if(new Set(c.map(a=>(0,r.Fu)(a.response))).size>1)throw Error("REVIEW_RAW_RESPONSE_AMBIGUOUS");let d=c[0];if(!d)return;let e=G({version:"review-response-observation-ref-v1",dispatchRequestKey:ah,observationIndex:d.observationIndex,rawResponseHash:(0,r.Fu)(d.response)});if(a.store.reviewInvocation(ah).response||a.store.recordReviewResponse(ah,e),ao?.version==="review-response-observation-ref-v1"&&(ao.dispatchRequestKey!==ah||ao.observationIndex!==d.observationIndex||ao.rawResponseHash!==(0,r.Fu)(d.response)))throw Error("REVIEW_RAW_RESPONSE_IDENTITY_MISMATCH");return d.response};try{if(b=aK?aL(a.store.reviewObservations(ah)):ao?.response,aK&&!b)return ax("REVIEW_DISPATCH_OUTCOME_UNKNOWN:原调用已退出,但无可采用原响应;不推断供应商结算,不自动重派")}catch(a){return ax(a instanceof Error?a.message:String(a))}if(!b){let b=a.store.reserveReviewDispatch(ah,a.runId,G({header:{invocationId:au,inputHash:at,targetHash:ar,responseHash:as,reads:aH,findingBasis:aq},request:{system:aE,messages:[{role:"user",content:aD}],tools:aI,requestConfigurationHash:ae}}));if(!b.acquired)return ax("REVIEW_DISPATCH_IN_FLIGHT:同一实际请求已经登记;不因换运行标签重派");aK=b.dispatch}let aM=(b,d)=>{try{let e=G(b),f="return"===d&&g&&(0,r.Fu)(g.response)===(0,r.Fu)(e)?g:a.store.recordReviewObservation(ah,aK.token,d,e);if(g=f,U(b,Y)){let b=a.store.reviewInvocation(ah).response;if(b){if(b.rawResponseHash!==(0,r.Fu)(f.response))throw Error("REVIEW_RAW_RESPONSE_IDENTITY_MISMATCH")}else a.store.recordReviewResponse(ah,G({version:"review-response-observation-ref-v1",dispatchRequestKey:ah,observationIndex:f.observationIndex,rawResponseHash:(0,r.Fu)(f.response)}))}c=void 0}catch(a){c=a}},aN=[{role:"user",content:aD}],aO=()=>a.caller({system:aE,messages:aN,tools:aI,requireToolCall:!0,temperature:0,taskKind:"agent-action",useProviderDefaultOutput:!0,diagnostics:a.diagnostics,signal:a.signal,onRawResponse:a=>{try{h=(0,r.Fu)(G(a)),aM(a,"callback")}catch(a){c=a}},actorId:au,callKind:"independent-review",...1===aJ.length?{sectionId:aJ[0]}:{},...a.maxTokens?{maxTokens:a.maxTokens}:{}}),aP=new Map,aQ=a=>{let b=ak.find(b=>b.filePath===a.filePath&&b.sha256===a.sha256);if(!b||"string"!=typeof a.text||!Number.isSafeInteger(a.start)||!Number.isSafeInteger(a.end)||!Number.isSafeInteger(a.total))return;let c=aP.get(b.filePath)??[];c.push({start:Number(a.start),end:Number(a.end),total:Number(a.total),text:a.text}),aP.set(b.filePath,c),b.excerpt+="\n"+a.text;let d=0;for(let a of[...c].sort((a,b)=>a.start-b.start)){if(a.start>d)break;d=Math.max(d,a.end)}d>=Number(a.total)&&(b.excerptTruncated=!1)};for(let b of a.store.reviewObservations(ah)){let a=b.response.sourceRead;a&&"object"==typeof a&&!Array.isArray(a)&&aQ(a)}let aR=b=>{let c=String(b.filePath??""),d=Number(b.offset??0),e=ak.find(a=>a.filePath===c);if(!e||!a.projectRoot||!Number.isSafeInteger(d)||d<0)throw Error("REVIEW_SOURCE_READ_SCOPE_INVALID");return(0,x.VD)(a.projectRoot,b=>{if(b.parsedFileFingerprint(c).sha256!==e.sha256)throw Error("REVIEW_SOURCE_READ_IDENTITY_CHANGED");let f=b.listChunks({relativePath:c}).map(a=>a.content).join("\n"),g=(a.budget.maxInputCharacters??Number.MAX_SAFE_INTEGER)-aE.length-JSON.stringify(aI).length-JSON.stringify(aN).length-8e3;if(g<256)throw Error("REVIEW_SOURCE_PAGE_BUDGET:本页原文已达容量,请先提交已核来源意见;未核来源保留下一页");let h=Math.min(f.length,d+Math.min(16e3,g));if(d>f.length)throw Error("REVIEW_SOURCE_READ_OFFSET_INVALID");return{filePath:c,sha256:e.sha256,start:d,end:h,total:f.length,text:f.slice(d,h),nextOffset:h<f.length?h:null}})},aS=!1;if(b)p=b;else try{for(let b=0;;b+=1){if(void 0!==a.budget.maxInputCharacters&&aE.length+JSON.stringify(aI).length+JSON.stringify(aN).length>a.budget.maxInputCharacters)throw Error("REVIEW_INPUT_BUDGET_EXCEEDED:续读上下文超过本页容量,不能带超大输入继续付费");(p=await aO())&&(c||h!==(0,r.Fu)(G(p)))&&aM(p,"return");let d=p?.toolCalls.filter(a=>"read_review_source"===a.name)??[];if(!d.length)break;if(p?.toolCalls.some(a=>"submit_review_result"===a.name))throw Error("REVIEW_SOURCE_READ_BEFORE_SUBMIT_REQUIRED");if(b>=7)throw Error("REVIEW_SOURCE_READ_LIMIT:本批读取仍未完成,保留未测来源,不能伪造通过");for(let b of(aN.push({role:"assistant",content:p?.content??"",toolCalls:p.toolCalls,...p?.thinkingContent===void 0?{}:{thinkingContent:p.thinkingContent}}),d)){let c;try{c=aR(JSON.parse(b.arguments)),a.store.recordReviewObservation(ah,aK.token,"return",G({sourceRead:c})),aQ(c)}catch(a){c={error:a instanceof Error?a.message:String(a)}}aN.push({role:"tool",toolCallId:b.id,content:JSON.stringify(c)})}}aS=!0,p&&(c||h!==(0,r.Fu)(G(p)))&&aM(p,"return")}catch(a){aS?c=a:v=a}finally{try{a.signal?.aborted&&a.diagnostics&&await (0,w.nc)(a.diagnostics),a.store.settleReviewDispatch(ah,aK.token,a.signal?.aborted?"cancelled":aS?"returned":"threw")}catch(a){c=a}}if(a.signal?.aborted)throw a.signal.reason??Error("REVIEW_CALL_CANCELLED_AFTER_PROMISE_EXIT");if(v){let a=v instanceof Error?v.message:String(v),b=N.length>1&&/参数 JSON 解析失败|JSON语法无效|REVIEW_RESULT_INVALID|submit_review_result/iu.test(a);return ax(a,void 0,b,b,p)}if(c)return ax(`REVIEW_RESPONSE_PERSISTENCE_FAILED:${c instanceof Error?c.message:String(c)}`,void 0,!1,!1,p);if(aK)try{p=aL(a.store.reviewObservations(ah))??p}catch(a){return ax(a instanceof Error?a.message:String(a))}if(p?.responseMetadata?.completed===!1||p?.responseMetadata?.protocolFailure)return ax("REVIEW_RESPONSE_INCOMPLETE:原响应未完成或协议失败,已保留原字,不登记审查结果",ay(p.responseMetadata),!1,N.length>1,p);let aT=p?.toolCalls.find(a=>"submit_review_result"===a.name);if(!aT)return ax("审查模型没有调用 submit_review_result(输出可能被截断);程序会拆成更小批次重试",ay(p?.responseMetadata),!1,N.length>1,p);try{let a=JSON.parse(aT.arguments),b=(0,k.validateJsonAgainstSchema)(a,Y);if(b.length)throw Error(`REVIEW_RESULT_INVALID:${b.join(";")}`);J=a}catch(a){return ax(a instanceof Error?a.message:String(a),ay(p?.responseMetadata),!0,N.length>1,p)}let aU=new Set(aj.map(a=>String(a.id))),aV=new Set(N.map(a=>a.entity.id)),aW=[];if(a.allowPartialAssessments){let a=new Set,b=J.assessments.flatMap(b=>{if(!aV.has(b.unitEntityId))return aW.push(`丢弃未知单元 ${b.unitEntityId} 的档位`),[];if(a.has(b.unitEntityId))return aW.push(`丢弃重复单元 ${b.unitEntityId} 的档位`),[];a.add(b.unitEntityId);let c=new Set,d=b.levels.flatMap(a=>{let b=aU.has(a.criterionId)?a.criterionId:aU.has(a.criterionId.replace(/\./gu,":"))?a.criterionId.replace(/\./gu,":"):void 0;return b?c.has(b)?(aW.push(`丢弃重复准则 ${b}`),[]):(c.add(b),[{...a,criterionId:b}]):(aW.push(`丢弃未知准则 ${a.criterionId}`),[])});return d.length?[{...b,levels:d}]:[]});J={...J,assessments:b}}else if(new Set(J.assessments.map(a=>a.unitEntityId)).size!==J.assessments.length||J.assessments.some(a=>!aV.has(a.unitEntityId))||J.assessments.some(a=>a.levels.some(a=>!aU.has(a.criterionId)))){let a=J.assessments.map(a=>a.unitEntityId).filter((a,b,c)=>c.indexOf(a)!==b),b=J.assessments.map(a=>a.unitEntityId).filter(a=>!aV.has(a)),c=[...new Set(J.assessments.flatMap(a=>a.levels.map(a=>a.criterionId)))].filter(a=>!aU.has(a));return ax(`审查结果包含未知单元、未知准则或重复单元:未知单元 ${b.join("、")||"无"};未知准则 ${c.slice(0,8).join("、")||"无"};重复单元 ${[...new Set(a)].join("、")||"无"}。允许的单元:${[...aV].join("、")};准则只能使用输入 criteria 中列出的 id。`,ay(p?.responseMetadata),!1,N.length>1,J)}let aX=new Set(J.assessments.map(a=>a.unitEntityId));if(!S&&!a.allowPartialAssessments&&J.assessments.length!==N.length)return ax("审查结果没有覆盖全部提交单元或包含未知准则",ay(p?.responseMetadata),!1,N.length>1,J);if(a.allowPartialAssessments&&!S&&0===J.assessments.length)return ax("审查结果没有任何单元档位:本次审查没有形成可登记结果",ay(p?.responseMetadata),!1,N.length>1,J);let aY=J.findings.filter(a=>!aV.has(a.unitEntityId));aY.length&&(J={...J,findings:J.findings.filter(a=>aV.has(a.unitEntityId))},aW.push(`丢弃 ${aY.length} 条指向未提交单元的 finding:${aY.slice(0,3).map(a=>a.unitEntityId).join("、")}`));let aZ=(J.sourceOpinions??[]).filter(a=>!ai.includes(a.filePath));aZ.length&&(J={...J,sourceOpinions:(J.sourceOpinions??[]).filter(a=>ai.includes(a.filePath))},aW.push(`丢弃 ${aZ.length} 条不在本页来源范围的处置意见:${aZ.slice(0,3).map(a=>a.filePath).join("、")}`));let a$=a=>a.assessments.flatMap(b=>{let c=b.levels.filter(a=>["usable","deficient"].includes(a.level)).map(a=>a.criterionId);if(!c.length)return[];let d=new Set(a.findings.filter(a=>a.unitEntityId===b.unitEntityId).flatMap(a=>a.criterionIds??[])),e=[...new Set(c.filter(a=>!d.has(a)))];return e.length?[{unitEntityId:b.unitEntityId,criterionIds:e}]:[]}),a_=a.correctDeficientFindings?a$(J):[];if(a_.length){try{let b=await a.caller({system:aE,messages:[{role:"user",content:[aD,"","## 上一次 submit_review_result 的参数(JSON)",aT.arguments,"","## 程序校验:以下准则判为 usable/deficient,但没有对应 finding",...a_.map(a=>`- 单元 ${a.unitEntityId}:${a.criterionIds.join("、")}`),"","请重新调用 submit_review_result 返回完整结果:assessments 与 sourceOpinions 原样保留;","为上述每个准则新增 finding,criterionIds 写明该准则;target 必须指向本单元实际 blockId/quote/rowId+columnKey;","并给出 severity/action/basis/preconditions/postconditions。不要删除原 findings。"].join("\n")}],tools:aI,requireToolCall:!0,temperature:0,taskKind:"agent-action",useProviderDefaultOutput:!0,diagnostics:a.diagnostics,signal:a.signal,actorId:au,callKind:"independent-review",...1===aJ.length?{sectionId:aJ[0]}:{}}),c=b?.toolCalls.find(a=>"submit_review_result"===a.name);if(c){let a=JSON.parse(c.arguments);if(!(0,k.validateJsonAgainstSchema)(a,M).length){let b=a.findings;if(Array.isArray(b)){let a=new Set(J.findings.map(a=>`${a.unitEntityId}\u0000${a.key}`));J={...J,findings:[...J.findings,...b.filter(b=>!a.has(`${b.unitEntityId}\u0000${b.key}`))]}}}}}catch{}(a_=a$(J)).length&&aW.push(`补齐后仍有 ${a_.length} 个单元的不足准则没有 finding:${a_.map(a=>`${a.unitEntityId}(${a.criterionIds.slice(0,4).join("、")})`).join(";")}`)}let a0=R(J.findings,N,a.sectionPlans);if(a0.length){let b=async b=>{try{var c;let d=await a.caller({system:aE,messages:[{role:"user",content:(c=aT.arguments,[aD,"","## 上一次 submit_review_result 的参数(JSON)",c,"","## 程序校验:以下 finding 缺少必需字段或定位无效",...b.map(a=>`- finding「${a.key}」(单元 ${a.unitEntityId}):${a.missing.join("、")}`),"","请重新调用 submit_review_result 返回**完整结果**:assessments、sourceOpinions 与 findings 的内容不得删减或改写;","只给上述 finding 补齐字段。字段要求:severity=blocking|advisory;action 取枚举值;","basis={kind,referenceId,quote?,verified?};target={blockId?} 或 {quote?} 或 {rowId+columnKey}(必须指向本单元实际写作块、句子或单元格);","preconditions 字符串数组;postconditions 至少一条可验证的修复条件。"].join("\n"))}],tools:aI,requireToolCall:!0,temperature:0,taskKind:"agent-action",useProviderDefaultOutput:!0,diagnostics:a.diagnostics,signal:a.signal,actorId:au,callKind:"independent-review",...1===aJ.length?{sectionId:aJ[0]}:{}}),e=d?.toolCalls.find(a=>"submit_review_result"===a.name);if(!e)return;let f=JSON.parse(e.arguments);if((0,k.validateJsonAgainstSchema)(f,M).length)return;let g=f.findings;if(!Array.isArray(g))return;let h=new Set(J.findings.map(a=>`${a.unitEntityId}\u0000${a.key}`)),i=new Set(g.map(a=>`${a.unitEntityId}\u0000${a.key}`));return h.size===i.size&&[...h].every(a=>i.has(a))?g:void 0}catch{return}},c=await b(a0);c&&(J={...J,findings:c});let d=R(J.findings,N,a.sectionPlans);if(d.length){let a=new Set(d.map(a=>a.index));J={...J,findings:J.findings.filter((b,c)=>!a.has(c))},K=d.map(a=>({unitEntityId:a.unitEntityId,key:a.key,missing:a.missing}))}}let a1=F(J),a2=Z.assessmentContinuation??[];for(let a of J.assessments){let b=a2.find(b=>b.unitEntityId===a.unitEntityId);if(!b)continue;let c=new Map(b.priorLevels.map(a=>[a.criterionId,a]));for(let b of a.levels)c.set(b.criterionId,{...b,reviewInvocationId:au});a.levels=[...c.values()]}let a3=new Map(N.map(b=>[b.entity.id,new Set(W(b.value,a.contract))])),a4=[];for(let b of J.assessments){let c=a3.get(b.unitEntityId)??new Set,d=new Set(b.levels.map(a=>a.criterionId)),e=[...c].filter(a=>!d.has(a));if(e.length){if(!a.allowPartialAssessments)return ax(`审查结果漏评单元 ${b.unitEntityId} 的准则:${e.join("、")}`,ay(p?.responseMetadata),!1,N.length>1,J);a4.push({unitEntityId:b.unitEntityId,criterionIds:e})}}if(a2.length&&a4.length)return ax("REVIEW_ASSESSMENT_CONTINUATION_INCOMPLETE:缺失准则续审仍未补齐,保留明确未测,不自动重派同一输入",ay(p?.responseMetadata));for(let a of J.assessments){let b=N.find(b=>b.entity.id===a.unitEntityId),c=b.value.originalFormContractHash,d=b.value.outputId;if(c){let e=a.originalFormReviews??[];if(1!==e.length||e[0].contractHash!==c||e[0].outputId!==d)return ax(`REVIEW_ORIGINAL_FORM_ASSESSMENT_INCOMPLETE:单元 ${b.entity.id} 须按当前原表逐项独立核对并返回 originalFormReviews`,ay(p?.responseMetadata));let f=V([b.value.caption,b.value.columns,b.value.rows,b.value.notes,b.value.nodes,b.value.edges,b.value.tableRowGroups]);if("met"===e[0].status&&!e[0].evidence.some(a=>f.some(b=>b.includes(a))))return ax(`REVIEW_ORIGINAL_FORM_EVIDENCE_REQUIRED:单元 ${b.entity.id} 缺实际填表证据`,ay(p?.responseMetadata))}else if(a.originalFormReviews?.length)return ax("REVIEW_ORIGINAL_FORM_UNKNOWN:本单元没有当前原格式契约,不能提交原表通过结论",ay(p?.responseMetadata));let e=b.value.claims??[],f=e.filter(b=>!a.claimReviews?.some(a=>a.claimId===b.id));if(f.length||(a.claimReviews??[]).some(a=>!e.some(b=>b.id===a.claimId)))return ax(`REVIEW_CLAIM_ASSESSMENT_INCOMPLETE:单元 ${b.entity.id} 的重要主张须逐项审查:${f.map(a=>a.id).join("、")}`,ay(p?.responseMetadata));for(let b of a.claimReviews??[])if("supported"===b.status){let a=e.find(a=>a.id===b.claimId).source??{},c=Z.evidence.find(b=>"string"==typeof a.evidenceId&&b.evidenceId===a.evidenceId||"string"==typeof a.entityId&&b.entityId===a.entityId||"string"==typeof a.certificateId&&b.certificateId===a.certificateId),d=c?.evidenceId?c.frozenValue:c?.kind==="decision"?c.entity?.value??c.entity:c?{evaluation:c.evaluation??null,operationInputs:c.operationInputs??null,definitionInputs:c.definitionInputs??null,quantityInputs:c.quantityInputs??null}:null;if(!c||!b.evidence.some(a=>V(d).some(b=>b.includes(a))))return ax(`REVIEW_CLAIM_SUPPORT_EVIDENCE_REQUIRED:主张 ${b.claimId} 的supported结论必须逐字引用实际送达依据`,ay(p?.responseMetadata))}}let a5=S?[]:N.map(a=>a.entity.id).filter(a=>!aX.has(a));if(!S){for(let a of J.findings){if(!a.action||!a.basis||!a.target)continue;let b=N.find(b=>b.entity.id===a.unitEntityId),c=Array.isArray(b.value.replaces)?b.value.replaces.map(a=>String(a.entityId)).sort()[0]:void 0,d=(0,e.L8)(c??b.entity.id,{action:a.action,basis:a.basis,target:a.target}),f=aq.map(a=>a.issue).find(a=>a.raisedBy===L&&a.scope.entityIds.includes(b.entity.id)&&(0,e.QX)(a)?.semanticId===d);f&&(a.issueId&&a.issueId!==f.id&&aW.push(`finding「${a.key}」的 issueId 与语义目标原缺陷不一致,已按原缺陷 ${f.id} 处理`),a.key=f.evidence.find(a=>a.startsWith("finding-key:")).slice(12),a.issueId=f.id,a.disposition&&"new"!==a.disposition||(a.disposition="retain"))}let a=aq.filter(a=>a.issue.raisedBy===L).map(a=>({key:a.issue.evidence.find(a=>a.startsWith("finding-key:"))?.slice("finding-key:".length)??"",unitEntityId:a.issue.scope.entityIds.find(a=>aV.has(a))??""})),b=new Set(J.findings.map(a=>`${a.unitEntityId}::${a.key}`)),c=a.filter(a=>!a.key||!a.unitEntityId||!b.has(`${a.unitEntityId}::${a.key}`));if(c.length){for(let a of c){let b=aq.find(b=>b.issue.scope.entityIds.includes(a.unitEntityId)&&b.issue.evidence.includes(`finding-key:${a.key}`))?.issue;b&&J.findings.push({key:a.key,issueId:b.id,unitEntityId:a.unitEntityId,title:b.title,detail:b.detail,disposition:"retain"})}aW.push(`审查遗漏 ${c.length} 条原缺陷,按 retain 保留`)}}try{if(!a.store.reviewInvocation(ah).response)return ax("REVIEW_ORIGINAL_RESPONSE_NOT_PERSISTED:无已验身原响应,不应用或重新派发",ay(p?.responseMetadata),!1,!1,p);let b=a.store.applyReviewResponse(ah,aH,()=>{let b;for(let b of Z.evidence)if("certificate"===b.kind&&!a.store.certificate(String(b.certificateId))?.valid)throw Error("REVIEW_REFERENCE_INVALID:原计算证书当前已失效");if((0,r.Fu)(aq)!==(0,r.Fu)(T(a.store,aV)))throw Error("REVIEW_FINDING_STATE_CHANGED");let c={actorId:L,memberIndices:[],sectionIds:a.contract.sections.map(a=>a.id)},d=(0,l.ze)({store:a.store,contract:{id:a.contract.id,criteria:a.contract.criteria.map(a=>({id:a.id}))},authority:c}),f=new Map;for(let b of(0,l.S2)(a.store))if(b.value.reviewerId===L&&(0,l.O4)(a.store,b.value))for(let a of b.value.unitRefs){let c=`${a.id}::${a.version}`,d=f.get(c)??new Set;for(let a of b.value.levels)d.add(a.criterionId);f.set(c,d)}let g=[],h=[],i=[],j=new Set;if(!S)for(let b of J.findings){let c=N.find(a=>a.entity.id===b.unitEntityId),d=String(c.value.responsibilityId??"");if(!d)throw Error(`单元 ${c.entity.id} 没有职责身份,不能登记 finding`);let k=`finding-key:${b.key}`,m=F([c.entity.id,b.key]);if(j.has(m)){h.push({unitEntityId:c.entity.id,key:b.key});continue}j.add(m);let n=a3.get(c.entity.id)??new Set,o=(b.criterionIds??[]).filter(a=>n.has(a)),p=(b.criterionIds??[]).filter(a=>!n.has(a)),q=function(a,b){let c=new Set(Array.isArray(a.sectionIds)?a.sectionIds.map(String):[]),d=new Set;for(let a of b?.sections??[])if(c.has(a.sectionId))for(let b of a.contentContract?.coverageItems??[])d.add(b.id);return d}(c.value,_),r=[...new Set((b.coverageItemIds??[]).filter(a=>q.has(a)))];if(!a.allowPartialAssessments&&p.length)throw Error("REVIEW_FINDING_CRITERION_DENIED");let s=o.length?o:(0,l.RL)(c.value,Array.isArray(c.value.sectionIds)?c.value.sectionIds.map(String):[],a.contract),t=aq.map(a=>a.issue).filter(a=>a.scope.entityIds.includes(c.entity.id)&&a.evidence.includes(k)&&(!b.issueId||a.id===b.issueId)),u=t.filter(a=>a.raisedBy===L);if(u.length>1)throw Error("REVIEW_FINDING_AMBIGUOUS");let v=u[0],w=b.disposition??"new",x=v?(0,e.QX)(v):void 0;if(!v&&b.severity&&b.action&&b.basis&&b.target&&b.postconditions?.length){let a=b.basis,d="evidence"===String(a.kind)?{...a,kind:"fact"}:a,f=d.quote?.trim()??"",g=c.value.sectionIds??[],h=Z.evidence.find(a=>a.evidenceId===d.referenceId||a.entityId===d.referenceId||a.certificateId===d.referenceId),i=_?.sections.filter(a=>g.includes(a.sectionId))??[],j=i.flatMap(a=>[...a.requirements.map(a=>a.source.quote),...a.requiredOutputs.flatMap(a=>a.source?[a.source.quote]:[])]),k=new Set([...q,...n,...i.flatMap(a=>a.requiredOutputs.map(a=>a.id))]),l="contract"===d.kind&&k.has(d.referenceId)&&f.length>0&&j.some(a=>a.includes(f)),m=["fact","technical","decision","certificate"].includes(d.kind)&&!!h&&("decision"===d.kind||"certificate"===d.kind||f.length>0&&V(h.frozenValue).some(a=>a.includes(f)))&&("technical"!==d.kind||!0===d.verified&&c.value.standardCitations?.some(a=>"verified"===a.verification)),o="blocking"===b.severity&&(l||m)?"blocking":"advisory";if(b.target.blockId);else if(b.target.rowId||b.target.columnKey){let a=c.value.rows?.find(a=>a.id===b.target.rowId)?.cells[b.target.columnKey??""];if(void 0===a)throw Error("REVIEW_FINDING_TARGET_INVALID")}else if(!b.target.quote||!String(c.value.text??"").includes(b.target.quote))throw Error("REVIEW_FINDING_TARGET_INVALID");let p=Array.isArray(c.value.replaces)?c.value.replaces.map(a=>String(a.entityId)).sort()[0]:void 0;x={version:"review-finding-contract-v1",semanticId:(0,e.L8)(p??c.entity.id,{action:b.action,basis:d,target:b.target}),severity:o,action:b.action,basis:d,target:b.target,preconditions:b.preconditions??[],postconditions:b.postconditions,...b.proposedText?.trim()?{proposedText:b.proposedText.trim()}:{}}}if(!v&&"new"===w){let a=f.get(`${c.entity.id}::${c.entity.version}`),d=(b.criterionIds??[]).filter(b=>!a?.has(b));if(a&&!d.length)throw Error(`REVIEW_NEW_FINDING_ON_REVIEWED_VERSION:单元 ${c.entity.id}@${c.entity.version} 已按当前审查口径审过,不能在未变化的版本上新开 finding。请对已有缺陷 retain/resolve;若上一轮漏审了某个准则,只能针对该未审准则开新 finding。该版本已审准则:${[...a].slice(0,8).join("、")}`)}if(!v&&t.length&&(b.issueId||"new"!==w))throw Error("REVIEW_FINDING_PRINCIPAL_DENIED");if(!v&&(b.issueId||"new"!==w)){let a=aq.filter(a=>a.issue.scope.entityIds.includes(c.entity.id)).map(a=>`${a.issue.evidence.find(a=>a.startsWith("finding-key:"))?.slice("finding-key:".length)??"?"}→${a.issue.id}`).slice(0,12);throw Error(`REVIEW_FINDING_NOT_FOUND:单元 ${c.entity.id} 没有与 finding key/issueId 匹配的原缺陷。本单元可复核的原缺陷:${a.join("、")||"无"}。新缺陷不要带 issueId,disposition 用 new;复核原缺陷须原样保留 findingKey 并带对应 issueId。`)}if("resolve"===w&&v){let d=function(a,b,c,d){let e=V([b.text,b.caption,b.columns,b.rows,b.nodes,b.edges,b.notes]),f=d&&Array.isArray(c.units)?c.units.find(a=>a.unitEntityId===d)?.renderedText:void 0;"string"==typeof f&&f&&e.push(f);let g=d&&Array.isArray(c.units)?c.units.find(a=>a.unitEntityId===d):void 0;g&&e.push(...V([g.caption,g.rows,g.notes]));let h=new Set([...Array.isArray(b.references)?b.references:[],...Array.isArray(b.assertions)?b.assertions.map(a=>a.reference):[]].filter(a=>a?.kind==="evidence").map(a=>a.evidenceId));for(let a of Array.isArray(c.evidence)?c.evidence:[])!0===a.found&&h.has(a.evidenceId)&&e.push(...V(a.frozenValue));return[...new Set(a.map(a=>a.trim()).filter(a=>a.length>=6&&!a.startsWith("finding-key:")&&e.some(b=>b.includes(a))))]}(b.evidence??[],c.value,Z,c.entity.id);if(!d.length){i.push({unitEntityId:c.entity.id,key:b.key,...s.length?{criterionIds:s}:{},reason:`resolve 必须逐字引用本单元实际送达的正文或冻结引用(至少 6 字),不能只写“已修改/已满足”。本单元正文开头:${String(c.value.text??c.value.caption??"").slice(0,80)}`});continue}let e=a.store.transitionIssue(v.id,{to:"resolved",by:L,note:b.detail,evidence:[...d,`reviewed-unit:${c.entity.id}@${c.entity.version}`]},`${au}:finding-resolve:${m}`);g.push({key:b.key,issueId:e.id,disposition:"resolve",unitEntityId:c.entity.id,criterionIds:s,title:v.title,detail:b.detail,...x?{contract:x}:{},...r.length?{coverageItemIds:r}:{},...p.length?{deniedCriterionIds:p}:{}});continue}if(v){g.push({key:b.key,issueId:v.id,disposition:"retain",unitEntityId:c.entity.id,criterionIds:s,title:v.title,detail:v.detail,...x?{contract:x}:{},...r.length?{coverageItemIds:r}:{},...p.length?{deniedCriterionIds:p}:{}});continue}let y=(Array.isArray(c.value.sectionIds)?c.value.sectionIds.map(String):[]).map(b=>a.sectionPlans?.get(b)?.sectionPlanHash).find(Boolean),z=a.store.openIssue({kind:"review-finding",title:b.title,detail:b.detail,scope:{entityIds:[c.entity.id],versions:{[c.entity.id]:c.entity.version}},evidence:[k,...y?[`section-plan:${y}`]:[],...r.map(a=>`coverage-item:${a}`),...x?[(0,e.fh)(x)]:[],...(b.evidence??[]).filter(a=>!a.startsWith("review-contract:"))],owner:d,raisedBy:L,blocks:x?.severity==="blocking",recheck:x?.postconditions.join(";")||"作者举证或修订后,由独立审查复核关闭"},`${au}:finding:${m}`);g.push({key:b.key,issueId:z.id,disposition:"new",unitEntityId:c.entity.id,criterionIds:s,title:b.title,detail:b.detail,...x?{contract:x}:{},...r.length?{coverageItemIds:r}:{},...p.length?{deniedCriterionIds:p}:{}})}let k=[],n=new Map(ak.map(a=>[a.filePath,a])),q=(J.sourceOpinions??[]).filter(a=>{var b;let c=n.get(a.filePath);return!!(c&&(b=a.evidence,c.excerpt.trim()&&b.some(a=>{let b=a.trim();return b.length>=6&&c.excerpt.includes(b)}))&&("not-required"!==a.verdict||!c.excerptTruncated))}),s=(J.sourceOpinions??[]).filter(a=>!q.includes(a)).map(a=>({filePath:a.filePath,verdict:a.verdict}));if(q.length)try{let b=(0,o.MJ)({store:a.store,project:a.project,contract:a.contract,authority:c}),d=b.prepareOpinions({filePaths:q.map(a=>a.filePath)}),e=b.proposeOpinions(d.id,{reviewerId:L,sourceReviewPolicyVersion:o.pO,reviewInvocationId:au,sourceSnapshotHash:(0,o.ik)(a.project),reviewedUnitRefs:N.map(a=>({id:a.entity.id,version:a.entity.version})),opinions:q.map(a=>({filePath:a.filePath,verdict:a.verdict,reason:a.reason,evidence:a.evidence})),note:J.note},`独立审查来源覆盖:${J.note}`,`${au}:source-opinions`),f=b.evaluateOpinions(e.id);if("valid"!==f.value.dataValidity||"valid"!==f.value.relatedConstraints)throw Error(`来源覆盖意见求值未通过:${f.value.issues.slice(0,3).map(a=>a.reason).join(";")}`);b.commit(e.id,`${au}:source-opinions-commit`),k=q.map(a=>({filePath:a.filePath,verdict:a.verdict}))}catch(a){b=`来源覆盖意见登记失败:${a instanceof Error?a.message:String(a)}`}let t=[];if(!S){let a=new Map;for(let b of J.findings){if("resolve"===b.disposition||!b.criterionIds?.length)continue;let c=a.get(b.unitEntityId)??new Set;for(let a of b.criterionIds)c.add(a);a.set(b.unitEntityId,c)}for(let b of i){if(!b.criterionIds?.length)continue;let c=a.get(b.unitEntityId)??new Set;for(let a of b.criterionIds)c.add(a);a.set(b.unitEntityId,c)}for(let b of J.assessments){let c=a.get(b.unitEntityId);if(c?.size)for(let a of b.levels)c.has(a.criterionId)&&("professional"===a.level||"strong"===a.level)&&(aW.push(`档位与未关闭 finding 不一致:单元 ${b.unitEntityId} 准则 ${a.criterionId} 从 ${a.level} 降为 usable(存在 retain/new finding 指向该准则)`),a.level="usable")}}if(!S)try{let a=d.prepareReviews(J.assessments.map(a=>({unitEntityIds:[a.unitEntityId],reviewContextUnitRefs:$[a.unitEntityId]??[]}))),b=ay(p?.responseMetadata),c=d.proposeReviews(a.id,J.assessments.map(a=>({reviewerId:L,reviewInvocationId:au,reviewPromptVersion:l.dT,...Z.bidComposition?{reviewBidCompositionHash:(0,r.Fu)(Z.bidComposition)}:{},...aa?{reviewTenderResponseBinding:aa}:{},...a2.find(b=>b.unitEntityId===a.unitEntityId)?{reviewContinuation:a2.find(b=>b.unitEntityId===a.unitEntityId)}:{},...b?{reviewModelIdentity:b}:{},unitEntityIds:[a.unitEntityId],reviewContextUnitRefs:$[a.unitEntityId]??[],levels:a.levels,...a.originalFormReviews?{originalFormReviews:a.originalFormReviews}:{},...a.claimReviews?{claimReviews:a.claimReviews}:{},note:J.note})),`独立审查:${J.note}`,`${au}:assessments`),e=d.evaluateReview(c.id);if("valid"!==e.value.dataValidity||"valid"!==e.value.relatedConstraints)throw Error(`审查档位求值未通过:${e.value.issues.slice(0,3).map(a=>a.reason).join(";")}`);for(let a of(d.commit(c.id,`${au}:assessments-commit`),J.assessments))t.push({unitEntityId:a.unitEntityId,assessmentId:(0,l.Fw)(L,[a.unitEntityId]),levels:a.levels.length})}catch(a){throw Error(`审查档位登记失败:${a instanceof Error?a.message:String(a)}`,{cause:a})}let u=String(N[0]?.value.responsibilityId??""),v=u?(0,m.ff)({store:a.store,contract:a.contract,responsibilityId:u,tenderResponsePlan:_,...Z.bidComposition?{expectedBidCompositionHash:(0,r.Fu)(Z.bidComposition)}:{}}):void 0,w=v?.round??0,x=(0,o.vx)(a.store,a.project,{documentHash:F(N.map(a=>[a.entity.id,a.entity.version]))}),y=al.cursor.sourceIds.filter(a=>!x.unreferenced.includes(a)||(al.cursor.completedSourceIds.includes(a)||k.some(b=>b.filePath===a))&&x.opinions.some(b=>b.filePath===a)&&!x.conflicts.includes(a)),z=al.cursor.sourceIds.filter(a=>!y.includes(a)),A={...al,cursor:{...al.cursor,completedSourceIds:y,offset:y.length},missingSourceIds:z,nextOffset:!1===a.includeSourceCoverage?al.nextOffset:z.length?y.length:null},B=(J.unitReplacement??[]).filter(a=>aV.has(a.unitEntityId)).filter(a=>{let b=N.find(b=>b.entity.id===a.unitEntityId);return b&&"paragraph"!==b.value.kind?(aW.push(`丢弃非段落单元的 unitReplacement:${a.unitEntityId}`),!1):!!b}),C={version:"construction-review-invocation-v1",ok:!0,invocationId:au,principal:L,...S?{reviewKind:"source-coverage"}:{},...S&&(J.assessments.length||J.findings.length)?{skippedSourcePageUnitOpinions:J.assessments.length+J.findings.length}:{},sourceReviewPolicyVersion:o.pO,applicationVersion:H,requestKey:ah,requestConfigurationHash:ae,inputHash:at,targetHash:ar,responseHash:as,units:N.map(a=>({id:a.entity.id,version:a.entity.version})),assessments:t,findings:g,reviewRound:w,...K?.length?{incompleteFindingNotes:K}:{},...h.length?{skippedDuplicateFindings:h}:{},...i.length?{rejectedResolves:i}:{},...aW.length?{reviewAdjustments:aW}:{},originalFormReviews:J.assessments.flatMap(a=>(a.originalFormReviews??[]).map(b=>({...b,unitEntityId:a.unitEntityId}))),...a5.length||a4.length?{missingAssessments:{unitEntityIds:a5,criteria:a4}}:{},...v?{revisionPlan:v}:{},sourceOpinions:k,...s.length?{ungroundedSourceOpinions:s}:{},...B.length?{unitReplacement:B}:{},...b?{sourceCoverageError:b}:{},note:J.note,promptVersion:l.dT,attempt:1,outputHash:a1,readSet:aw(),toolCalls:p?.toolCalls?.length??0,...!1===a.includeSourceCoverage?{}:{sourceCoverage:A},...ay(p?.responseMetadata)?{modelIdentity:ay(p?.responseMetadata)}:{},...p?.responseMetadata?.usageStatus?{usageStatus:p.responseMetadata.usageStatus}:{},...p?.responseMetadata?.usage?{usage:p.responseMetadata.usage}:{}},D=a.store.captureReadSnapshot({entityIds:aH.entities.map(a=>a.id),groupKeys:aH.groups.map(a=>a.key),context:{type:"applied-independent-review",requestKey:ah}});return G({receipt:C,state:{reads:D.reads,findingHash:(0,r.Fu)(T(a.store,aV))}})});return az(b.receipt)}catch(c){let a=c instanceof Error?c.message:String(c),b=!/REVIEW_NEW_FINDING_ON_REVIEWED_VERSION/u.test(a);return ax(`审查结果未能原子提交:${a}`,ay(p?.responseMetadata),b,!1,p)}}},45946:(a,b,c)=>{c.d(b,{_J:()=>o,zr:()=>n});var d=c(36690),e=c(10402),f=c(80154),g=c(745);let h=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase();function i(a,b,c={}){return{code:a,message:b,...c}}function j(a){return(0,g.Fu)({kind:"table-v1",columns:(a.columns??[]).map(a=>({key:a.key,title:h(a.title??""),unit:h(a.unit??"")})),rows:(a.rows??[]).map(a=>Object.fromEntries(Object.keys(a.cells??{}).sort().map(b=>[b,h(String(a.cells[b]??""))])))})}function k(a){return"table"===a?"table":"figure"}function l(a){return"paragraph"!==a.kind||!!a.outputId||(a.assertions?.length??0)>0||/\d/u.test(a.text??"")}function m(a){return`「${a.heading?.trim()||a.caption?.trim()||a.id}」`}function n(a){let b=[],c=[];if(!1!==a.requireFrozen){try{a.sourceDraftContracts?a.sourceDraftContracts.assertSourceDraft(a.structurePlan,a.sectionPlan.sectionId):(0,d.UW)(a.structurePlan)}catch(a){b.push(i("structure-plan-not-frozen",a instanceof Error?a.message:String(a)))}try{(0,e.aT)(a.sectionPlan)}catch(a){b.push(i("section-plan-not-frozen",a instanceof Error?a.message:String(a)))}}a.sectionPlan.structurePlanHash!==a.structurePlan.planHash&&b.push(i("section-plan-structure-mismatch","节计划不属于当前冻结的全局结构计划"));let n=a.structurePlan.chapters.flatMap(a=>a.sections).find(b=>b.sectionId===a.sectionPlan.sectionId);if(!n)return b.push(i("section-unknown",`节「${a.sectionPlan.sectionId}」不在全局结构计划里`)),{passed:!1,blocking:b,advisory:c};let o=new Map(a.sectionPlan.subsections.map(a=>[a.subsectionId,a])),p=new Map(n.requiredOutputs.map(a=>[a.outputId,a])),q=new Set(n.coverageItemIds),r=new Set([...a.sectionPlan.subsections.flatMap(a=>[...a.coverageItemIds,...a.referencedCoverageItemIds]),...q]);for(let d of a.submitted){let e=d.subsectionId?.trim();if(!e){b.push(i("subsection-id-required",`单元${m(d)}没有绑定计划小节 subsectionId`,{unitId:d.id}));continue}let g=o.get(e);if(!g){b.push(i("subsection-unknown",`单元${m(d)}绑定了计划外小节「${e}」`,{unitId:d.id,subsectionId:e}));continue}d.planHash!==a.structurePlan.planHash&&b.push(i("unit-plan-hash-mismatch",`单元${m(d)}的 planHash 与冻结全局计划不一致:planHash=${a.structurePlan.planHash};sectionPlanHash=${a.sectionPlan.sectionPlanHash}(两者不是同一个值,不要混用)`,{unitId:d.id,subsectionId:e,expected:a.structurePlan.planHash,observed:String(d.planHash??"空")})),d.sectionPlanHash!==a.sectionPlan.sectionPlanHash&&b.push(i("unit-section-plan-hash-mismatch",`单元${m(d)}的 sectionPlanHash 与冻结节计划不一致:sectionPlanHash=${a.sectionPlan.sectionPlanHash};planHash=${a.structurePlan.planHash}(两者不是同一个值,不要混用)`,{unitId:d.id,subsectionId:e,expected:a.sectionPlan.sectionPlanHash,observed:String(d.sectionPlanHash??"空")})),g.contentContract&&d.contentContractHash!==g.contentContract.hash&&b.push(i("unit-content-contract-mismatch",`单元${m(d)}内容契约身份与小节不一致`,{unitId:d.id,subsectionId:e,expected:g.contentContract.hash,observed:d.contentContractHash??"空"})),d.heading?.trim()&&d.heading.trim()!==g.title.trim()&&b.push(i("unit-heading-mismatch",`单元${m(d)}的标题与计划小节「${g.title}」不一致;不得自造标题`,{unitId:d.id,subsectionId:e}));let h=d.blockId?.trim(),j=g.writingOutline??[];if(h){let a=j.find(a=>a.blockId===h);a?(0,f.GO)(a.carrier)!==d.kind?b.push(i("writing-block-carrier-mismatch",`写作块「${h}」的载体是 ${a.carrier},单元${m(d)}却是 ${d.kind};列表块用段落单元、表/图块用对应形态`,{unitId:d.id,subsectionId:e,expected:(0,f.GO)(a.carrier),observed:d.kind})):"list"===a.carrier&&"paragraph"===d.kind&&(0,f.OS)(d.text)&&c.push(i("writing-block-list-format",`写作块「${h}」是列表载体,但段落没有用编号/项目符号行表达并列项`,{unitId:d.id,subsectionId:e})):b.push(i("writing-block-unknown",`单元${m(d)}认领的写作块「${h}」不在小节「${g.title}」的大纲里`,{unitId:d.id,subsectionId:e,observed:h}))}else j.length&&c.push(i("writing-block-unbound",`单元${m(d)}没有声明 blockId;当前小节有 ${j.length} 个写作块`,{unitId:d.id,subsectionId:e}));let n=d.coverageItemIds??[],s=d.referencedCoverageItemIds??[];for(let a of n)if(g.coverageItemIds.includes(a)||b.push(i("coverage-item-not-in-subsection",`单元${m(d)}主载的契约项「${a}」不属于计划小节「${g.title}」`,{unitId:d.id,subsectionId:e})),d.kind!==g.primaryCarrier)if(!g.requiredOutputId&&d.carrierRevisionReason?.trim()&&d.decisionReason?.trim()&&d.implementations?.some(b=>b.obligationId===a&&("paragraph"===d.kind?["method","acceptance"].includes(b.role):"data"===b.role)))c.push(i("realized-carrier-differs-from-plan",`单元${m(d)}按显式修订采用 ${d.kind},冻结编辑安排首选 ${g.primaryCarrier};义务与输出身份保持`,{unitId:d.id,subsectionId:e,expected:g.primaryCarrier,observed:d.kind}));else{let a=h?j.find(a=>a.blockId===h):void 0,c=g.requiredOutputId?p.get(g.requiredOutputId):void 0,f=!!(a&&a.carrier!==g.primaryCarrier);b.push(i("primary-carrier-kind-mismatch",`小节「${g.title}」的主载体首选 ${g.primaryCarrier},单元${m(d)}却是 ${d.kind};载体改变须显式修订理由、decisionReason与对位实现片段,点名输出不得改形态`,{unitId:d.id,subsectionId:e,...f?{hint:`本小节主载体为 ${g.primaryCarrier}${c?`,必出输出为「${c.element}」(${c.outputId})`:""};当前单元认领的是 ${a.carrier} 支撑块。主载契约项与 outputId 留给承接必出输出的 ${g.primaryCarrier} 单元;本段把 coverageItemIds 改为 referencedCoverageItemIds 引用,或补 carrierRevisionReason/decisionReason(点名输出不得改形态)。`}:{}}))}for(let a of s)r.has(a)||q.has(a)||b.push(i("referenced-coverage-unknown",`单元${m(d)}引用的契约项「${a}」不在本节计划里`,{unitId:d.id,subsectionId:e})),n.includes(a)&&b.push(i("coverage-item-role-conflict",`单元${m(d)}把契约项「${a}」同时当主载体和引用载体`,{unitId:d.id,subsectionId:e}));!l(d)||n.length||s.length||c.push(i("coverage-item-unbound",`单元${m(d)}是实质性内容,但没有认领或引用计划契约项`,{unitId:d.id,subsectionId:e}));let t="paragraph"===d.kind&&!d.outputId&&!n.length&&s.some(a=>g.coverageItemIds.includes(a));if(g.requiredOutputId&&!t){let a=h?j.find(a=>a.blockId===h):void 0,c=a&&a.carrier!==g.primaryCarrier?`当前单元认领的是 ${a.carrier} 支撑块;不要绑定 requiredOutputId,改用 referencedCoverageItemIds 引用主载体,或改用 ${g.primaryCarrier} 主载单元。`:`必须由承接必出输出的 ${g.primaryCarrier} 单元绑定 outputId=${g.requiredOutputId};若当前单元只是支撑说明,改用 referencedCoverageItemIds 并不绑定 outputId。`;d.outputId!==g.requiredOutputId&&b.push(i("output-binding-mismatch",`小节「${g.title}」必出输出是「${g.requiredOutputId}」,单元${m(d)}绑定的是「${d.outputId??"空"}」`,{unitId:d.id,subsectionId:e,outputId:g.requiredOutputId,hint:c}));let f=p.get(g.requiredOutputId);f&&d.kind!==k(f.form)&&b.push(i("output-carrier-kind-mismatch",`必出输出「${f.element}」必须用${"table"===f.form?"表":"图"}承接,单元${m(d)}是 ${d.kind}`,{unitId:d.id,subsectionId:e,outputId:f.outputId,hint:`必出输出只能由 ${"table"===k(f.form)?"表":"图"}单元承接;支撑段落改用 referencedCoverageItemIds,不要占用该 outputId。`})),"table"!==d.kind||d.columns?.length&&d.rows?.length||b.push(i("output-table-empty",`必出表「${f?.element??g.requiredOutputId}」没有真实表头/数据行`,{unitId:d.id,subsectionId:e,outputId:g.requiredOutputId})),"figure"===d.kind&&!d.planChart&&!d.layout&&((d.nodes?.length??0)<2||!d.edges?.length)&&b.push(i("output-figure-empty",`必出图「${f?.element??g.requiredOutputId}」没有真实节点/关系`,{unitId:d.id,subsectionId:e,outputId:g.requiredOutputId}))}else d.outputId&&!p.has(d.outputId)?b.push(i("output-id-unknown",`单元${m(d)}的 outputId「${d.outputId}」不在本节必出输出注册表`,{unitId:d.id,outputId:d.outputId})):d.outputId&&d.outputId!==g.requiredOutputId&&b.push(i("output-not-owned-by-subsection",`输出「${d.outputId}」不属于小节「${g.title}」`,{unitId:d.id,subsectionId:e,outputId:d.outputId}));"table"!==d.kind||d.outputId||(d.decisionReason??"").trim()||b.push(i("table-decision-reason-missing",`自选表${m(d)}没有说明为什么必须用表`,{unitId:d.id,subsectionId:e})),"figure"!==d.kind||d.outputId||(d.decisionReason??"").trim()||b.push(i("figure-decision-reason-missing",`自选图${m(d)}没有说明为什么必须用图`,{unitId:d.id,subsectionId:e}))}let s=new Map;for(let b of[...a.sectionUnits,...a.submitted])b.outputId&&s.set(b.outputId,[...s.get(b.outputId)??[],b.id]);for(let a of n.requiredOutputs){let c=new Set(s.get(a.outputId)??[]);c.size>1&&b.push(i("output-id-duplicate",`必出输出「${a.element}」由多个单元重复承接:${[...c].join("、")}`,{outputId:a.outputId}))}for(let d of a.sectionUnits){let a=d.subsectionId?o.get(d.subsectionId):void 0;d.subsectionId&&!a&&b.push(i("subsection-unknown",`既有单元${m(d)}绑定了计划外小节「${d.subsectionId}」`,{unitId:d.id})),a?.requiredOutputId&&d.outputId&&d.outputId!==a.requiredOutputId&&c.push(i("output-not-owned-by-subsection",`既有单元${m(d)}的输出不属于其小节「${a.title}」`,{unitId:d.id,subsectionId:a.subsectionId,outputId:d.outputId}))}let t=new Map;for(let b of[...a.sectionUnits,...a.submitted])t.set(b.id,b);let u=(a.otherUnits??[]).map(a=>a.unit);b.push(...(function(a,b,c=!0){let d=[],e=new Map,f=new Map,k=new Map;for(let[a,c]of Object.entries(b?.tableHashes??{}))e.set(a,c);for(let[a,c]of Object.entries(b?.figureHashes??{}))f.set(a,c);for(let[a,c]of Object.entries(b?.captions??{}))k.set(a,c);for(let b of a){if("table"===b.kind){let a=j(b),c=e.get(a);c&&c!==b.id?d.push(i("table-content-duplicate",`表${m(b)}与「${c}」内容相同:同一内容组只能有一个主表`,{unitId:b.id})):e.set(a,b.id)}if("figure"===b.kind){let a=function(a){let b=new Map((a.nodes??[]).map(a=>[a.id,h(a.label)])),c="string"==typeof a.figureSemantics?a.figureSemantics:null,d="string"==typeof a.graphLayout?a.graphLayout:null;return(0,g.Fu)({kind:"figure-v1",figureSemantics:c,graphLayout:d,planChart:a.planChart?.view??null,layout:a.layout?(0,g.Fu)(a.layout):null,nodes:(a.nodes??[]).map(a=>({label:h(a.label),group:h(a.group??""),lane:h(a.lane??"")})).sort((a,b)=>a.label.localeCompare(b.label)||a.group.localeCompare(b.group)||a.lane.localeCompare(b.lane)),edges:(a.edges??[]).map(a=>({from:b.get(a.from)??h(a.from),to:b.get(a.to)??h(a.to),label:h(a.label??"")})).sort((a,b)=>`${a.from}->${a.to}`.localeCompare(`${b.from}->${b.to}`))})}(b),c=f.get(a);c&&c!==b.id?d.push(i("figure-semantic-duplicate",`图${m(b)}与「${c}」语义相同:同一内容组只能有一个主图`,{unitId:b.id})):f.set(a,b.id)}if(c){let a="paragraph"===b.kind?"":h(b.caption??"");if(a){let c=k.get(a);c&&c!==b.id?d.push(i("caption-duplicate",`${"table"===b.kind?"表":"图"}题注「${b.caption}」与「${c}」重复`,{unitId:b.id})):k.set(a,b.id)}}}return d})([...u,...t.values()],a.lockedCarriers,!1!==a.dedupeCaptions).filter(b=>a.submitted.some(a=>a.id===b.unitId)).map(b=>({...b,sectionId:a.sectionPlan.sectionId})));let v=new Map;for(let a of t.values()){if("table"!==a.kind||!a.columns?.length)continue;let b=(0,g.Fu)({kind:"table-schema-v1",columns:(a.columns??[]).map(a=>({key:a.key,title:h(a.title??""),unit:h(a.unit??"")}))});v.set(b,[...v.get(b)??[],a])}for(let b of v.values()){if(b.length<2||new Set(b.map(j)).size<2)continue;let[d,...e]=b;for(let b of e)c.push(i("table-schema-duplicate",`表${m(b)}与表${m(d)}列结构相同(${(d.columns??[]).map(a=>a.title).filter(Boolean).join("|")});若属同一对照关系,应合并为一张表,把专业/单体/区段等拆分维度作为一列;若确属不同对照关系,请在 decisionReason 说明`,{unitId:b.id,sectionId:a.sectionPlan.sectionId}))}return{passed:0===b.length,blocking:b,advisory:c}}function o(a){let b=new Map;for(let c of[...a.sectionUnits,...a.submitted])b.set(c.id,c);let c=n({...a,submitted:[...b.values()],sectionUnits:[]}),d=[...c.blocking],e=[...c.advisory],f=new Map(a.sectionPlan.subsections.map(a=>[a.subsectionId,a])),g=new Map;for(let b of[...a.sectionUnits,...a.submitted])g.set(b.id,b);let h=[];for(let b of g.values()){if(!b.subsectionId){d.push(i("unit-subsection-missing",`生效单元${m(b)}没有绑定计划小节`,{unitId:b.id,sectionId:a.sectionPlan.sectionId}));continue}if(!f.has(b.subsectionId)){d.push(i("unit-subsection-unknown",`生效单元${m(b)}绑定了计划外小节「${b.subsectionId}」`,{unitId:b.id,subsectionId:b.subsectionId,sectionId:a.sectionPlan.sectionId}));continue}h.push(b)}let j=new Map;for(let a of h)a.subsectionId&&j.set(a.subsectionId,[...j.get(a.subsectionId)??[],a]);for(let b of a.sectionPlan.subsections){let a=j.get(b.subsectionId)??[];if(!a.length){d.push(i("subsection-unwritten",`计划小节「${b.title}」没有任何生效单元`,{subsectionId:b.subsectionId}));continue}a.some(a=>a.heading?.trim()===b.title.trim())||d.push(i("subsection-heading-missing",`计划小节「${b.title}」没有单元用该标题作小节标题`,{subsectionId:b.subsectionId}));let c=a.flatMap(a=>(a.coverageItemIds??[]).map(b=>({id:b,unitId:a.id})));for(let a of b.coverageItemIds){let e=c.filter(b=>b.id===a);e.length||d.push(i("subsection-coverage-missing",`计划小节「${b.title}」的契约项「${a}」没有主载体`,{subsectionId:b.subsectionId})),e.length>1&&d.push(i("subsection-coverage-duplicate",`计划小节「${b.title}」的契约项「${a}」有多个主载体:${e.map(a=>a.unitId).join("、")}`,{subsectionId:b.subsectionId}))}for(let a of c.map(a=>a.id))b.coverageItemIds.includes(a)||d.push(i("subsection-coverage-unknown",`小节「${b.title}」主载了计划外契约项「${a}」`,{subsectionId:b.subsectionId}));if(b.requiredOutputId){let c=a.filter(a=>a.outputId===b.requiredOutputId);c.length||d.push(i("subsection-output-missing",`计划小节「${b.title}」的必出输出「${b.requiredOutputId}」没有载体`,{subsectionId:b.subsectionId,outputId:b.requiredOutputId})),c.length>1&&d.push(i("subsection-output-duplicate",`计划小节「${b.title}」的必出输出「${b.requiredOutputId}」有多个载体`,{subsectionId:b.subsectionId,outputId:b.requiredOutputId}))}"transition"===b.role&&a.some(l)&&d.push(i("transition-substantive-content",`标题过渡小节「${b.title}」承载了实质内容`,{subsectionId:b.subsectionId}));let f=new Set(a.flatMap(a=>a.blockId?[a.blockId]:[]));for(let a of b.writingOutline??[])f.has(a.blockId)||e.push(i("writing-block-unwritten",`小节的写作块「${a.blockId}」还没有单元认领:${a.topic}`,{subsectionId:b.subsectionId}))}let k=a.structurePlan.chapters.flatMap(a=>a.sections).find(b=>b.sectionId===a.sectionPlan.sectionId);if(k){for(let a of k.coverageItemIds){let b=h.flatMap(b=>(b.coverageItemIds??[]).filter(b=>b===a).map(()=>b.id));b.length||d.push(i("section-coverage-missing",`本节契约项「${a}」没有主载体`,{sectionId:k.sectionId})),b.length>1&&d.push(i("section-coverage-duplicate",`本节契约项「${a}」有多个主载体:${b.join("、")}`,{sectionId:k.sectionId}))}for(let a of k.requiredOutputs){let b=h.filter(b=>b.outputId===a.outputId);b.length||d.push(i("section-output-missing",`本节必出输出「${a.element}」没有载体`,{sectionId:k.sectionId,outputId:a.outputId})),new Set(b.map(a=>a.id)).size>1&&d.push(i("section-output-duplicate",`本节必出输出「${a.element}」有多个载体`,{sectionId:k.sectionId,outputId:a.outputId}))}}return{passed:0===d.length,blocking:d,advisory:e}}},47523:(a,b,c)=>{c.d(b,{Sz:()=>p,u6:()=>o,AZ:()=>k});let d=JSON.parse('{"version":"construction-body-table-policy-v1","description":"正文表格的业务字段策略:内部出处/来源/文件/页码/条款号列不得进入投标正文;证据在写作单元的 assertions/references 中绑定。列名是通用审计词汇,不是项目常量。","forbiddenColumnTitles":["依据出处","依据来源","数据来源","参数来源","来源文件","文件路径","页码","页","条款号","清单条目","清单行号","核验状态","依据","出处","来源","文件","人数来源性质"],"forbiddenColumnSuffixes":["出处","来源文件","文件路径","页码","条款号","清单条目","清单行号","来源性质"],"internalValuePatterns":["(?:^|[/\\\\\\\\])[^/\\\\s]+\\\\.(?:pdf|docx?|xlsx?|dwg|txt)(?:$|[\\\\s,,;;])","第\\\\s*\\\\d+\\\\s*页","[a-f0-9]{64}","清单第\\\\s*\\\\d+\\\\s*行"]}'),e=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),f=d.forbiddenColumnTitles.map(e).filter(Boolean),g=d.forbiddenColumnSuffixes.map(e).filter(Boolean),h=d.internalValuePatterns.map(a=>RegExp(a,"u")),i=a=>{let b=e(a);return f.includes(b)||g.some(a=>b.endsWith(a))},j=a=>(a.rows??[]).flatMap(a=>Object.values(a.cells??{}).map(a=>String(a??"").trim())).filter(Boolean);function k(a){if("table"!==a.kind)return[];let b=[];for(let c of a.columns??[]){let d=String(c.title??"").trim();d&&i(d)&&b.push({code:"table-provenance-column",unitId:a.id,message:`表格「${a.caption??a.id}」的列「${d}」属于内部出处/来源信息,不得进入正文;来源写进单元 assertions/references,正文只保留业务列`})}let c=[a.caption??"",...j(a)].join("\n");return h.some(a=>a.test(c))&&b.push({code:"table-internal-identifier",unitId:a.id,message:`表格「${a.caption??a.id}」包含文件路径、页码或内部哈希,正文不得出现;改写到单元证据引用`}),b}let l=/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|t|kg|g|mm|cm|km|天|日|人|台|套|项|个|%|‰|亿元|万元|元)/giu,m=/(?:GB\s*\/\s*T|GB|JGJ|CJJ|DB|ISO|IEC)\s*\d/iu,n=a=>a.replace(/\s+/gu,"").toLowerCase();function o(a){let b=[],c=[],d=a.filter(a=>"table"===a.kind),e=a.filter(a=>"paragraph"===a.kind);if(!d.length||!e.length)return{blocking:b,advisory:c};for(let a of d){let d=j(a),f=new Set(d.flatMap(a=>[...a.matchAll(l)].map(a=>n(a[0])))),g=[...new Set(d.filter(a=>a.length>=8&&!/^\d+(?:\.\d+)?$/u.test(a)&&!m.test(a)))];for(let d of e){let e=d.text??"";if(!e.trim())continue;let h=[...f].filter(a=>e.replace(/\s+/gu,"").toLowerCase().includes(a)),i=g.filter(a=>e.includes(a));(function(a,b){if(RegExp(`\\{\\{\\s*table\\s*:\\s*${b.id.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}\\s*\\}\\}`,"u").test(a.text??""))return!0;let c=new Set([...a.coverageItemIds??[],...a.referencedCoverageItemIds??[]]),d=new Set([...b.coverageItemIds??[],...b.referencedCoverageItemIds??[]]);return[...c].some(a=>d.has(a))})(d,a)&&(i.length||h.length>=3)?b.push({code:"table-prose-restatement",unitId:d.id,...i.length?{observed:i[0],reference:`{{table:${a.id}}}`}:{},message:`段落「${d.heading??d.id}」复述了所引表「${a.caption??a.id}」已承载的${i.length?`内容「${i[0].slice(0,40)}」`:`${h.length} 个数值`};正文只保留判断、因果与接口,并用真实表号引用,不得重复表格内容`}):(h.length||i.length)&&c.push({code:"table-prose-restatement-suspected",unitId:d.id,message:`段落「${d.heading??d.id}」与表「${a.caption??a.id}」共享${i.length?"同一段表内文字":` ${h.length} 个数值`};若本段确实主载/引用该表,请改为表号引用;若只是同一工程事实,可保留`})}}return{blocking:b,advisory:c}}function p(a){let b=[],c=new Set,d=a.split(/\r?\n/u);for(let a=0;a<d.length-1;a+=1){let f=d[a].trim();if(!f.startsWith("|"))continue;let g=d[a+1].trim();if(g.startsWith("|")&&/[-:]/u.test(g)&&/^\|?[\s|:-]+\|?$/u.test(g))for(let a of f.replace(/^\||\|$/gu,"").split("|").map(a=>a.trim())){if(!a)continue;let d=e(a);i(a)&&!c.has(d)&&(c.add(d),b.push({code:"body-provenance-column",message:`正文表格出现内部出处/来源列「${a}」;来源信息不得进入交付正文`}))}}let f=a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/https?:\/\/[^\s)]+/gu,"").replace(/<\/?(?:table|thead|tbody|tr|th|td|caption|p)\b[^>]*>/giu,"");return h.some(a=>a.test(f))&&b.push({code:"body-internal-identifier",message:"正文出现文件路径、页码或内部哈希;这些只能留在运行证据中,不得进入交付正文"}),f.split(/\r?\n/u).some(a=>/表[ \t]*表[ \t]*\d|图[ \t]*图[ \t]*\d/u.test(a))&&b.push({code:"body-duplicated-carrier-word",message:"正文出现“表表/图图”重复词;引用只写一次“表/图”+编号"}),b}},54050:(a,b,c)=>{c.d(b,{az:()=>K,_1:()=>N,ly:()=>L,Z1:()=>M});var d=c(28013),e=c(85585),f=c(1623),g=c(78863),h=c(16208),i=c(45946),j=c(67931);let k=/^(?:合计|小计|总计|汇总|共计|总和|总额|总数量|总量|合价)$/u,l=/(?:合计|小计|总计|汇总|共计|总和|总额|总数量|总量|合价)/u,m=/其他|其余/u;function n(a){let b=String(a??"").replace(/[,,\s]/gu,"").trim();if(!b||/[—\-–]$/u.test(b)&&1===b.length)return;let c=/^(-?\d+(?:\.\d+)?)([^\d]*)$/u.exec(b);if(c)return{value:Number(c[1]),unit:c[2]??""}}function o(a,b){return Math.abs(a-b)<=Math.max(.01,1e-6*Math.abs(b))}function p(a){if("table"!==a.kind||!a.columns?.length||!a.rows?.length)return[];let b=a.columns,c=a=>b[a]?.title??"",d=(a,c)=>String(a.cells?.[b[c]?.key??""]??""),e=b.map((a,b)=>({column:a,index:b})).filter(a=>l.test(a.column.title??"")),f=a.rows.map((a,b)=>({row:a,index:b})).filter(a=>k.test(d(a.row,0).trim()));if(e.length>1||f.length>1)return[];let g=[],h=a.rows.filter((a,b)=>!f.some(a=>a.index===b));if(1===e.length){let h=e[0];for(let e of a.rows){if(f.some(a=>a.row===e))continue;let i=n(d(e,h.index));if(!i)continue;let j=b.map((a,b)=>({index:b,parsed:n(d(e,b))})).filter(a=>a.index!==h.index&&a.parsed);if(j.length<2)continue;let k=new Set(j.map(a=>a.parsed.unit).filter(Boolean));if(k.size>1||i.unit&&k.size&&!k.has(i.unit))continue;let l=j.reduce((a,b)=>a+b.parsed.value,0);o(l,i.value)||g.push({code:"table-arithmetic-conflict",rowLabel:d(e,0),column:c(h.index),message:`表「${a.caption??a.id}」行「${d(e,0)}」的${c(h.index)}为 ${i.value}${i.unit},分项和为 ${Number(l.toFixed(4))}${i.unit}`})}}if(1===f.length){let i=f[0];for(let f=1;f<b.length;f+=1){if(e.some(a=>a.index===f))continue;let b=n(d(i.row,f));if(!b)continue;let j=[],k=!1;for(let a of h){let b=d(a,0),c=n(d(a,f));c?j.push({...c,label:b}):m.test(b)&&(k=!0)}if(k||j.length<2)continue;let l=new Set(j.map(a=>a.unit).filter(Boolean));if(l.size>1||b.unit&&l.size&&!l.has(b.unit))continue;let p=j.reduce((a,b)=>a+b.value,0);o(p,b.value)||g.push({code:"table-arithmetic-conflict",rowLabel:d(i.row,0),column:c(f),message:`表「${a.caption??a.id}」列「${c(f)}」的分项和为 ${Number(p.toFixed(4))}${b.unit},${d(i.row,0)}为 ${b.value}${b.unit}`})}}return g}var q=c(47523),r=c(16669),s=c(36690);let t=/\d{1,3}(?:,\d{3})+(?:\.\d+)?|-?\d+(?:\.\d+)?/gu,u=/(?:GB\s*\/?\s*T?|JGJ\s*\/?\s*T?|CJJ|CJ|DL|SH|HG|JB|DB\s*\d{2}|ISO|IEC)\s*\d{2,5}(?:[.\-—]\d{1,4})?/giu,v=/第\s*\d+(?:\.\d+)*\s*(?:条|款|项|章|节|号)|[A-Za-z]{2,}\d{3,}/gu,w=/[×*]|系数|倍|%|‰|约|近|不(?:超过|低于|大于|小于)|[≤≥<>]/gu,x=/[表图]\s*\d+(?:[-—.]\d+)*/gu,y=/待核|拟定|待定|待确认|待核定/u;function z(a){if(/^\d+$/u.test(a))return Number(a);let b={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if(1===a.length)return b[a];if("十"===a)return 10;if(a.startsWith("十"))return void 0!==b[a[1]]?10+b[a[1]]:void 0;if(a.endsWith("十"))return void 0!==b[a[0]]?10*b[a[0]]:void 0;let[c,d]=[a[0],a[1]];if(c&&d&&void 0!==b[c]&&void 0!==b[d])return 10*b[c]+b[d]}let A=["项目经理","项目技术负责人","技术负责人","施工员","质量负责人","质量员","安全总监","专职安全员","安全员","材料员","资料员","测量员","试验员","机械员","计划工程师","预算员","劳资员","后勤管理员","保卫负责人","班组长","监理","总监","发包人","招标人","建设单位","设计单位"],B=/工作包|职责身份|证书范围|局部计算候选|timelineId|document-run-|工时节点|相对时间(/u,C=a=>a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),D=/(?:GB\s*\/\s*T|GB|JGJ\s*\/\s*T|JGJ|CJJ\s*\/\s*T|CJJ|CJ|DL\s*\/\s*T|DL|SH\s*\/\s*T|SH|HG\s*\/\s*T|HG|JB\s*\/\s*T|JB|DB\s*\d{2}\s*\/?\s*T?|ISO|IEC)\s*\d{2,5}(?:\s*[.\-—]\s*\d{1,4})*/giu,E=a=>a.replace(/\s+/gu,"").replace(/[.\-—]/gu,"").replace(/\//gu,"").toLowerCase(),F=/见[^。\n]{0,24}(?:表|图)|(?:表|图)\s*\d|(?:表|图)[一二三四五六七八九十]|\{\{\s*(?:carrier|table|figure)\s*:\s*[^}]+\}\}/u,G=/^(?:序号|编号|No\.?|编号\/序号|序号\/编号)$/iu,H=(a,b,c,d,e={})=>({severity:a,rule:b,message:c,hint:d,...e});function I(a){if("paragraph"===a.kind)return a.text??"";if("table"===a.kind){let b=a.columns??[],c=a.rows??[];return[a.caption??"","",`| ${b.map(a=>a.title).join(" | ")} |`,`| ${b.map(()=>"---").join(" | ")} |`,...c.map(a=>`| ${b.map(b=>String(a.cells?.[b.key]??"")).join(" | ")} |`)].join("\n")}return[a.caption??"",`![${a.caption??""}]()`,...(a.nodes??[]).map(a=>a.label),...(a.edges??[]).map(a=>a.label??"")].join("\n")}function J(a,b){let c=[];for(let d of(0,e.M)(a)){let a="typo-known-wrong-word"===d.code||"typo-variant-character"===d.code;c.push(H(a?"blocking":"advisory",d.code,d.message,a?"逐处改成正确写法后再提交;不要原样重提":"按提示优化;不阻断本次提交",{...b?{unitId:b}:{},...d.line?{location:`第 ${d.line} 行`}:{}}))}return c}function K(a,b,c){let d=a=>String(a??"").replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),e=new Set(["project-basic-source-invalid","sentence-duplicate","sentence-duplicate-within-unit","carrier-reference-missing","table-prose-restatement"]),f=b.filter(a=>a.unitId&&e.has(a.rule)&&("carrier-reference-missing"===a.rule&&a.expected||"sentence-duplicate-within-unit"===a.rule&&a.observed||a.observed&&a.expected)),g=c?b.filter(a=>a.rule.startsWith("project-basic")):[],h=c&&g.length?(0,r.Zk)(c.facts,c.projectName):[],i=g.find(a=>a.unitId)?.unitId??(h.length?a.find(a=>"table"===a.kind)?.id:void 0);if(!f.length&&!h.length)return null;let j=a.map(a=>{let b=h.length&&"table"===a.kind&&a.id===i?function(a,b){let c=JSON.parse(JSON.stringify(a)),d=Array.isArray(c.columns)?c.columns:[];if(d.length<2)return{unit:a,changed:!1};let e=d[0],f=d[1],g=new Map;for(let a of c.rows??[]){let b=a.cells;if(!b)continue;let c="string"==typeof b[e.key]?String(b[e.key]):"",d=(0,r.vI)(c);d&&!g.has(d)&&g.set(d,b)}let h=!1;for(let d of(c.rows??=[],b)){let b=g.get(d.key);if(!b){let b=`${a.id}:basic:${d.key}`;c.rows.some(a=>a.id===b)||c.rows.push({id:b,cells:{[e.key]:d.label,[f.key]:d.value}}),h=!0;continue}let i=String(b[f.key]??""),j="待核"===d.value?(0,r.w7)(i)?void 0:d.value:(0,r.CZ)(i,d.value)?void 0:d.value;void 0!==j&&(b[f.key]=j,h=!0)}return{unit:h?c:a,changed:h}}(a,h):void 0,c=f.filter(b=>b.unitId===a.id);if(!c.length&&!b?.changed)return{unit:b?.unit??a,changed:!!b?.changed};let e=JSON.parse(JSON.stringify(b?.changed?b.unit:a)),g=!!b?.changed;for(let b of c)if("project-basic-source-invalid"===b.rule&&"table"===a.kind)for(let a of e.rows??[])for(let c of Object.keys(a.cells??{})){let e=a.cells?.[c];"string"==typeof e&&d(e)===d(String(b.observed))&&(a.cells[c]=String(b.expected),g=!0)}else if("sentence-duplicate"===b.rule&&"paragraph"===a.kind&&"string"==typeof e.text){let a=String(b.observed).trim();if(!a)continue;let c=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=e.text.replace(RegExp(`(^|[。;;!?!?
38
+ 审查提示版本:${l.dT}`;function T(a,b,c=!1){return(0,e.bF)(a,[...b],c).sort((a,b)=>a.id.localeCompare(b.id)).map(b=>({issue:b,transitions:a.issueTransitions(b.id)}))}function U(a,b=M){if(!a||a.responseMetadata?.completed===!1||a.responseMetadata?.protocolFailure||!Array.isArray(a.toolCalls)||1!==a.toolCalls.length||"submit_review_result"!==a.toolCalls[0].name)return!1;let c=a.toolCalls.find(a=>"submit_review_result"===a.name);if(!c)return!1;try{return 0===(0,k.validateJsonAgainstSchema)(JSON.parse(c.arguments),b).length}catch{return!1}}function V(a){return"string"==typeof a?[a]:Array.isArray(a)?a.flatMap(V):a&&"object"==typeof a?Object.values(a).flatMap(V):[]}function W(a,b){let c=Array.isArray(a.criterionIds)?a.criterionIds.map(String):[];if(c.length)return c;let d=Array.isArray(a.sectionIds)?a.sectionIds.map(String):[];return b.criteria.filter(a=>d.includes(String(a.sectionId??""))).map(a=>a.id)}async function X(a){if(a={...a,diagnostics:a.diagnostics??(0,v.dS)()},a.signal?.aborted)throw a.signal.reason??Error("REVIEW_CALL_CANCELLED_BEFORE_DISPATCH");let b={...I,...a.budget??{}};if(void 0!==b.maxUnitsPerBatch&&(!Number.isSafeInteger(b.maxUnitsPerBatch)||b.maxUnitsPerBatch<1)||!Number.isSafeInteger(b.maxSourceFilesPerBatch)||b.maxSourceFilesPerBatch<1||void 0!==b.maxInputCharacters&&(!Number.isSafeInteger(b.maxInputCharacters)||b.maxInputCharacters<1e3))throw Error("REVIEW_INPUT_BUDGET_INVALID");let c=[...new Set(a.unitEntityIds.map(a=>String(a).trim()).filter(Boolean))].sort();if(!c.length)throw Error("REVIEW_UNITS_REQUIRED");let d=a.responses?.length?T(a.store,new Set(c),!0).map(a=>a.issue):[],e=(a.responses??[]).map(a=>{let b=d.filter(b=>b.evidence.includes("finding-key:"+a.findingKey)&&(!a.issueId||b.id===a.issueId)&&(!a.unitEntityId||b.scope.entityIds.includes(a.unitEntityId)));if(1!==b.length){if(b.length)throw Error("REVIEW_RESPONSE_FINDING_AMBIGUOUS");let c=d.filter(b=>!a.unitEntityId||b.scope.entityIds.includes(a.unitEntityId)).map(a=>a.evidence.find(a=>a.startsWith("finding-key:"))?.slice("finding-key:".length)??a.id).filter(Boolean).slice(0,12);throw Error(`REVIEW_RESPONSE_FINDING_NOT_FOUND:responses 引用的 findingKey「${a.findingKey}」${a.issueId?` / issueId「${a.issueId}」`:""}不在本批单元未关闭缺陷中;可用 findingKey:${c.join("、")||"无"}。`)}let e=b[0];if(!a.unitEntityId&&1!==e.scope.entityIds.filter(a=>c.includes(a)).length)throw Error("REVIEW_RESPONSE_FINDING_AMBIGUOUS");return{...a,issueId:e.id,unitEntityId:a.unitEntityId??e.scope.entityIds.find(a=>c.includes(a))}}),f=b=>{let c=a.store.entity(b)?.value,d=Array.isArray(c?.sectionIds)?String(c.sectionIds[0]??""):"",e="string"==typeof c?.subsectionId?c.subsectionId:"";return`${d}\u0000${e}`},g=new Map;for(let a of c)g.set(f(a),[...g.get(f(a))??[],a]);let h=[],i=[],j=b.maxUnitsPerBatch,k=()=>{i.length&&(h.push(i),i=[])};for(let a of g.values()){if(!j){i.push(...a);continue}if(a.length>j){k();for(let b=0;b<a.length;b+=j)h.push(a.slice(b,b+j));continue}i.length&&i.length+a.length>j&&k(),i.push(...a),i.length>=j&&k()}k();let m=[],n=!1!==a.includeSourceCoverage,p=async(c,d)=>{let f=await Y({...a,unitEntityIds:c,budget:b,responses:e.filter(a=>c.includes(a.unitEntityId)),...d?{}:{includeSourceCoverage:!1}});if(f.split&&c.length>1){let a=Math.ceil(c.length/2);await p(c.slice(0,a),d),await p(c.slice(a),!1);return}if(!f.ok&&"source-coverage"!==a.reviewKind&&d&&f.error?.startsWith("REVIEW_INPUT_BUDGET_EXCEEDED"))return void await p(c,!1);m.push(f)};for(let[a,b]of h.entries()){let c=n&&0===a;await p(b,c),c&&(n=!1)}if(1===m.length)return m[0];let q=m.flatMap(a=>a.units),r=m.every(a=>a.ok);return{version:"construction-review-invocation-v1",ok:r,sourceReviewPolicyVersion:o.pO,applicationVersion:H,invocationId:"review-invocation:"+a.runId+":"+F(m.map(a=>a.invocationId)).slice(0,24),principal:m[0].principal,inputHash:F(m.map(a=>a.inputHash)),targetHash:F(m.map(a=>a.targetHash)),responseHash:F(m.map(a=>a.responseHash)),units:q,assessments:m.flatMap(a=>a.assessments??[]),findings:m.flatMap(a=>a.findings??[]),sourceOpinions:m.flatMap(a=>a.sourceOpinions??[]),...m.some(a=>a.ungroundedSourceOpinions?.length)?{ungroundedSourceOpinions:m.flatMap(a=>a.ungroundedSourceOpinions??[])}:{},...m.some(a=>a.rejectedResolves?.length)?{rejectedResolves:m.flatMap(a=>a.rejectedResolves??[])}:{},...m.some(a=>a.reviewAdjustments?.length)?{reviewAdjustments:m.flatMap(a=>a.reviewAdjustments??[])}:{},...m.some(a=>a.incompleteFindingNotes?.length)?{incompleteFindingNotes:m.flatMap(a=>a.incompleteFindingNotes??[])}:{},...m.some(a=>a.skippedDuplicateFindings?.length)?{skippedDuplicateFindings:m.flatMap(a=>a.skippedDuplicateFindings??[])}:{},note:m.map(a=>a.note).filter(a=>!!a).join(";"),promptVersion:l.dT,attempt:1,...r?{}:{retryable:m.some(a=>a.retryable),error:m.filter(a=>!a.ok).map(a=>a.error).filter(Boolean).join(";")},readSet:{units:q,evidenceIds:[...new Set(m.flatMap(a=>a.readSet?.evidenceIds??[]))],sourceFiles:[...new Set(m.flatMap(a=>a.readSet?.sourceFiles??[]))]},toolCalls:m.reduce((a,b)=>a+(b.toolCalls??0),0),batchReceipts:m.map(a=>({invocationId:a.invocationId,inputHash:a.inputHash,ok:a.ok,units:a.units.map(a=>a.id),...a.error?{error:a.error}:{}})),...m.find(a=>a.sourceCoverage)?.sourceCoverage?{sourceCoverage:m.find(a=>a.sourceCoverage).sourceCoverage}:{},usage:1===m.length?m[0].usage:m.map(a=>a.usage)}}async function Y(a){let b,c,g,h,p,v,J,K,L=a.principal??"independent-review:"+a.store.identity.documentId,N=[...new Set(a.unitEntityIds.map(a=>String(a).trim()).filter(Boolean))].map(b=>{let c=a.store.entity(b);if(!c)throw Error(`REVIEW_UNIT_NOT_FOUND:${b}`);return{entity:c,value:function(a){if("writing-unit"!==a.kind||a.deleted||!a.value)throw Error(`REVIEW_UNIT_NOT_WRITING:${a.id}`);return a.value}(c)}});if(!N.length)throw Error("REVIEW_UNITS_REQUIRED");let S="source-coverage"===a.reviewKind,X=P(S),Y=Q(S);for(let a of N){let b="string"==typeof a.value.responsibilityId?a.value.responsibilityId:"";if(b&&b===L)throw Error(`REVIEW_PRINCIPAL_AUTHOR_DENIED:${L} 是单元 ${a.entity.id} 的作者,不能作为审查主体`)}let{context:Z,contextUnitRefs:$,frozenTenderResponsePlan:_,tenderBinding:aa,referenceReads:ab,referenceErrors:ac,findingBasis:ad,requestConfigurationHash:ae,targetHash:af,responseHash:ag,requestKey:ah,unreferenced:ai,criteria:aj,sourceSummaries:ak,sourceCoverage:al}=function(a,b){let c=function(a){let b=(0,s.frozenModelConfigurationForRun)(a.diagnostics);if(!b||!a.callKind||!b.models.active)return;let c="independent-review"===a.callKind?b.models.roles?.reviewer??b.models.active:b.models.active,d=b.models.list.find(a=>a.name===c.name&&a.provider===c.provider);if(!d||!b.providers[d.provider])return;let e=b.providers[d.provider];return u({version:"frozen-planning-single-model-v5",model:{name:d.name,provider:d.provider,thinking:d.thinking??"follow-task"},endpointHash:u([e.baseUrl,e.protocol,e.directEndpoint]),selectionRules:[t.f.toString()]})}({diagnostics:a.diagnostics,callKind:"independent-review"});if(!c)throw Error("REVIEW_FROZEN_MODEL_IDENTITY_REQUIRED");let e="source-coverage"===a.reviewKind,g=F({model:c,system:P(e),resultSchema:Q(e),promptReferences:z.HF,sourcePromptTables:A.Gf,parameters:{temperature:0,taskKind:"agent-action",requireToolCall:!0,useProviderDefaultOutput:!0,maxTokens:a.maxTokens??null}}),h=new Set(b.flatMap(a=>{let b=a.value;return Array.isArray(b.sectionIds)?b.sectionIds.map(String):[]})),i=a.contract.criteria.filter(a=>h.has(String(a.sectionId??""))).map(a=>G({id:a.id,sectionId:a.sectionId??null,chapterId:a.chapterId,description:a.description,dimension:a.dimension,applicable:a.applicable,...a.notApplicableReason?{notApplicableReason:a.notApplicableReason}:{}})),j=new Map,k={entities:[],groups:[]},m=[];for(let c of b)for(let b of[...Array.isArray(c.value.references)?c.value.references:[],...Array.isArray(c.value.assertions)?c.value.assertions.map(a=>a.reference??{}):[]])if("evidence"===b.kind&&"string"==typeof b.evidenceId){let c=function(a,b){return(a.sourceControls??[]).find(a=>a.factId===b&&"verified-source-excerpt"===a.roleId)}(a.project,b.evidenceId);j.set("evidence:"+b.evidenceId,G({evidenceId:b.evidenceId,quote:"string"==typeof b.quote?b.quote:null,frozenValue:c?.value??null,sourceFile:c?.sourceFile??null,sourceSpan:c?.sourceRef?.sourceSpan??null,found:!!c}))}else if("decision"===b.kind&&"string"==typeof b.entityId){let c=a.store.entity(b.entityId);if(!c||c.deleted||c.version!==b.entityVersion){m.push(`decision:${b.entityId}@${b.entityVersion} 当前缺失、已删除或已改版`);continue}k.entities.push({id:c.id,version:c.version});let d="document-execution-baseline"===c.id||c.value?.version==="construction-execution-baseline-v1"?G({...c,value:function(a){let b=Array.isArray(a.sharedMemberOwners)?a.sharedMemberOwners:[];return{...(0,B.PI)(a),..."string"==typeof a.origin?{origin:a.origin}:{},..."string"==typeof a.generatedAt?{generatedAt:a.generatedAt}:{},..."string"==typeof a.allocationBasis?{allocationBasis:a.allocationBasis}:{},..."string"==typeof a.allocationSetHash?{allocationSetHash:a.allocationSetHash}:{},..."string"==typeof a.workPackageSetHash?{workPackageSetHash:a.workPackageSetHash}:{},omittedInternalLedger:{field:"sharedMemberOwners",count:b.length,reading:"跨包成员归属是内部计量台账,不进入审查证据;审查只核单元实际引用的阶段/里程碑/机械/材料/劳动力事实,不据此判缺失。"}}}(c.value)}):c;j.set("decision:"+c.id,G({kind:"decision",entityId:c.id,entityVersion:c.version,entity:d}))}else if("certificate"===b.kind&&"string"==typeof b.certificateId){let c,d,e,g=a.store.certificate(b.certificateId);if(!g?.valid){m.push(`certificate:${b.certificateId} 当前缺失或已失效`);continue}if(k.entities.push(...g.reads.entities),k.groups.push(...g.reads.groups),j.has("certificate:"+b.certificateId))continue;let h=g.evaluation.value.result;if(h?.compilerVersion===f.wb){c=[];let f=h.compilation?.compiled?.jobs;if(Array.isArray(f))for(let d of f){let e=d?.id,f="string"==typeof e?g.reads.entities.find(a=>a.id===e):void 0,h=f?.version?a.store.entityVersion(f.id,f.version):void 0;if(!h||h.deleted||"construction-operation"!==h.kind){m.push(`certificate:${b.certificateId} 原读集作业 ${String(e)}@${f?.version??"unknown"} 内容不可用`);continue}c.some(a=>a.id===h.id)||c.push(h)}else m.push(`certificate:${b.certificateId} 原编译作业输入目录缺失`);d=[];let i=new Map,j=(a,c)=>{if("string"!=typeof a||!a.trim()||i.has(a)&&i.get(a)!==c)return void m.push(`certificate:${b.certificateId} 原作业定义引用 ${String(a)} 类型或身份不明`);i.set(a,c)};for(let a of c){j(a.value?.calendarId,"work-calendar");let c=a.value?.requirements;if(Array.isArray(c))for(let a of c)j(a?.resourcePoolId,"resource-pool");else m.push(`certificate:${b.certificateId} 原作业 ${a.id} 资源定义引用目录缺失`)}for(let[c,e]of[...i].sort(([a],[b])=>a.localeCompare(b))){let f=g.reads.entities.find(a=>a.id===c),h=f?.version?a.store.entityVersion(c,f.version):void 0;if(!h||h.deleted||h.kind!==e){m.push(`certificate:${b.certificateId} 原读集定义 ${c}@${f?.version??"unknown"} 内容不可用`);continue}d.push(h)}e=function(a,b,c,d,e,f){let g=new Map;for(let a of b.workPackages??[])for(let b of a.members??[]){if(!b?.id||!b.entry)continue;let a=G(b.entry),d=g.get(b.id);if(d&&(0,r.Fu)(d)!==(0,r.Fu)(a)){f.push(`certificate:${c} 当前清单成员 ${b.id} 对应不同条目`);continue}g.set(b.id,a)}let h=[],i=[],j=new Map;for(let b of d.entities){if(null===b.version)continue;let d=a.entityVersion(b.id,b.version);if(!d||d.deleted){f.push(`certificate:${c} 原读集实体 ${b.id}@${b.version} 内容不可用`);continue}j.set(b.id,d)}let k=(a,b)=>{("string"!=typeof a||j.get(a)?.kind!==b)&&f.push(`certificate:${c} 原依赖 ${String(a)} 缺少固定版本的 ${b} 内容`)};for(let a of e){k(a.value?.workPackageId,"work-package");let b=a.value?.components;if(Array.isArray(b))for(let a of b)k(a?.allocationId,"source-allocation");else f.push(`certificate:${c} 原作业 ${a.id} 缺少分配引用目录`)}for(let a of j.values())"source-allocation"===a.kind&&k(a.value?.memberId,"source-member");for(let a of j.values()){if(!["source-member","source-allocation","work-package"].includes(a.kind)||h.some(b=>b.id===a.id&&b.version===a.version)||(h.push(a),"source-member"!==a.kind))continue;let d="string"==typeof a.value?.memberId?a.value.memberId:a.id,e=g.get(d);if(!e){f.push(`certificate:${c} 原清单成员 ${d} 在当前冻结工作包中没有同一身份条目`);continue}let j=e.sourceFile,k="string"==typeof j?b.sourceVersionPolicy.sources[j]:void 0,l="string"==typeof j?b.sources[j]?.sha256:void 0,m=a.value?.sourceIdentity;if(a.value?.memberId!==a.id||a.value?.sourceFile!==j||a.value?.originalEntryHash!==(0,r.Fu)(e)||a.value.quantity!==e.quantity||a.value.unit!==e.unit||!k||l!==k.parsedSha256||m?.sourceSha256!==k.sourceSha256||m?.parsedSha256!==k.parsedSha256){f.push(`certificate:${c} 原清单成员 ${d} 的当前条目特征与原冻结身份不符`);continue}i.push({memberId:d,entry:e,sourceIdentity:a.value?.sourceIdentity??null})}return{entities:h,originalEntries:i}}(a.store,a.project,b.certificateId,g.reads,c,m)}j.set("certificate:"+b.certificateId,G({kind:"certificate",certificateId:b.certificateId,valid:g.valid,reads:g.reads,evaluation:g.evaluation,...c?{operationInputs:c,definitionInputs:d,quantityInputs:e}:{}}))}let p=new Set;for(let a of b)a.value.planChart&&p.add(a.entity.id);let q=(0,o.vx)(a.store,a.project,{documentHash:F(b.map(a=>[a.entity.id,a.entity.version]))}),v=(0,r.Fu)([a.store.workspaceId,a.sourceReviewScope??"document",o.pO]),w=(0,o.ik)(a.project),J=a.sourceCursor?.version==="source-review-cursor-v1"&&Array.isArray(a.sourceCursor.sourceIds)&&Array.isArray(a.sourceCursor.completedSourceIds)&&a.sourceCursor.sourceSnapshotHash===w&&a.sourceCursor.scopeHash===v?a.sourceCursor:void 0,K=[...new Set([...J?.sourceIds??[],...q.unreferenced])].filter(b=>!!a.project.sources[b]).sort(),L=K.filter(b=>!q.unreferenced.includes(b)||(!a.sourceCursor||J?.completedSourceIds.includes(b))&&q.opinions.some(a=>a.filePath===b)&&!q.conflicts.includes(b)),M=K.filter(a=>!L.includes(a)),N=a.sourceCursor?L.length:Math.max(0,Math.trunc(Number(a.sourceOffset??0))||0),R=a.sourceCursor?M:q.unreferenced,S=!1===a.includeSourceCoverage?[]:R.slice(a.sourceCursor?0:N,(a.sourceCursor?0:N)+a.budget.maxSourceFilesPerBatch),U=!1===a.includeSourceCoverage?R.length?N:null:(a.sourceCursor?S.length:N+S.length)<R.length?N+S.length:null,X={version:"source-review-cursor-v1",sourceSnapshotHash:w,scopeHash:v,sourceIds:K,completedSourceIds:L,offset:L.length},Y=function(a,b,c,d){if(!c.length)return[];let e=new Map((a.sourceVersionPolicy?.documents??[]).map(a=>[a.sourceFile,a])),f=new Map,g=new Map;if(b?.trim())try{(0,x.VD)(b,b=>{for(let d of c)try{let c=b.parsedFileFingerprint(d);if(c.sha256!==a.sources[d]?.sha256){g.set(d,"source-identity-mismatch");continue}let e=b.listChunks({relativePath:d,limit:3});f.set(d,{content:e.map(a=>a.content).join("\n"),chunksTruncated:c.chunks>e.length})}catch{g.set(d,"index-unavailable")}})}catch{for(let a of c)g.set(a,"index-unavailable")}return c.map(b=>{let c=e.get(b),h=c?.title?.trim()||b.split("/").at(-1)||b,i=f.get(b),j=(i?.content??"").trim(),k=j.slice(0,d);return{filePath:b,sha256:a.sources[b]?.sha256??"",title:h,sourceType:function(a,b){if(b||/补疑|补遗|答疑|澄清/u.test(a))return"clarification";if(/招标文件/u.test(a))return"tender";if(/清单|工程量/u.test(a)||/\.(?:xlsx?|csv)$/iu.test(a))return"bill-of-quantities";if(/图纸/u.test(a)||/\.(?:dwg|dxf)$/iu.test(a))return"drawing";let c=/\.([a-z0-9]+)$/iu.exec(a)?.[1]?.toLowerCase();return c?`document:${c}`:"other"}(b,c?.isClarification===!0),excerpt:k,excerptTruncated:!!i?.chunksTruncated||j.length>k.length,...!k?{excerptUnavailableReason:g.get(b)??(i?"no-text-excerpt":"index-unavailable")}:{}}})}(a.project,a.projectRoot,S,a.budget.maxSourceExcerptChars??I.maxSourceExcerptChars),Z=Y.filter(a=>a.excerptTruncated).length,$=Y.filter(a=>!a.excerpt).length,_={total:K.length,reviewed:S,offset:N,nextOffset:U,sourcesTruncated:Z,sourcesWithoutExcerpt:$,cursor:X,missingSourceIds:M},aa=a.responses??[],ab=new Set(b.map(a=>a.entity.id)),ac=T(a.store,ab),ad=ac.map(({issue:a})=>({findingKey:a.evidence.find(a=>a.startsWith("finding-key:"))?.slice("finding-key:".length)??"",issueId:a.id,unitEntityIds:a.scope.entityIds,reviewedVersions:a.scope.versions,principal:a.raisedBy,state:a.state,title:a.title,detail:a.detail,recheck:a.recheck,evidence:a.evidence.filter(a=>!a.startsWith("finding-key:"))})),ae=F([aa,aa.length?ad:[]]),af=new Set(S),ag=[...new Set(b.flatMap(a=>Array.isArray(a.value.sectionIds)?a.value.sectionIds.map(String):[]))],ah=function(a){let b,c=[];for(;;){let d=a.entityPage({groupKey:"writing-units",...b?{afterId:b}:{},limit:200});for(let a of d.entities){let b=(0,C.iC)(a);if(!b)continue;let d=a.value??{};c.push({unit:b,entityId:a.id,entityVersion:a.version,entityHash:(0,r.Fu)(a),responsibilityId:String(d.responsibilityId??""),purpose:String(d.purpose??""),sectionIds:Array.isArray(d.sectionIds)?d.sectionIds.map(String):[]})}if(!d.nextAfterId)break;b=d.nextAfterId}return c}(a.store),ai=ah.map(a=>({unit:a.unit,entityId:a.entityId,sectionIds:a.sectionIds})),aj=(0,E.ut)({contract:a.contract,units:ai}),ak=(0,E.Lz)({units:ai,carriers:aj}),al=new Map(ah.map((a,b)=>[a.entityId,ak.units[b]])),am=function(a){let b=[...new Set(a.sectionIds.filter(Boolean))];if(!b.length)return{markdown:"",issues:[],renderedUnits:new Map};let c=a.units.map(a=>({unit:a.unit,entityId:a.entityId,sectionIds:a.sectionIds}));try{let d=(0,D.V)({contract:a.contract,units:a.units,outputPlacements:a.outputPlacements,originalFormRenderer:a.originalFormRenderer,...a.sectionPlans?{sectionPlans:a.sectionPlans}:{},scopeSectionIds:b}),e=(0,E.ut)({contract:a.contract,units:c}),f=(0,E.Lz)({units:c,carriers:e}),g=new Map(a.contract.sections.map(a=>[a.id,a.title])),h=new Map;for(let[d,e]of f.units.entries()){let f=c[d]?.sectionIds.find(a=>b.includes(a));f&&h.set(c[d].entityId,(0,D.OX)(e,g.get(f)??"",void 0,void 0,c[d].entityId,a.originalFormRenderer))}let i=new Set(b);return{markdown:[d.chapters.map(a=>a.content).join("\n\n"),d.appendixMarkdown].filter(Boolean).join("\n\n"),issues:d.issues.filter(a=>!a.sectionId||i.has(a.sectionId)),renderedUnits:h}}catch(a){return{markdown:"",issues:[],renderedUnits:new Map,error:a instanceof Error?a.message:String(a)}}}({contract:a.contract,units:ah,outputPlacements:(0,d.rL)(a.tenderResponsePlan),originalFormRenderer:(0,d.iP)(a.tenderResponsePlan),sectionIds:ag,...a.sectionPlans?{sectionPlans:a.sectionPlans}:{}}),an=a.tenderResponsePlan&&JSON.parse(JSON.stringify(a.tenderResponsePlan)),ao=(0,y.tenderResponseProjection)(an,ag),ap=(0,y.tenderResponseBinding)(ao,ag),aq={};for(let a of b)aq[a.entity.id]=ah.filter(b=>{if(b.entityId===a.entity.id)return!1;let c=a.value,d=Array.isArray(c.sectionIds)?c.sectionIds.map(String):[];if(c.subsectionId&&b.unit.subsectionId===c.subsectionId&&b.sectionIds.some(a=>d.includes(a))||(Array.isArray(c.referencedCoverageItemIds)?c.referencedCoverageItemIds:[]).some(a=>b.unit.coverageItemIds?.includes(String(a))))return!0;let e=V([c.text,c.caption,c.rows,c.nodes,c.edges,c.notes]),f=aj.byUnitId.get(b.entityId);return e.some(a=>[...a.matchAll(/\{\{\s*(?:table|figure|carrier)\s*:\s*([^}]+?)\s*\}\}/gu)].some(a=>a[1]===b.entityId||a[1]===b.unit.id&&b.sectionIds.some(a=>d.includes(a)))||f&&a.includes(f.label))}).map(a=>({id:a.entityId,version:a.entityVersion})).sort((a,b)=>a.id.localeCompare(b.id));let ar=new Set(Object.values(aq).flatMap(a=>a.map(a=>a.id))),as=ah.filter(a=>ar.has(a.entityId)&&!ab.has(a.entityId));k.entities.push(...Object.values(aq).flat());let at=[...b.map(a=>({entityId:a.entity.id,value:a.value})),...as.map(a=>({entityId:a.entityId,value:a.unit}))],au=[...new Set(ag)].flatMap(b=>{let c=a.sectionPlans?.get(b);return c?[{planId:c.planId,sectionPlanHash:c.sectionPlanHash,sectionId:b,subsections:c.subsections.filter(a=>at.some(b=>b.value.subsectionId===a.subsectionId)).map(a=>({subsectionId:a.subsectionId,title:a.title,primaryCarrier:a.primaryCarrier,coverageItemIds:a.coverageItemIds,referencedCoverageItemIds:a.referencedCoverageItemIds,requiredOutputId:a.requiredOutputId??null,factKeys:a.factKeys,quantityKeys:a.quantityKeys,role:a.role??"content",contentContract:a.contentContract??null,writingOutline:a.writingOutline??[]})),directory:c.subsections.map(a=>({subsectionId:a.subsectionId,title:a.title,...a.requiredOutputId?{requiredOutputId:a.requiredOutputId}:{}}))}]:[]}),av=new Set(at.flatMap(a=>[...Array.isArray(a.value.coverageItemIds)?a.value.coverageItemIds:[],...Array.isArray(a.value.referencedCoverageItemIds)?a.value.referencedCoverageItemIds:[]]).map(String)),aw=new Set(at.map(a=>String(a.value.outputId??""))),ax=b.every(a=>a.value.subsectionId&&au.some(b=>b.subsections.some(b=>b.subsectionId===a.value.subsectionId)))&&ao?{...ao,sections:ao.sections.map(a=>{let b=a.contentContract,c=b?.coverageItems??[],d=c.filter(a=>av.has(String(a.id))),e=new Set(d.map(a=>String(a.text))),f=new Set(c.map(a=>String(a.text))),g=(a.requirements??[]).filter(a=>e.has(String(a.text))||!f.has(String(a.text))),h=(a.requiredOutputs??[]).filter(a=>aw.has(String(a.id))||au.some(b=>b.subsections.some(b=>b.requiredOutputId===a.id))),i=new Set(g.flatMap(a=>a.obligationId?[String(a.obligationId)]:[]));return{...a,requirements:g,requiredOutputs:h,...b?{contentContract:{...b,questions:g.map(a=>a.text),coverageItems:d,methodRequirements:(b.methodRequirements??[]).filter(a=>e.has(a)),methodPlan:{methods:(b.methodRequirements??[]).filter(a=>e.has(a))},outputForms:h.map(a=>({form:a.form,element:a.basis,allowed:a.allowed})),obligationIds:[...i],obligationSources:(b.obligationSources??[]).filter(a=>i.has(String(a.obligationId)))}}:{}}})}:ao,ay=(a,b)=>{let c=al.get(a)??b;return G({...c,text:"paragraph"===c.kind?null:c.text,..."paragraph"===c.kind?{renderedText:am.renderedUnits.get(a)??c.text}:{},unitEntityId:a})},az=b.flatMap(b=>{let c=(0,l.S2)(a.store).find(c=>c.value.reviewerId===(a.principal??"independent-review:"+a.store.identity.documentId)&&1===c.value.unitRefs.length&&c.value.unitRefs[0].id===b.entity.id&&(0,l.O4)(a.store,c.value,void 0,(0,l.IQ)(a.bidComposition,a.bidCompositionSources),an));if(!c)return[];if(c.value.reviewContinuation)return[{unitEntityId:b.entity.id,...c.value.reviewContinuation}];let d=W(b.value,a.contract).filter(a=>!c.value.levels.some(b=>b.criterionId===a));return d.length?[{unitEntityId:b.entity.id,basisHash:(0,r.Fu)([c.id,c.value.reviewInvocationId??"",c.value.levels]),criterionIds:d,priorLevels:c.value.levels.map(a=>({...a,reviewInvocationId:a.reviewInvocationId??c.value.reviewInvocationId}))}]:[]}),aA=G({documentId:a.store.identity.documentId,principal:a.principal??"independent-review:"+a.store.identity.documentId,promptVersion:l.dT,...a.bidComposition?{bidComposition:{spec:a.bidComposition,sources:a.bidCompositionSources??[],qualification:"frozen-input-not-professional-acceptance"}}:{},...ax?{tenderResponse:ax}:{},...a.structurePlan?{structurePlan:{planId:a.structurePlan.planId,planHash:a.structurePlan.planHash}}:{},...au.length?{sectionPlans:au}:{},reviewScope:{unitEntityIds:[...ab],currentUnitsOnly:!0,deferredUnits:ah.filter(a=>!ab.has(a.entityId)&&!as.some(b=>b.entityId===a.entityId)&&a.sectionIds.some(a=>ag.includes(a))).map(a=>({unitEntityId:a.entityId,version:a.entityVersion,subsectionId:a.unit.subsectionId??null,heading:a.unit.heading??null,caption:a.unit.caption??null,coverageItemIds:a.unit.coverageItemIds??[],outputId:a.unit.outputId??null}))},publicationIssues:am.issues.filter(a=>!a.unitId||ab.has(a.unitId)||as.some(b=>b.entityId===a.unitId)),relatedUnits:as.map(a=>({...ay(a.entityId,a.unit),version:a.entityVersion,reviewTask:"context-only"})),...am.error?{renderedSectionError:am.error}:{},units:b.map(b=>{let c=ay(b.entity.id,b.value),d=c.renderedText;return{unitEntityId:b.entity.id,version:b.entity.version,kind:c.kind,heading:c.heading??null,outputId:c.outputId??null,deliveryPlacement:c.deliveryPlacement??null,originalFormContractHash:c.originalFormContractHash??null,formFieldBindings:c.formFieldBindings??[],tableRowGroups:c.tableRowGroups??[],notes:c.notes??[],text:c.text??null,columns:c.columns??null,rows:c.rows??null,...d?{renderedText:d}:{},...void 0!==c.caption?{caption:c.caption}:{},...void 0!==c.layout?{layout:c.layout}:{},...void 0!==c.planChart?{planChart:c.planChart,...p.has(b.entity.id)?{planFigure:!0}:{}}:{},nodes:c.nodes??null,edges:c.edges??null,criterionIds:W(c,a.contract),coverageItemIds:c.coverageItemIds??[],referencedCoverageItemIds:c.referencedCoverageItemIds??[],...void 0!==c.decisionReason?{decisionReason:c.decisionReason}:{},...void 0!==c.carrierRevisionReason?{carrierRevisionReason:c.carrierRevisionReason}:{},subsectionId:c.subsectionId??null,blockId:c.blockId??null,planHash:c.planHash??null,sectionPlanHash:c.sectionPlanHash??null,standardCitations:c.standardCitations??[],contentContractHash:c.contentContractHash??null,claims:c.claims??[],implementations:c.implementations??[],references:c.references??[],assertions:c.assertions??[]}}),criteria:i,evidence:[...j.values()],responses:aa,existingFindings:ad,projectBasicInfo:(0,n.ZC)(a.project.facts),...az.length?{assessmentContinuation:az}:{},sourceCoverage:{unreferenced:S,unreferencedSummaries:Y,total:R.length,offset:N,nextOffset:U,sourcesTruncated:Z,sourcesWithoutExcerpt:$,missingOpinions:q.missingOpinions.filter(a=>af.has(a))},instruction:"逐条准则给出档位与证据;有缺陷写 findings;units仅含本次被审单元:段落renderedText是已解析正文引用的读者文本,只送一份;表图caption与结构字段按发布层编号,列/行/节点/关系/notes保留真实内容,不再重复发送整节正文和同一份HTML/mermaid。内部标记和装配前未编号不是正文缺陷;题注/引用问题以publicationIssues为准。relatedUnits只提供当前单元实际引用、共同覆盖或同小节片段的上下文,不给它们登记本次assessment。reviewScope.deferredUnits是其它单元的身份目录,不代表它们内容缺失;不要要求当前单元重写其职责。节级完整性另由全量计划和收口门核验,不能凭未送达原文认定其它单元合格或缺失。assessmentContinuation若存在,是同一单元版本和规则下的先前独审档位及待补准则;必须逐条补齐criterionIds并给真实证据,不要求作者改正文触发复审,程序保留先前独审来源。existingFindings 是本批单元上仍未关闭的原审查缺陷,**无论作者是否提供 responses,都必须逐条给出 retain 或 resolve**,遗漏视为本次审查未完成;复核须保留 issueId、单元和 key,只能处置本审查主体提出的问题。resolve 必须逐字引用本单元实际送达的正文或冻结引用内容(至少6字),并在 detail 说明如何满足原复验条件;作者声明、合成 key 或未送达文字不能代替关闭证据。evidence 中的 decision.entity 是所引已提交版本的内容;若带 omittedInternalLedger,表示该内部计量台账未进入审查证据,审查只核送达的阶段/里程碑/机械/材料/劳动力事实,不据此判缺失。certificate.evaluation 是原计算结果及引擎/输入身份,reads 是该证书实际验身读集;certificate.operationInputs若存在,是原编译作业在证书原读集中的完整历史实体;须核原method/continuityBasis、前序predecessors.basis、资源requirements.basis及原参数,不能用id/from/lag或声明字符串代替技术适用与来源充分判断;缺工程依据应如实列未测或具体缺陷。certificate.definitionInputs若存在,是这些原作业实际引用的日历与资源池完整历史定义;须核原日历basis、资源capacityBasis及名称/量纲/时间窗口的工程对象、用途、条件和来源充分性。编译窗口/容量、定义非空或数学有效均不代表依据已核定,不把原声明当专业认证。certificate.quantityInputs若存在,是原计算读集中的清单成员、原分配与工作包完整历史实体;originalEntries附这些成员的完整清单对象与项目特征(仅当今日条目与原冻结身份一致时才附)。须核工程对象、项目特征、计量单位与范围、分配份额及工作包范围;数量、id、单位或算式有效不代表对象相同、份额正确或工程适用,缺原对象应如实列未测或具体缺陷。须核对断言对象、用途、条件、量纲与计算范围,valid 仅表示依赖尚未失效,不代表专业适用、计算充分或全工程通过。planFigure=true表示该图由项目执行基准直接渲染(总进度计划横道图/里程碑网络图),不是局部证书图;须核其日期、里程碑与正文一致。图件的caption与layout是实际图题及作者拟定的相对区域/线路;须结合所引依据独立核对空间关系和适用性,relative-schematic不代表实测坐标、比例或已通过的施工布置。只对 sourceCoverage.unreferenced 里的文件给来源处置意见;同页的 unreferencedSummaries 给出每份来源的 sha256、标题、类型与正文摘录,每条意见的 evidence 必须逐字引用该来源摘要 excerpt 中的实际文字——引用不到就是没有依据,该来源保持未测。"+(null===U?"":"本页之后仍有未引用来源:作者会带 sourceOffset 继续提交下一页。")+(au.length?"sectionPlans 是本批单元的冻结节计划:逐单元核 subsectionId 是否属于该节、heading 是否与计划小节标题一致、coverageItemIds 是否由正确小节主载、requiredOutputId 是否由正确形态的真实表/图承接;非点名输出的primaryCarrier/contentContract.carrier是编辑首选,有服务器记录的carrierRevisionReason、decisionReason及对位实现片段时可用更适合载体,不因首选形态差异单独判缺陷;计划外标题/小节/输出、同一契约项多主载、必出输出缺失或段落替代都写具体缺陷。writingOutline 是小节的写作大纲:逐块核单元是否按块的主题/载体提交(blockId 认领),是否把多个互不统属的主题堆进同一段,是否漏写块;块只是组织手段,不按字数判缺陷。":"")+"**写作质量维度**(按具体块/句子/单元格定位,不用“太长/表格太多”作 finding):①段落主题——每段只回答一个问题并有主题句;混写范围/措施/责任/验收的,指出应拆成哪些块。②载体匹配——表是可对照矩阵(行是同类对象、列是共同字段、单元格是值/条件/岗位/判据),不是把散文按行切开;并列项应列表;流程/关系/层次/空间/时序应图;段落承担判断/措施/理由/接口。③项目基本信息——第一章第一节正文开始部分必须有项目基本信息表,固定两列“项目/内容”,字段来自冻结事实(projectBasicInfo 给了字段名与值),缺失标“待核”;不写口径/来源/核验状态第三列;表内项目名称/地点/范围/工期/质量等事实不得在正文重复。④去重——同一事实/要求/控制值只由一个主载体认领,其他位置引用表号/节号/结论;跨节重复同一要求写 finding。⑤逻辑顺序——先对象/判断,再措施/控制,再验收/责任/接口;顺序倒置写 finding。⑥信息密度——每句至少提供一个判断/条件/措施/控制值/验收/岗位/接口/风险/依据;套话、无依据因果、原文整段搬运作 finding。⑦依据——数字、标准、义务有当前来源;无依据因果或把规划摘要当原文写 finding。"+(a.bidComposition?"bidComposition为本运行冻结规则及来源,须独立核匿名、禁图/禁表、封面/附表和实际格式是否适用并满足;来源SHA、提取字段或声明不等于工程采用、语义判断或验收通过,未决适用性/澄清冲突须列具体缺陷。":"")+(ax?"tenderResponse 是本批章节的招标响应合同:逐条核 requirements 是否有实际正文/表/图回答,同text不同source须分别核原quote的对象/范围/条件,不按概括要求相同就合并为已满足;requiredOutputs 是否实际产出,allowed=false 的冲突如实列缺陷,不得静默省略;requiredOutputs.source保留原规划出处,须核完整quote的对象/范围/条件,同名元素的不同原出处不能合并为已满足。kind=outline缺fileBinding时filePath只是原声明;fileBinding仅记录该quote在本次冻结解析文件内的逐字匹配及原parsedSha256/quoteHash,不认证物理原件、专业解释或工程适用,也不授永久当前资格;原字、文件名或元数据非空均不等于真实来源充分/工程适用已核定,缺失时如实未测,不补猜来源。必守 mustNotInclude/globalRules(不复述清单全表、不单独写编制依据/规范目录、不出现系统内部词、不写通用空话、不跨节重复);重点难点须具备对象/约束或风险/后果/控制值/责任岗位/依据。":"")});e&&Y.length&&(aA.sourceApplicationContext=G({scope:"document",contractId:a.contract.id,sections:a.contract.sections.map(a=>({sectionId:a.id,title:a.title,chapterId:a.chapterId,responsibility:a.responsibility})),structure:a.structurePlan?.chapters.map(a=>({title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope.slice(0,240),coverageItemIds:a.coverageItemIds,requiredOutputs:a.requiredOutputs.map(a=>({outputId:a.outputId,element:a.element}))}))}))??[],tenderResponse:an?{globalRules:an.globalRules,sections:an.sections.map(a=>({sectionId:a.sectionId??"",title:a.title??"",requirements:(a.requirements??[]).map(a=>{let b=a.source&&"object"==typeof a.source?a.source:{},c=String(b.quote??"");return{text:String(a.text??""),...a.obligationId?{obligationId:String(a.obligationId)}:{},...b.filePath||b.page||b.clause?{source:{...b.filePath?{filePath:String(b.filePath)}:{},...b.page?{page:String(b.page)}:{},...b.clause?{clause:String(b.clause)}:{},...c?{quote:c.slice(0,400),...c.length>400?{quoteTruncated:!0}:{}}:{}}}:{}}}),requiredOutputs:(a.requiredOutputs??[]).map(a=>({outputId:a.id??null,form:a.form??null,element:a.basis??a.element??null,allowed:a.allowed??null,...a.obligationId?{obligationId:String(a.obligationId)}:{}}))}))}:null,reading:"本节不适用不等于全文不适用;对照 structure 的章节对象与 tenderResponse 的完整义务文本判断全篇相关性。source.quote 如带 quoteTruncated 只是原引文摘要截短,义务 text 与 source 定位仍在;摘录不是完整文件,无法排除相关性时查当前页来源原文,不得据首段缺失给 not-required。"})),e&&(aA.units=[],aA.relatedUnits=[],aA.criteria=[],aA.evidence=[],aA.reviewScope={scope:"document",currentUnitsOnly:!1},delete aA.sectionPlans,delete aA.tenderResponse,delete aA.existingFindings,delete aA.publicationIssues,delete aA.renderedSectionError,delete aA.assessmentContinuation,aA.instruction=O);let aB={policyVersion:o.pO,scopeHash:v,reviewed:Y,documentScope:Y.length?aA.sourceApplicationContext:null},aC=(0,r.xi)(k),aD=e?F([a.store.identity.documentId,a.contract.id,aA.principal,aB,l.dT,H,g,aA.structurePlan,aA.sourceApplicationContext,...a.bidComposition?[aA.bidComposition]:[]]):F([a.store.identity.documentId,a.contract.id,aA.principal,aA.units,aA.criteria,aA.evidence,aB,(0,r.Fu)(aA.assessmentContinuation??null),l.dT,H,g,aA.relatedUnits,{unitEntityIds:[...ab],currentUnitsOnly:!0},aq,aC,aA.publicationIssues,aA.structurePlan,aA.sectionPlans,ap,...a.bidComposition?[aA.bidComposition]:[],...ax?[ax]:[]]);return{context:aA,contextUnitRefs:aq,referenceReads:aC,referenceErrors:m,findingBasis:ac,requestConfigurationHash:g,frozenTenderResponsePlan:an,tenderBinding:ap,targetHash:F([aD,q.missingOpinions.filter(a=>af.has(a))]),responseHash:ae,requestKey:F([aD,aa]),unreferenced:S,criteria:i,sourceSummaries:Y,sourceCoverage:_}}(a,N),am=a.store.reviewInvocation(ah),an=a.store.reviewDispatch(ah),ao=am.response,ap=an.dispatch?.input.header??ao,aq=ap?.findingBasis??ad,ar=ap?.targetHash??af,as=ap?.responseHash??ag,at=ap?.inputHash??F([ar,as]),au=ap?.invocationId??`review-invocation:${a.runId}:${at.slice(0,24)}`,av=`review-invocation-${at.slice(0,32)}.json`,aw=()=>({units:N.map(a=>({id:a.entity.id,version:a.entity.version})),evidenceIds:Array.isArray(Z.evidence)?Z.evidence.map(a=>String(a.evidenceId??"")).filter(Boolean):[],sourceFiles:Object.keys(a.project.sources??{})}),ax=(b,c,d=!1,e=!1,f)=>{let g={version:"construction-review-invocation-v1",ok:!1,invocationId:au,principal:L,inputHash:at,targetHash:ar,responseHash:as,requestKey:ah,requestConfigurationHash:ae,units:N.map(a=>({id:a.entity.id,version:a.entity.version})),error:b,promptVersion:l.dT,attempt:1,...c?{modelIdentity:c}:{},...d?{retryable:!0}:{},...e?{split:!0}:{},readSet:aw(),toolCalls:0,...!1===a.includeSourceCoverage?{}:{sourceCoverage:al}};try{(0,q.tv)(a.artifactDir,`review-failure-${at.slice(0,16)}-${(0,j.randomUUID)()}.json`,{...g,...void 0!==f?{rawResponse:f}:{}},a.runId)}catch{}return g},ay=a=>a?`${a.provider}:${a.model}`:void 0,az=b=>{try{return(0,q.tv)(a.artifactDir,av,JSON.parse((0,r.V5)(b)),a.runId),b}catch(a){return{...ax(`审查回执文件发布失败(SQLite结果已保存):${a instanceof Error?a.message:String(a)}`,b.modelIdentity,!0),resultPersisted:!0}}};if(am.result){let b=a.store.inspectReviewResult(ah,b=>{if(!b.receipt)return!1;if("source-coverage"===a.reviewKind)return!0;if(!b.state?.reads||!b.state.findingHash)return!1;let{reads:c,findingHash:d}=b.state;return!(c.entities.some(b=>(a.store.entity(b.id)?.version??null)!==b.version)||c.groups.some(b=>a.store.group(b.key).version!==b.version))&&d===(0,r.Fu)(T(a.store,new Set(N.map(a=>a.entity.id))))&&(b.receipt.assessments??[]).every(b=>{let c=a.store.entity(b.assessmentId),d=c&&(0,l.fv)(c.value).value;return!!(d&&(0,l.O4)(a.store,d,void 0,Z.bidComposition?(0,r.Fu)(Z.bidComposition):void 0,_))})});if(!b?.current)return{...ax("REVIEW_RESULT_STALE:原结果已持久保存,但当前问题/档位/依赖状态已改变;不自动重审"),resultPersisted:!0};let c=b.result.receipt,d=(0,q.HM)(a.artifactDir,av,a.runId);if(!i().existsSync(d))return{...az(c),cached:!0};try{if(i().readFileSync(d,"utf8")!==(0,r.V5)(c))throw Error("原文件与SQLite原结果字节不一致")}catch(a){return{...ax(`REVIEW_RESULT_ARTIFACT_MISMATCH:${a instanceof Error?a.message:String(a)}`),cached:!0,resultPersisted:!0}}return{...c,cached:!0}}if(an.dispatch&&!an.ready)return ax(`REVIEW_DISPATCH_IN_FLIGHT:原请求仍由实际进程占有(${an.reason});不重派`);if(ac.length)return ax("REVIEW_REFERENCE_INVALID:"+ac.join(";"));let aA=G({documentId:Z.documentId,principal:Z.principal,promptVersion:Z.promptVersion,...Z.bidComposition?{bidComposition:Z.bidComposition}:{},...Z.tenderResponse?{tenderResponse:(0,y.tenderResponseForPrompt)(Z.tenderResponse)}:{},...Z.structurePlan?{structurePlan:Z.structurePlan}:{},...Z.sectionPlans?{sectionPlans:Z.sectionPlans}:{},projectBasicInfo:Z.projectBasicInfo,criteria:Z.criteria,instruction:Z.instruction}),aB=new Set(["documentId","principal","promptVersion","bidComposition","tenderResponse","structurePlan","sectionPlans","projectBasicInfo","criteria","instruction"]),aC=G(Object.fromEntries(Object.entries(Z).filter(([a])=>!aB.has(a)))),aD=ak.length?(0,z.yA)(aC):(0,z.dk)(aC),aE=X+"\n\n"+(0,z.dk)(aA),aF=aD.length+aE.length;try{(0,q.tv)(a.artifactDir,`review-input-breakdown-${at.slice(0,16)}-${(0,j.randomUUID)()}.json`,{runId:a.runId,requestKey:ah,inputHash:at,sourceCoverageOnly:S,unitCount:N.length,characters:{system:aE.length,variable:aD.length,total:aF,units:JSON.stringify(Z.units??[]).length,relatedUnits:JSON.stringify(Z.relatedUnits??[]).length,evidence:JSON.stringify(Z.evidence??[]).length,sectionPlans:JSON.stringify(Z.sectionPlans??[]).length,tenderResponse:JSON.stringify(Z.tenderResponse??null).length,sourceSummaries:JSON.stringify(ak).length,sourceApplicationContext:JSON.stringify(Z.sourceApplicationContext??null).length,existingFindings:JSON.stringify(Z.existingFindings??[]).length}},a.runId)}catch{}if(void 0!==a.budget.maxInputCharacters&&aF>a.budget.maxInputCharacters)return ax(`REVIEW_INPUT_BUDGET_EXCEEDED:本批 ${N.length} 个单元、${aF} 字符超过审查输入上限 ${a.budget.maxInputCharacters};未审单元:${N.map(a=>a.entity.id).join("、")}。`+(N.length>1?"程序会拆成更小批次重试。":ak.length&&!S?"本批来源覆盖转为独立审查;先核单元输入预算。":"单个审查输入仍超限;保持未审,不得用相同输入重复调用。"),void 0,N.length>1||!!(ak.length&&!S),N.length>1);let aG=ap?void 0:a.store.captureReadSnapshot({entityIds:[...N.map(a=>a.entity.id),...N.map(a=>(0,l.Fw)(L,[a.entity.id]))],groupKeys:[],context:{type:"independent-review",requestKey:ah}}).reads,aH=ap?.reads??(0,r.xi)({entities:[...aG.entities,...ab.entities],groups:[...aG.groups,...ab.groups]});if(N.some(a=>aH.entities.find(b=>b.id===a.entity.id)?.version!==a.entity.version))return ax("REVIEW_INPUT_VERSION_CHANGED:实际输入与读取快照不一致",void 0,!0);let aI=[{name:"submit_review_result",description:S?"提交来源覆盖续页结果:只写 sourceOpinions 来源处置意见;assessments/findings 留空。":"提交独立审查结果:逐单元逐准则档位、findings 与来源处置意见。",parameters:Y}];ak.length&&a.projectRoot&&aI.push({name:"read_review_source",description:"读取本页来源的冻结原文。offset为字符偏移;按nextOffset继续直至末页后方可判全文not-required。可同轮查多份资料。",parameters:{type:"object",additionalProperties:!1,required:["filePath"],properties:{filePath:{type:"string"},offset:{type:"integer",minimum:0}}}});let aJ=[...new Set(N.flatMap(a=>Array.isArray(a.value.sectionIds)?a.value.sectionIds.map(String):[]))],aK=an.dispatch,aL=b=>{let c=b.filter(a=>U(a.response,Y));if(new Set(c.map(a=>(0,r.Fu)(a.response))).size>1)throw Error("REVIEW_RAW_RESPONSE_AMBIGUOUS");let d=c[0];if(!d)return;let e=G({version:"review-response-observation-ref-v1",dispatchRequestKey:ah,observationIndex:d.observationIndex,rawResponseHash:(0,r.Fu)(d.response)});if(a.store.reviewInvocation(ah).response||a.store.recordReviewResponse(ah,e),ao?.version==="review-response-observation-ref-v1"&&(ao.dispatchRequestKey!==ah||ao.observationIndex!==d.observationIndex||ao.rawResponseHash!==(0,r.Fu)(d.response)))throw Error("REVIEW_RAW_RESPONSE_IDENTITY_MISMATCH");return d.response};try{if(b=aK?aL(a.store.reviewObservations(ah)):ao?.response,aK&&!b)return ax("REVIEW_DISPATCH_OUTCOME_UNKNOWN:原调用已退出,但无可采用原响应;不推断供应商结算,不自动重派")}catch(a){return ax(a instanceof Error?a.message:String(a))}if(!b){let b=a.store.reserveReviewDispatch(ah,a.runId,G({header:{invocationId:au,inputHash:at,targetHash:ar,responseHash:as,reads:aH,findingBasis:aq},request:{system:aE,messages:[{role:"user",content:aD}],tools:aI,requestConfigurationHash:ae}}));if(!b.acquired)return ax("REVIEW_DISPATCH_IN_FLIGHT:同一实际请求已经登记;不因换运行标签重派");aK=b.dispatch}let aM=(b,d)=>{try{let e=G(b),f="return"===d&&g&&(0,r.Fu)(g.response)===(0,r.Fu)(e)?g:a.store.recordReviewObservation(ah,aK.token,d,e);if(g=f,U(b,Y)){let b=a.store.reviewInvocation(ah).response;if(b){if(b.rawResponseHash!==(0,r.Fu)(f.response))throw Error("REVIEW_RAW_RESPONSE_IDENTITY_MISMATCH")}else a.store.recordReviewResponse(ah,G({version:"review-response-observation-ref-v1",dispatchRequestKey:ah,observationIndex:f.observationIndex,rawResponseHash:(0,r.Fu)(f.response)}))}c=void 0}catch(a){c=a}},aN=[{role:"user",content:aD}],aO=()=>a.caller({system:aE,messages:aN,tools:aI,requireToolCall:!0,temperature:0,taskKind:"agent-action",useProviderDefaultOutput:!0,diagnostics:a.diagnostics,signal:a.signal,onRawResponse:a=>{try{h=(0,r.Fu)(G(a)),aM(a,"callback")}catch(a){c=a}},actorId:au,callKind:"independent-review",...1===aJ.length?{sectionId:aJ[0]}:{},...a.maxTokens?{maxTokens:a.maxTokens}:{}}),aP=new Map,aQ=a=>{let b=ak.find(b=>b.filePath===a.filePath&&b.sha256===a.sha256);if(!b||"string"!=typeof a.text||!Number.isSafeInteger(a.start)||!Number.isSafeInteger(a.end)||!Number.isSafeInteger(a.total))return;let c=aP.get(b.filePath)??[];c.push({start:Number(a.start),end:Number(a.end),total:Number(a.total),text:a.text}),aP.set(b.filePath,c),b.excerpt+="\n"+a.text;let d=0;for(let a of[...c].sort((a,b)=>a.start-b.start)){if(a.start>d)break;d=Math.max(d,a.end)}d>=Number(a.total)&&(b.excerptTruncated=!1)};for(let b of a.store.reviewObservations(ah)){let a=b.response.sourceRead;a&&"object"==typeof a&&!Array.isArray(a)&&aQ(a)}let aR=b=>{let c=String(b.filePath??""),d=Number(b.offset??0),e=ak.find(a=>a.filePath===c);if(!e||!a.projectRoot||!Number.isSafeInteger(d)||d<0)throw Error("REVIEW_SOURCE_READ_SCOPE_INVALID");return(0,x.VD)(a.projectRoot,b=>{if(b.parsedFileFingerprint(c).sha256!==e.sha256)throw Error("REVIEW_SOURCE_READ_IDENTITY_CHANGED");let f=b.listChunks({relativePath:c}).map(a=>a.content).join("\n"),g=(a.budget.maxInputCharacters??Number.MAX_SAFE_INTEGER)-aE.length-JSON.stringify(aI).length-JSON.stringify(aN).length-8e3;if(g<256)throw Error("REVIEW_SOURCE_PAGE_BUDGET:本页原文已达容量,请先提交已核来源意见;未核来源保留下一页");let h=Math.min(f.length,d+Math.min(16e3,g));if(d>f.length)throw Error("REVIEW_SOURCE_READ_OFFSET_INVALID");return{filePath:c,sha256:e.sha256,start:d,end:h,total:f.length,text:f.slice(d,h),nextOffset:h<f.length?h:null}})},aS=!1;if(b)p=b;else try{for(let b=0;;b+=1){if(void 0!==a.budget.maxInputCharacters&&aE.length+JSON.stringify(aI).length+JSON.stringify(aN).length>a.budget.maxInputCharacters)throw Error("REVIEW_INPUT_BUDGET_EXCEEDED:续读上下文超过本页容量,不能带超大输入继续付费");(p=await aO())&&(c||h!==(0,r.Fu)(G(p)))&&aM(p,"return");let d=p?.toolCalls.filter(a=>"read_review_source"===a.name)??[];if(!d.length)break;if(p?.toolCalls.some(a=>"submit_review_result"===a.name))throw Error("REVIEW_SOURCE_READ_BEFORE_SUBMIT_REQUIRED");if(b>=7)throw Error("REVIEW_SOURCE_READ_LIMIT:本批读取仍未完成,保留未测来源,不能伪造通过");for(let b of(aN.push({role:"assistant",content:p?.content??"",toolCalls:p.toolCalls,...p?.thinkingContent===void 0?{}:{thinkingContent:p.thinkingContent}}),d)){let c;try{c=aR(JSON.parse(b.arguments)),a.store.recordReviewObservation(ah,aK.token,"return",G({sourceRead:c})),aQ(c)}catch(a){c={error:a instanceof Error?a.message:String(a)}}aN.push({role:"tool",toolCallId:b.id,content:JSON.stringify(c)})}}aS=!0,p&&(c||h!==(0,r.Fu)(G(p)))&&aM(p,"return")}catch(a){aS?c=a:v=a}finally{try{a.signal?.aborted&&a.diagnostics&&await (0,w.nc)(a.diagnostics),a.store.settleReviewDispatch(ah,aK.token,a.signal?.aborted?"cancelled":aS?"returned":"threw")}catch(a){c=a}}if(a.signal?.aborted)throw a.signal.reason??Error("REVIEW_CALL_CANCELLED_AFTER_PROMISE_EXIT");if(v){let a=v instanceof Error?v.message:String(v),b=N.length>1&&/参数 JSON 解析失败|JSON语法无效|REVIEW_RESULT_INVALID|submit_review_result/iu.test(a);return ax(a,void 0,b,b,p)}if(c)return ax(`REVIEW_RESPONSE_PERSISTENCE_FAILED:${c instanceof Error?c.message:String(c)}`,void 0,!1,!1,p);if(aK)try{p=aL(a.store.reviewObservations(ah))??p}catch(a){return ax(a instanceof Error?a.message:String(a))}if(p?.responseMetadata?.completed===!1||p?.responseMetadata?.protocolFailure)return ax("REVIEW_RESPONSE_INCOMPLETE:原响应未完成或协议失败,已保留原字,不登记审查结果",ay(p.responseMetadata),!1,N.length>1,p);let aT=p?.toolCalls.find(a=>"submit_review_result"===a.name);if(!aT)return ax("审查模型没有调用 submit_review_result(输出可能被截断);程序会拆成更小批次重试",ay(p?.responseMetadata),!1,N.length>1,p);try{let a=JSON.parse(aT.arguments),b=(0,k.validateJsonAgainstSchema)(a,Y);if(b.length)throw Error(`REVIEW_RESULT_INVALID:${b.join(";")}`);J=a}catch(a){return ax(a instanceof Error?a.message:String(a),ay(p?.responseMetadata),!0,N.length>1,p)}let aU=new Set(aj.map(a=>String(a.id))),aV=new Set(N.map(a=>a.entity.id)),aW=[];if(a.allowPartialAssessments){let a=new Set,b=J.assessments.flatMap(b=>{if(!aV.has(b.unitEntityId))return aW.push(`丢弃未知单元 ${b.unitEntityId} 的档位`),[];if(a.has(b.unitEntityId))return aW.push(`丢弃重复单元 ${b.unitEntityId} 的档位`),[];a.add(b.unitEntityId);let c=new Set,d=b.levels.flatMap(a=>{let b=aU.has(a.criterionId)?a.criterionId:aU.has(a.criterionId.replace(/\./gu,":"))?a.criterionId.replace(/\./gu,":"):void 0;return b?c.has(b)?(aW.push(`丢弃重复准则 ${b}`),[]):(c.add(b),[{...a,criterionId:b}]):(aW.push(`丢弃未知准则 ${a.criterionId}`),[])});return d.length?[{...b,levels:d}]:[]});J={...J,assessments:b}}else if(new Set(J.assessments.map(a=>a.unitEntityId)).size!==J.assessments.length||J.assessments.some(a=>!aV.has(a.unitEntityId))||J.assessments.some(a=>a.levels.some(a=>!aU.has(a.criterionId)))){let a=J.assessments.map(a=>a.unitEntityId).filter((a,b,c)=>c.indexOf(a)!==b),b=J.assessments.map(a=>a.unitEntityId).filter(a=>!aV.has(a)),c=[...new Set(J.assessments.flatMap(a=>a.levels.map(a=>a.criterionId)))].filter(a=>!aU.has(a));return ax(`审查结果包含未知单元、未知准则或重复单元:未知单元 ${b.join("、")||"无"};未知准则 ${c.slice(0,8).join("、")||"无"};重复单元 ${[...new Set(a)].join("、")||"无"}。允许的单元:${[...aV].join("、")};准则只能使用输入 criteria 中列出的 id。`,ay(p?.responseMetadata),!1,N.length>1,J)}let aX=new Set(J.assessments.map(a=>a.unitEntityId));if(!S&&!a.allowPartialAssessments&&J.assessments.length!==N.length)return ax("审查结果没有覆盖全部提交单元或包含未知准则",ay(p?.responseMetadata),!1,N.length>1,J);if(a.allowPartialAssessments&&!S&&0===J.assessments.length)return ax("审查结果没有任何单元档位:本次审查没有形成可登记结果",ay(p?.responseMetadata),!1,N.length>1,J);let aY=J.findings.filter(a=>!aV.has(a.unitEntityId));aY.length&&(J={...J,findings:J.findings.filter(a=>aV.has(a.unitEntityId))},aW.push(`丢弃 ${aY.length} 条指向未提交单元的 finding:${aY.slice(0,3).map(a=>a.unitEntityId).join("、")}`));let aZ=(J.sourceOpinions??[]).filter(a=>!ai.includes(a.filePath));aZ.length&&(J={...J,sourceOpinions:(J.sourceOpinions??[]).filter(a=>ai.includes(a.filePath))},aW.push(`丢弃 ${aZ.length} 条不在本页来源范围的处置意见:${aZ.slice(0,3).map(a=>a.filePath).join("、")}`));let a$=a=>a.assessments.flatMap(b=>{let c=b.levels.filter(a=>["usable","deficient"].includes(a.level)).map(a=>a.criterionId);if(!c.length)return[];let d=new Set(a.findings.filter(a=>a.unitEntityId===b.unitEntityId).flatMap(a=>a.criterionIds??[])),e=[...new Set(c.filter(a=>!d.has(a)))];return e.length?[{unitEntityId:b.unitEntityId,criterionIds:e}]:[]}),a_=a.correctDeficientFindings?a$(J):[];if(a_.length){try{let b=await a.caller({system:aE,messages:[{role:"user",content:[aD,"","## 上一次 submit_review_result 的参数(JSON)",aT.arguments,"","## 程序校验:以下准则判为 usable/deficient,但没有对应 finding",...a_.map(a=>`- 单元 ${a.unitEntityId}:${a.criterionIds.join("、")}`),"","请重新调用 submit_review_result 返回完整结果:assessments 与 sourceOpinions 原样保留;","为上述每个准则新增 finding,criterionIds 写明该准则;target 必须指向本单元实际 blockId/quote/rowId+columnKey;","并给出 severity/action/basis/preconditions/postconditions。不要删除原 findings。"].join("\n")}],tools:aI,requireToolCall:!0,temperature:0,taskKind:"agent-action",useProviderDefaultOutput:!0,diagnostics:a.diagnostics,signal:a.signal,actorId:au,callKind:"independent-review",...1===aJ.length?{sectionId:aJ[0]}:{}}),c=b?.toolCalls.find(a=>"submit_review_result"===a.name);if(c){let a=JSON.parse(c.arguments);if(!(0,k.validateJsonAgainstSchema)(a,M).length){let b=a.findings;if(Array.isArray(b)){let a=new Set(J.findings.map(a=>`${a.unitEntityId}\u0000${a.key}`));J={...J,findings:[...J.findings,...b.filter(b=>!a.has(`${b.unitEntityId}\u0000${b.key}`))]}}}}}catch{}(a_=a$(J)).length&&aW.push(`补齐后仍有 ${a_.length} 个单元的不足准则没有 finding:${a_.map(a=>`${a.unitEntityId}(${a.criterionIds.slice(0,4).join("、")})`).join(";")}`)}let a0=R(J.findings,N,a.sectionPlans);if(a0.length){let b=async b=>{try{var c;let d=await a.caller({system:aE,messages:[{role:"user",content:(c=aT.arguments,[aD,"","## 上一次 submit_review_result 的参数(JSON)",c,"","## 程序校验:以下 finding 缺少必需字段或定位无效",...b.map(a=>`- finding「${a.key}」(单元 ${a.unitEntityId}):${a.missing.join("、")}`),"","请重新调用 submit_review_result 返回**完整结果**:assessments、sourceOpinions 与 findings 的内容不得删减或改写;","只给上述 finding 补齐字段。字段要求:severity=blocking|advisory;action 取枚举值;","basis={kind,referenceId,quote?,verified?};target={blockId?} 或 {quote?} 或 {rowId+columnKey}(必须指向本单元实际写作块、句子或单元格);","preconditions 字符串数组;postconditions 至少一条可验证的修复条件。"].join("\n"))}],tools:aI,requireToolCall:!0,temperature:0,taskKind:"agent-action",useProviderDefaultOutput:!0,diagnostics:a.diagnostics,signal:a.signal,actorId:au,callKind:"independent-review",...1===aJ.length?{sectionId:aJ[0]}:{}}),e=d?.toolCalls.find(a=>"submit_review_result"===a.name);if(!e)return;let f=JSON.parse(e.arguments);if((0,k.validateJsonAgainstSchema)(f,M).length)return;let g=f.findings;if(!Array.isArray(g))return;let h=new Set(J.findings.map(a=>`${a.unitEntityId}\u0000${a.key}`)),i=new Set(g.map(a=>`${a.unitEntityId}\u0000${a.key}`));return h.size===i.size&&[...h].every(a=>i.has(a))?g:void 0}catch{return}},c=await b(a0);c&&(J={...J,findings:c});let d=R(J.findings,N,a.sectionPlans);if(d.length){let a=new Set(d.map(a=>a.index));J={...J,findings:J.findings.filter((b,c)=>!a.has(c))},K=d.map(a=>({unitEntityId:a.unitEntityId,key:a.key,missing:a.missing}))}}let a1=F(J),a2=Z.assessmentContinuation??[];for(let a of J.assessments){let b=a2.find(b=>b.unitEntityId===a.unitEntityId);if(!b)continue;let c=new Map(b.priorLevels.map(a=>[a.criterionId,a]));for(let b of a.levels)c.set(b.criterionId,{...b,reviewInvocationId:au});a.levels=[...c.values()]}let a3=new Map(N.map(b=>[b.entity.id,new Set(W(b.value,a.contract))])),a4=[];for(let b of J.assessments){let c=a3.get(b.unitEntityId)??new Set,d=new Set(b.levels.map(a=>a.criterionId)),e=[...c].filter(a=>!d.has(a));if(e.length){if(!a.allowPartialAssessments)return ax(`审查结果漏评单元 ${b.unitEntityId} 的准则:${e.join("、")}`,ay(p?.responseMetadata),!1,N.length>1,J);a4.push({unitEntityId:b.unitEntityId,criterionIds:e})}}if(a2.length&&a4.length)return ax("REVIEW_ASSESSMENT_CONTINUATION_INCOMPLETE:缺失准则续审仍未补齐,保留明确未测,不自动重派同一输入",ay(p?.responseMetadata));for(let a of J.assessments){let b=N.find(b=>b.entity.id===a.unitEntityId),c=b.value.originalFormContractHash,d=b.value.outputId;if(c){let e=a.originalFormReviews??[];if(1!==e.length||e[0].contractHash!==c||e[0].outputId!==d)return ax(`REVIEW_ORIGINAL_FORM_ASSESSMENT_INCOMPLETE:单元 ${b.entity.id} 须按当前原表逐项独立核对并返回 originalFormReviews`,ay(p?.responseMetadata));let f=V([b.value.caption,b.value.columns,b.value.rows,b.value.notes,b.value.nodes,b.value.edges,b.value.tableRowGroups]);if("met"===e[0].status&&!e[0].evidence.some(a=>f.some(b=>b.includes(a))))return ax(`REVIEW_ORIGINAL_FORM_EVIDENCE_REQUIRED:单元 ${b.entity.id} 缺实际填表证据`,ay(p?.responseMetadata))}else if(a.originalFormReviews?.length)return ax("REVIEW_ORIGINAL_FORM_UNKNOWN:本单元没有当前原格式契约,不能提交原表通过结论",ay(p?.responseMetadata));let e=b.value.claims??[],f=e.filter(b=>!a.claimReviews?.some(a=>a.claimId===b.id));if(f.length||(a.claimReviews??[]).some(a=>!e.some(b=>b.id===a.claimId)))return ax(`REVIEW_CLAIM_ASSESSMENT_INCOMPLETE:单元 ${b.entity.id} 的重要主张须逐项审查:${f.map(a=>a.id).join("、")}`,ay(p?.responseMetadata));for(let b of a.claimReviews??[])if("supported"===b.status){let a=e.find(a=>a.id===b.claimId).source??{},c=Z.evidence.find(b=>"string"==typeof a.evidenceId&&b.evidenceId===a.evidenceId||"string"==typeof a.entityId&&b.entityId===a.entityId||"string"==typeof a.certificateId&&b.certificateId===a.certificateId),d=c?.evidenceId?c.frozenValue:c?.kind==="decision"?c.entity?.value??c.entity:c?{evaluation:c.evaluation??null,operationInputs:c.operationInputs??null,definitionInputs:c.definitionInputs??null,quantityInputs:c.quantityInputs??null}:null;if(!c||!b.evidence.some(a=>V(d).some(b=>b.includes(a))))return ax(`REVIEW_CLAIM_SUPPORT_EVIDENCE_REQUIRED:主张 ${b.claimId} 的supported结论必须逐字引用实际送达依据`,ay(p?.responseMetadata))}}let a5=S?[]:N.map(a=>a.entity.id).filter(a=>!aX.has(a));if(!S){for(let a of J.findings){if(!a.action||!a.basis||!a.target)continue;let b=N.find(b=>b.entity.id===a.unitEntityId),c=Array.isArray(b.value.replaces)?b.value.replaces.map(a=>String(a.entityId)).sort()[0]:void 0,d=(0,e.L8)(c??b.entity.id,{action:a.action,basis:a.basis,target:a.target}),f=aq.map(a=>a.issue).find(a=>a.raisedBy===L&&a.scope.entityIds.includes(b.entity.id)&&(0,e.QX)(a)?.semanticId===d);f&&(a.issueId&&a.issueId!==f.id&&aW.push(`finding「${a.key}」的 issueId 与语义目标原缺陷不一致,已按原缺陷 ${f.id} 处理`),a.key=f.evidence.find(a=>a.startsWith("finding-key:")).slice(12),a.issueId=f.id,a.disposition&&"new"!==a.disposition||(a.disposition="retain"))}let a=aq.filter(a=>a.issue.raisedBy===L).map(a=>({key:a.issue.evidence.find(a=>a.startsWith("finding-key:"))?.slice("finding-key:".length)??"",unitEntityId:a.issue.scope.entityIds.find(a=>aV.has(a))??""})),b=new Set(J.findings.map(a=>`${a.unitEntityId}::${a.key}`)),c=a.filter(a=>!a.key||!a.unitEntityId||!b.has(`${a.unitEntityId}::${a.key}`));if(c.length){for(let a of c){let b=aq.find(b=>b.issue.scope.entityIds.includes(a.unitEntityId)&&b.issue.evidence.includes(`finding-key:${a.key}`))?.issue;b&&J.findings.push({key:a.key,issueId:b.id,unitEntityId:a.unitEntityId,title:b.title,detail:b.detail,disposition:"retain"})}aW.push(`审查遗漏 ${c.length} 条原缺陷,按 retain 保留`)}}try{if(!a.store.reviewInvocation(ah).response)return ax("REVIEW_ORIGINAL_RESPONSE_NOT_PERSISTED:无已验身原响应,不应用或重新派发",ay(p?.responseMetadata),!1,!1,p);let b=a.store.applyReviewResponse(ah,aH,()=>{let b;for(let b of Z.evidence)if("certificate"===b.kind&&!a.store.certificate(String(b.certificateId))?.valid)throw Error("REVIEW_REFERENCE_INVALID:原计算证书当前已失效");if((0,r.Fu)(aq)!==(0,r.Fu)(T(a.store,aV)))throw Error("REVIEW_FINDING_STATE_CHANGED");let c={actorId:L,memberIndices:[],sectionIds:a.contract.sections.map(a=>a.id)},d=(0,l.ze)({store:a.store,contract:{id:a.contract.id,criteria:a.contract.criteria.map(a=>({id:a.id}))},authority:c}),f=new Map;for(let b of(0,l.S2)(a.store))if(b.value.reviewerId===L&&(0,l.O4)(a.store,b.value))for(let a of b.value.unitRefs){let c=`${a.id}::${a.version}`,d=f.get(c)??new Set;for(let a of b.value.levels)d.add(a.criterionId);f.set(c,d)}let g=[],h=[],i=[],j=new Set;if(!S)for(let b of J.findings){let c=N.find(a=>a.entity.id===b.unitEntityId),d=String(c.value.responsibilityId??"");if(!d)throw Error(`单元 ${c.entity.id} 没有职责身份,不能登记 finding`);let k=`finding-key:${b.key}`,m=F([c.entity.id,b.key]);if(j.has(m)){h.push({unitEntityId:c.entity.id,key:b.key});continue}j.add(m);let n=a3.get(c.entity.id)??new Set,o=(b.criterionIds??[]).filter(a=>n.has(a)),p=(b.criterionIds??[]).filter(a=>!n.has(a)),q=function(a,b){let c=new Set(Array.isArray(a.sectionIds)?a.sectionIds.map(String):[]),d=new Set;for(let a of b?.sections??[])if(c.has(a.sectionId))for(let b of a.contentContract?.coverageItems??[])d.add(b.id);return d}(c.value,_),r=[...new Set((b.coverageItemIds??[]).filter(a=>q.has(a)))];if(!a.allowPartialAssessments&&p.length)throw Error("REVIEW_FINDING_CRITERION_DENIED");let s=o.length?o:(0,l.RL)(c.value,Array.isArray(c.value.sectionIds)?c.value.sectionIds.map(String):[],a.contract),t=aq.map(a=>a.issue).filter(a=>a.scope.entityIds.includes(c.entity.id)&&a.evidence.includes(k)&&(!b.issueId||a.id===b.issueId)),u=t.filter(a=>a.raisedBy===L);if(u.length>1)throw Error("REVIEW_FINDING_AMBIGUOUS");let v=u[0],w=b.disposition??"new",x=v?(0,e.QX)(v):void 0;if(!v&&b.severity&&b.action&&b.basis&&b.target&&b.postconditions?.length){let a=b.basis,d="evidence"===String(a.kind)?{...a,kind:"fact"}:a,f=d.quote?.trim()??"",g=c.value.sectionIds??[],h=Z.evidence.find(a=>a.evidenceId===d.referenceId||a.entityId===d.referenceId||a.certificateId===d.referenceId),i=_?.sections.filter(a=>g.includes(a.sectionId))??[],j=i.flatMap(a=>[...a.requirements.map(a=>a.source.quote),...a.requiredOutputs.flatMap(a=>a.source?[a.source.quote]:[])]),k=new Set([...q,...n,...i.flatMap(a=>a.requiredOutputs.map(a=>a.id))]),l="contract"===d.kind&&k.has(d.referenceId)&&f.length>0&&j.some(a=>a.includes(f)),m=["fact","technical","decision","certificate"].includes(d.kind)&&!!h&&("decision"===d.kind||"certificate"===d.kind||f.length>0&&V(h.frozenValue).some(a=>a.includes(f)))&&("technical"!==d.kind||!0===d.verified&&c.value.standardCitations?.some(a=>"verified"===a.verification)),o="blocking"===b.severity&&(l||m)?"blocking":"advisory";if(b.target.blockId);else if(b.target.rowId||b.target.columnKey){let a=c.value.rows?.find(a=>a.id===b.target.rowId)?.cells[b.target.columnKey??""];if(void 0===a)throw Error("REVIEW_FINDING_TARGET_INVALID")}else if(!b.target.quote||!String(c.value.text??"").includes(b.target.quote))throw Error("REVIEW_FINDING_TARGET_INVALID");let p=Array.isArray(c.value.replaces)?c.value.replaces.map(a=>String(a.entityId)).sort()[0]:void 0;x={version:"review-finding-contract-v1",semanticId:(0,e.L8)(p??c.entity.id,{action:b.action,basis:d,target:b.target}),severity:o,action:b.action,basis:d,target:b.target,preconditions:b.preconditions??[],postconditions:b.postconditions,...b.proposedText?.trim()?{proposedText:b.proposedText.trim()}:{}}}if(!v&&"new"===w){let a=f.get(`${c.entity.id}::${c.entity.version}`),d=(b.criterionIds??[]).filter(b=>!a?.has(b));if(a&&!d.length)throw Error(`REVIEW_NEW_FINDING_ON_REVIEWED_VERSION:单元 ${c.entity.id}@${c.entity.version} 已按当前审查口径审过,不能在未变化的版本上新开 finding。请对已有缺陷 retain/resolve;若上一轮漏审了某个准则,只能针对该未审准则开新 finding。该版本已审准则:${[...a].slice(0,8).join("、")}`)}if(!v&&t.length&&(b.issueId||"new"!==w))throw Error("REVIEW_FINDING_PRINCIPAL_DENIED");if(!v&&(b.issueId||"new"!==w)){let a=aq.filter(a=>a.issue.scope.entityIds.includes(c.entity.id)).map(a=>`${a.issue.evidence.find(a=>a.startsWith("finding-key:"))?.slice("finding-key:".length)??"?"}→${a.issue.id}`).slice(0,12);throw Error(`REVIEW_FINDING_NOT_FOUND:单元 ${c.entity.id} 没有与 finding key/issueId 匹配的原缺陷。本单元可复核的原缺陷:${a.join("、")||"无"}。新缺陷不要带 issueId,disposition 用 new;复核原缺陷须原样保留 findingKey 并带对应 issueId。`)}if("resolve"===w&&v){let d=function(a,b,c,d){let e=V([b.text,b.caption,b.columns,b.rows,b.nodes,b.edges,b.notes]),f=d&&Array.isArray(c.units)?c.units.find(a=>a.unitEntityId===d)?.renderedText:void 0;"string"==typeof f&&f&&e.push(f);let g=d&&Array.isArray(c.units)?c.units.find(a=>a.unitEntityId===d):void 0;g&&e.push(...V([g.caption,g.rows,g.notes]));let h=new Set([...Array.isArray(b.references)?b.references:[],...Array.isArray(b.assertions)?b.assertions.map(a=>a.reference):[]].filter(a=>a?.kind==="evidence").map(a=>a.evidenceId));for(let a of Array.isArray(c.evidence)?c.evidence:[])!0===a.found&&h.has(a.evidenceId)&&e.push(...V(a.frozenValue));return[...new Set(a.map(a=>a.trim()).filter(a=>a.length>=6&&!a.startsWith("finding-key:")&&e.some(b=>b.includes(a))))]}(b.evidence??[],c.value,Z,c.entity.id);if(!d.length){i.push({unitEntityId:c.entity.id,key:b.key,...s.length?{criterionIds:s}:{},reason:`resolve 必须逐字引用本单元实际送达的正文或冻结引用(至少 6 字),不能只写“已修改/已满足”。本单元正文开头:${String(c.value.text??c.value.caption??"").slice(0,80)}`});continue}let e=a.store.transitionIssue(v.id,{to:"resolved",by:L,note:b.detail,evidence:[...d,`reviewed-unit:${c.entity.id}@${c.entity.version}`]},`${au}:finding-resolve:${m}`);g.push({key:b.key,issueId:e.id,disposition:"resolve",unitEntityId:c.entity.id,criterionIds:s,title:v.title,detail:b.detail,...x?{contract:x}:{},...r.length?{coverageItemIds:r}:{},...p.length?{deniedCriterionIds:p}:{}});continue}if(v){g.push({key:b.key,issueId:v.id,disposition:"retain",unitEntityId:c.entity.id,criterionIds:s,title:v.title,detail:v.detail,...x?{contract:x}:{},...r.length?{coverageItemIds:r}:{},...p.length?{deniedCriterionIds:p}:{}});continue}let y=(Array.isArray(c.value.sectionIds)?c.value.sectionIds.map(String):[]).map(b=>a.sectionPlans?.get(b)?.sectionPlanHash).find(Boolean),z=a.store.openIssue({kind:"review-finding",title:b.title,detail:b.detail,scope:{entityIds:[c.entity.id],versions:{[c.entity.id]:c.entity.version}},evidence:[k,...y?[`section-plan:${y}`]:[],...r.map(a=>`coverage-item:${a}`),...x?[(0,e.fh)(x)]:[],...(b.evidence??[]).filter(a=>!a.startsWith("review-contract:"))],owner:d,raisedBy:L,blocks:x?.severity==="blocking",recheck:x?.postconditions.join(";")||"作者举证或修订后,由独立审查复核关闭"},`${au}:finding:${m}`);g.push({key:b.key,issueId:z.id,disposition:"new",unitEntityId:c.entity.id,criterionIds:s,title:b.title,detail:b.detail,...x?{contract:x}:{},...r.length?{coverageItemIds:r}:{},...p.length?{deniedCriterionIds:p}:{}})}let k=[],n=new Map(ak.map(a=>[a.filePath,a])),q=(J.sourceOpinions??[]).filter(a=>{var b;let c=n.get(a.filePath);return!!(c&&(b=a.evidence,c.excerpt.trim()&&b.some(a=>{let b=a.trim();return b.length>=6&&c.excerpt.includes(b)}))&&("not-required"!==a.verdict||!c.excerptTruncated))}),s=(J.sourceOpinions??[]).filter(a=>!q.includes(a)).map(a=>({filePath:a.filePath,verdict:a.verdict}));if(q.length)try{let b=(0,o.MJ)({store:a.store,project:a.project,contract:a.contract,authority:c}),d=b.prepareOpinions({filePaths:q.map(a=>a.filePath)}),e=b.proposeOpinions(d.id,{reviewerId:L,sourceReviewPolicyVersion:o.pO,reviewInvocationId:au,sourceSnapshotHash:(0,o.ik)(a.project),reviewedUnitRefs:N.map(a=>({id:a.entity.id,version:a.entity.version})),opinions:q.map(a=>({filePath:a.filePath,verdict:a.verdict,reason:a.reason,evidence:a.evidence})),note:J.note},`独立审查来源覆盖:${J.note}`,`${au}:source-opinions`),f=b.evaluateOpinions(e.id);if("valid"!==f.value.dataValidity||"valid"!==f.value.relatedConstraints)throw Error(`来源覆盖意见求值未通过:${f.value.issues.slice(0,3).map(a=>a.reason).join(";")}`);b.commit(e.id,`${au}:source-opinions-commit`),k=q.map(a=>({filePath:a.filePath,verdict:a.verdict}))}catch(a){b=`来源覆盖意见登记失败:${a instanceof Error?a.message:String(a)}`}let t=[];if(!S){let a=new Map;for(let b of J.findings){if("resolve"===b.disposition||!b.criterionIds?.length)continue;let c=a.get(b.unitEntityId)??new Set;for(let a of b.criterionIds)c.add(a);a.set(b.unitEntityId,c)}for(let b of i){if(!b.criterionIds?.length)continue;let c=a.get(b.unitEntityId)??new Set;for(let a of b.criterionIds)c.add(a);a.set(b.unitEntityId,c)}for(let b of J.assessments){let c=a.get(b.unitEntityId);if(c?.size)for(let a of b.levels)c.has(a.criterionId)&&("professional"===a.level||"strong"===a.level)&&(aW.push(`档位与未关闭 finding 不一致:单元 ${b.unitEntityId} 准则 ${a.criterionId} 从 ${a.level} 降为 usable(存在 retain/new finding 指向该准则)`),a.level="usable")}}if(!S)try{let a=d.prepareReviews(J.assessments.map(a=>({unitEntityIds:[a.unitEntityId],reviewContextUnitRefs:$[a.unitEntityId]??[]}))),b=ay(p?.responseMetadata),c=d.proposeReviews(a.id,J.assessments.map(a=>({reviewerId:L,reviewInvocationId:au,reviewPromptVersion:l.dT,...Z.bidComposition?{reviewBidCompositionHash:(0,r.Fu)(Z.bidComposition)}:{},...aa?{reviewTenderResponseBinding:aa}:{},...a2.find(b=>b.unitEntityId===a.unitEntityId)?{reviewContinuation:a2.find(b=>b.unitEntityId===a.unitEntityId)}:{},...b?{reviewModelIdentity:b}:{},unitEntityIds:[a.unitEntityId],reviewContextUnitRefs:$[a.unitEntityId]??[],levels:a.levels,...a.originalFormReviews?{originalFormReviews:a.originalFormReviews}:{},...a.claimReviews?{claimReviews:a.claimReviews}:{},note:J.note})),`独立审查:${J.note}`,`${au}:assessments`),e=d.evaluateReview(c.id);if("valid"!==e.value.dataValidity||"valid"!==e.value.relatedConstraints)throw Error(`审查档位求值未通过:${e.value.issues.slice(0,3).map(a=>a.reason).join(";")}`);for(let a of(d.commit(c.id,`${au}:assessments-commit`),J.assessments))t.push({unitEntityId:a.unitEntityId,assessmentId:(0,l.Fw)(L,[a.unitEntityId]),levels:a.levels.length})}catch(a){throw Error(`审查档位登记失败:${a instanceof Error?a.message:String(a)}`,{cause:a})}let u=String(N[0]?.value.responsibilityId??""),v=u?(0,m.ff)({store:a.store,contract:a.contract,responsibilityId:u,tenderResponsePlan:_,...Z.bidComposition?{expectedBidCompositionHash:(0,r.Fu)(Z.bidComposition)}:{}}):void 0,w=v?.round??0,x=(0,o.vx)(a.store,a.project,{documentHash:F(N.map(a=>[a.entity.id,a.entity.version]))}),y=al.cursor.sourceIds.filter(a=>!x.unreferenced.includes(a)||(al.cursor.completedSourceIds.includes(a)||k.some(b=>b.filePath===a))&&x.opinions.some(b=>b.filePath===a)&&!x.conflicts.includes(a)),z=al.cursor.sourceIds.filter(a=>!y.includes(a)),A={...al,cursor:{...al.cursor,completedSourceIds:y,offset:y.length},missingSourceIds:z,nextOffset:!1===a.includeSourceCoverage?al.nextOffset:z.length?y.length:null},B=(J.unitReplacement??[]).filter(a=>aV.has(a.unitEntityId)).filter(a=>{let b=N.find(b=>b.entity.id===a.unitEntityId);return b&&"paragraph"!==b.value.kind?(aW.push(`丢弃非段落单元的 unitReplacement:${a.unitEntityId}`),!1):!!b}),C={version:"construction-review-invocation-v1",ok:!0,invocationId:au,principal:L,...S?{reviewKind:"source-coverage"}:{},...S&&(J.assessments.length||J.findings.length)?{skippedSourcePageUnitOpinions:J.assessments.length+J.findings.length}:{},sourceReviewPolicyVersion:o.pO,applicationVersion:H,requestKey:ah,requestConfigurationHash:ae,inputHash:at,targetHash:ar,responseHash:as,units:N.map(a=>({id:a.entity.id,version:a.entity.version})),assessments:t,findings:g,reviewRound:w,...K?.length?{incompleteFindingNotes:K}:{},...h.length?{skippedDuplicateFindings:h}:{},...i.length?{rejectedResolves:i}:{},...aW.length?{reviewAdjustments:aW}:{},originalFormReviews:J.assessments.flatMap(a=>(a.originalFormReviews??[]).map(b=>({...b,unitEntityId:a.unitEntityId}))),...a5.length||a4.length?{missingAssessments:{unitEntityIds:a5,criteria:a4}}:{},...v?{revisionPlan:v}:{},sourceOpinions:k,...s.length?{ungroundedSourceOpinions:s}:{},...B.length?{unitReplacement:B}:{},...b?{sourceCoverageError:b}:{},note:J.note,promptVersion:l.dT,attempt:1,outputHash:a1,readSet:aw(),toolCalls:p?.toolCalls?.length??0,...!1===a.includeSourceCoverage?{}:{sourceCoverage:A},...ay(p?.responseMetadata)?{modelIdentity:ay(p?.responseMetadata)}:{},...p?.responseMetadata?.usageStatus?{usageStatus:p.responseMetadata.usageStatus}:{},...p?.responseMetadata?.usage?{usage:p.responseMetadata.usage}:{}},D=a.store.captureReadSnapshot({entityIds:aH.entities.map(a=>a.id),groupKeys:aH.groups.map(a=>a.key),context:{type:"applied-independent-review",requestKey:ah}});return G({receipt:C,state:{reads:D.reads,findingHash:(0,r.Fu)(T(a.store,aV))}})});return az(b.receipt)}catch(c){let a=c instanceof Error?c.message:String(c),b=!/REVIEW_NEW_FINDING_ON_REVIEWED_VERSION/u.test(a);return ax(`审查结果未能原子提交:${a}`,ay(p?.responseMetadata),b,!1,p)}}},45946:(a,b,c)=>{c.d(b,{_J:()=>o,zr:()=>n});var d=c(36690),e=c(10402),f=c(80154),g=c(745);let h=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase();function i(a,b,c={}){return{code:a,message:b,...c}}function j(a){return(0,g.Fu)({kind:"table-v1",columns:(a.columns??[]).map(a=>({key:a.key,title:h(a.title??""),unit:h(a.unit??"")})),rows:(a.rows??[]).map(a=>Object.fromEntries(Object.keys(a.cells??{}).sort().map(b=>[b,h(String(a.cells[b]??""))])))})}function k(a){return"table"===a?"table":"figure"}function l(a){return"paragraph"!==a.kind||!!a.outputId||(a.assertions?.length??0)>0||/\d/u.test(a.text??"")}function m(a){return`「${a.heading?.trim()||a.caption?.trim()||a.id}」`}function n(a){let b=[],c=[];if(!1!==a.requireFrozen){try{a.sourceDraftContracts?a.sourceDraftContracts.assertSourceDraft(a.structurePlan,a.sectionPlan.sectionId):(0,d.UW)(a.structurePlan)}catch(a){b.push(i("structure-plan-not-frozen",a instanceof Error?a.message:String(a)))}try{(0,e.aT)(a.sectionPlan)}catch(a){b.push(i("section-plan-not-frozen",a instanceof Error?a.message:String(a)))}}a.sectionPlan.structurePlanHash!==a.structurePlan.planHash&&b.push(i("section-plan-structure-mismatch","节计划不属于当前冻结的全局结构计划"));let n=a.structurePlan.chapters.flatMap(a=>a.sections).find(b=>b.sectionId===a.sectionPlan.sectionId);if(!n)return b.push(i("section-unknown",`节「${a.sectionPlan.sectionId}」不在全局结构计划里`)),{passed:!1,blocking:b,advisory:c};let o=new Map(a.sectionPlan.subsections.map(a=>[a.subsectionId,a])),p=new Map(n.requiredOutputs.map(a=>[a.outputId,a])),q=new Set(n.coverageItemIds),r=new Set([...a.sectionPlan.subsections.flatMap(a=>[...a.coverageItemIds,...a.referencedCoverageItemIds]),...q]);for(let d of a.submitted){let e=d.subsectionId?.trim();if(!e){b.push(i("subsection-id-required",`单元${m(d)}没有绑定计划小节 subsectionId`,{unitId:d.id}));continue}let g=o.get(e);if(!g){b.push(i("subsection-unknown",`单元${m(d)}绑定了计划外小节「${e}」`,{unitId:d.id,subsectionId:e}));continue}d.planHash!==a.structurePlan.planHash&&b.push(i("unit-plan-hash-mismatch",`单元${m(d)}的 planHash 与冻结全局计划不一致:planHash=${a.structurePlan.planHash};sectionPlanHash=${a.sectionPlan.sectionPlanHash}(两者不是同一个值,不要混用)`,{unitId:d.id,subsectionId:e,expected:a.structurePlan.planHash,observed:String(d.planHash??"空")})),d.sectionPlanHash!==a.sectionPlan.sectionPlanHash&&b.push(i("unit-section-plan-hash-mismatch",`单元${m(d)}的 sectionPlanHash 与冻结节计划不一致:sectionPlanHash=${a.sectionPlan.sectionPlanHash};planHash=${a.structurePlan.planHash}(两者不是同一个值,不要混用)`,{unitId:d.id,subsectionId:e,expected:a.sectionPlan.sectionPlanHash,observed:String(d.sectionPlanHash??"空")})),g.contentContract&&d.contentContractHash!==g.contentContract.hash&&b.push(i("unit-content-contract-mismatch",`单元${m(d)}内容契约身份与小节不一致`,{unitId:d.id,subsectionId:e,expected:g.contentContract.hash,observed:d.contentContractHash??"空"})),d.heading?.trim()&&d.heading.trim()!==g.title.trim()&&b.push(i("unit-heading-mismatch",`单元${m(d)}的标题与计划小节「${g.title}」不一致;不得自造标题`,{unitId:d.id,subsectionId:e}));let h=d.blockId?.trim(),j=g.writingOutline??[];if(h){let a=j.find(a=>a.blockId===h);a?(0,f.GO)(a.carrier)!==d.kind?b.push(i("writing-block-carrier-mismatch",`写作块「${h}」的载体是 ${a.carrier},单元${m(d)}却是 ${d.kind};列表块用段落单元、表/图块用对应形态`,{unitId:d.id,subsectionId:e,expected:(0,f.GO)(a.carrier),observed:d.kind})):"list"===a.carrier&&"paragraph"===d.kind&&(0,f.OS)(d.text)&&c.push(i("writing-block-list-format",`写作块「${h}」是列表载体,但段落没有用编号/项目符号行表达并列项`,{unitId:d.id,subsectionId:e})):b.push(i("writing-block-unknown",`单元${m(d)}认领的写作块「${h}」不在小节「${g.title}」的大纲里`,{unitId:d.id,subsectionId:e,observed:h}))}else j.length&&c.push(i("writing-block-unbound",`单元${m(d)}没有声明 blockId;当前小节有 ${j.length} 个写作块`,{unitId:d.id,subsectionId:e}));let n=d.coverageItemIds??[],s=d.referencedCoverageItemIds??[];for(let a of n)if(g.coverageItemIds.includes(a)||b.push(i("coverage-item-not-in-subsection",`单元${m(d)}主载的契约项「${a}」不属于计划小节「${g.title}」`,{unitId:d.id,subsectionId:e})),d.kind!==g.primaryCarrier)if(!g.requiredOutputId&&d.carrierRevisionReason?.trim()&&d.decisionReason?.trim()&&d.implementations?.some(b=>b.obligationId===a&&("paragraph"===d.kind?["method","acceptance"].includes(b.role):"data"===b.role)))c.push(i("realized-carrier-differs-from-plan",`单元${m(d)}按显式修订采用 ${d.kind},冻结编辑安排首选 ${g.primaryCarrier};义务与输出身份保持`,{unitId:d.id,subsectionId:e,expected:g.primaryCarrier,observed:d.kind}));else{let a=h?j.find(a=>a.blockId===h):void 0,c=g.requiredOutputId?p.get(g.requiredOutputId):void 0,f=!!(a&&a.carrier!==g.primaryCarrier);b.push(i("primary-carrier-kind-mismatch",`小节「${g.title}」的主载体首选 ${g.primaryCarrier},单元${m(d)}却是 ${d.kind};载体改变须显式修订理由、decisionReason与对位实现片段,点名输出不得改形态`,{unitId:d.id,subsectionId:e,...f?{hint:`本小节主载体为 ${g.primaryCarrier}${c?`,必出输出为「${c.element}」(${c.outputId})`:""};当前单元认领的是 ${a.carrier} 支撑块。主载契约项与 outputId 留给承接必出输出的 ${g.primaryCarrier} 单元;本段把 coverageItemIds 改为 referencedCoverageItemIds 引用,或补 carrierRevisionReason/decisionReason(点名输出不得改形态)。`}:{}}))}for(let a of s)r.has(a)||q.has(a)||b.push(i("referenced-coverage-unknown",`单元${m(d)}引用的契约项「${a}」不在本节计划里`,{unitId:d.id,subsectionId:e})),n.includes(a)&&b.push(i("coverage-item-role-conflict",`单元${m(d)}把契约项「${a}」同时当主载体和引用载体`,{unitId:d.id,subsectionId:e}));!l(d)||n.length||s.length||c.push(i("coverage-item-unbound",`单元${m(d)}是实质性内容,但没有认领或引用计划契约项`,{unitId:d.id,subsectionId:e}));let t="paragraph"===d.kind&&!d.outputId&&!n.length&&s.some(a=>g.coverageItemIds.includes(a));if(g.requiredOutputId&&!t){let a=h?j.find(a=>a.blockId===h):void 0,c=a&&a.carrier!==g.primaryCarrier?`当前单元认领的是 ${a.carrier} 支撑块;不要绑定 requiredOutputId,改用 referencedCoverageItemIds 引用主载体,或改用 ${g.primaryCarrier} 主载单元。`:`必须由承接必出输出的 ${g.primaryCarrier} 单元绑定 outputId=${g.requiredOutputId};若当前单元只是支撑说明,改用 referencedCoverageItemIds 并不绑定 outputId。`;d.outputId!==g.requiredOutputId&&b.push(i("output-binding-mismatch",`小节「${g.title}」必出输出是「${g.requiredOutputId}」,单元${m(d)}绑定的是「${d.outputId??"空"}」`,{unitId:d.id,subsectionId:e,outputId:g.requiredOutputId,hint:c}));let f=p.get(g.requiredOutputId);f&&d.kind!==k(f.form)&&b.push(i("output-carrier-kind-mismatch",`必出输出「${f.element}」必须用${"table"===f.form?"表":"图"}承接,单元${m(d)}是 ${d.kind}`,{unitId:d.id,subsectionId:e,outputId:f.outputId,hint:`必出输出只能由 ${"table"===k(f.form)?"表":"图"}单元承接;支撑段落改用 referencedCoverageItemIds,不要占用该 outputId。`})),"table"!==d.kind||d.columns?.length&&d.rows?.length||b.push(i("output-table-empty",`必出表「${f?.element??g.requiredOutputId}」没有真实表头/数据行`,{unitId:d.id,subsectionId:e,outputId:g.requiredOutputId})),"figure"===d.kind&&!d.planChart&&!d.layout&&((d.nodes?.length??0)<2||!d.edges?.length)&&b.push(i("output-figure-empty",`必出图「${f?.element??g.requiredOutputId}」没有真实节点/关系`,{unitId:d.id,subsectionId:e,outputId:g.requiredOutputId}))}else d.outputId&&!p.has(d.outputId)?b.push(i("output-id-unknown",`单元${m(d)}的 outputId「${d.outputId}」不在本节必出输出注册表`,{unitId:d.id,outputId:d.outputId})):d.outputId&&d.outputId!==g.requiredOutputId&&b.push(i("output-not-owned-by-subsection",`输出「${d.outputId}」不属于小节「${g.title}」`,{unitId:d.id,subsectionId:e,outputId:d.outputId}));"table"!==d.kind||d.outputId||(d.decisionReason??"").trim()||b.push(i("table-decision-reason-missing",`自选表${m(d)}没有说明为什么必须用表`,{unitId:d.id,subsectionId:e})),"figure"!==d.kind||d.outputId||(d.decisionReason??"").trim()||b.push(i("figure-decision-reason-missing",`自选图${m(d)}没有说明为什么必须用图`,{unitId:d.id,subsectionId:e}))}let s=new Map;for(let b of[...a.sectionUnits,...a.submitted])b.outputId&&s.set(b.outputId,[...s.get(b.outputId)??[],b.id]);for(let a of n.requiredOutputs){let c=new Set(s.get(a.outputId)??[]);c.size>1&&b.push(i("output-id-duplicate",`必出输出「${a.element}」由多个单元重复承接:${[...c].join("、")}`,{outputId:a.outputId}))}for(let d of a.sectionUnits){let a=d.subsectionId?o.get(d.subsectionId):void 0;d.subsectionId&&!a&&b.push(i("subsection-unknown",`既有单元${m(d)}绑定了计划外小节「${d.subsectionId}」`,{unitId:d.id})),a?.requiredOutputId&&d.outputId&&d.outputId!==a.requiredOutputId&&c.push(i("output-not-owned-by-subsection",`既有单元${m(d)}的输出不属于其小节「${a.title}」`,{unitId:d.id,subsectionId:a.subsectionId,outputId:d.outputId}))}let t=new Map;for(let b of[...a.sectionUnits,...a.submitted])t.set(b.id,b);let u=(a.otherUnits??[]).map(a=>a.unit);b.push(...(function(a,b,c=!0){let d=[],e=new Map,f=new Map,k=new Map;for(let[a,c]of Object.entries(b?.tableHashes??{}))e.set(a,c);for(let[a,c]of Object.entries(b?.figureHashes??{}))f.set(a,c);for(let[a,c]of Object.entries(b?.captions??{}))k.set(a,c);for(let b of a){if("table"===b.kind){let a=j(b),c=e.get(a);c&&c!==b.id?d.push(i("table-content-duplicate",`表${m(b)}与「${c}」内容相同:同一内容组只能有一个主表`,{unitId:b.id})):e.set(a,b.id)}if("figure"===b.kind){let a=function(a){let b=new Map((a.nodes??[]).map(a=>[a.id,h(a.label)])),c="string"==typeof a.figureSemantics?a.figureSemantics:null,d="string"==typeof a.graphLayout?a.graphLayout:null;return(0,g.Fu)({kind:"figure-v1",figureSemantics:c,graphLayout:d,planChart:a.planChart?.view??null,layout:a.layout?(0,g.Fu)(a.layout):null,nodes:(a.nodes??[]).map(a=>({label:h(a.label),group:h(a.group??""),lane:h(a.lane??"")})).sort((a,b)=>a.label.localeCompare(b.label)||a.group.localeCompare(b.group)||a.lane.localeCompare(b.lane)),edges:(a.edges??[]).map(a=>({from:b.get(a.from)??h(a.from),to:b.get(a.to)??h(a.to),label:h(a.label??"")})).sort((a,b)=>`${a.from}->${a.to}`.localeCompare(`${b.from}->${b.to}`))})}(b),c=f.get(a);c&&c!==b.id?d.push(i("figure-semantic-duplicate",`图${m(b)}与「${c}」语义相同:同一内容组只能有一个主图`,{unitId:b.id})):f.set(a,b.id)}if(c){let a="paragraph"===b.kind?"":h(b.caption??"");if(a){let c=k.get(a);c&&c!==b.id?d.push(i("caption-duplicate",`${"table"===b.kind?"表":"图"}题注「${b.caption}」与「${c}」重复`,{unitId:b.id})):k.set(a,b.id)}}}return d})([...u,...t.values()],a.lockedCarriers,!1!==a.dedupeCaptions).filter(b=>a.submitted.some(a=>a.id===b.unitId)).map(b=>({...b,sectionId:a.sectionPlan.sectionId})));let v=new Map;for(let a of t.values()){if("table"!==a.kind||!a.columns?.length)continue;let b=(0,g.Fu)({kind:"table-schema-v1",columns:(a.columns??[]).map(a=>({key:a.key,title:h(a.title??""),unit:h(a.unit??"")}))});v.set(b,[...v.get(b)??[],a])}for(let b of v.values()){if(b.length<2||new Set(b.map(j)).size<2)continue;let[d,...e]=b;for(let b of e)c.push(i("table-schema-duplicate",`表${m(b)}与表${m(d)}列结构相同(${(d.columns??[]).map(a=>a.title).filter(Boolean).join("|")});若属同一对照关系,应合并为一张表,把专业/单体/区段等拆分维度作为一列;若确属不同对照关系,请在 decisionReason 说明`,{unitId:b.id,sectionId:a.sectionPlan.sectionId}))}return{passed:0===b.length,blocking:b,advisory:c}}function o(a){let b=new Map;for(let c of[...a.sectionUnits,...a.submitted])b.set(c.id,c);let c=n({...a,submitted:[...b.values()],sectionUnits:[]}),d=[...c.blocking],e=[...c.advisory],f=new Map(a.sectionPlan.subsections.map(a=>[a.subsectionId,a])),g=new Map;for(let b of[...a.sectionUnits,...a.submitted])g.set(b.id,b);let h=[];for(let b of g.values()){if(!b.subsectionId){d.push(i("unit-subsection-missing",`生效单元${m(b)}没有绑定计划小节`,{unitId:b.id,sectionId:a.sectionPlan.sectionId}));continue}if(!f.has(b.subsectionId)){d.push(i("unit-subsection-unknown",`生效单元${m(b)}绑定了计划外小节「${b.subsectionId}」`,{unitId:b.id,subsectionId:b.subsectionId,sectionId:a.sectionPlan.sectionId}));continue}h.push(b)}let j=new Map;for(let a of h)a.subsectionId&&j.set(a.subsectionId,[...j.get(a.subsectionId)??[],a]);for(let b of a.sectionPlan.subsections){let a=j.get(b.subsectionId)??[];if(!a.length){d.push(i("subsection-unwritten",`计划小节「${b.title}」没有任何生效单元`,{subsectionId:b.subsectionId}));continue}a.some(a=>a.heading?.trim()===b.title.trim())||d.push(i("subsection-heading-missing",`计划小节「${b.title}」没有单元用该标题作小节标题`,{subsectionId:b.subsectionId}));let c=a.flatMap(a=>(a.coverageItemIds??[]).map(b=>({id:b,unitId:a.id})));for(let a of b.coverageItemIds){let e=c.filter(b=>b.id===a);e.length||d.push(i("subsection-coverage-missing",`计划小节「${b.title}」的契约项「${a}」没有主载体`,{subsectionId:b.subsectionId})),e.length>1&&d.push(i("subsection-coverage-duplicate",`计划小节「${b.title}」的契约项「${a}」有多个主载体:${e.map(a=>a.unitId).join("、")}`,{subsectionId:b.subsectionId}))}for(let a of c.map(a=>a.id))b.coverageItemIds.includes(a)||d.push(i("subsection-coverage-unknown",`小节「${b.title}」主载了计划外契约项「${a}」`,{subsectionId:b.subsectionId}));if(b.requiredOutputId){let c=a.filter(a=>a.outputId===b.requiredOutputId);c.length||d.push(i("subsection-output-missing",`计划小节「${b.title}」的必出输出「${b.requiredOutputId}」没有载体`,{subsectionId:b.subsectionId,outputId:b.requiredOutputId})),c.length>1&&d.push(i("subsection-output-duplicate",`计划小节「${b.title}」的必出输出「${b.requiredOutputId}」有多个载体`,{subsectionId:b.subsectionId,outputId:b.requiredOutputId}))}"transition"===b.role&&a.some(l)&&d.push(i("transition-substantive-content",`标题过渡小节「${b.title}」承载了实质内容`,{subsectionId:b.subsectionId}));let f=new Set(a.flatMap(a=>a.blockId?[a.blockId]:[]));for(let a of b.writingOutline??[])f.has(a.blockId)||e.push(i("writing-block-unwritten",`小节的写作块「${a.blockId}」还没有单元认领:${a.topic}`,{subsectionId:b.subsectionId}))}let k=a.structurePlan.chapters.flatMap(a=>a.sections).find(b=>b.sectionId===a.sectionPlan.sectionId);if(k){for(let a of k.coverageItemIds){let b=h.flatMap(b=>(b.coverageItemIds??[]).filter(b=>b===a).map(()=>b.id));b.length||d.push(i("section-coverage-missing",`本节契约项「${a}」没有主载体`,{sectionId:k.sectionId})),b.length>1&&d.push(i("section-coverage-duplicate",`本节契约项「${a}」有多个主载体:${b.join("、")}`,{sectionId:k.sectionId}))}for(let a of k.requiredOutputs){let b=h.filter(b=>b.outputId===a.outputId);b.length||d.push(i("section-output-missing",`本节必出输出「${a.element}」没有载体`,{sectionId:k.sectionId,outputId:a.outputId})),new Set(b.map(a=>a.id)).size>1&&d.push(i("section-output-duplicate",`本节必出输出「${a.element}」有多个载体`,{sectionId:k.sectionId,outputId:a.outputId}))}}return{passed:0===d.length,blocking:d,advisory:e}}},47523:(a,b,c)=>{c.d(b,{Sz:()=>p,u6:()=>o,AZ:()=>k});let d=JSON.parse('{"version":"construction-body-table-policy-v1","description":"正文表格的业务字段策略:内部出处/来源/文件/页码/条款号列不得进入投标正文;证据在写作单元的 assertions/references 中绑定。列名是通用审计词汇,不是项目常量。","forbiddenColumnTitles":["依据出处","依据来源","数据来源","参数来源","来源文件","文件路径","页码","页","条款号","清单条目","清单行号","核验状态","依据","出处","来源","文件","人数来源性质"],"forbiddenColumnSuffixes":["出处","来源文件","文件路径","页码","条款号","清单条目","清单行号","来源性质"],"internalValuePatterns":["(?:^|[/\\\\\\\\])[^/\\\\s]+\\\\.(?:pdf|docx?|xlsx?|dwg|txt)(?:$|[\\\\s,,;;])","第\\\\s*\\\\d+\\\\s*页","[a-f0-9]{64}","清单第\\\\s*\\\\d+\\\\s*行"]}'),e=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),f=d.forbiddenColumnTitles.map(e).filter(Boolean),g=d.forbiddenColumnSuffixes.map(e).filter(Boolean),h=d.internalValuePatterns.map(a=>RegExp(a,"u")),i=a=>{let b=e(a);return f.includes(b)||g.some(a=>b.endsWith(a))},j=a=>(a.rows??[]).flatMap(a=>Object.values(a.cells??{}).map(a=>String(a??"").trim())).filter(Boolean);function k(a){if("table"!==a.kind)return[];let b=[];for(let c of a.columns??[]){let d=String(c.title??"").trim();d&&i(d)&&b.push({code:"table-provenance-column",unitId:a.id,message:`表格「${a.caption??a.id}」的列「${d}」属于内部出处/来源信息,不得进入正文;来源写进单元 assertions/references,正文只保留业务列`})}let c=[a.caption??"",...j(a)].join("\n");return h.some(a=>a.test(c))&&b.push({code:"table-internal-identifier",unitId:a.id,message:`表格「${a.caption??a.id}」包含文件路径、页码或内部哈希,正文不得出现;改写到单元证据引用`}),b}let l=/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|t|kg|g|mm|cm|km|天|日|人|台|套|项|个|%|‰|亿元|万元|元)/giu,m=/(?:GB\s*\/\s*T|GB|JGJ|CJJ|DB|ISO|IEC)\s*\d/iu,n=a=>a.replace(/\s+/gu,"").toLowerCase();function o(a){let b=[],c=[],d=a.filter(a=>"table"===a.kind),e=a.filter(a=>"paragraph"===a.kind);if(!d.length||!e.length)return{blocking:b,advisory:c};for(let a of d){let d=j(a),f=new Set(d.flatMap(a=>[...a.matchAll(l)].map(a=>n(a[0])))),g=[...new Set(d.filter(a=>a.length>=8&&!/^\d+(?:\.\d+)?$/u.test(a)&&!m.test(a)))];for(let d of e){let e=d.text??"";if(!e.trim())continue;let h=[...f].filter(a=>e.replace(/\s+/gu,"").toLowerCase().includes(a)),i=g.filter(a=>e.includes(a));(function(a,b){if(RegExp(`\\{\\{\\s*table\\s*:\\s*${b.id.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}\\s*\\}\\}`,"u").test(a.text??""))return!0;let c=new Set([...a.coverageItemIds??[],...a.referencedCoverageItemIds??[]]),d=new Set([...b.coverageItemIds??[],...b.referencedCoverageItemIds??[]]);return[...c].some(a=>d.has(a))})(d,a)&&(i.length||h.length>=3)?b.push({code:"table-prose-restatement",unitId:d.id,...i.length?{observed:i[0],reference:`{{table:${a.id}}}`}:{},message:`段落「${d.heading??d.id}」复述了所引表「${a.caption??a.id}」已承载的${i.length?`内容「${i[0].slice(0,40)}」`:`${h.length} 个数值`};正文只保留判断、因果与接口,并用真实表号引用,不得重复表格内容`}):(h.length||i.length)&&c.push({code:"table-prose-restatement-suspected",unitId:d.id,message:`段落「${d.heading??d.id}」与表「${a.caption??a.id}」共享${i.length?"同一段表内文字":` ${h.length} 个数值`};若本段确实主载/引用该表,请改为表号引用;若只是同一工程事实,可保留`})}}return{blocking:b,advisory:c}}function p(a){let b=[],c=new Set,d=a.split(/\r?\n/u);for(let a=0;a<d.length-1;a+=1){let f=d[a].trim();if(!f.startsWith("|"))continue;let g=d[a+1].trim();if(g.startsWith("|")&&/[-:]/u.test(g)&&/^\|?[\s|:-]+\|?$/u.test(g))for(let a of f.replace(/^\||\|$/gu,"").split("|").map(a=>a.trim())){if(!a)continue;let d=e(a);i(a)&&!c.has(d)&&(c.add(d),b.push({code:"body-provenance-column",message:`正文表格出现内部出处/来源列「${a}」;来源信息不得进入交付正文`}))}}let f=a.replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/https?:\/\/[^\s)]+/gu,"").replace(/<\/?(?:table|thead|tbody|tr|th|td|caption|p)\b[^>]*>/giu,"");return h.some(a=>a.test(f))&&b.push({code:"body-internal-identifier",message:"正文出现文件路径、页码或内部哈希;这些只能留在运行证据中,不得进入交付正文"}),f.split(/\r?\n/u).some(a=>/表[ \t]*表[ \t]*\d|图[ \t]*图[ \t]*\d/u.test(a))&&b.push({code:"body-duplicated-carrier-word",message:"正文出现“表表/图图”重复词;引用只写一次“表/图”+编号"}),b}},54050:(a,b,c)=>{c.d(b,{az:()=>K,_1:()=>N,ly:()=>L,Z1:()=>M});var d=c(28013),e=c(85585),f=c(1623),g=c(78863),h=c(16208),i=c(45946),j=c(67931);let k=/^(?:合计|小计|总计|汇总|共计|总和|总额|总数量|总量|合价)$/u,l=/(?:合计|小计|总计|汇总|共计|总和|总额|总数量|总量|合价)/u,m=/其他|其余/u;function n(a){let b=String(a??"").replace(/[,,\s]/gu,"").trim();if(!b||/[—\-–]$/u.test(b)&&1===b.length)return;let c=/^(-?\d+(?:\.\d+)?)([^\d]*)$/u.exec(b);if(c)return{value:Number(c[1]),unit:c[2]??""}}function o(a,b){return Math.abs(a-b)<=Math.max(.01,1e-6*Math.abs(b))}function p(a){if("table"!==a.kind||!a.columns?.length||!a.rows?.length)return[];let b=a.columns,c=a=>b[a]?.title??"",d=(a,c)=>String(a.cells?.[b[c]?.key??""]??""),e=b.map((a,b)=>({column:a,index:b})).filter(a=>l.test(a.column.title??"")),f=a.rows.map((a,b)=>({row:a,index:b})).filter(a=>k.test(d(a.row,0).trim()));if(e.length>1||f.length>1)return[];let g=[],h=a.rows.filter((a,b)=>!f.some(a=>a.index===b));if(1===e.length){let h=e[0];for(let e of a.rows){if(f.some(a=>a.row===e))continue;let i=n(d(e,h.index));if(!i)continue;let j=b.map((a,b)=>({index:b,parsed:n(d(e,b))})).filter(a=>a.index!==h.index&&a.parsed);if(j.length<2)continue;let k=new Set(j.map(a=>a.parsed.unit).filter(Boolean));if(k.size>1||i.unit&&k.size&&!k.has(i.unit))continue;let l=j.reduce((a,b)=>a+b.parsed.value,0);o(l,i.value)||g.push({code:"table-arithmetic-conflict",rowLabel:d(e,0),column:c(h.index),message:`表「${a.caption??a.id}」行「${d(e,0)}」的${c(h.index)}为 ${i.value}${i.unit},分项和为 ${Number(l.toFixed(4))}${i.unit}`})}}if(1===f.length){let i=f[0];for(let f=1;f<b.length;f+=1){if(e.some(a=>a.index===f))continue;let b=n(d(i.row,f));if(!b)continue;let j=[],k=!1;for(let a of h){let b=d(a,0),c=n(d(a,f));c?j.push({...c,label:b}):m.test(b)&&(k=!0)}if(k||j.length<2)continue;let l=new Set(j.map(a=>a.unit).filter(Boolean));if(l.size>1||b.unit&&l.size&&!l.has(b.unit))continue;let p=j.reduce((a,b)=>a+b.value,0);o(p,b.value)||g.push({code:"table-arithmetic-conflict",rowLabel:d(i.row,0),column:c(f),message:`表「${a.caption??a.id}」列「${c(f)}」的分项和为 ${Number(p.toFixed(4))}${b.unit},${d(i.row,0)}为 ${b.value}${b.unit}`})}}return g}var q=c(47523),r=c(16669),s=c(36690);let t=/\d{1,3}(?:,\d{3})+(?:\.\d+)?|-?\d+(?:\.\d+)?/gu,u=/(?:GB\s*\/?\s*T?|JGJ\s*\/?\s*T?|CJJ|CJ|DL|SH|HG|JB|DB\s*\d{2}|ISO|IEC)\s*\d{2,5}(?:[.\-—]\d{1,4})?/giu,v=/第\s*\d+(?:\.\d+)*\s*(?:条|款|项|章|节|号)|[A-Za-z]{2,}\d{3,}/gu,w=/[×*]|系数|倍|%|‰|约|近|不(?:超过|低于|大于|小于)|[≤≥<>]/gu,x=/[表图]\s*\d+(?:[-—.]\d+)*/gu,y=/待核|拟定|待定|待确认|待核定/u;function z(a){if(/^\d+$/u.test(a))return Number(a);let b={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if(1===a.length)return b[a];if("十"===a)return 10;if(a.startsWith("十"))return void 0!==b[a[1]]?10+b[a[1]]:void 0;if(a.endsWith("十"))return void 0!==b[a[0]]?10*b[a[0]]:void 0;let[c,d]=[a[0],a[1]];if(c&&d&&void 0!==b[c]&&void 0!==b[d])return 10*b[c]+b[d]}let A=["项目经理","项目技术负责人","技术负责人","施工员","质量负责人","质量员","安全总监","专职安全员","安全员","材料员","资料员","测量员","试验员","机械员","计划工程师","预算员","劳资员","后勤管理员","保卫负责人","班组长","监理","总监","发包人","招标人","建设单位","设计单位"],B=/工作包|职责身份|证书范围|局部计算候选|timelineId|document-run-|工时节点|相对时间(/u,C=a=>a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),D=/(?:GB\s*\/\s*T|GB|JGJ\s*\/\s*T|JGJ|CJJ\s*\/\s*T|CJJ|CJ|DL\s*\/\s*T|DL|SH\s*\/\s*T|SH|HG\s*\/\s*T|HG|JB\s*\/\s*T|JB|DB\s*\d{2}\s*\/?\s*T?|ISO|IEC)\s*\d{2,5}(?:\s*[.\-—]\s*\d{1,4})*/giu,E=a=>a.replace(/\s+/gu,"").replace(/[.\-—]/gu,"").replace(/\//gu,"").toLowerCase(),F=/见[^。\n]{0,24}(?:表|图)|(?:表|图)\s*\d|(?:表|图)[一二三四五六七八九十]|\{\{\s*(?:carrier|table|figure)\s*:\s*[^}]+\}\}/u,G=/^(?:序号|编号|No\.?|编号\/序号|序号\/编号)$/iu,H=(a,b,c,d,e={})=>({severity:a,rule:b,message:c,hint:d,...e});function I(a){if("paragraph"===a.kind)return a.text??"";if("table"===a.kind){let b=a.columns??[],c=a.rows??[];return[a.caption??"","",`| ${b.map(a=>a.title).join(" | ")} |`,`| ${b.map(()=>"---").join(" | ")} |`,...c.map(a=>`| ${b.map(b=>String(a.cells?.[b.key]??"")).join(" | ")} |`)].join("\n")}return[a.caption??"",`![${a.caption??""}]()`,...(a.nodes??[]).map(a=>a.label),...(a.edges??[]).map(a=>a.label??"")].join("\n")}function J(a,b){let c=[];for(let d of(0,e.M)(a)){let a="typo-known-wrong-word"===d.code||"typo-variant-character"===d.code;c.push(H(a?"blocking":"advisory",d.code,d.message,a?"逐处改成正确写法后再提交;不要原样重提":"按提示优化;不阻断本次提交",{...b?{unitId:b}:{},...d.line?{location:`第 ${d.line} 行`}:{}}))}return c}function K(a,b,c){let d=a=>String(a??"").replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),e=new Set(["project-basic-source-invalid","sentence-duplicate","sentence-duplicate-within-unit","carrier-reference-missing","table-prose-restatement"]),f=b.filter(a=>a.unitId&&e.has(a.rule)&&("carrier-reference-missing"===a.rule&&a.expected||"sentence-duplicate-within-unit"===a.rule&&a.observed||a.observed&&a.expected)),g=c?b.filter(a=>a.rule.startsWith("project-basic")):[],h=c&&g.length?(0,r.Zk)(c.facts,c.projectName):[],i=a=>{if("table"!==a.kind)return!1;let b=Array.isArray(a.columns)&&a.columns[0]?a.columns[0].key:void 0;return!!b&&(a.rows??[]).some(a=>{let c=a.cells,d="string"==typeof c?.[b]?String(c[b]):"";return!!(0,r.vI)(d)})},j=g.find(a=>a.unitId)?.unitId,k=j?a.find(a=>"table"===a.kind&&a.id===j):a.find(i),l=k&&i(k)?k.id:void 0;if(!f.length&&!h.length)return null;let m=a.map(a=>{let b=h.length&&"table"===a.kind&&a.id===l?function(a,b){let c=JSON.parse(JSON.stringify(a)),d=Array.isArray(c.columns)?c.columns:[];if(d.length<2)return{unit:a,changed:!1};let e=d[0],f=d[1],g=new Map;for(let a of c.rows??[]){let b=a.cells;if(!b)continue;let c="string"==typeof b[e.key]?String(b[e.key]):"",d=(0,r.vI)(c);d&&!g.has(d)&&g.set(d,b)}let h=!1;for(let d of(c.rows??=[],b)){let b=g.get(d.key);if(!b){let b=`${a.id}:basic:${d.key}`;c.rows.some(a=>a.id===b)||c.rows.push({id:b,cells:{[e.key]:d.label,[f.key]:d.value}}),h=!0;continue}let i=String(b[f.key]??""),j="待核"===d.value?(0,r.w7)(i)?void 0:d.value:(0,r.CZ)(i,d.value)?void 0:d.value;void 0!==j&&(b[f.key]=j,h=!0)}return{unit:h?c:a,changed:h}}(a,h):void 0,c=f.filter(b=>b.unitId===a.id);if(!c.length&&!b?.changed)return{unit:b?.unit??a,changed:!!b?.changed};let e=JSON.parse(JSON.stringify(b?.changed?b.unit:a)),g=!!b?.changed;for(let b of c)if("project-basic-source-invalid"===b.rule&&"table"===a.kind)for(let a of e.rows??[])for(let c of Object.keys(a.cells??{})){let e=a.cells?.[c];"string"==typeof e&&d(e)===d(String(b.observed))&&(a.cells[c]=String(b.expected),g=!0)}else if("sentence-duplicate"===b.rule&&"paragraph"===a.kind&&"string"==typeof e.text){let a=String(b.observed).trim();if(!a)continue;let c=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=e.text.replace(RegExp(`(^|[。;;!?!?
39
39
  ])${c}[。;;!?!?
40
- ]*`,"u"),"$1");d!==e.text&&d.replace(/\s/gu,"").length>0&&(e.text=d.replace(/\n{3,}/gu,"\n\n").trim(),g=!0)}else if("sentence-duplicate-within-unit"===b.rule&&"paragraph"===a.kind&&"string"==typeof e.text){let a=String(b.observed).trim();if(!a)continue;let c=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=!1,f=e.text.replace(RegExp(c,"gu"),a=>d?"":(d=!0,a)).replace(/([。;;!?!?])\1+/gu,"$1").replace(/[ \t]{2,}/gu," ").trim();f!==e.text&&f.replace(/\s/gu,"").length>0&&(e.text=f,g=!0)}else if("carrier-reference-missing"===b.rule&&"paragraph"===a.kind&&"string"==typeof e.text&&/^\{\{(?:table|figure):[^{}]+\}\}$/u.test(String(b.expected))){let a=String(b.expected);e.text.includes(a)||/\{\{(?:table|figure):/u.test(e.text)||(e.text=`${e.text.trim()}(见 ${a})`,g=!0)}else if("table-prose-restatement"===b.rule&&"paragraph"===a.kind&&"string"==typeof e.text){let a=String(b.observed??"").trim(),c=String(b.expected??"");if(!a||!/^\{\{(?:table|figure):[^{}]+\}\}$/u.test(c)||!e.text.includes(a))continue;let d=e.text.replaceAll(a,c);d!==e.text&&(e.text=d,g=!0)}return{unit:g?e:a,changed:g}}),k=j.filter(a=>a.changed).length;return k?{fixed:j.map(a=>a.unit),count:k}:null}function L(a){var b,c;let e=[],g=[];if(a.projectBasicFacts){let b=a.structurePlan?(0,s.F_)(a.structurePlan)[0]?.section.sectionId:a.contract.chapters[0]?.sectionIds[0];if(b&&a.sectionIds.includes(b))for(let c of(0,r.Gm)({sectionId:b,isFirstSection:!0,units:[...a.sectionUnits.map(a=>a.unit),...a.submitted],facts:a.projectBasicFacts,...a.projectName?{projectName:a.projectName}:{},...a.sectionPlan?{sectionPlan:a.sectionPlan}:{}}))("advisory"===c.severity?g:e).push(H("advisory"===c.severity?"advisory":"blocking",c.code,c.message,"在第一章第一节正文开始部分写项目基本信息表:字段只取冻结事实,缺失写“待核”;表后主题再展开,表内事实正文不重复",{...c.unitId?{unitId:c.unitId}:{},...c.observed?{observed:c.observed}:{},...c.expected?{expected:c.expected}:{}}))}let h=(b=a.tenderResponsePlan,c=a.sectionIds,[...new Set((b?.sections??[]).filter(a=>c.includes(a.sectionId)).flatMap(a=>a.requiredOutputs.map(a=>a.id).filter(a=>!!a)))]),k=new Map,l=new Map;for(let b of a.tenderResponsePlan?.sections??[])if(a.sectionIds.includes(b.sectionId)){for(let a of b.requiredOutputs)a.id&&k.set(a.id,{basis:a.basis,form:a.form});for(let a of b.contentContract?.coverageItems??[])l.set(a.id,a)}let m=new Map;for(let b of a.sectionUnits)b.unit.outputId&&m.set(b.unit.outputId,(m.get(b.unit.outputId)??0)+1);let n=(0,d.ut)({contract:a.contract,units:(a.carrierUnits??a.sectionUnits).map(a=>({...a,entityId:`${a.sectionIds[0]??""}\u0000${a.unit.id}`}))}),o=function(a){let b=new Set,c=a=>{if("string"==typeof a)for(let c of a.matchAll(/\d+(?:\.\d+)?/gu))b.add(Number(c[0]))};for(let b of a.projectBasicFacts??[])c(b.value);for(let b of a.project?.facts??[])c(b.value);if(a.executionBaseline){for(let c of(b.add(a.executionBaseline.totalDays),a.executionBaseline.phases))b.add(c.startDay),b.add(c.endDay);for(let c of a.executionBaseline.milestones)b.add(c.day)}return{numbers:[...b]}}({project:a.project,projectBasicFacts:a.projectBasicFacts,executionBaseline:a.executionBaseline}),K=[...new Set((a.tenderResponsePlan?.sections??[]).flatMap(a=>a.contentContract?.responsibilityPositions??[]))];for(let b of a.submitted){let c=I(b),i=J(c,b.id);if(e.push(...i.filter(a=>"blocking"===a.severity)),g.push(...i.filter(a=>"advisory"===a.severity)),e.push(...function(a,b,c){let d=[];for(let e of a.matchAll(/第\s*([0-9一二三四五六七八九十]+)\s*章第\s*([0-9一二三四五六七八九十]+)\s*节/gu)){let a=z(e[1]),f=z(e[2]),g=b.chapters[a-1];if(void 0===a||void 0===f||!g){d.push({rule:"chapter-reference-invalid",severity:"blocking",unitId:c,message:`章节引用「${e[0]}」不存在:全文只有 ${b.chapters.length} 章`,observed:e[0],hint:"改成冻结结构计划里的真实章号节号,或用 {{carrier}} 引用对应表/图"});continue}(f<1||f>g.sectionIds.length)&&d.push({rule:"chapter-reference-invalid",severity:"blocking",unitId:c,message:`章节引用「${e[0]}」不存在:第${e[1]}章「${g.title}」只有 ${g.sectionIds.length} 节`,observed:e[0],hint:"改成该章真实存在的节号,或直接引用对应表/图"})}return d}(c,a.contract,b.id)),g.push(...function(a,b,c){if(!b.numbers.length)return[];let d=[],e=[],f=(a,b)=>{for(let c of b.matchAll(a))void 0!==c.index&&e.push({start:Math.max(0,c.index-4),end:c.index+c[0].length+4})};f(u,a),f(v,a),f(x,a),f(w,a);let g=new Set(b.numbers),h=new Set;for(let b of a.matchAll(t)){let f=Number(b[0].replace(/,/gu,""));if(!Number.isFinite(f)||h.has(f)||g.has(f))continue;let i=b.index??0;!e.some(a=>i>=a.start&&i<=a.end)&&(y.test(a.slice(Math.max(0,i-12),i+b[0].length+12))||(h.add(f),d.push({rule:"fact-number-unregistered",severity:"advisory",unitId:c,message:`数字「${b[0]}」不在事实登记表,且附近没有「待核/拟定」标记`,observed:b[0],hint:"改为登记表内的事实数字,或标注「待核/拟定」;计算过程句写明换算依据"})))}return d}(c,o,b.id)),g.push(...function(a,b,c){if(!b.length)return[];let d=new Set([...b,...A]),e=[],f=new Set;for(let b of a.matchAll(/(?:由|对)([^,。;\n]{2,10}?(?:负责人|人|员|师|理|监|长))(?:组织|牵头|实施|复核|签认|交底|核验|巡查|旁站|验收|报送|负责(?!人))/gu)){let a=b[1].trim();a.length<2||a.length>8||d.has(a)||f.has(a)||(f.add(a),e.push({rule:"job-title-unregistered",severity:"advisory",unitId:c,message:`岗位名「${a}」不在冻结计划的岗位要求列表`,observed:a,hint:"统一为冻结计划/词表内的岗位叫法(如“生产经理/施工经理”只保留一个),同义岗位全文只用一个"}))}return e}(c,K,b.id)),e.push(...i.filter(a=>"blocking"===a.severity)),g.push(...i.filter(a=>"advisory"===a.severity)),B.test(c)&&e.push(H("blocking","internal-term",`单元「${b.id}」出现系统内部词/证书话术`,"改成读者可理解的工程语言;证书范围/局部候选只留内部回执",{unitId:b.id})),a.executionBaseline){let d=[...a.executionBaseline.phases.map(a=>a.id),...a.executionBaseline.milestones.map(a=>a.id)].filter(a=>RegExp(`(^|[^A-Za-z0-9_-])${C(a)}($|[^A-Za-z0-9_-])`,"u").test(c));d.length&&e.push(H("blocking","baseline-id-leak",`单元「${b.id}」把执行基准内部编号写进了正文:${d.join("、")}`,"改用阶段/里程碑名称、日期或第 N 天;内部编号只用于对账",{unitId:b.id}))}if("paragraph"===b.kind&&/^\s*\|/mu.test(b.text??"")&&e.push(H("blocking","table-hidden-in-paragraph",`段落单元「${b.id}」里藏了 Markdown 表格`,'把表格改成独立的 kind:"table" 单元,填 caption 与 outputId;段落只写判断/依据/接口',{unitId:b.id})),"paragraph"===b.kind&&(/!\[[^\]]*\]\(/u.test(b.text??"")||/```mermaid/u.test(b.text??""))&&e.push(H("blocking","figure-hidden-in-paragraph",`段落单元「${b.id}」里藏了图片/图源代码`,'把图件改成独立的 kind:"figure" 单元,填 caption;段落只写判断/依据/接口',{unitId:b.id})),/表[ \t]*表[ \t]*\d|图[ \t]*图[ \t]*\d/u.test(c)&&e.push(H("blocking","duplicated-carrier-word",`单元「${b.id}」出现“表表/图图”重复词`,"引用只写一次“表/图”+编号;用 `{{table:<表单元id>}}` 时不要再在外面手写“表”",{unitId:b.id})),"paragraph"===b.kind&&(b.text??"").trim().length>80){let c=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),d=c(b.text??""),f=(a.carrierUnits??a.sectionUnits).find(e=>e.unit.id!==b.id&&"paragraph"===e.unit.kind&&c(e.unit.text??"")===d&&e.sectionIds.some(b=>!a.sectionIds.includes(b)));f&&e.push(H("blocking","cross-section-duplicate",`段落单元「${b.id}」与其它章节的「${f.unit.id}」整段重复`,"同一内容只写一次;其它章节用真实章节号引用,不整段复述",{unitId:b.id,observed:f.unit.id}))}b.planChart&&!a.executionBaseline&&e.push(H("blocking","plan-figure-baseline-required",`计划图「${b.caption??b.id}」需要执行基准,但本次运行没有可用基准`,"先保证本项目开工日/总工期事实可用,或改用文字+表格表达;不要手填图条",{unitId:b.id})),"paragraph"===b.kind||b.caption?.trim()||e.push(H("blocking","carrier-caption-missing",`${"table"===b.kind?"表":"图"}单元「${b.id}」没有题注`,"填写只写主题、不写编号的 caption;题注由发布层统一编号",{unitId:b.id})),b.outputId&&(h.length&&!h.includes(b.outputId)&&e.push(H("blocking","output-id-unknown",`单元「${b.id}」的 outputId「${b.outputId}」不在本节点名输出里`,"改成 requiredOutputs 里的实际 id",{unitId:b.id,observed:b.outputId})),(m.get(b.outputId)??0)>1&&e.push(H("blocking","output-id-duplicate",`outputId「${b.outputId}」被多个单元重复使用`,"一个点名输出只能由一个表/图单元承接",{unitId:b.id,observed:b.outputId})));let r=Array.isArray(b.coverageItemIds)?b.coverageItemIds:[],s=Array.isArray(b.referencedCoverageItemIds)?b.referencedCoverageItemIds:[];for(let a of[...r,...s])l.size&&!l.has(a)&&e.push(H("blocking","coverage-item-unknown",`单元「${b.id}」引用的契约项「${a}」不在本节契约里`,"coverageItemIds / referencedCoverageItemIds 只能使用本节 coverageItems[].id;不要自造 id",{unitId:b.id,observed:a}));let F=r.filter(a=>s.includes(a));F.length&&e.push(H("blocking","coverage-item-role-conflict",`单元「${b.id}」同时把契约项 ${F.join("、")} 当成主载体和引用载体`,"同一单元里一项只能选一种角色:自己承载填 coverageItemIds;只是引用别的主载体填 referencedCoverageItemIds",{unitId:b.id}));let L="paragraph"!==b.kind||!!b.outputId||(b.assertions?.length??0)>0||/\d/u.test(b.text??"");if(l.size&&L&&!r.length&&!s.length){let c=b.subsectionId?a.sectionPlan?.subsections.find(a=>a.subsectionId===b.subsectionId)?.coverageItemIds:void 0,d=c?.length?c:[...l.keys()];e.push(H("blocking","coverage-item-unbound",`单元「${b.id}」是实质性内容,但没有认领或引用本节契约项`,`用 coverageItemIds 认领本节 coverageItems[].id(本小节可用:${d.slice(0,8).join("、")});如果主载体是表/图,改用 referencedCoverageItemIds 并在正文写真实表号/图号`,{unitId:b.id}))}if(l.size&&"table"===b.kind&&!b.outputId&&!(b.decisionReason??"").trim()){let c=b.subsectionId?a.sectionPlan?.subsections.find(a=>a.subsectionId===b.subsectionId):void 0,d=c?.primaryCarrier==="table"?c.requiredOutputId:void 0;e.push(H("blocking","table-decision-reason-missing",d?`表「${b.caption??b.id}」没有绑定本小节必出输出 outputId=${d},也没有 decisionReason`:`表「${b.caption??b.id}」是作者自选表,但没有说明为什么必须用表`,d?`这是小节必出表:设置 outputId=${d}(必出表不需要 decisionReason);只有自选表才写 decisionReason`:"在 decisionReason 写明内容形态(清单/参数矩阵/对照)与它唯一承载的契约项;正文已写完的纯摘要表应删除",{unitId:b.id,...d?{expected:d}:{}}))}if("table"===b.kind){let a=b.columns?.[0]?.title?.trim();a&&!b.originalFormContractHash&&G.test(a)&&g.push(H("advisory","table-leading-index-column",`表「${b.caption??b.id}」第一列是「${a}」;正文表格不需要序号/编号列`,"删除首列序号/编号;第一列直接用对象/名称/部位/系统",{unitId:b.id}))}if("table"===b.kind)for(let a of p(b))e.push(H("blocking",a.code,a.message,"按分项重算合计或按权威数据修正分项;只允许修正表内数值,不得编造无来源数据",{unitId:b.id,...a.rowLabel?{location:a.rowLabel}:{}}));for(let a of(0,q.AZ)(b))e.push(H("blocking",a.code,a.message,"删除出处/来源/文件/页码列;来源写进单元 assertions/references,正文只保留业务字段",{unitId:b.id}));let M=Array.isArray(b.standardCitations)?b.standardCitations:[];for(let a of[...new Set([...c.matchAll(D)].map(a=>a[0].trim()))]){let c=E(a);M.some(a=>{let b=E(String(a?.code??""));return b.length>0&&(b.includes(c)||c.includes(b))})||g.push(H("advisory","standard-citation-missing",`单元「${b.id}」正文引用了标准「${a}」,但未在 standardCitations 声明五字段`,"建议写全名称/编号/版本/适用范围/核验状态;未核验写 unverified。声明了但字段不全仍会被拒收",{unitId:b.id,observed:a}))}for(let a of M){let d=E(String(a?.code??""));d.length&&!E(c).includes(d)&&g.push(H("advisory","standard-citation-unused",`单元「${b.id}」声明了标准「${a.code}」,但正文没有出现该编号`,"删除未使用的标准引用,或在正文实际引用处写明",{unitId:b.id,observed:a.code}))}let N=b.figureSemantics,O=b.graphLayout;if("figure"===b.kind&&("org"===N||"tree"===O)&&(b.nodes?.length??0)>12&&e.push(H("blocking","org-figure-too-large",`组织图「${b.caption??b.id}」有 ${b.nodes.length} 个节点,画布不可读`,"按汇报层级拆分或分组表达;不要改用表格替代招标要求的框图",{unitId:b.id})),"figure"===b.kind&&b.outputId){let a=k.get(b.outputId)?.basis??"",c=(c,d)=>{d||e.push(H("blocking","figure-semantics-mismatch",`图件「${b.caption??b.id}」承接「${a}」,但没有使用${c}语义`,"按点名载体声明 figureSemantics/graphLayout/planChart/layout;不能用手绘通用节点边图冒充",{unitId:b.id}))};/组织机构图|组织图/u.test(a)&&c("组织树(figureSemantics=org 或 graphLayout=tree)","org"===N||"tree"===O),/施工部署|关键线路/u.test(a)&&c("部署泳道(figureSemantics=deployment)","deployment"===N),/危大|重点难点|风险/u.test(a)&&c("危大管控(figureSemantics=risk-control)","risk-control"===N),/总平面|平面布置/u.test(a)&&c("空间布置(layout)",!!b.layout),/横道/u.test(a)&&c("基准横道(planChart.view=schedule)",b.planChart?.view==="schedule"),/网络/u.test(a)&&!/横道/u.test(a)&&c("基准网络(planChart.view=network)",b.planChart?.view==="network")}if("figure"===b.kind)for(let c of(0,j.FT)(b,{...a.executionBaseline?{executionBaseline:a.executionBaseline}:{}}))e.push(H("blocking",c.code,c.message,"按图种契约补齐结构要素;数据不足时明确“示意”,不得编造尺寸、阶段、依赖或关键线路",{unitId:b.id,...c.element?{observed:c.element}:{}}));if("figure"===b.kind&&!b.planChart&&!b.layout){let a=b.nodes?.length??0,c=b.edges?.length??0;(a<3||c<2)&&e.push(H("blocking","figure-too-sparse",`图件「${b.caption??b.id}」只有 ${a} 个节点/${c} 条边`,"补齐真实对象/关系(至少 3 个节点、2 条边);不要用两个节点一条线充当管控图",{unitId:b.id})),b.references.length||b.assertions.length||e.push(H("blocking","figure-source-missing",`图件「${b.caption??b.id}」没有任何来源/决定/证书引用`,"先用 section_workspace/read_scope 读取本节可用来源/决定/证书,只绑定实际存在的身份;没有来源时改由已有来源的图块或表承载,不得补造",{unitId:b.id}))}for(let g of(e.push(...function(a,b,c){if(!b)return[];let d=[];for(let e of(0,f._D)(a,b))d.push(H("blocking",e.code,e.message,"按执行基准的里程碑天序/日期改写;不要另算一套",{...c?{unitId:c}:{},...e.evidence?{observed:e.evidence}:{}}));return d}(c,a.executionBaseline,b.id)),[c].map(c=>(0,d.EF)(c,n,{unitId:b.id,sectionId:a.sectionIds[0]}))))for(let a of g.issues)("carrier-reference-unresolved"===a.code||"carrier-reference-leaked"===a.code)&&e.push(H("blocking",a.code,a.message,"引用真实存在的表/图,或删除悬空引用;不要留内部标记",{unitId:b.id}))}let L=new Map;for(let b of a.sectionUnits)L.set(b.unit.id,b.unit);for(let b of a.submitted)L.set(b.id,b);let M=[...L.values()];if(l.size){let a=new Map,b=new Map;for(let c of M)for(let d of c.coverageItemIds??[])l.has(d)&&(a.set(d,[...a.get(d)??[],c.id]),b.set(d,c.kind));for(let[b,c]of a)c.length>1&&e.push(H("blocking","carrier-primary-duplicate",`契约项「${l.get(b).text}」在本节有 ${c.length} 个主载体:${c.join("、")}`,"同一契约项只能由一个单元作为主载体;其余单元改填 referencedCoverageItemIds,并用真实表号/图号引用,不复述表内内容",{observed:c.join("、")}));for(let c of M)for(let d of c.referencedCoverageItemIds??[]){if(!l.has(d))continue;let f=a.get(d)??[];if(!f.length){g.push(H("advisory","carrier-reference-without-primary",`单元「${c.id}」引用的契约项「${l.get(d).text}」在本节还没有主载体`,"先给该契约项指定一个主载体(表/图/段落),再在正文引用",{unitId:c.id}));continue}let h=b.get(d);"paragraph"===c.kind&&h&&"paragraph"!==h&&!F.test(c.text??"")&&e.push(H("blocking","carrier-reference-missing",`段落「${c.id}」引用了由${"table"===h?"表":"图"}承载的契约项「${l.get(d).text}」,但没有写真实表号/图号`,"用“见表X/见图X”或稳定的内部标记 `{{table:<表单元id>}}` / `{{figure:<图单元id>}}` 引用主载体;正文只写判断/因果/接口,不复述表内数值",{unitId:c.id,expected:"table"===h?`{{table:${f[0]}}}`:`{{figure:${f[0]}}}`}))}}let N=(0,q.u6)(M);if(e.push(...N.blocking.map(a=>H("blocking",a.code,a.message,"正文只保留判断/因果/接口,并用 `{{table:<表单元id>}}` 或真实表号引用;删除与表重复的数值/行项",{unitId:a.unitId,...a.observed?{observed:a.observed}:{},...a.reference?{expected:a.reference}:{}}))),g.push(...N.advisory.map(a=>H("advisory",a.code,a.message,"确认是否可以改为表号引用",{unitId:a.unitId}))),a.structurePlan&&a.sectionPlan){let b=(0,i.zr)({structurePlan:a.structurePlan,sectionPlan:a.sectionPlan,sourceDraftContracts:a.sourceDraftContracts,submitted:a.submitted,sectionUnits:a.sectionUnits.map(a=>a.unit),otherUnits:(a.carrierUnits??a.sectionUnits).filter(b=>b.sectionIds.some(b=>!a.sectionIds.includes(b))),...a.lockedCarriers?{lockedCarriers:a.lockedCarriers}:{}});e.push(...b.blocking.map(a=>H("blocking",a.code,a.message,a.hint??"按冻结的两级计划修正:小节/契约项/主载体/输出必须与计划一致;planHash 是全局计划 hash,sectionPlanHash 是本节 hash",{...a.unitId?{unitId:a.unitId}:{},...a.expected?{expected:a.expected}:{},...a.observed?{observed:a.observed}:a.outputId?{observed:a.outputId}:{}}))),g.push(...b.advisory.map(a=>H("advisory",a.code,a.message,"按冻结节计划核对契约项与载体",{...a.unitId?{unitId:a.unitId}:{}})))}return{passed:0===e.length,blocking:e,advisory:g}}function M(a,b,c){let d,e=new Set(c),f=[];for(;;){let c=a.entityPage({groupKey:`writing:${b}`,...d?{afterId:d}:{},limit:200});for(let a of c.entities){if(a.deleted||"writing-unit"!==a.kind||!a.value)continue;let b=a.value,c=Array.isArray(b.sectionIds)?b.sectionIds.map(String):[];c.some(a=>e.has(a))&&f.push({unit:b,sectionIds:c})}if(!c.nextAfterId)break;d=c.nextAfterId}return f}function N(a){let b=[],c=[],d=a.sectionUnits.filter(b=>b.sectionIds.includes(a.sectionId));if(a.projectBasicFacts&&(a.structurePlan?(0,s.F_)(a.structurePlan)[0]?.section.sectionId:a.contract.chapters[0]?.sectionIds[0])===a.sectionId)for(let e of(0,r.Gm)({sectionId:a.sectionId,isFirstSection:!0,units:d.map(a=>a.unit),facts:a.projectBasicFacts,...a.projectName?{projectName:a.projectName}:{},...a.sectionPlan?{sectionPlan:a.sectionPlan}:{}}))("advisory"===e.severity?c:b).push(H("advisory"===e.severity?"advisory":"blocking",e.code,e.message,"在第一章第一节正文开始部分写项目基本信息表:字段只取冻结事实,缺失写“待核”;表后主题再展开,表内事实正文不重复",{...e.unitId?{unitId:e.unitId}:{},...e.observed?{observed:e.observed}:{}}));let e=d.map(a=>I(a.unit)).join("\n\n"),k=(0,g.kC)({contract:a.contract,sectionId:a.sectionId,...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.executionBaseline?{executionBaseline:a.executionBaseline}:{},...a.project?{project:a.project}:{},...a.tablesForbidden?{tablesForbidden:!0}:{}});if(!k)return{passed:!1,blocking:[H("blocking","section-unknown",`章节「${a.sectionId}」不在冻结合同里`,"核对 sectionId")],advisory:[]};for(let c of(d.length||b.push(H("blocking","section-empty",`本节「${k.title}」还没有正文单元`,"先写正文;标题不能代替内容")),d))if("paragraph"===c.unit.kind||c.unit.caption?.trim()||b.push(H("blocking","carrier-caption-missing",`本节${"table"===c.unit.kind?"表":"图"}单元「${c.unit.id}」没有题注`,"填写只写主题、不写编号的 caption;题注由发布层统一编号",{unitId:c.unit.id})),"figure"===c.unit.kind)for(let d of(0,j.FT)(c.unit,{...a.executionBaseline?{executionBaseline:a.executionBaseline}:{}}))b.push(H("blocking",d.code,d.message,"按图种契约补齐结构要素;数据不足时明确“示意”,不得编造尺寸、阶段、依赖或关键线路",{unitId:c.unit.id,...d.element?{observed:d.element}:{}}));let l=d.flatMap(a=>a.unit.outputId?[a.unit.outputId]:[]),m=[...new Set(l.filter((a,b)=>l.indexOf(a)!==b))];m.length&&b.push(H("blocking","output-id-duplicate",`本节 outputId 重复:${m.join("、")}`,"一个点名输出只能由一个表/图单元承接"));let n=new Set(l);for(let a of k.requiredOutputs)a.outputId?n.has(a.outputId)||b.push(H("blocking","required-output-unbound",`本节点名要求「${a.element}」,但没有单元绑定 outputId「${a.outputId}」`,`写一张${"table"===a.form?"表":"图"}并在其 outputId 填 ${a.outputId}`,{observed:a.element,expected:a.outputId})):(0,h.Id)(e,a.element)||c.push(H("advisory","required-output-element-unverified",`本节点名要求「${a.element}」,正文题注没有对上名称`,"核对表/图题注是否写清点名的输出名称"));for(let a of k.requiredTables)!function(a,b){let c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d=c[a].trim();if(d.includes(b.title)){let b=a+1;for(;b<c.length&&!c[b].trim();)b+=1;if(b<c.length&&/^\|/u.test(c[b].trim()))return!0}if(!/^\|/u.test(d))continue;let e=d.split("|").slice(1,-1).map(a=>a.trim()).filter(Boolean),f=b.columns.filter(a=>e.some(b=>b.includes(a))).length;if(b.columns.length&&e.length&&f/b.columns.length>=.6)return!0}return!1}(e,a)&&b.push(H("blocking","required-table-missing",`本节应写「${a.title}」,正文没有对应表格`,`补一张表${a.columns.length?`,列:${a.columns.join("|")}`:""};${a.reason}`));for(let a of(k.responsibilityPositions.length&&!k.responsibilityPositions.some(a=>e.includes(a))&&c.push(H("advisory","responsibility-position-missing",`本节内容契约要求写明责任岗位(${k.responsibilityPositions.slice(0,6).join("、")}),正文没有出现`,"在关键工序/验收接口写清岗位称谓(不写姓名)")),k.coverageItems)){let d=(0,h.Ym)(e,a.text);d>=(a.enumerated?.6:.5)||(a.enumerated?b:c).push(H(a.enumerated?"blocking":"advisory","coverage-item-missing",`本节应落实「${a.text}」,正文覆盖度 ${(100*d).toFixed(0)}%`,a.enumerated?"逐项写出该类别的做法/部位/控制值;缺一项即未响应":"核对是否只写总称而漏了该项"))}if(a.executionBaseline)for(let c of(0,f._D)(e,a.executionBaseline).concat((0,f.Pu)(e,a.executionBaseline)).concat((0,f.ke)(e,a.executionBaseline)).concat((0,f.mM)(e,a.executionBaseline)))b.push(H("blocking",c.code,c.message,"按执行基准/表格算术修正;不要另算一套",{...c.evidence?{observed:c.evidence}:{}}));let o=J(e);b.push(...o.filter(a=>"blocking"===a.severity)),c.push(...o.filter(a=>"advisory"===a.severity));let t=d.map(a=>a.unit),u=(0,q.u6)(t);for(let a of(b.push(...u.blocking.map(a=>H("blocking",a.code,a.message,"正文只保留判断/因果/接口,并用 `{{table:<表单元id>}}` 或真实表号引用;删除与表重复的数值/行项",{unitId:a.unitId}))),c.push(...u.advisory.map(a=>H("advisory",a.code,a.message,"确认是否可以改为表号引用",{unitId:a.unitId}))),t.filter(a=>"table"===a.kind))){for(let c of(0,q.AZ)(a))b.push(H("blocking",c.code,c.message,"删除出处/来源/文件/页码列;来源写进单元 assertions/references",{unitId:a.id}));for(let c of p(a))b.push(H("blocking",c.code,c.message,"按分项重算合计或按权威数据修正分项;只允许修正表内数值,不得编造无来源数据",{unitId:a.id,...c.rowLabel?{location:c.rowLabel}:{}}))}let v=new Set(k.coverageItems.map(a=>a.id)),w=new Map;for(let a of t)for(let b of a.coverageItemIds??[])v.has(b)&&w.set(b,[...w.get(b)??[],a.id]);for(let[a,c]of w)c.length>1&&b.push(H("blocking","carrier-primary-duplicate",`契约项「${k.coverageItems.find(b=>b.id===a)?.text??a}」在本节有 ${c.length} 个主载体:${c.join("、")}`,"同一契约项只能有一个主载体;其余单元改填 referencedCoverageItemIds,并用真实表号/图号引用",{observed:c.join("、")}));if(a.structurePlan&&a.sectionPlan){let e=(0,i._J)({structurePlan:a.structurePlan,sectionPlan:a.sectionPlan,submitted:[],sectionUnits:d.map(a=>a.unit),otherUnits:(a.otherSectionUnits??[]).map(a=>({unit:a.unit,sectionIds:a.sectionIds})),...a.lockedCarriers?{lockedCarriers:a.lockedCarriers}:{}});b.push(...e.blocking.map(a=>H("blocking",a.code,a.message,"按冻结的两级计划补齐本节:计划小节、契约项、必出输出与主载体都必须有唯一落点",{...a.unitId?{unitId:a.unitId}:{},...a.outputId?{observed:a.outputId}:{}}))),c.push(...e.advisory.map(a=>H("advisory",a.code,a.message,"按冻结节计划核对契约项与载体",{...a.unitId?{unitId:a.unitId}:{}})))}return{passed:0===b.length,blocking:b,advisory:c}}},55037:(a,b,c)=>{c.r(b),c.d(b,{CONSTRUCTION_WORKSPACE_FILE:()=>o,assembleConstructionRuntime:()=>r,constructionWorkspacePath:()=>p,openConstructionWorkspace:()=>q});var d=c(76760),e=c.n(d),f=c(45532),g=c(745),h=c(88297),i=c(82211);let j={membershipVersion:"construction-domain-v2",readonlyKinds:["source-member","legacy-phase","legacy-activity","legacy-binding","legacy-constraint-adoption","legacy-workspace-evidence"],groups:a=>"resource-pool"===a.kind?["resource:"+a.id]:"resource-demand"===a.kind&&"string"==typeof a.value?.resourcePoolId?["resource:"+a.value.resourcePoolId]:"construction-operation"===a.kind&&Array.isArray(a.value?.requirements)&&Array.isArray(a.value?.components)?["construction-operations","work-package-operations:"+String(a.value.workPackageId),...a.value.requirements.map(a=>"resource:"+String(a.resourcePoolId)),...a.value.components.map(a=>"allocation-operations:"+String(a.allocationId))]:"writing-unit"===a.kind&&"string"==typeof a.value?.responsibilityId?["writing-units","writing:"+a.value.responsibilityId,...Array.isArray(a.value.sectionIds)?a.value.sectionIds.map(a=>"section-units:"+String(a)):[]]:"source-coverage-opinion"===a.kind&&"string"==typeof a.value?.reviewerId?["source-coverage-opinions","source-coverage:"+a.value.reviewerId]:"review-assessment"===a.kind&&"string"==typeof a.value?.reviewerId?["review-assessments","review:"+a.value.reviewerId,...Array.isArray(a.value.unitRefs)?a.value.unitRefs.map(a=>"review-units:"+String(a.id)):[]]:"source-allocation"===a.kind&&"string"==typeof a.value?.memberId&&"string"==typeof a.value?.operation?["source-allocations","allocation:"+(0,g.Fu)([a.value.memberId,a.value.operation]),"work-package-allocations:"+String(a.value.workPackageId)]:"section-lock"===a.kind&&"string"==typeof a.value?.sectionId?["section-locks","section-lock:"+String(a.value.sectionId)]:[],groupValue:a=>{if(!a.value)return null;let{note:b,reason:c,...d}=a.value;return d}},k=a=>JSON.parse(JSON.stringify(a));var l=c(1512),m=c(65131),n=c(38210);let o="workflow-state.sqlite";function p(a,b){if(!a?.trim())throw Error("CONSTRUCTION_WORKSPACE_PROJECT_ROOT_REQUIRED");return e().join(b,o)}function q(a){let b,c=p(a.projectRoot,a.directory),d=new h.l(c,a.identity,j),e=null!==d.workspaceSeedHash();if(!e){let c=function(a){if(a.identity.sourceSnapshotId!==a.project.snapshotId||a.identity.contractId!==a.contract.id||a.contract.projectSnapshotId!==a.project.snapshotId||a.workspace.identity!==(0,i.T)(a.contract,a.project))throw Error("DOMAIN_MIGRATION_IDENTITY_MISMATCH");if(!a.sourceRunId.trim()||!a.sourceBuildId.trim()||!a.evidence.length||a.evidence.some(a=>!a.assetId.trim()||!/^[a-f0-9]{64}$/u.test(a.sha256)))throw Error("DOMAIN_MIGRATION_EVIDENCE_REQUIRED");let b=(0,f.BI)(a.project).map(a=>({id:a.memberId,kind:"source-member",version:1,deleted:!1,value:k({memberId:a.memberId,memberIndex:a.index,sourceFile:a.entry.sourceFile,sourceIdentity:a.sourceIdentity,originalEntryHash:(0,g.Fu)(k(a.entry)),quantity:a.entry.quantity,unit:a.entry.unit})})),c=(a,b,c,d)=>({id:b,kind:a,value:k(c),version:d,deleted:!1}),d=[...b,...a.workspace.phases.map(b=>c("legacy-phase",b.id,b,a.workspace.versions[b.id]??1)),...a.workspace.activities.map(b=>c("legacy-activity",b.id,b,a.workspace.versions[b.id]??1)),...a.workspace.bindings.map(b=>c("legacy-binding","legacy-binding:"+b.memberIndex,b,a.workspace.versions["member:"+b.memberIndex]??1)),...a.workspace.constraintAdoptions.map(b=>c("legacy-constraint-adoption","legacy-constraint:"+b.sourceIndex,b,a.workspace.versions["constraint:"+b.sourceIndex]??1)),c("legacy-workspace-evidence","legacy-workspace-evidence",{identity:a.workspace.identity,revision:a.workspace.revision,decodedStateHash:(0,g.Fu)(k(a.workspace)),readMembers:a.workspace.readMembers,readConstraints:a.workspace.readConstraints,notes:a.workspace.notes,evidence:a.evidence,sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId},1)];if(new Set(d.map(a=>a.id)).size!==d.length)throw Error("DOMAIN_MIGRATION_ENTITY_ID_COLLISION");let e=k({version:"construction-domain-migration-preview-v1",sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId,legacyWorkspaceIdentity:a.workspace.identity,legacyRevision:a.workspace.revision,originalWorkspaceHash:(0,g.Fu)(k(a.workspace)),frozenProjectHash:(0,g.Fu)(k(a.project)),contractHash:(0,g.Fu)(k(a.contract)),counts:{sourceMembers:b.length,phases:a.workspace.phases.length,activities:a.workspace.activities.length,bindings:a.workspace.bindings.length,constraintAdoptions:a.workspace.constraintAdoptions.length},legacyResourceRelations:a.workspace.activities.reduce((a,b)=>a+b.predecessors.filter(a=>a.resourceBasis).length,0),evidence:a.evidence,activationEligible:!1});return{identity:a.identity,entities:d,manifest:e,activationEligible:!1,pending:["施工工作包及专业决定映射待正常专业工具核定","技术约束与旧资源输出的语义迁移尚未完成","旧角色原稿及费用账仅原证据保留,尚未完成新运行接线","新计算、专业资格与正式迁移回执尚未成立"]}}({identity:a.identity,project:a.project,contract:a.contract,workspace:a.workspace,sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId,evidence:a.evidence});d.initialize(c.entities,c.manifest),b={manifest:c.manifest,pending:c.pending}}return{store:d,created:!e,file:c,...b?{migration:b}:{}}}function r(a){let b=q(a),c={store:b.store,file:b.file,created:b.created},d=a.chief(c),e=(0,m._M)({chief:d,profiles:a.profiles(c)});return{...b,coordinator:e,chiefInput:d,drainEvents:a=>(0,l.E)({store:b.store,consumerId:a.consumerId,responsibilities:e.responsibility,...void 0!==a.limit?{limit:a.limit}:{},...a.signal?{signal:a.signal}:{}}),runResponsibility:a=>(0,n.p)(a)}}},55650:(a,b,c)=>{c.d(b,{wb:()=>n,zA:()=>s,bL:()=>r});var d=c(96770),e=c(45532),f=c(44967);let g=(a,b)=>b?g(b,a%b):a,h=(a,b)=>{if(b<=0n)throw Error("WORK_DURATION_DENOMINATOR");let c=g(a<0n?-a:a,b);return{n:a/c,d:b/c}},i=(a,b)=>h(a.n*b.d+b.n*a.d,a.d*b.d),j=(a,b)=>h(a.n*b.n,a.d*b.d),k=a=>({numerator:a.n.toString(),denominator:a.d.toString()});function l(a){if("number"==typeof a&&!Number.isFinite(a))throw Error("WORK_DURATION_DECIMAL_INVALID");let b=/^([+-]?)(\d+)(?:\.(\d*))?(?:e([+-]?\d+))?$/iu.exec(String(a));if(!b)throw Error("WORK_DURATION_DECIMAL_INVALID");let c=Number(b[4]??0)-(b[3]?.length??0);if(!Number.isSafeInteger(c)||Math.abs(c)>1e3)throw Error("WORK_DURATION_DECIMAL_PRECISION_UNSUPPORTED");let d=BigInt(b[2]+(b[3]??""))*("-"===b[1]?-1n:1n);return c<0?h(d,10n**BigInt(-c)):h(d*10n**BigInt(c),1n)}var m=c(745);let n="construction-business-clock-compiler-v1",o=a=>"string"==typeof a&&!!a.trim(),p=a=>JSON.parse(JSON.stringify(a));function q(a,b,c){let d=a.entity(b);if(!d||d.deleted||!d.value||c&&d.kind!==c)throw Error("CONSTRUCTION_DEPENDENCY_NOT_FOUND:"+b+":该 id 不是当前工作库已生效对象;请直接引用 read_calculation/read_receipt 回执里出现的实际 id,不要按名称或简称猜。");return d}function r(a,b,c=[]){if(!b.length||new Set(b).size!==b.length)throw Error("CONSTRUCTION_ROOT_OPERATIONS_REQUIRED");let d=new Map(c.map(a=>[a.id,a])),e=new Set,f=new Set,g={entity:b=>d.get(b)??a.entity(b),group:b=>a.group(b)},h=(a,b)=>(e.add(a),q(g,a,b)),i=b=>(f.add(b),a.group(b).entityIds),j=[...b],k=new Set;for(let a=0;a<j.length;a++){let b=j[a];if(k.has(b))continue;k.add(b);let c=h(b,"construction-operation").value;if(!o(c.workPackageId)||!Array.isArray(c.components)||!Array.isArray(c.requirements)||!Array.isArray(c.predecessors))throw Error("CONSTRUCTION_OPERATION_SCHEMA:"+b);for(let a of(h(c.workPackageId,"work-package"),h(c.calendarId,"work-calendar"),c.predecessors))j.push(a.operationId);for(let a of c.components){let b=h(a.allocationId,"source-allocation").value;for(let a of(h(String(b.memberId),"source-member"),i("allocation:"+(0,m.Fu)([b.memberId,b.operation]))))h(a,"source-allocation");for(let b of i("allocation-operations:"+a.allocationId))g.entity(b)?.kind==="construction-operation"&&j.push(b)}for(let a of c.requirements)for(let b of(h(a.resourcePoolId,"resource-pool"),i("resource:"+a.resourcePoolId)))g.entity(b)?.kind==="construction-operation"&&j.push(b)}return{entityIds:[...e].sort(),groupKeys:[...f].sort(),operationIds:[...k].sort()}}async function s(a){if(!/^[a-f0-9]{64}$/u.test(a.buildId))throw Error("CONSTRUCTION_EVALUATION_BUILD_REQUIRED");let b=(0,m.Fu)([n,d.CONSTRUCTION_SCHEDULE_KERNEL_VERSION,a.buildId,a.clock,a.rootOperationIds,(0,m.Fu)(p(a.project))]);return a.store.evaluateAsync(a.proposalId,b,async b=>{let c;try{c=function(a,b,c,d){if(!o(d.timelineId))throw Error("CONSTRUCTION_TIMELINE_REQUIRED");let g=new Map(b.candidateEntities.map(a=>[a.id,a])),n=new Map(b.groups.map(a=>[a.key,a])),s={entity:a=>g.get(a),group:a=>{let b=n.get(a);if(!b)throw Error("CONSTRUCTION_GROUP_NOT_CAPTURED:"+a);return b}},t=r(s,c),u=new Map((0,e.BI)(a).map(a=>[a.memberId,a])),v=[],w=[],x=new Map,y=new Map,z=a=>a.timelineId===d.timelineId&&(0,m.Fu)(a.timeUnit)===(0,m.Fu)(p(d.timeUnit));for(let c of t.operationIds){let g=q(s,c,"construction-operation").value,n=q(s,g.workPackageId,"work-package").value;if(![g.title,g.operation,g.method,g.workfront,g.continuityBasis].every(o)||"sequential"!==g.execution||!g.components.length||!Array.isArray(n.memberIds))throw Error("CONSTRUCTION_ACTUAL_WORK_UNIT_REQUIRED:"+c);let r=q(s,g.calendarId,"work-calendar").value;if(!z(r)||!o(r.basis)||!Array.isArray(r.windows))throw Error("CONSTRUCTION_CALENDAR_NOT_MEASURED:"+g.calendarId);let t=g.components.map(a=>{if(y.has(a.allocationId))throw Error("CONSTRUCTION_ALLOCATION_USED_TWICE:"+a.allocationId);y.set(a.allocationId,c);let d=q(s,a.allocationId,"source-allocation").value,e=String(d.memberId),f=u.get(e),h=q(s,e,"source-member").value;if(!f||h.originalEntryHash!==(0,m.Fu)(p(f.entry))||d.workPackageId!==g.workPackageId||d.operation!==g.operation||!n.memberIds.includes(e))throw Error("CONSTRUCTION_SOURCE_ALLOCATION_IDENTITY:"+a.allocationId);let i="allocation:"+(0,m.Fu)([e,d.operation]),j=0n,k=1n;for(let a of new Set([...s.group(i).entityIds,...b.proposal.changes.filter(a=>"source-allocation"===a.kind&&a.value?.memberId===e&&a.value.operation===d.operation).map(a=>a.id)])){let b=s.entity(a);if(!b||b.deleted)continue;let c=b.value;if(!/^[1-9]\d*$/u.test(String(c.numerator))||!/^[1-9]\d*$/u.test(String(c.denominator)))throw Error("CONSTRUCTION_SOURCE_ALLOCATION_FRACTION");j=j*BigInt(String(c.denominator))+BigInt(String(c.numerator))*k,k*=BigInt(String(c.denominator));let d=(a,b)=>b?d(b,a%b):a,e=d(j,k);j/=e,k/=e}if(j>k)throw Error("CONSTRUCTION_SOURCE_ALLOCATION_OVERFLOW:"+e);return{...a,id:a.allocationId,memberId:e,share:{numerator:String(d.numerator),denominator:String(d.denominator)}}}),A=function(a){if(!a.workUnitId.trim()||!a.operation.trim()||!a.continuityBasis.trim()||!a.components.length||new Set(a.components.map(a=>a.id)).size!==a.components.length)throw Error("WORK_DURATION_ACTUAL_OPERATION_REQUIRED");if(!Number.isSafeInteger(a.timeUnit.ticksPerUnit)||a.timeUnit.ticksPerUnit<1||!Number.isSafeInteger(a.rounding.quantumTicks)||a.rounding.quantumTicks<1||!a.rounding.basis.trim())throw Error("WORK_DURATION_ROUNDING_REQUIRED");let b={hour:1,minute:60,second:3600}[a.timeUnit.unit];if(!b)throw Error("WORK_DURATION_CLOCK_UNIT_REQUIRED");let c=new Map((0,e.BI)(a.project).map(a=>[a.memberId,a])),d=new Map,g={n:0n,d:1n},m=a.components.map(b=>{let m=c.get(b.memberId);if(!m||"eligible"!==(0,f.L2)(a.project,m.entry).sourceVersionFieldEligibility.quantity.status)throw Error("WORK_DURATION_SOURCE_NOT_ELIGIBLE");if(!/^[1-9]\d*$/u.test(b.share.numerator)||!/^[1-9]\d*$/u.test(b.share.denominator))throw Error("WORK_DURATION_SHARE_INVALID");let n=h(BigInt(b.share.numerator),BigInt(b.share.denominator)),o=i(d.get(m.memberId)??{n:0n,d:1n},n);if(d.set(m.memberId,o),o.n>o.d)throw Error("WORK_DURATION_SOURCE_OVERALLOCATED");if(!Number.isSafeInteger(b.plannedCrews)||b.plannedCrews<1||!Number.isSafeInteger(b.productiveCrews)||b.productiveCrews<1||b.productiveCrews>b.plannedCrews||!b.parallelismBasis.trim()||!Number.isFinite(b.hoursPerShift)||b.hoursPerShift<=0||b.hoursPerShift>24||!b.ratePerCrewShift.basis.trim())throw Error("WORK_DURATION_PRODUCTION_CONFIGURATION_REQUIRED");if(!(0,e.Im)(b.ratePerCrewShift.unit,m.entry.unit,"crew"))throw Error(`WORK_DURATION_UNIT_MISMATCH:ratePerCrewShift.unit「${b.ratePerCrewShift.unit}」与清单成员「${m.entry.name}」单位「${m.entry.unit}」不匹配;应写成「${m.entry.unit}/班」或「${m.entry.unit}/台班」`);let p=l(m.entry.quantity),q=l(b.ratePerCrewShift.value);if(p.n<=0n||q.n<=0n)throw Error("WORK_DURATION_POSITIVE_QUANTITY_AND_RATE_REQUIRED");let r=j(p,n),s=j(((a,b)=>{if(b.n<=0n)throw Error("WORK_DURATION_POSITIVE_RATE_REQUIRED");return h(a.n*b.d,a.d*b.n)})(r,j(q,h(BigInt(b.productiveCrews),1n))),l(b.hoursPerShift));return g=i(g,s),{id:b.id,memberId:m.memberId,sourceIdentity:m.sourceIdentity,unit:m.entry.unit,originalQuantity:m.entry.quantity,allocatedQuantity:k(r),workHours:k(s)}}),n=j(g,h(BigInt(b)*BigInt(a.timeUnit.ticksPerUnit),1n)),o=BigInt(a.rounding.quantumTicks),p=(n.n+n.d*o-1n)/(n.d*o)*o;if(p>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WORK_DURATION_TICK_RANGE_UNSUPPORTED");return{workUnitId:a.workUnitId,operation:a.operation,components:m,exactWorkHours:k(g),exactTicks:k(n),durationTicks:Number(p),rounding:{...a.rounding,addedTicks:k(i(h(p,1n),h(-n.n,n.d)))},timeUnit:a.timeUnit,scope:"declared-work-unit-duration-only",productionQualified:!1,globalDatesOrPeaksCertified:!1}}({project:a,workUnitId:c,operation:g.operation,continuityBasis:g.continuityBasis,components:t,timeUnit:d.timeUnit,rounding:g.rounding});v.push(A);let B=0,C=g.requirements.map(a=>{let b=q(s,a.resourcePoolId,"resource-pool");if(x.set(b.id,b),!z(b.value)||!o(b.value.capacityBasis)||!o(b.value.title)||!o(b.value.unit)||!Array.isArray(b.value.availability)||!o(a.basis)||!["work","retained"].includes(a.mode))throw Error("CONSTRUCTION_RESOURCE_CAPACITY_NOT_DECLARED:"+b.id);if("crew"===b.value.unit&&"work"===a.mode&&(B+=a.demand),"work"===a.mode&&void 0!==a.holdAfterTicks)throw Error("CONSTRUCTION_WORK_RESOURCE_RETENTION_AMBIGUOUS");return{resourceId:b.id,demand:a.demand,from:0,to:"work"===a.mode?A.durationTicks:a.holdAfterTicks??0,mode:a.mode}}),D=Math.max(...t.map(a=>a.productiveCrews));if(B<D)throw Error(`CONSTRUCTION_PRODUCTIVE_CREWS_NOT_RESERVED:${c}:requirements 中 mode=work 且资源池 unit='crew' 的需求合计 ${B} < productiveCrews ${D};班组资源池的 unit 必须是 'crew'(容量按班组数,不是人数),并在 requirements 中给 mode=work、demand≥${D} 的需求`);for(let a of g.predecessors)if(!o(a.basis)||Object.keys(a).some(a=>!["operationId","from","lag","basis"].includes(a)))throw Error("CONSTRUCTION_TECHNICAL_EDGE_BASIS_REQUIRED:"+c);w.push({id:c,kind:"operation",duration:A.durationTicks,workingCalendar:r.windows,predecessors:g.predecessors.map(a=>({id:a.operationId,from:a.from,lag:a.lag})),uses:C,...void 0===g.release?{}:{release:g.release},...void 0===g.latestFinish?{}:{latestFinish:g.latestFinish}})}return{compiled:{timeUnit:d.timeUnit,horizon:d.horizon,jobs:w,resources:[...x.values()].map(a=>({id:a.id,availability:a.value.availability})),...void 0===d.targetFinish?{}:{targetFinish:d.targetFinish}},units:v,scope:t,clock:d,sourceSnapshotId:a.snapshotId}}(a.project,b,a.rootOperationIds,a.clock)}catch(a){return{dataValidity:"invalid",relatedConstraints:"invalid",schedule:{scope:"local",state:"unmeasured"},issues:[{code:"CONSTRUCTION_COMPILATION_REJECTED",reason:a instanceof Error?a.message:String(a)}],result:{professionalAccepted:!1,globalFeasibilityAccepted:!1}}}let g=await (0,d.runCompiledSchedule)(c.compiled,{signal:a.signal}),s=g.results.filter(a=>a.checked&&(0,d.checkCompiledSchedule)(c.compiled,a.placements).accepted).sort((a,b)=>a.finish-b.finish||a.strategy.localeCompare(b.strategy))[0]??g.results[0],t=g.results.some(a=>"unmeasured"===a.state||"constraint-violation"===a.state),u=(0,e.BI)(a.project).map(a=>a.memberId),v=new Set(c.units.flatMap(a=>a.components.map(a=>a.memberId))),w={scope:u.length>0&&v.size>=u.length?"global":"partial",coveredMembers:v.size,totalMembers:u.length};return{dataValidity:t?"invalid":"valid",relatedConstraints:t?"invalid":"valid",schedule:{scope:"local",state:s.state},issues:s.issues,result:p({compilerVersion:n,buildId:a.buildId,threadId:g.threadId,compilation:c,candidates:g.results,selectedStrategy:s.strategy,professionalAccepted:!1,globalFeasibilityAccepted:!1,assertionScope:"current-related-operations-and-declared-resources-only",scheduleCoverage:w})}})}},58716:(a,b,c)=>{c.d(b,{F:()=>i,y:()=>h});var d=c(61485),e=c(9104),f=c(25353),g=c(25164);function h(a){return{...a,sections:a.sections.map(a=>{let{requiredOutputs:b,coverageItems:c,workPackages:d,...e}=a;return{...e,workPackages:d.map(a=>({id:a.id,title:a.title,objectScope:a.objectScope,workfront:a.workfront,memberCount:a.memberCount})),workPackagesReading:"本节工作包的成员与工程量明细未随每轮上下文重发;需要时用 read_object/read_scope 按工作包或节读取。"}})}}function i(a){let b,c,h,i=new Set(a.sectionIds),j=new Map((a.tenderResponsePlan?.sections??[]).map(a=>[a.sectionId,a])),k=(0,d.cD)(a.store,{contract:a.contract,responsibilityId:a.responsibilityId,expectedBidCompositionHash:a.expectedBidCompositionHash,...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{}}),l=new Set(k.missingUnitIds),m=new Map,n=new Map;for(;;){let c=a.store.issuePage({states:["open","investigating","awaiting-decision"],...void 0===b?{}:{afterSequence:b},limit:200});for(let b of c.issues){if("review-finding"!==b.kind)continue;let c=(0,f.N7)(a.store,b),d=(0,f.S0)(c)?m:n;for(let a of c.scope.entityIds)d.set(a,[...d.get(a)??[],c.id])}if(void 0===c.nextAfterSequence)break;b=c.nextAfterSequence}let o=new Map;for(;;){let b=a.store.entityPage({groupKey:`writing:${a.responsibilityId}`,...c?{afterId:c}:{},limit:200});for(let a of b.entities){if(a.deleted||"writing-unit"!==a.kind||!a.value)continue;let b=a.value,c=Array.isArray(b.sectionIds)?b.sectionIds.map(String):[],d="string"==typeof b.id?b.id:a.id,e="table"===b.kind||"figure"===b.kind?b.kind:"paragraph";for(let f of c){if(!i.has(f))continue;let c=o.get(f)??[];c.push({entityId:a.id,unitId:d,version:a.version,kind:e,..."string"==typeof b.subsectionId&&b.subsectionId.trim()?{subsectionId:b.subsectionId.trim()}:{},..."string"==typeof b.blockId&&b.blockId.trim()?{blockId:b.blockId.trim()}:{},..."string"==typeof b.heading&&b.heading.trim()?{heading:b.heading.trim()}:{},..."string"==typeof b.caption&&b.caption.trim()?{caption:b.caption.trim()}:{},size:"string"==typeof b.text?Array.from(b.text).length:Array.isArray(b.rows)?b.rows.length:Array.isArray(b.nodes)?b.nodes.length:0,review:{covered:!l.has(a.id)},openFindingIds:[...new Set(m.get(a.id)??[])],advisoryFindingIds:[...new Set(n.get(a.id)??[])]}),o.set(f,c)}}if(!b.nextAfterId)break;c=b.nextAfterId}let p=a.project?(0,e.qN)(a.store,a.project):[],q=a.workPackageIds?.length?new Set(a.workPackageIds):void 0,r=a.memberIndices?.length?new Set(a.memberIndices):void 0,s="writing"===a.purpose,t=[];for(;;){let b=a.store.entityPageByKind({kind:"construction-operation",...h?{afterId:h}:{},limit:200});for(let a of b.entities){let b=a.value;b?.workPackageId&&t.push({id:a.id,workPackageId:String(b.workPackageId),status:a.deleted?"deleted":`v${a.version}`})}if(!b.nextAfterId)break;h=b.nextAfterId}let u=(0,e.nu)(a.store),v=a.store.entity("document-execution-baseline"),w=a.contract.sections.filter(a=>i.has(a.id)).map(b=>{let c=o.get(b.id)??[],d=j.get(b.id),e=c.filter(a=>!a.review.covered).map(a=>a.entityId),f=c.filter(a=>a.openFindingIds.length),h=[];c.length||h.push("本节还没有生效正文单元:先按内容契约成文"),e.length&&h.push(`还有 ${e.length} 个单元缺当前审查档位`),f.length&&h.push(`${f.length} 个单元有未关闭 finding:修订或逐条举证`),!c.length||e.length||f.length||h.push("本节单元齐、档位齐、无未关闭 finding:可收口");let i=p.filter(a=>a.sectionIds.includes(b.id)&&(!q||q.has(a.id))).map(a=>{let b=s?[]:a.members.filter(a=>!r||r.has(a.memberIndex));return{id:a.id,title:a.title,objectScope:a.objectScope,workfront:a.workfront,memberCount:a.members.length,members:b.map(a=>({index:a.memberIndex,name:a.name,quantity:a.quantity,unit:a.unit})),quantities:[...new Map(a.members.map(a=>[`${a.name}|${a.unit}`,{name:a.name,value:a.quantity,unit:a.unit}])).values()]}}),l=(0,g.Pp)(a.store,b.id);return i.length||h.push("本节还没有工作包/清单成员:基准与写作数据不完整"),{sectionId:b.id,title:b.title,chapterId:b.chapterId,units:c,review:{complete:0===e.length,missingUnitIds:e,applied:k.applied,stale:k.stale},requiredOutputs:(d?.requiredOutputs??[]).map(a=>({form:a.form,basis:a.basis,allowed:a.allowed})),coverageItems:(d?.contentContract?.coverageItems??[]).map(a=>({id:a.id,text:a.text,enumerated:a.enumerated,kind:a.kind,...a.suggestedCarrier?{suggestedCarrier:a.suggestedCarrier}:{}})),workPackages:i,calculations:function(a,b){let c=new Set(a.map(a=>a.id));return b.filter(a=>c.has(a.workPackageId)).map(a=>({operationId:a.id,status:a.status,...a.certificateId?{certificateId:a.certificateId}:{}}))}(i,t),...u&&v?{baseline:{id:v.id,version:v.version,startDate:u.startDate,totalDays:u.totalDays}}:{},hints:h,...l?{state:{phase:l.phase,inputHash:l.inputHash,boundaryKey:l.boundaryKey,...l.reason?{reason:l.reason}:{},dependencyKeys:l.dependencyKeys}}:{}}});return{responsibilityId:a.responsibilityId,sections:w,instruction:"这是本职责当前章节的权威工作区:单元版本、审查档位、未关闭 finding 与招标输出/原子项都在这里。先据此判断下一步;需要正文原文时按单元 id/字段读取,不要反复 read_object/read_receipt 重建同一状态。工作区只是观察,不产生业务进展;写、审、改仍由你决定。"}}},60126:(a,b,c)=>{c.d(b,{Ep:()=>g,Fv:()=>h,nP:()=>i});var d=c(745);let e=a=>`section-contract:${a}`,f="section-contract-control",g=(a,b)=>b.subscribe(c=>(function(a,b,c){let g=[...b.map(a=>({id:e(a.referenceId),kind:"section-contract",state:{referenceId:a.referenceId,sectionId:a.sectionId,contractHash:a.contractHash,dependencyReferenceIds:a.dependencyReferenceIds,sourceOnlyDraft:!0===a.sourceOnlyDraft,permitted:"draft-approved"===a.status||"global-approved"===a.status}})),{id:f,kind:"section-contract-control",state:{globalPlanHash:c??null}}].flatMap(({id:b,kind:c,state:e})=>{let f=a.entity(b);if(f&&f.kind!==c)throw Error("SECTION_CONTRACT_ENTITY_CONFLICT");let g=JSON.parse(JSON.stringify(e));return f&&!f.deleted&&(0,d.Fu)(f.value)===(0,d.Fu)(g)?[]:[{id:b,kind:c,expectedVersion:f?.version??null,value:g}]});if(!g.length)return;let h=(0,d.Fu)(g),i=a.propose({actorId:"structure-contracts",purpose:"structure-contract-version",reason:"当前结构审查及实际依赖合同版本",reads:{entities:g.map(a=>({id:a.id,version:a.expectedVersion})),groups:[]},changes:g},`section-contracts:${h}:propose`);a.evaluate(i.id,"section-contracts-v1",()=>({dataValidity:"valid",relatedConstraints:"valid",schedule:{scope:"local",state:"not-evaluated"},issues:[],result:{identity:h}})),a.commit(i.id,`section-contracts:${h}:commit`)})(a,c,b.approvedGlobalPlanHash()));function h(a,b){let c=a.entity(f);if(!c)return{entities:[],groups:[]};if(c.deleted||"section-contract-control"!==c.kind||c.value?.globalPlanHash!==b)throw Error("SECTION_CONTRACT_GLOBAL_APPROVAL_REQUIRED");return{entities:[{id:f,version:c.version}],groups:[]}}function i(a,b,c){let d=new Map,f=()=>{};try{for(let a of new Set(c))d.set(a,b.acquire(a));f=g(a,b);let h=new Map;for(let[c,f]of d){let d=b.snapshot().find(a=>a.referenceId===f.referenceId);h.set(c,[d.referenceId,...d.dependencyReferenceIds].map(b=>{let c=e(b),d=a.entity(c);if(!d||d.deleted)throw Error("SECTION_CONTRACT_ENTITY_MISSING");return{id:c,version:d.version}}))}let i=b=>{for(let c of b){let b=d.get(c);if(!b)throw Error(`SECTION_CONTRACT_SCOPE_DENIED:${c}`);for(let d of(b.assertCurrent(),h.get(c)))if(a.entity(d.id)?.version!==d.version)throw Error(`SECTION_CONTRACT_READ_STALE:${d.id}`)}};return{signal:AbortSignal.any([...d.values()].map(a=>a.signal)),assertCurrent:i,reads:a=>(i(a),{entities:a.flatMap(a=>h.get(a)),groups:[]}),release:()=>{for(let a of(f(),d.values()))a.release()}}}catch(a){for(let a of(f(),d.values()))a.release();throw a}}},60806:(a,b,c)=>{c.d(b,{R:()=>g});var d=c(745),e=c(4053),f=c(25353);function g(a,b,c,g){let h=b.revision;if(!h)return c;let i=b.sectionIds[0],j=a=>(0,e.tp)(b.responsibilityId,b.purpose,a,i),k=new Map;for(let b;;){let c=a.entityPage({groupKey:`section-units:${i}`,...b?{afterId:b}:{},limit:200});for(let a of c.entities)(0,e.iC)(a)&&k.set(a.id,a);if(!c.nextAfterId)break;b=c.nextAfterId}let l=new Map(c.map(a=>[a.id,a])),m=new Set(h.retire.map(a=>j(a.unitId)));if(m.size!==h.retire.length)throw Error("WRITING_REVISION_RETIRE_DUPLICATE");for(let a of h.retire){let b=j(a.unitId),c=k.get(b);if(!c||c.version!==a.version)throw Error(`WRITING_REVISION_CONFLICT:${b}@${a.version}`);if(l.has(b))throw Error(`WRITING_REVISION_RETIRED_AND_WRITTEN:${b}`);l.set(b,{id:b,kind:"writing-unit",expectedVersion:a.version,value:null})}let n=new Map(h.replacements.map(a=>[j(a.fromUnitId),a.toUnitIds.map(j)]));if(n.size!==h.replacements.length||[...n.keys()].some(a=>!m.has(a))||[...m].some(a=>!n.has(a)))throw Error("WRITING_REVISION_REPLACEMENT_REQUIRED");for(let[a,b]of n)for(let c of b){let b=l.get(c);if(!b?.value||"writing-unit"!==b.kind)throw Error(`WRITING_REVISION_REPLACEMENT_MISSING:${c}`);let d=Array.isArray(b.value.replaces)?b.value.replaces:[];b.value={...b.value,replaces:[...d,{entityId:a,version:k.get(a).version}]}}let o=new Map;for(let[a,b]of k)o.set(a,(0,e.iC)(b));for(let a of l.values())a.value?o.set(a.id,a.value):o.delete(a.id);if(new Set(h.redirects.map(a=>a.fromUnitId)).size!==h.redirects.length)throw Error("WRITING_REVISION_REDIRECT_AMBIGUOUS");for(let a of h.redirects){let c=j(a.fromUnitId),d=j(a.toUnitId),e=o.get(d);if(!m.has(c)||!e||"paragraph"===e.kind)throw Error("WRITING_REVISION_REDIRECT_INVALID");for(let[c,d]of o){if(!d.text)continue;let f=d.text;for(let b of["table","figure"])f=f.split(`{{${b}:${a.fromUnitId}}}`).join(`{{${e.kind}:${a.toUnitId}}}`);if(f!==d.text){let g=k.get(c);if(g?.value?.responsibilityId!==b.responsibilityId&&!l.has(c))throw Error("WRITING_REVISION_CROSS_AUTHOR_REFERENCE");let h=b=>["table","figure"].reduce((b,c)=>b.split(`{{${c}:${a.fromUnitId}}}`).join(`{{${e.kind}:${a.toUnitId}}}`),b),i={...d,text:f,...d.implementations?{implementations:d.implementations.map(a=>({...a,location:{...a.location,...a.location.quote?{quote:h(a.location.quote)}:{}}}))}:{},...d.claims?{claims:d.claims.map(a=>({...a,location:{...a.location,...a.location.quote?{quote:h(a.location.quote)}:{}}}))}:{}};o.set(c,i),l.set(c,{id:c,kind:"writing-unit",expectedVersion:g?.version??null,value:i})}}}for(let a of o.values())for(let b of h.retire)if(["table","figure"].some(c=>a.text?.includes(`{{${c}:${b.unitId}}}`)))throw Error(`WRITING_REVISION_DANGLING_REFERENCE:${b.unitId}`);for(let[a,b]of o)for(let c of[...b.references??[],...(b.assertions??[]).map(a=>a.reference)])if("decision"===c.kind&&m.has(c.entityId))throw Error(`WRITING_REVISION_RETIRED_DECISION_REFERENCE:${a} -> ${c.entityId};正文载体引用使用可重定向的表/图引用,工程断言须重新绑定真实决定或证据`);let p=[...new Set([...m,...[...l.values()].filter(a=>"writing-unit"===a.kind&&k.has(a.id)).map(a=>a.id)])].map(a=>(0,e.iC)(k.get(a))),q=new Set(p.flatMap(a=>a.coverageItemIds??[])),r=new Set(p.flatMap(a=>a.outputId?[a.outputId]:[]));for(let a of q)if(1!==[...o.values()].filter(b=>b.coverageItemIds?.includes(a)).length)throw Error(`WRITING_REVISION_COVERAGE_NOT_CONSERVED:${a}`);for(let a of r)if(1!==[...o.values()].filter(b=>b.outputId===a&&"paragraph"!==b.kind).length)throw Error(`WRITING_REVISION_OUTPUT_NOT_CONSERVED:${a}`);for(let b of(0,f.bF)(a,[...m])){let c=[...new Set(b.scope.entityIds.flatMap(a=>{let b=n.get(a);return b?.length?b:b?[...o.keys()]:[a]}))];if(!c.length)throw Error(`WRITING_REVISION_UNRESOLVED_FINDING:${b.id}`);let d=(0,f.wI)(b.id),e=a.entity(d);l.set(d,{id:d,kind:"review-finding-targets",expectedVersion:e?.version??null,value:{issueId:b.id,targets:c.map(b=>({id:b,version:l.has(b)?(l.get(b).expectedVersion??0)+1:k.get(b)?.version??a.entity(b)?.version??1}))}})}let s="writing-revision:"+(0,d.Fu)([b.responsibilityId,i,h,b.units]).slice(0,32),t=a.entity(s);return l.set(s,{id:s,kind:"writing-revision",expectedVersion:t?.version??null,value:JSON.parse(JSON.stringify({sectionId:i,revision:h,requestHash:(0,d.Fu)([b,g])}))}),[...l.values()]}},65131:(a,b,c)=>{c.d(b,{_M:()=>s,pu:()=>j});var d=c(45532),e=c(745),f=c(17768),g=c(20209),h=c(5468);let i={"source-check":["read-current","professional-decision"],"method-decision":["read-current","work-package","source-allocation","production","shared-definition"],"production-calculation":["read-current","source-allocation","production","shared-definition"],writing:["read-current","writing"]};function j(a,b){return i[a].filter(a=>b.includes(a))}let k={writing:"writing","production-calculation":"production"},l={"source-check":[],"method-decision":[],"production-calculation":[],writing:["compare","read_calculation","query_work_packages","list_construction_responsibility_options","delegate_construction_responsibility","conclude_construction_organization","section_workspace","read_scope","read_object","search_evidence","set_focus","plan_section","query_project_facts","query_cad_context","query_source_units","discover_files","list_skills","match_skills","load_skill","preview","inspect_source_coverage"]},m=["source-check","method-decision","production-calculation","writing"],n=[...m];function o(a){let b={...a},c=(a,c)=>{let d=((...a)=>{for(let c of a){let a=b[c];if(null!=a&&!("string"==typeof a&&!a.trim()))return a}})(a,...c);if(void 0!==d)for(let e of(b[a]=d,c))e!==a&&delete b[e]};for(let a of(c("profileId",["profile","profile_id","profileKey","role"]),c("responsibilityKey",["responsibility_key","responsibility","key"]),c("purpose",["workPurpose","work_purpose","intent"]),c("workPackageIds",["work_packages","workPackageId","workPackage"]),c("sectionIds",["sections","sectionId","section_ids"]),c("goal",["objective","target"]),c("expectedOutcome",["expected_outcome","outcome","deliverable"]),c("reason",["basis","rationale"]),["workPackageIds","sectionIds"])){let c=b[a];"string"==typeof c?b[a]=c.split(/[,,、\n]/u).map(a=>a.trim()).filter(Boolean):Array.isArray(c)&&(b[a]=[...new Set(c.map(a=>String(a).trim()).filter(Boolean))])}if("string"==typeof b.primary?b.primary=["true","1","yes","是"].includes(b.primary.trim().toLowerCase()):(void 0===b.primary||null===b.primary)&&(b.primary=!1),"string"==typeof b.purpose){let a=b.purpose.trim().toLowerCase().replace(/[\s_]+/gu,"-");b.purpose=({"source-check":"source-check",查证:"source-check",核验:"source-check",取证:"source-check","method-decision":"method-decision",方法:"method-decision",工艺:"method-decision",组织:"method-decision","production-calculation":"production-calculation",计算:"production-calculation",排程:"production-calculation",writing:"writing",write:"writing",写作:"writing",成文:"writing",正文:"writing"})[a]??b.purpose}for(let a of["profileId","responsibilityKey","goal","expectedOutcome","reason"])"string"==typeof b[a]&&(b[a]=b[a].trim());return b}let p={type:"string",minLength:1},q=(a,b=Object.keys(a))=>({type:"object",properties:a,required:b,additionalProperties:!1}),r=a=>Array.isArray(a)&&a.every(a=>"string"==typeof a&&!!a.trim())&&new Set(a).size===a.length;function s(a){let{chief:b}=a,c=b.store,i=new Map(a.profiles.map(a=>[a.id,{...a,permissions:[...a.permissions],evidence:a.evidence&&{...a.evidence,skills:structuredClone([...a.evidence.skills]),scopeRootNames:[...a.evidence.scopeRootNames],toolNames:[...a.evidence.toolNames]},extraTools:(a.extraTools??[]).map(a=>({...a,parameters:structuredClone(a.parameters)}))}]));if("document-chief"!==b.responsibilityKind||i.size!==a.profiles.length||[...i.values()].some(a=>!/^[a-z][a-z0-9-]*$/u.test(a.id)||!a.system.trim()||"function"!=typeof a.caller||"professional"!==a.kind||a.permissions.some(a=>!h.m.includes(a))||a.permissions.some(a=>!b.permissions.includes(a))))throw Error("CONSTRUCTION_RESPONSIBILITY_PROFILE_INVALID");let s=new Map((0,d.BI)(b.project).map(a=>[a.memberId,a])),t=a=>{let d=i.get(a.profileId);if(!d)throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:profileId「${String(a.profileId)}」不在能力目录里;可选:${[...i.keys()].join("、")}`);let f=m;if(!f.includes(a.purpose))throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:purpose「${String(a.purpose)}」不适用于档案「${d.id}」(role=${d.kind});可选:${f.join("、")}。purpose 决定本条职责暴露的工具面与工作集投影,不是可省略的标签,也不是阶段顺序。`);let g=k[a.purpose];if(g&&!d.permissions.includes(g))throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:档案「${d.id}」缺少目的「${a.purpose}」的核心授权「${g}」,按目的取交集会静默删掉主能力;请换用具备该能力的档案,或在本项目能力目录中补上该授权。`);if(!/^[a-z][a-z0-9-]{0,63}$/u.test(a.responsibilityKey))throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:responsibilityKey「${String(a.responsibilityKey)}」不合形状——只允许小写字母开头、后接小写字母/数字/连字符(**不含冒号、下划线、空格**),长度 ≤64;它是稳定身份,不随显示名或轮次变化`);if(!r(a.workPackageIds))throw Error("CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:workPackageIds 必须是不重复的非空字符串数组(可传 [] 表示本职责不含工作包)");if(!r(a.sectionIds)||!a.sectionIds.length)throw Error("CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:sectionIds 必须是不重复的非空字符串数组(至少承接一个合同章节)");if(!a.goal.trim()||!a.expectedOutcome.trim())throw Error("CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:goal 与 expectedOutcome 都不能为空——首条指令必须说清目标与所需成果");if(a.sectionIds.some(a=>!b.authority.sectionIds.includes(a)))throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:sectionIds 里有章节不在本次范围;本次可用:${[...b.authority.sectionIds].join("、")}`);if(a.sectionIds.some(a=>!b.contract.sections.some(b=>b.id===a)))throw Error("CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:sectionIds 里有合同里不存在的章节");if("writing"===a.purpose){let d="responsibility:"+(0,e.Fu)([c.workspaceId,a.responsibilityKey]).slice(0,24),f=new Map;for(let e of c.supervisedActors(b.authority.actorId)){if(e.actorId===d)continue;let b=e.definition;if(!Array.isArray(b.toolFace)||!b.toolFace.includes("writing"))continue;let c=new Set(Array.isArray(b.sectionIds)?b.sectionIds.map(String):[]),g=String(b.assignmentBinding?.responsibilityKey??e.actorId);for(let b of a.sectionIds)c.has(b)&&f.set(b,[...f.get(b)??[],g])}if(f.size)throw Error(`CONSTRUCTION_DELEGATION_WRITING_SECTION_DUPLICATED:以下章节已有 writing 职责承接:${[...f].slice(0,8).map(([a,b])=>`${a}(${b.join("、")})`).join(";")}。同一节只能有一个 writing 职责;请从本次 sectionIds 移除这些节,剩余节用新的 responsibilityKey 另立职责,或把补充内容写给已有职责。不要原样重试,也不要等到 conclude 才发现重复。`)}if(a.primary&&"professional"!==d.kind)throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:primary 只能给专业档案(本档案 kind=${d.kind})`);let h=a.workPackageIds.map(a=>{let d=c.entity(a);if(!d||d.deleted||"work-package"!==d.kind||!b.authorizeRead(d)||!r(d.value?.memberIds)||!r(d.value?.sectionIds))throw Error("CONSTRUCTION_DELEGATION_PACKAGE_REQUIRED");return d}),n=[...new Set(h.flatMap(a=>a.value.memberIds))].map(a=>{let d=s.get(a),f=c.entity(a);if(!d||!b.authority.memberIndices.includes(d.index)||f?.kind!=="source-member"||f.value?.originalEntryHash!==(0,e.Fu)(JSON.parse(JSON.stringify(d.entry))))throw Error("CONSTRUCTION_DELEGATION_MEMBER_SCOPE_DENIED");return d.index}).sort((a,b)=>a-b),o=h.length?a.sectionIds.filter(a=>!h.some(b=>b.value.sectionIds.includes(a))):[];if(o.length)throw Error(`CONSTRUCTION_DELEGATION_SECTION_PACKAGE_MISMATCH:章节 ${o.join("、")} 不在本次委派任何工作包的覆盖范围内;各包覆盖:${h.map(a=>`${a.id}→[${a.value.sectionIds.join("、")}]`).join(";")}。请为这些章节选择覆盖它们的工作包,或先提交覆盖这些章节的工作包再委派。`);let p=j(a.purpose,d.permissions);if(!h.length&&p.some(a=>"read-current"!==a))throw Error("CONSTRUCTION_DELEGATION_PRODUCTION_SCOPE_REQUIRED");let q="responsibility:"+(0,e.Fu)([c.workspaceId,a.responsibilityKey]).slice(0,24),t=l[a.purpose],u={profileId:a.profileId,responsibilityKey:a.responsibilityKey,workPackageIds:[...a.workPackageIds].sort(),sectionIds:[...a.sectionIds].sort(),primary:a.primary,goal:a.goal,expectedOutcome:a.expectedOutcome,purpose:a.purpose},w={...b,coordination:void 0,authority:{actorId:q,memberIndices:n,sectionIds:[...a.sectionIds].sort(),canManageSharedResources:p.includes("shared-definition")&&b.authority.canManageSharedResources},system:d.purposeSystems?.[a.purpose]??d.system,caller:d.caller,goal:a.goal,responsibilityKind:d.kind,supervisorActorId:b.authority.actorId,...d.deferSectionReview?{deferSectionReview:d.deferSectionReview}:{},resumeCompleted:()=>v(q),toolFace:p,excludeTools:t,permissions:d.permissions,evidence:d.evidence,extraTools:d.extraTools,assignmentBinding:u,initialFocus:{purpose:a.purpose,entityIds:a.workPackageIds.slice(0,1)}};return{actorId:q,value:w,basis:{entities:h.map(a=>({id:a.id,version:a.version})),groups:[]}}},u=new Set,v=a=>{let b=[],d=[];for(let a;;){let b=c.issuePage({states:["open","investigating","awaiting-decision","resolved","invalidated"],...void 0===a?{}:{afterSequence:a},limit:200});if(d.push(...b.issues),void 0===b.nextAfterSequence)break;a=b.nextAfterSequence}for(let c of d)if(c.owner===a&&["open","investigating","awaiting-decision"].includes(c.state)){let a=["owned",c.id,c.state,c.updatedAt].join(":");if(u.has(a))continue;u.add(a),b.push(`- 问题「${c.title}」(${c.id},由 ${c.raisedBy} 登记)**需要你处理**:`+(c.decision?`要作出的决定:${c.decision.question};可选:${c.decision.options.join("、")}。`:`${c.detail}。`)+"用 `inspect_issues` 读完整记录,按你的职责给出意见或推进状态(不要原样重开、不要假装通过)。")}else if(c.raisedBy===a&&["resolved","invalidated"].includes(c.state)){let a=["answered",c.id,c.state,String(c.resolution?.at??c.updatedAt)].join(":");if(u.has(a))continue;u.add(a),b.push(`- 你登记的问题「${c.title}」已被${"resolved"===c.state?"答复":"作废"}:${c.resolution?.note??""}(by ${c.resolution?.by??""})。据此决定你的成果是否需要修改或继续推进。`)}if(b.length)return`【运行反馈\xb7问题账变化】
40
+ ]*`,"u"),"$1");d!==e.text&&d.replace(/\s/gu,"").length>0&&(e.text=d.replace(/\n{3,}/gu,"\n\n").trim(),g=!0)}else if("sentence-duplicate-within-unit"===b.rule&&"paragraph"===a.kind&&"string"==typeof e.text){let a=String(b.observed).trim();if(!a)continue;let c=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=!1,f=RegExp(`(^|[。;;!?!?
41
+ ])(${c})(?=[。;;!?!?
42
+ ]|$)`,"gu"),h=e.text.replace(f,(a,b)=>d?b:(d=!0,a)).replace(/([。;;!?!?])\1+/gu,"$1").replace(/[ \t]{2,}/gu," ").trim();h!==e.text&&h.replace(/\s/gu,"").length>0&&(e.text=h,g=!0)}else if("carrier-reference-missing"===b.rule&&"paragraph"===a.kind&&"string"==typeof e.text&&/^\{\{(?:table|figure):[^{}]+\}\}$/u.test(String(b.expected))){let a=String(b.expected);e.text.includes(a)||/\{\{(?:table|figure):/u.test(e.text)||(e.text=`${e.text.trim()}(见 ${a})`,g=!0)}else if("table-prose-restatement"===b.rule&&"paragraph"===a.kind&&"string"==typeof e.text){let a=String(b.observed??"").trim(),c=String(b.expected??"");if(!a||!/^\{\{(?:table|figure):[^{}]+\}\}$/u.test(c)||!e.text.includes(a))continue;let d=e.text.replaceAll(a,c);d!==e.text&&(e.text=d,g=!0)}return{unit:g?e:a,changed:g}}),n=m.filter(a=>a.changed).length;return n?{fixed:m.map(a=>a.unit),count:n}:null}function L(a){var b,c;let e=[],g=[];if(a.projectBasicFacts){let b=a.structurePlan?(0,s.F_)(a.structurePlan)[0]?.section.sectionId:a.contract.chapters[0]?.sectionIds[0];if(b&&a.sectionIds.includes(b))for(let c of(0,r.Gm)({sectionId:b,isFirstSection:!0,units:[...a.sectionUnits.map(a=>a.unit),...a.submitted],facts:a.projectBasicFacts,...a.projectName?{projectName:a.projectName}:{},...a.sectionPlan?{sectionPlan:a.sectionPlan}:{}}))("advisory"===c.severity?g:e).push(H("advisory"===c.severity?"advisory":"blocking",c.code,c.message,"在第一章第一节正文开始部分写项目基本信息表:字段只取冻结事实,缺失写“待核”;表后主题再展开,表内事实正文不重复",{...c.unitId?{unitId:c.unitId}:{},...c.observed?{observed:c.observed}:{},...c.expected?{expected:c.expected}:{}}))}let h=(b=a.tenderResponsePlan,c=a.sectionIds,[...new Set((b?.sections??[]).filter(a=>c.includes(a.sectionId)).flatMap(a=>a.requiredOutputs.map(a=>a.id).filter(a=>!!a)))]),k=new Map,l=new Map;for(let b of a.tenderResponsePlan?.sections??[])if(a.sectionIds.includes(b.sectionId)){for(let a of b.requiredOutputs)a.id&&k.set(a.id,{basis:a.basis,form:a.form});for(let a of b.contentContract?.coverageItems??[])l.set(a.id,a)}let m=new Map;for(let b of a.sectionUnits)b.unit.outputId&&m.set(b.unit.outputId,(m.get(b.unit.outputId)??0)+1);let n=(0,d.ut)({contract:a.contract,units:(a.carrierUnits??a.sectionUnits).map(a=>({...a,entityId:`${a.sectionIds[0]??""}\u0000${a.unit.id}`}))}),o=function(a){let b=new Set,c=a=>{if("string"==typeof a)for(let c of a.matchAll(/\d+(?:\.\d+)?/gu))b.add(Number(c[0]))};for(let b of a.projectBasicFacts??[])c(b.value);for(let b of a.project?.facts??[])c(b.value);if(a.executionBaseline){for(let c of(b.add(a.executionBaseline.totalDays),a.executionBaseline.phases))b.add(c.startDay),b.add(c.endDay);for(let c of a.executionBaseline.milestones)b.add(c.day)}return{numbers:[...b]}}({project:a.project,projectBasicFacts:a.projectBasicFacts,executionBaseline:a.executionBaseline}),K=[...new Set((a.tenderResponsePlan?.sections??[]).flatMap(a=>a.contentContract?.responsibilityPositions??[]))];for(let b of a.submitted){let c=I(b),i=J(c,b.id);if(e.push(...i.filter(a=>"blocking"===a.severity)),g.push(...i.filter(a=>"advisory"===a.severity)),e.push(...function(a,b,c){let d=[];for(let e of a.matchAll(/第\s*([0-9一二三四五六七八九十]+)\s*章第\s*([0-9一二三四五六七八九十]+)\s*节/gu)){let a=z(e[1]),f=z(e[2]),g=b.chapters[a-1];if(void 0===a||void 0===f||!g){d.push({rule:"chapter-reference-invalid",severity:"blocking",unitId:c,message:`章节引用「${e[0]}」不存在:全文只有 ${b.chapters.length} 章`,observed:e[0],hint:"改成冻结结构计划里的真实章号节号,或用 {{carrier}} 引用对应表/图"});continue}(f<1||f>g.sectionIds.length)&&d.push({rule:"chapter-reference-invalid",severity:"blocking",unitId:c,message:`章节引用「${e[0]}」不存在:第${e[1]}章「${g.title}」只有 ${g.sectionIds.length} 节`,observed:e[0],hint:"改成该章真实存在的节号,或直接引用对应表/图"})}return d}(c,a.contract,b.id)),g.push(...function(a,b,c){if(!b.numbers.length)return[];let d=[],e=[],f=(a,b)=>{for(let c of b.matchAll(a))void 0!==c.index&&e.push({start:Math.max(0,c.index-4),end:c.index+c[0].length+4})};f(u,a),f(v,a),f(x,a),f(w,a);let g=new Set(b.numbers),h=new Set;for(let b of a.matchAll(t)){let f=Number(b[0].replace(/,/gu,""));if(!Number.isFinite(f)||h.has(f)||g.has(f))continue;let i=b.index??0;!e.some(a=>i>=a.start&&i<=a.end)&&(y.test(a.slice(Math.max(0,i-12),i+b[0].length+12))||(h.add(f),d.push({rule:"fact-number-unregistered",severity:"advisory",unitId:c,message:`数字「${b[0]}」不在事实登记表,且附近没有「待核/拟定」标记`,observed:b[0],hint:"改为登记表内的事实数字,或标注「待核/拟定」;计算过程句写明换算依据"})))}return d}(c,o,b.id)),g.push(...function(a,b,c){if(!b.length)return[];let d=new Set([...b,...A]),e=[],f=new Set;for(let b of a.matchAll(/(?:由|对)([^,。;\n]{2,10}?(?:负责人|人|员|师|理|监|长))(?:组织|牵头|实施|复核|签认|交底|核验|巡查|旁站|验收|报送|负责(?!人))/gu)){let a=b[1].trim();a.length<2||a.length>8||d.has(a)||f.has(a)||(f.add(a),e.push({rule:"job-title-unregistered",severity:"advisory",unitId:c,message:`岗位名「${a}」不在冻结计划的岗位要求列表`,observed:a,hint:"统一为冻结计划/词表内的岗位叫法(如“生产经理/施工经理”只保留一个),同义岗位全文只用一个"}))}return e}(c,K,b.id)),e.push(...i.filter(a=>"blocking"===a.severity)),g.push(...i.filter(a=>"advisory"===a.severity)),B.test(c)&&e.push(H("blocking","internal-term",`单元「${b.id}」出现系统内部词/证书话术`,"改成读者可理解的工程语言;证书范围/局部候选只留内部回执",{unitId:b.id})),a.executionBaseline){let d=[...a.executionBaseline.phases.map(a=>a.id),...a.executionBaseline.milestones.map(a=>a.id)].filter(a=>RegExp(`(^|[^A-Za-z0-9_-])${C(a)}($|[^A-Za-z0-9_-])`,"u").test(c));d.length&&e.push(H("blocking","baseline-id-leak",`单元「${b.id}」把执行基准内部编号写进了正文:${d.join("、")}`,"改用阶段/里程碑名称、日期或第 N 天;内部编号只用于对账",{unitId:b.id}))}if("paragraph"===b.kind&&/^\s*\|/mu.test(b.text??"")&&e.push(H("blocking","table-hidden-in-paragraph",`段落单元「${b.id}」里藏了 Markdown 表格`,'把表格改成独立的 kind:"table" 单元,填 caption 与 outputId;段落只写判断/依据/接口',{unitId:b.id})),"paragraph"===b.kind&&(/!\[[^\]]*\]\(/u.test(b.text??"")||/```mermaid/u.test(b.text??""))&&e.push(H("blocking","figure-hidden-in-paragraph",`段落单元「${b.id}」里藏了图片/图源代码`,'把图件改成独立的 kind:"figure" 单元,填 caption;段落只写判断/依据/接口',{unitId:b.id})),/表[ \t]*表[ \t]*\d|图[ \t]*图[ \t]*\d/u.test(c)&&e.push(H("blocking","duplicated-carrier-word",`单元「${b.id}」出现“表表/图图”重复词`,"引用只写一次“表/图”+编号;用 `{{table:<表单元id>}}` 时不要再在外面手写“表”",{unitId:b.id})),"paragraph"===b.kind&&(b.text??"").trim().length>80){let c=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),d=c(b.text??""),f=(a.carrierUnits??a.sectionUnits).find(e=>e.unit.id!==b.id&&"paragraph"===e.unit.kind&&c(e.unit.text??"")===d&&e.sectionIds.some(b=>!a.sectionIds.includes(b)));f&&e.push(H("blocking","cross-section-duplicate",`段落单元「${b.id}」与其它章节的「${f.unit.id}」整段重复`,"同一内容只写一次;其它章节用真实章节号引用,不整段复述",{unitId:b.id,observed:f.unit.id}))}b.planChart&&!a.executionBaseline&&e.push(H("blocking","plan-figure-baseline-required",`计划图「${b.caption??b.id}」需要执行基准,但本次运行没有可用基准`,"先保证本项目开工日/总工期事实可用,或改用文字+表格表达;不要手填图条",{unitId:b.id})),"paragraph"===b.kind||b.caption?.trim()||e.push(H("blocking","carrier-caption-missing",`${"table"===b.kind?"表":"图"}单元「${b.id}」没有题注`,"填写只写主题、不写编号的 caption;题注由发布层统一编号",{unitId:b.id})),b.outputId&&(h.length&&!h.includes(b.outputId)&&e.push(H("blocking","output-id-unknown",`单元「${b.id}」的 outputId「${b.outputId}」不在本节点名输出里`,"改成 requiredOutputs 里的实际 id",{unitId:b.id,observed:b.outputId})),(m.get(b.outputId)??0)>1&&e.push(H("blocking","output-id-duplicate",`outputId「${b.outputId}」被多个单元重复使用`,"一个点名输出只能由一个表/图单元承接",{unitId:b.id,observed:b.outputId})));let r=Array.isArray(b.coverageItemIds)?b.coverageItemIds:[],s=Array.isArray(b.referencedCoverageItemIds)?b.referencedCoverageItemIds:[];for(let a of[...r,...s])l.size&&!l.has(a)&&e.push(H("blocking","coverage-item-unknown",`单元「${b.id}」引用的契约项「${a}」不在本节契约里`,"coverageItemIds / referencedCoverageItemIds 只能使用本节 coverageItems[].id;不要自造 id",{unitId:b.id,observed:a}));let F=r.filter(a=>s.includes(a));F.length&&e.push(H("blocking","coverage-item-role-conflict",`单元「${b.id}」同时把契约项 ${F.join("、")} 当成主载体和引用载体`,"同一单元里一项只能选一种角色:自己承载填 coverageItemIds;只是引用别的主载体填 referencedCoverageItemIds",{unitId:b.id}));let L="paragraph"!==b.kind||!!b.outputId||(b.assertions?.length??0)>0||/\d/u.test(b.text??"");if(l.size&&L&&!r.length&&!s.length){let c=b.subsectionId?a.sectionPlan?.subsections.find(a=>a.subsectionId===b.subsectionId)?.coverageItemIds:void 0,d=c?.length?c:[...l.keys()];e.push(H("blocking","coverage-item-unbound",`单元「${b.id}」是实质性内容,但没有认领或引用本节契约项`,`用 coverageItemIds 认领本节 coverageItems[].id(本小节可用:${d.slice(0,8).join("、")});如果主载体是表/图,改用 referencedCoverageItemIds 并在正文写真实表号/图号`,{unitId:b.id}))}if(l.size&&"table"===b.kind&&!b.outputId&&!(b.decisionReason??"").trim()){let c=b.subsectionId?a.sectionPlan?.subsections.find(a=>a.subsectionId===b.subsectionId):void 0,d=c?.primaryCarrier==="table"?c.requiredOutputId:void 0;e.push(H("blocking","table-decision-reason-missing",d?`表「${b.caption??b.id}」没有绑定本小节必出输出 outputId=${d},也没有 decisionReason`:`表「${b.caption??b.id}」是作者自选表,但没有说明为什么必须用表`,d?`这是小节必出表:设置 outputId=${d}(必出表不需要 decisionReason);只有自选表才写 decisionReason`:"在 decisionReason 写明内容形态(清单/参数矩阵/对照)与它唯一承载的契约项;正文已写完的纯摘要表应删除",{unitId:b.id,...d?{expected:d}:{}}))}if("table"===b.kind){let a=b.columns?.[0]?.title?.trim();a&&!b.originalFormContractHash&&G.test(a)&&g.push(H("advisory","table-leading-index-column",`表「${b.caption??b.id}」第一列是「${a}」;正文表格不需要序号/编号列`,"删除首列序号/编号;第一列直接用对象/名称/部位/系统",{unitId:b.id}))}if("table"===b.kind)for(let a of p(b))e.push(H("blocking",a.code,a.message,"按分项重算合计或按权威数据修正分项;只允许修正表内数值,不得编造无来源数据",{unitId:b.id,...a.rowLabel?{location:a.rowLabel}:{}}));for(let a of(0,q.AZ)(b))e.push(H("blocking",a.code,a.message,"删除出处/来源/文件/页码列;来源写进单元 assertions/references,正文只保留业务字段",{unitId:b.id}));let M=Array.isArray(b.standardCitations)?b.standardCitations:[];for(let a of[...new Set([...c.matchAll(D)].map(a=>a[0].trim()))]){let c=E(a);M.some(a=>{let b=E(String(a?.code??""));return b.length>0&&(b.includes(c)||c.includes(b))})||g.push(H("advisory","standard-citation-missing",`单元「${b.id}」正文引用了标准「${a}」,但未在 standardCitations 声明五字段`,"建议写全名称/编号/版本/适用范围/核验状态;未核验写 unverified。声明了但字段不全仍会被拒收",{unitId:b.id,observed:a}))}for(let a of M){let d=E(String(a?.code??""));d.length&&!E(c).includes(d)&&g.push(H("advisory","standard-citation-unused",`单元「${b.id}」声明了标准「${a.code}」,但正文没有出现该编号`,"删除未使用的标准引用,或在正文实际引用处写明",{unitId:b.id,observed:a.code}))}let N=b.figureSemantics,O=b.graphLayout;if("figure"===b.kind&&("org"===N||"tree"===O)&&(b.nodes?.length??0)>12&&e.push(H("blocking","org-figure-too-large",`组织图「${b.caption??b.id}」有 ${b.nodes.length} 个节点,画布不可读`,"按汇报层级拆分或分组表达;不要改用表格替代招标要求的框图",{unitId:b.id})),"figure"===b.kind&&b.outputId){let a=k.get(b.outputId)?.basis??"",c=(c,d)=>{d||e.push(H("blocking","figure-semantics-mismatch",`图件「${b.caption??b.id}」承接「${a}」,但没有使用${c}语义`,"按点名载体声明 figureSemantics/graphLayout/planChart/layout;不能用手绘通用节点边图冒充",{unitId:b.id}))};/组织机构图|组织图/u.test(a)&&c("组织树(figureSemantics=org 或 graphLayout=tree)","org"===N||"tree"===O),/施工部署|关键线路/u.test(a)&&c("部署泳道(figureSemantics=deployment)","deployment"===N),/危大|重点难点|风险/u.test(a)&&c("危大管控(figureSemantics=risk-control)","risk-control"===N),/总平面|平面布置/u.test(a)&&c("空间布置(layout)",!!b.layout),/横道/u.test(a)&&c("基准横道(planChart.view=schedule)",b.planChart?.view==="schedule"),/网络/u.test(a)&&!/横道/u.test(a)&&c("基准网络(planChart.view=network)",b.planChart?.view==="network")}if("figure"===b.kind)for(let c of(0,j.FT)(b,{...a.executionBaseline?{executionBaseline:a.executionBaseline}:{}}))e.push(H("blocking",c.code,c.message,"按图种契约补齐结构要素;数据不足时明确“示意”,不得编造尺寸、阶段、依赖或关键线路",{unitId:b.id,...c.element?{observed:c.element}:{}}));if("figure"===b.kind&&!b.planChart&&!b.layout){let a=b.nodes?.length??0,c=b.edges?.length??0;(a<3||c<2)&&e.push(H("blocking","figure-too-sparse",`图件「${b.caption??b.id}」只有 ${a} 个节点/${c} 条边`,"补齐真实对象/关系(至少 3 个节点、2 条边);不要用两个节点一条线充当管控图",{unitId:b.id})),b.references.length||b.assertions.length||e.push(H("blocking","figure-source-missing",`图件「${b.caption??b.id}」没有任何来源/决定/证书引用`,"先用 section_workspace/read_scope 读取本节可用来源/决定/证书,只绑定实际存在的身份;没有来源时改由已有来源的图块或表承载,不得补造",{unitId:b.id}))}for(let g of(e.push(...function(a,b,c){if(!b)return[];let d=[];for(let e of(0,f._D)(a,b))d.push(H("blocking",e.code,e.message,"按执行基准的里程碑天序/日期改写;不要另算一套",{...c?{unitId:c}:{},...e.evidence?{observed:e.evidence}:{}}));return d}(c,a.executionBaseline,b.id)),[c].map(c=>(0,d.EF)(c,n,{unitId:b.id,sectionId:a.sectionIds[0]}))))for(let a of g.issues)("carrier-reference-unresolved"===a.code||"carrier-reference-leaked"===a.code)&&e.push(H("blocking",a.code,a.message,"引用真实存在的表/图,或删除悬空引用;不要留内部标记",{unitId:b.id}))}let L=new Map;for(let b of a.sectionUnits)L.set(b.unit.id,b.unit);for(let b of a.submitted)L.set(b.id,b);let M=[...L.values()];if(l.size){let a=new Map,b=new Map;for(let c of M)for(let d of c.coverageItemIds??[])l.has(d)&&(a.set(d,[...a.get(d)??[],c.id]),b.set(d,c.kind));for(let[b,c]of a)c.length>1&&e.push(H("blocking","carrier-primary-duplicate",`契约项「${l.get(b).text}」在本节有 ${c.length} 个主载体:${c.join("、")}`,"同一契约项只能由一个单元作为主载体;其余单元改填 referencedCoverageItemIds,并用真实表号/图号引用,不复述表内内容",{observed:c.join("、")}));for(let c of M)for(let d of c.referencedCoverageItemIds??[]){if(!l.has(d))continue;let f=a.get(d)??[];if(!f.length){g.push(H("advisory","carrier-reference-without-primary",`单元「${c.id}」引用的契约项「${l.get(d).text}」在本节还没有主载体`,"先给该契约项指定一个主载体(表/图/段落),再在正文引用",{unitId:c.id}));continue}let h=b.get(d);"paragraph"===c.kind&&h&&"paragraph"!==h&&!F.test(c.text??"")&&e.push(H("blocking","carrier-reference-missing",`段落「${c.id}」引用了由${"table"===h?"表":"图"}承载的契约项「${l.get(d).text}」,但没有写真实表号/图号`,"用“见表X/见图X”或稳定的内部标记 `{{table:<表单元id>}}` / `{{figure:<图单元id>}}` 引用主载体;正文只写判断/因果/接口,不复述表内数值",{unitId:c.id,expected:"table"===h?`{{table:${f[0]}}}`:`{{figure:${f[0]}}}`}))}}let N=(0,q.u6)(M);if(e.push(...N.blocking.map(a=>H("blocking",a.code,a.message,"正文只保留判断/因果/接口,并用 `{{table:<表单元id>}}` 或真实表号引用;删除与表重复的数值/行项",{unitId:a.unitId,...a.observed?{observed:a.observed}:{},...a.reference?{expected:a.reference}:{}}))),g.push(...N.advisory.map(a=>H("advisory",a.code,a.message,"确认是否可以改为表号引用",{unitId:a.unitId}))),a.structurePlan&&a.sectionPlan){let b=(0,i.zr)({structurePlan:a.structurePlan,sectionPlan:a.sectionPlan,sourceDraftContracts:a.sourceDraftContracts,submitted:a.submitted,sectionUnits:a.sectionUnits.map(a=>a.unit),otherUnits:(a.carrierUnits??a.sectionUnits).filter(b=>b.sectionIds.some(b=>!a.sectionIds.includes(b))),...a.lockedCarriers?{lockedCarriers:a.lockedCarriers}:{}});e.push(...b.blocking.map(a=>H("blocking",a.code,a.message,a.hint??"按冻结的两级计划修正:小节/契约项/主载体/输出必须与计划一致;planHash 是全局计划 hash,sectionPlanHash 是本节 hash",{...a.unitId?{unitId:a.unitId}:{},...a.expected?{expected:a.expected}:{},...a.observed?{observed:a.observed}:a.outputId?{observed:a.outputId}:{}}))),g.push(...b.advisory.map(a=>H("advisory",a.code,a.message,"按冻结节计划核对契约项与载体",{...a.unitId?{unitId:a.unitId}:{}})))}return{passed:0===e.length,blocking:e,advisory:g}}function M(a,b,c){let d,e=new Set(c),f=[];for(;;){let c=a.entityPage({groupKey:`writing:${b}`,...d?{afterId:d}:{},limit:200});for(let a of c.entities){if(a.deleted||"writing-unit"!==a.kind||!a.value)continue;let b=a.value,c=Array.isArray(b.sectionIds)?b.sectionIds.map(String):[];c.some(a=>e.has(a))&&f.push({unit:b,sectionIds:c})}if(!c.nextAfterId)break;d=c.nextAfterId}return f}function N(a){let b=[],c=[],d=a.sectionUnits.filter(b=>b.sectionIds.includes(a.sectionId));if(a.projectBasicFacts&&(a.structurePlan?(0,s.F_)(a.structurePlan)[0]?.section.sectionId:a.contract.chapters[0]?.sectionIds[0])===a.sectionId)for(let e of(0,r.Gm)({sectionId:a.sectionId,isFirstSection:!0,units:d.map(a=>a.unit),facts:a.projectBasicFacts,...a.projectName?{projectName:a.projectName}:{},...a.sectionPlan?{sectionPlan:a.sectionPlan}:{}}))("advisory"===e.severity?c:b).push(H("advisory"===e.severity?"advisory":"blocking",e.code,e.message,"在第一章第一节正文开始部分写项目基本信息表:字段只取冻结事实,缺失写“待核”;表后主题再展开,表内事实正文不重复",{...e.unitId?{unitId:e.unitId}:{},...e.observed?{observed:e.observed}:{}}));let e=d.map(a=>I(a.unit)).join("\n\n"),k=(0,g.kC)({contract:a.contract,sectionId:a.sectionId,...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.executionBaseline?{executionBaseline:a.executionBaseline}:{},...a.project?{project:a.project}:{},...a.tablesForbidden?{tablesForbidden:!0}:{}});if(!k)return{passed:!1,blocking:[H("blocking","section-unknown",`章节「${a.sectionId}」不在冻结合同里`,"核对 sectionId")],advisory:[]};for(let c of(d.length||b.push(H("blocking","section-empty",`本节「${k.title}」还没有正文单元`,"先写正文;标题不能代替内容")),d))if("paragraph"===c.unit.kind||c.unit.caption?.trim()||b.push(H("blocking","carrier-caption-missing",`本节${"table"===c.unit.kind?"表":"图"}单元「${c.unit.id}」没有题注`,"填写只写主题、不写编号的 caption;题注由发布层统一编号",{unitId:c.unit.id})),"figure"===c.unit.kind)for(let d of(0,j.FT)(c.unit,{...a.executionBaseline?{executionBaseline:a.executionBaseline}:{}}))b.push(H("blocking",d.code,d.message,"按图种契约补齐结构要素;数据不足时明确“示意”,不得编造尺寸、阶段、依赖或关键线路",{unitId:c.unit.id,...d.element?{observed:d.element}:{}}));let l=d.flatMap(a=>a.unit.outputId?[a.unit.outputId]:[]),m=[...new Set(l.filter((a,b)=>l.indexOf(a)!==b))];m.length&&b.push(H("blocking","output-id-duplicate",`本节 outputId 重复:${m.join("、")}`,"一个点名输出只能由一个表/图单元承接"));let n=new Set(l);for(let a of k.requiredOutputs)a.outputId?n.has(a.outputId)||b.push(H("blocking","required-output-unbound",`本节点名要求「${a.element}」,但没有单元绑定 outputId「${a.outputId}」`,`写一张${"table"===a.form?"表":"图"}并在其 outputId 填 ${a.outputId}`,{observed:a.element,expected:a.outputId})):(0,h.Id)(e,a.element)||c.push(H("advisory","required-output-element-unverified",`本节点名要求「${a.element}」,正文题注没有对上名称`,"核对表/图题注是否写清点名的输出名称"));for(let a of k.requiredTables)!function(a,b){let c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d=c[a].trim();if(d.includes(b.title)){let b=a+1;for(;b<c.length&&!c[b].trim();)b+=1;if(b<c.length&&/^\|/u.test(c[b].trim()))return!0}if(!/^\|/u.test(d))continue;let e=d.split("|").slice(1,-1).map(a=>a.trim()).filter(Boolean),f=b.columns.filter(a=>e.some(b=>b.includes(a))).length;if(b.columns.length&&e.length&&f/b.columns.length>=.6)return!0}return!1}(e,a)&&b.push(H("blocking","required-table-missing",`本节应写「${a.title}」,正文没有对应表格`,`补一张表${a.columns.length?`,列:${a.columns.join("|")}`:""};${a.reason}`));for(let a of(k.responsibilityPositions.length&&!k.responsibilityPositions.some(a=>e.includes(a))&&c.push(H("advisory","responsibility-position-missing",`本节内容契约要求写明责任岗位(${k.responsibilityPositions.slice(0,6).join("、")}),正文没有出现`,"在关键工序/验收接口写清岗位称谓(不写姓名)")),k.coverageItems)){let d=(0,h.Ym)(e,a.text);d>=(a.enumerated?.6:.5)||(a.enumerated?b:c).push(H(a.enumerated?"blocking":"advisory","coverage-item-missing",`本节应落实「${a.text}」,正文覆盖度 ${(100*d).toFixed(0)}%`,a.enumerated?"逐项写出该类别的做法/部位/控制值;缺一项即未响应":"核对是否只写总称而漏了该项"))}if(a.executionBaseline)for(let c of(0,f._D)(e,a.executionBaseline).concat((0,f.Pu)(e,a.executionBaseline)).concat((0,f.ke)(e,a.executionBaseline)).concat((0,f.mM)(e,a.executionBaseline)))b.push(H("blocking",c.code,c.message,"按执行基准/表格算术修正;不要另算一套",{...c.evidence?{observed:c.evidence}:{}}));let o=J(e);b.push(...o.filter(a=>"blocking"===a.severity)),c.push(...o.filter(a=>"advisory"===a.severity));let t=d.map(a=>a.unit),u=(0,q.u6)(t);for(let a of(b.push(...u.blocking.map(a=>H("blocking",a.code,a.message,"正文只保留判断/因果/接口,并用 `{{table:<表单元id>}}` 或真实表号引用;删除与表重复的数值/行项",{unitId:a.unitId}))),c.push(...u.advisory.map(a=>H("advisory",a.code,a.message,"确认是否可以改为表号引用",{unitId:a.unitId}))),t.filter(a=>"table"===a.kind))){for(let c of(0,q.AZ)(a))b.push(H("blocking",c.code,c.message,"删除出处/来源/文件/页码列;来源写进单元 assertions/references",{unitId:a.id}));for(let c of p(a))b.push(H("blocking",c.code,c.message,"按分项重算合计或按权威数据修正分项;只允许修正表内数值,不得编造无来源数据",{unitId:a.id,...c.rowLabel?{location:c.rowLabel}:{}}))}let v=new Set(k.coverageItems.map(a=>a.id)),w=new Map;for(let a of t)for(let b of a.coverageItemIds??[])v.has(b)&&w.set(b,[...w.get(b)??[],a.id]);for(let[a,c]of w)c.length>1&&b.push(H("blocking","carrier-primary-duplicate",`契约项「${k.coverageItems.find(b=>b.id===a)?.text??a}」在本节有 ${c.length} 个主载体:${c.join("、")}`,"同一契约项只能有一个主载体;其余单元改填 referencedCoverageItemIds,并用真实表号/图号引用",{observed:c.join("、")}));if(a.structurePlan&&a.sectionPlan){let e=(0,i._J)({structurePlan:a.structurePlan,sectionPlan:a.sectionPlan,submitted:[],sectionUnits:d.map(a=>a.unit),otherUnits:(a.otherSectionUnits??[]).map(a=>({unit:a.unit,sectionIds:a.sectionIds})),...a.lockedCarriers?{lockedCarriers:a.lockedCarriers}:{}});b.push(...e.blocking.map(a=>H("blocking",a.code,a.message,"按冻结的两级计划补齐本节:计划小节、契约项、必出输出与主载体都必须有唯一落点",{...a.unitId?{unitId:a.unitId}:{},...a.outputId?{observed:a.outputId}:{}}))),c.push(...e.advisory.map(a=>H("advisory",a.code,a.message,"按冻结节计划核对契约项与载体",{...a.unitId?{unitId:a.unitId}:{}})))}return{passed:0===b.length,blocking:b,advisory:c}}},55037:(a,b,c)=>{c.r(b),c.d(b,{CONSTRUCTION_WORKSPACE_FILE:()=>o,assembleConstructionRuntime:()=>r,constructionWorkspacePath:()=>p,openConstructionWorkspace:()=>q});var d=c(76760),e=c.n(d),f=c(45532),g=c(745),h=c(88297),i=c(82211);let j={membershipVersion:"construction-domain-v2",readonlyKinds:["source-member","legacy-phase","legacy-activity","legacy-binding","legacy-constraint-adoption","legacy-workspace-evidence"],groups:a=>"resource-pool"===a.kind?["resource:"+a.id]:"resource-demand"===a.kind&&"string"==typeof a.value?.resourcePoolId?["resource:"+a.value.resourcePoolId]:"construction-operation"===a.kind&&Array.isArray(a.value?.requirements)&&Array.isArray(a.value?.components)?["construction-operations","work-package-operations:"+String(a.value.workPackageId),...a.value.requirements.map(a=>"resource:"+String(a.resourcePoolId)),...a.value.components.map(a=>"allocation-operations:"+String(a.allocationId))]:"writing-unit"===a.kind&&"string"==typeof a.value?.responsibilityId?["writing-units","writing:"+a.value.responsibilityId,...Array.isArray(a.value.sectionIds)?a.value.sectionIds.map(a=>"section-units:"+String(a)):[]]:"source-coverage-opinion"===a.kind&&"string"==typeof a.value?.reviewerId?["source-coverage-opinions","source-coverage:"+a.value.reviewerId]:"review-assessment"===a.kind&&"string"==typeof a.value?.reviewerId?["review-assessments","review:"+a.value.reviewerId,...Array.isArray(a.value.unitRefs)?a.value.unitRefs.map(a=>"review-units:"+String(a.id)):[]]:"source-allocation"===a.kind&&"string"==typeof a.value?.memberId&&"string"==typeof a.value?.operation?["source-allocations","allocation:"+(0,g.Fu)([a.value.memberId,a.value.operation]),"work-package-allocations:"+String(a.value.workPackageId)]:"section-lock"===a.kind&&"string"==typeof a.value?.sectionId?["section-locks","section-lock:"+String(a.value.sectionId)]:[],groupValue:a=>{if(!a.value)return null;let{note:b,reason:c,...d}=a.value;return d}},k=a=>JSON.parse(JSON.stringify(a));var l=c(1512),m=c(65131),n=c(38210);let o="workflow-state.sqlite";function p(a,b){if(!a?.trim())throw Error("CONSTRUCTION_WORKSPACE_PROJECT_ROOT_REQUIRED");return e().join(b,o)}function q(a){let b,c=p(a.projectRoot,a.directory),d=new h.l(c,a.identity,j),e=null!==d.workspaceSeedHash();if(!e){let c=function(a){if(a.identity.sourceSnapshotId!==a.project.snapshotId||a.identity.contractId!==a.contract.id||a.contract.projectSnapshotId!==a.project.snapshotId||a.workspace.identity!==(0,i.T)(a.contract,a.project))throw Error("DOMAIN_MIGRATION_IDENTITY_MISMATCH");if(!a.sourceRunId.trim()||!a.sourceBuildId.trim()||!a.evidence.length||a.evidence.some(a=>!a.assetId.trim()||!/^[a-f0-9]{64}$/u.test(a.sha256)))throw Error("DOMAIN_MIGRATION_EVIDENCE_REQUIRED");let b=(0,f.BI)(a.project).map(a=>({id:a.memberId,kind:"source-member",version:1,deleted:!1,value:k({memberId:a.memberId,memberIndex:a.index,sourceFile:a.entry.sourceFile,sourceIdentity:a.sourceIdentity,originalEntryHash:(0,g.Fu)(k(a.entry)),quantity:a.entry.quantity,unit:a.entry.unit})})),c=(a,b,c,d)=>({id:b,kind:a,value:k(c),version:d,deleted:!1}),d=[...b,...a.workspace.phases.map(b=>c("legacy-phase",b.id,b,a.workspace.versions[b.id]??1)),...a.workspace.activities.map(b=>c("legacy-activity",b.id,b,a.workspace.versions[b.id]??1)),...a.workspace.bindings.map(b=>c("legacy-binding","legacy-binding:"+b.memberIndex,b,a.workspace.versions["member:"+b.memberIndex]??1)),...a.workspace.constraintAdoptions.map(b=>c("legacy-constraint-adoption","legacy-constraint:"+b.sourceIndex,b,a.workspace.versions["constraint:"+b.sourceIndex]??1)),c("legacy-workspace-evidence","legacy-workspace-evidence",{identity:a.workspace.identity,revision:a.workspace.revision,decodedStateHash:(0,g.Fu)(k(a.workspace)),readMembers:a.workspace.readMembers,readConstraints:a.workspace.readConstraints,notes:a.workspace.notes,evidence:a.evidence,sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId},1)];if(new Set(d.map(a=>a.id)).size!==d.length)throw Error("DOMAIN_MIGRATION_ENTITY_ID_COLLISION");let e=k({version:"construction-domain-migration-preview-v1",sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId,legacyWorkspaceIdentity:a.workspace.identity,legacyRevision:a.workspace.revision,originalWorkspaceHash:(0,g.Fu)(k(a.workspace)),frozenProjectHash:(0,g.Fu)(k(a.project)),contractHash:(0,g.Fu)(k(a.contract)),counts:{sourceMembers:b.length,phases:a.workspace.phases.length,activities:a.workspace.activities.length,bindings:a.workspace.bindings.length,constraintAdoptions:a.workspace.constraintAdoptions.length},legacyResourceRelations:a.workspace.activities.reduce((a,b)=>a+b.predecessors.filter(a=>a.resourceBasis).length,0),evidence:a.evidence,activationEligible:!1});return{identity:a.identity,entities:d,manifest:e,activationEligible:!1,pending:["施工工作包及专业决定映射待正常专业工具核定","技术约束与旧资源输出的语义迁移尚未完成","旧角色原稿及费用账仅原证据保留,尚未完成新运行接线","新计算、专业资格与正式迁移回执尚未成立"]}}({identity:a.identity,project:a.project,contract:a.contract,workspace:a.workspace,sourceRunId:a.sourceRunId,sourceBuildId:a.sourceBuildId,evidence:a.evidence});d.initialize(c.entities,c.manifest),b={manifest:c.manifest,pending:c.pending}}return{store:d,created:!e,file:c,...b?{migration:b}:{}}}function r(a){let b=q(a),c={store:b.store,file:b.file,created:b.created},d=a.chief(c),e=(0,m._M)({chief:d,profiles:a.profiles(c)});return{...b,coordinator:e,chiefInput:d,drainEvents:a=>(0,l.E)({store:b.store,consumerId:a.consumerId,responsibilities:e.responsibility,...void 0!==a.limit?{limit:a.limit}:{},...a.signal?{signal:a.signal}:{}}),runResponsibility:a=>(0,n.p)(a)}}},55650:(a,b,c)=>{c.d(b,{wb:()=>n,zA:()=>s,bL:()=>r});var d=c(96770),e=c(45532),f=c(44967);let g=(a,b)=>b?g(b,a%b):a,h=(a,b)=>{if(b<=0n)throw Error("WORK_DURATION_DENOMINATOR");let c=g(a<0n?-a:a,b);return{n:a/c,d:b/c}},i=(a,b)=>h(a.n*b.d+b.n*a.d,a.d*b.d),j=(a,b)=>h(a.n*b.n,a.d*b.d),k=a=>({numerator:a.n.toString(),denominator:a.d.toString()});function l(a){if("number"==typeof a&&!Number.isFinite(a))throw Error("WORK_DURATION_DECIMAL_INVALID");let b=/^([+-]?)(\d+)(?:\.(\d*))?(?:e([+-]?\d+))?$/iu.exec(String(a));if(!b)throw Error("WORK_DURATION_DECIMAL_INVALID");let c=Number(b[4]??0)-(b[3]?.length??0);if(!Number.isSafeInteger(c)||Math.abs(c)>1e3)throw Error("WORK_DURATION_DECIMAL_PRECISION_UNSUPPORTED");let d=BigInt(b[2]+(b[3]??""))*("-"===b[1]?-1n:1n);return c<0?h(d,10n**BigInt(-c)):h(d*10n**BigInt(c),1n)}var m=c(745);let n="construction-business-clock-compiler-v1",o=a=>"string"==typeof a&&!!a.trim(),p=a=>JSON.parse(JSON.stringify(a));function q(a,b,c){let d=a.entity(b);if(!d||d.deleted||!d.value||c&&d.kind!==c)throw Error("CONSTRUCTION_DEPENDENCY_NOT_FOUND:"+b+":该 id 不是当前工作库已生效对象;请直接引用 read_calculation/read_receipt 回执里出现的实际 id,不要按名称或简称猜。");return d}function r(a,b,c=[]){if(!b.length||new Set(b).size!==b.length)throw Error("CONSTRUCTION_ROOT_OPERATIONS_REQUIRED");let d=new Map(c.map(a=>[a.id,a])),e=new Set,f=new Set,g={entity:b=>d.get(b)??a.entity(b),group:b=>a.group(b)},h=(a,b)=>(e.add(a),q(g,a,b)),i=b=>(f.add(b),a.group(b).entityIds),j=[...b],k=new Set;for(let a=0;a<j.length;a++){let b=j[a];if(k.has(b))continue;k.add(b);let c=h(b,"construction-operation").value;if(!o(c.workPackageId)||!Array.isArray(c.components)||!Array.isArray(c.requirements)||!Array.isArray(c.predecessors))throw Error("CONSTRUCTION_OPERATION_SCHEMA:"+b);for(let a of(h(c.workPackageId,"work-package"),h(c.calendarId,"work-calendar"),c.predecessors))j.push(a.operationId);for(let a of c.components){let b=h(a.allocationId,"source-allocation").value;for(let a of(h(String(b.memberId),"source-member"),i("allocation:"+(0,m.Fu)([b.memberId,b.operation]))))h(a,"source-allocation");for(let b of i("allocation-operations:"+a.allocationId))g.entity(b)?.kind==="construction-operation"&&j.push(b)}for(let a of c.requirements)for(let b of(h(a.resourcePoolId,"resource-pool"),i("resource:"+a.resourcePoolId)))g.entity(b)?.kind==="construction-operation"&&j.push(b)}return{entityIds:[...e].sort(),groupKeys:[...f].sort(),operationIds:[...k].sort()}}async function s(a){if(!/^[a-f0-9]{64}$/u.test(a.buildId))throw Error("CONSTRUCTION_EVALUATION_BUILD_REQUIRED");let b=(0,m.Fu)([n,d.CONSTRUCTION_SCHEDULE_KERNEL_VERSION,a.buildId,a.clock,a.rootOperationIds,(0,m.Fu)(p(a.project))]);return a.store.evaluateAsync(a.proposalId,b,async b=>{let c;try{c=function(a,b,c,d){if(!o(d.timelineId))throw Error("CONSTRUCTION_TIMELINE_REQUIRED");let g=new Map(b.candidateEntities.map(a=>[a.id,a])),n=new Map(b.groups.map(a=>[a.key,a])),s={entity:a=>g.get(a),group:a=>{let b=n.get(a);if(!b)throw Error("CONSTRUCTION_GROUP_NOT_CAPTURED:"+a);return b}},t=r(s,c),u=new Map((0,e.BI)(a).map(a=>[a.memberId,a])),v=[],w=[],x=new Map,y=new Map,z=a=>a.timelineId===d.timelineId&&(0,m.Fu)(a.timeUnit)===(0,m.Fu)(p(d.timeUnit));for(let c of t.operationIds){let g=q(s,c,"construction-operation").value,n=q(s,g.workPackageId,"work-package").value;if(![g.title,g.operation,g.method,g.workfront,g.continuityBasis].every(o)||"sequential"!==g.execution||!g.components.length||!Array.isArray(n.memberIds))throw Error("CONSTRUCTION_ACTUAL_WORK_UNIT_REQUIRED:"+c);let r=q(s,g.calendarId,"work-calendar").value;if(!z(r)||!o(r.basis)||!Array.isArray(r.windows))throw Error("CONSTRUCTION_CALENDAR_NOT_MEASURED:"+g.calendarId);let t=g.components.map(a=>{if(y.has(a.allocationId))throw Error("CONSTRUCTION_ALLOCATION_USED_TWICE:"+a.allocationId);y.set(a.allocationId,c);let d=q(s,a.allocationId,"source-allocation").value,e=String(d.memberId),f=u.get(e),h=q(s,e,"source-member").value;if(!f||h.originalEntryHash!==(0,m.Fu)(p(f.entry))||d.workPackageId!==g.workPackageId||d.operation!==g.operation||!n.memberIds.includes(e))throw Error("CONSTRUCTION_SOURCE_ALLOCATION_IDENTITY:"+a.allocationId);let i="allocation:"+(0,m.Fu)([e,d.operation]),j=0n,k=1n;for(let a of new Set([...s.group(i).entityIds,...b.proposal.changes.filter(a=>"source-allocation"===a.kind&&a.value?.memberId===e&&a.value.operation===d.operation).map(a=>a.id)])){let b=s.entity(a);if(!b||b.deleted)continue;let c=b.value;if(!/^[1-9]\d*$/u.test(String(c.numerator))||!/^[1-9]\d*$/u.test(String(c.denominator)))throw Error("CONSTRUCTION_SOURCE_ALLOCATION_FRACTION");j=j*BigInt(String(c.denominator))+BigInt(String(c.numerator))*k,k*=BigInt(String(c.denominator));let d=(a,b)=>b?d(b,a%b):a,e=d(j,k);j/=e,k/=e}if(j>k)throw Error("CONSTRUCTION_SOURCE_ALLOCATION_OVERFLOW:"+e);return{...a,id:a.allocationId,memberId:e,share:{numerator:String(d.numerator),denominator:String(d.denominator)}}}),A=function(a){if(!a.workUnitId.trim()||!a.operation.trim()||!a.continuityBasis.trim()||!a.components.length||new Set(a.components.map(a=>a.id)).size!==a.components.length)throw Error("WORK_DURATION_ACTUAL_OPERATION_REQUIRED");if(!Number.isSafeInteger(a.timeUnit.ticksPerUnit)||a.timeUnit.ticksPerUnit<1||!Number.isSafeInteger(a.rounding.quantumTicks)||a.rounding.quantumTicks<1||!a.rounding.basis.trim())throw Error("WORK_DURATION_ROUNDING_REQUIRED");let b={hour:1,minute:60,second:3600}[a.timeUnit.unit];if(!b)throw Error("WORK_DURATION_CLOCK_UNIT_REQUIRED");let c=new Map((0,e.BI)(a.project).map(a=>[a.memberId,a])),d=new Map,g={n:0n,d:1n},m=a.components.map(b=>{let m=c.get(b.memberId);if(!m||"eligible"!==(0,f.L2)(a.project,m.entry).sourceVersionFieldEligibility.quantity.status)throw Error("WORK_DURATION_SOURCE_NOT_ELIGIBLE");if(!/^[1-9]\d*$/u.test(b.share.numerator)||!/^[1-9]\d*$/u.test(b.share.denominator))throw Error("WORK_DURATION_SHARE_INVALID");let n=h(BigInt(b.share.numerator),BigInt(b.share.denominator)),o=i(d.get(m.memberId)??{n:0n,d:1n},n);if(d.set(m.memberId,o),o.n>o.d)throw Error("WORK_DURATION_SOURCE_OVERALLOCATED");if(!Number.isSafeInteger(b.plannedCrews)||b.plannedCrews<1||!Number.isSafeInteger(b.productiveCrews)||b.productiveCrews<1||b.productiveCrews>b.plannedCrews||!b.parallelismBasis.trim()||!Number.isFinite(b.hoursPerShift)||b.hoursPerShift<=0||b.hoursPerShift>24||!b.ratePerCrewShift.basis.trim())throw Error("WORK_DURATION_PRODUCTION_CONFIGURATION_REQUIRED");if(!(0,e.Im)(b.ratePerCrewShift.unit,m.entry.unit,"crew"))throw Error(`WORK_DURATION_UNIT_MISMATCH:ratePerCrewShift.unit「${b.ratePerCrewShift.unit}」与清单成员「${m.entry.name}」单位「${m.entry.unit}」不匹配;应写成「${m.entry.unit}/班」或「${m.entry.unit}/台班」`);let p=l(m.entry.quantity),q=l(b.ratePerCrewShift.value);if(p.n<=0n||q.n<=0n)throw Error("WORK_DURATION_POSITIVE_QUANTITY_AND_RATE_REQUIRED");let r=j(p,n),s=j(((a,b)=>{if(b.n<=0n)throw Error("WORK_DURATION_POSITIVE_RATE_REQUIRED");return h(a.n*b.d,a.d*b.n)})(r,j(q,h(BigInt(b.productiveCrews),1n))),l(b.hoursPerShift));return g=i(g,s),{id:b.id,memberId:m.memberId,sourceIdentity:m.sourceIdentity,unit:m.entry.unit,originalQuantity:m.entry.quantity,allocatedQuantity:k(r),workHours:k(s)}}),n=j(g,h(BigInt(b)*BigInt(a.timeUnit.ticksPerUnit),1n)),o=BigInt(a.rounding.quantumTicks),p=(n.n+n.d*o-1n)/(n.d*o)*o;if(p>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WORK_DURATION_TICK_RANGE_UNSUPPORTED");return{workUnitId:a.workUnitId,operation:a.operation,components:m,exactWorkHours:k(g),exactTicks:k(n),durationTicks:Number(p),rounding:{...a.rounding,addedTicks:k(i(h(p,1n),h(-n.n,n.d)))},timeUnit:a.timeUnit,scope:"declared-work-unit-duration-only",productionQualified:!1,globalDatesOrPeaksCertified:!1}}({project:a,workUnitId:c,operation:g.operation,continuityBasis:g.continuityBasis,components:t,timeUnit:d.timeUnit,rounding:g.rounding});v.push(A);let B=0,C=g.requirements.map(a=>{let b=q(s,a.resourcePoolId,"resource-pool");if(x.set(b.id,b),!z(b.value)||!o(b.value.capacityBasis)||!o(b.value.title)||!o(b.value.unit)||!Array.isArray(b.value.availability)||!o(a.basis)||!["work","retained"].includes(a.mode))throw Error("CONSTRUCTION_RESOURCE_CAPACITY_NOT_DECLARED:"+b.id);if("crew"===b.value.unit&&"work"===a.mode&&(B+=a.demand),"work"===a.mode&&void 0!==a.holdAfterTicks)throw Error("CONSTRUCTION_WORK_RESOURCE_RETENTION_AMBIGUOUS");return{resourceId:b.id,demand:a.demand,from:0,to:"work"===a.mode?A.durationTicks:a.holdAfterTicks??0,mode:a.mode}}),D=Math.max(...t.map(a=>a.productiveCrews));if(B<D)throw Error(`CONSTRUCTION_PRODUCTIVE_CREWS_NOT_RESERVED:${c}:requirements 中 mode=work 且资源池 unit='crew' 的需求合计 ${B} < productiveCrews ${D};班组资源池的 unit 必须是 'crew'(容量按班组数,不是人数),并在 requirements 中给 mode=work、demand≥${D} 的需求`);for(let a of g.predecessors)if(!o(a.basis)||Object.keys(a).some(a=>!["operationId","from","lag","basis"].includes(a)))throw Error("CONSTRUCTION_TECHNICAL_EDGE_BASIS_REQUIRED:"+c);w.push({id:c,kind:"operation",duration:A.durationTicks,workingCalendar:r.windows,predecessors:g.predecessors.map(a=>({id:a.operationId,from:a.from,lag:a.lag})),uses:C,...void 0===g.release?{}:{release:g.release},...void 0===g.latestFinish?{}:{latestFinish:g.latestFinish}})}return{compiled:{timeUnit:d.timeUnit,horizon:d.horizon,jobs:w,resources:[...x.values()].map(a=>({id:a.id,availability:a.value.availability})),...void 0===d.targetFinish?{}:{targetFinish:d.targetFinish}},units:v,scope:t,clock:d,sourceSnapshotId:a.snapshotId}}(a.project,b,a.rootOperationIds,a.clock)}catch(a){return{dataValidity:"invalid",relatedConstraints:"invalid",schedule:{scope:"local",state:"unmeasured"},issues:[{code:"CONSTRUCTION_COMPILATION_REJECTED",reason:a instanceof Error?a.message:String(a)}],result:{professionalAccepted:!1,globalFeasibilityAccepted:!1}}}let g=await (0,d.runCompiledSchedule)(c.compiled,{signal:a.signal}),s=g.results.filter(a=>a.checked&&(0,d.checkCompiledSchedule)(c.compiled,a.placements).accepted).sort((a,b)=>a.finish-b.finish||a.strategy.localeCompare(b.strategy))[0]??g.results[0],t=g.results.some(a=>"unmeasured"===a.state||"constraint-violation"===a.state),u=(0,e.BI)(a.project).map(a=>a.memberId),v=new Set(c.units.flatMap(a=>a.components.map(a=>a.memberId))),w={scope:u.length>0&&v.size>=u.length?"global":"partial",coveredMembers:v.size,totalMembers:u.length};return{dataValidity:t?"invalid":"valid",relatedConstraints:t?"invalid":"valid",schedule:{scope:"local",state:s.state},issues:s.issues,result:p({compilerVersion:n,buildId:a.buildId,threadId:g.threadId,compilation:c,candidates:g.results,selectedStrategy:s.strategy,professionalAccepted:!1,globalFeasibilityAccepted:!1,assertionScope:"current-related-operations-and-declared-resources-only",scheduleCoverage:w})}})}},58716:(a,b,c)=>{c.d(b,{F:()=>i,y:()=>h});var d=c(61485),e=c(9104),f=c(25353),g=c(25164);function h(a){return{...a,sections:a.sections.map(a=>{let{requiredOutputs:b,coverageItems:c,workPackages:d,...e}=a;return{...e,workPackages:d.map(a=>({id:a.id,title:a.title,objectScope:a.objectScope,workfront:a.workfront,memberCount:a.memberCount})),workPackagesReading:"本节工作包的成员与工程量明细未随每轮上下文重发;需要时用 read_object/read_scope 按工作包或节读取。"}})}}function i(a){let b,c,h,i=new Set(a.sectionIds),j=new Map((a.tenderResponsePlan?.sections??[]).map(a=>[a.sectionId,a])),k=(0,d.cD)(a.store,{contract:a.contract,responsibilityId:a.responsibilityId,expectedBidCompositionHash:a.expectedBidCompositionHash,...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{}}),l=new Set(k.missingUnitIds),m=new Map,n=new Map;for(;;){let c=a.store.issuePage({states:["open","investigating","awaiting-decision"],...void 0===b?{}:{afterSequence:b},limit:200});for(let b of c.issues){if("review-finding"!==b.kind)continue;let c=(0,f.N7)(a.store,b),d=(0,f.S0)(c)?m:n;for(let a of c.scope.entityIds)d.set(a,[...d.get(a)??[],c.id])}if(void 0===c.nextAfterSequence)break;b=c.nextAfterSequence}let o=new Map;for(;;){let b=a.store.entityPage({groupKey:`writing:${a.responsibilityId}`,...c?{afterId:c}:{},limit:200});for(let a of b.entities){if(a.deleted||"writing-unit"!==a.kind||!a.value)continue;let b=a.value,c=Array.isArray(b.sectionIds)?b.sectionIds.map(String):[],d="string"==typeof b.id?b.id:a.id,e="table"===b.kind||"figure"===b.kind?b.kind:"paragraph";for(let f of c){if(!i.has(f))continue;let c=o.get(f)??[];c.push({entityId:a.id,unitId:d,version:a.version,kind:e,..."string"==typeof b.subsectionId&&b.subsectionId.trim()?{subsectionId:b.subsectionId.trim()}:{},..."string"==typeof b.blockId&&b.blockId.trim()?{blockId:b.blockId.trim()}:{},..."string"==typeof b.heading&&b.heading.trim()?{heading:b.heading.trim()}:{},..."string"==typeof b.caption&&b.caption.trim()?{caption:b.caption.trim()}:{},size:"string"==typeof b.text?Array.from(b.text).length:Array.isArray(b.rows)?b.rows.length:Array.isArray(b.nodes)?b.nodes.length:0,review:{covered:!l.has(a.id)},openFindingIds:[...new Set(m.get(a.id)??[])],advisoryFindingIds:[...new Set(n.get(a.id)??[])]}),o.set(f,c)}}if(!b.nextAfterId)break;c=b.nextAfterId}let p=a.project?(0,e.qN)(a.store,a.project):[],q=a.workPackageIds?.length?new Set(a.workPackageIds):void 0,r=a.memberIndices?.length?new Set(a.memberIndices):void 0,s="writing"===a.purpose,t=[];for(;;){let b=a.store.entityPageByKind({kind:"construction-operation",...h?{afterId:h}:{},limit:200});for(let a of b.entities){let b=a.value;b?.workPackageId&&t.push({id:a.id,workPackageId:String(b.workPackageId),status:a.deleted?"deleted":`v${a.version}`})}if(!b.nextAfterId)break;h=b.nextAfterId}let u=(0,e.nu)(a.store),v=a.store.entity("document-execution-baseline"),w=a.contract.sections.filter(a=>i.has(a.id)).map(b=>{let c=o.get(b.id)??[],d=j.get(b.id),e=c.filter(a=>!a.review.covered).map(a=>a.entityId),f=c.filter(a=>a.openFindingIds.length),h=[];c.length||h.push("本节还没有生效正文单元:先按内容契约成文"),e.length&&h.push(`还有 ${e.length} 个单元缺当前审查档位`),f.length&&h.push(`${f.length} 个单元有未关闭 finding:修订或逐条举证`),!c.length||e.length||f.length||h.push("本节单元齐、档位齐、无未关闭 finding:可收口");let i=p.filter(a=>a.sectionIds.includes(b.id)&&(!q||q.has(a.id))).map(a=>{let b=s?[]:a.members.filter(a=>!r||r.has(a.memberIndex));return{id:a.id,title:a.title,objectScope:a.objectScope,workfront:a.workfront,memberCount:a.members.length,members:b.map(a=>({index:a.memberIndex,name:a.name,quantity:a.quantity,unit:a.unit})),quantities:[...new Map(a.members.map(a=>[`${a.name}|${a.unit}`,{name:a.name,value:a.quantity,unit:a.unit}])).values()]}}),l=(0,g.Pp)(a.store,b.id);return i.length||h.push("本节还没有工作包/清单成员:基准与写作数据不完整"),{sectionId:b.id,title:b.title,chapterId:b.chapterId,units:c,review:{complete:0===e.length,missingUnitIds:e,applied:k.applied,stale:k.stale},requiredOutputs:(d?.requiredOutputs??[]).map(a=>({form:a.form,basis:a.basis,allowed:a.allowed})),coverageItems:(d?.contentContract?.coverageItems??[]).map(a=>({id:a.id,text:a.text,enumerated:a.enumerated,kind:a.kind,...a.suggestedCarrier?{suggestedCarrier:a.suggestedCarrier}:{}})),workPackages:i,calculations:function(a,b){let c=new Set(a.map(a=>a.id));return b.filter(a=>c.has(a.workPackageId)).map(a=>({operationId:a.id,status:a.status,...a.certificateId?{certificateId:a.certificateId}:{}}))}(i,t),...u&&v?{baseline:{id:v.id,version:v.version,startDate:u.startDate,totalDays:u.totalDays}}:{},hints:h,...l?{state:{phase:l.phase,inputHash:l.inputHash,boundaryKey:l.boundaryKey,...l.reason?{reason:l.reason}:{},dependencyKeys:l.dependencyKeys}}:{}}});return{responsibilityId:a.responsibilityId,sections:w,instruction:"这是本职责当前章节的权威工作区:单元版本、审查档位、未关闭 finding 与招标输出/原子项都在这里。先据此判断下一步;需要正文原文时按单元 id/字段读取,不要反复 read_object/read_receipt 重建同一状态。工作区只是观察,不产生业务进展;写、审、改仍由你决定。"}}},60126:(a,b,c)=>{c.d(b,{Ep:()=>g,Fv:()=>h,nP:()=>i});var d=c(745);let e=a=>`section-contract:${a}`,f="section-contract-control",g=(a,b)=>b.subscribe(c=>(function(a,b,c){let g=[...b.map(a=>({id:e(a.referenceId),kind:"section-contract",state:{referenceId:a.referenceId,sectionId:a.sectionId,contractHash:a.contractHash,dependencyReferenceIds:a.dependencyReferenceIds,sourceOnlyDraft:!0===a.sourceOnlyDraft,permitted:"draft-approved"===a.status||"global-approved"===a.status}})),{id:f,kind:"section-contract-control",state:{globalPlanHash:c??null}}].flatMap(({id:b,kind:c,state:e})=>{let f=a.entity(b);if(f&&f.kind!==c)throw Error("SECTION_CONTRACT_ENTITY_CONFLICT");let g=JSON.parse(JSON.stringify(e));return f&&!f.deleted&&(0,d.Fu)(f.value)===(0,d.Fu)(g)?[]:[{id:b,kind:c,expectedVersion:f?.version??null,value:g}]});if(!g.length)return;let h=(0,d.Fu)(g),i=a.propose({actorId:"structure-contracts",purpose:"structure-contract-version",reason:"当前结构审查及实际依赖合同版本",reads:{entities:g.map(a=>({id:a.id,version:a.expectedVersion})),groups:[]},changes:g},`section-contracts:${h}:propose`);a.evaluate(i.id,"section-contracts-v1",()=>({dataValidity:"valid",relatedConstraints:"valid",schedule:{scope:"local",state:"not-evaluated"},issues:[],result:{identity:h}})),a.commit(i.id,`section-contracts:${h}:commit`)})(a,c,b.approvedGlobalPlanHash()));function h(a,b){let c=a.entity(f);if(!c)return{entities:[],groups:[]};if(c.deleted||"section-contract-control"!==c.kind||c.value?.globalPlanHash!==b)throw Error("SECTION_CONTRACT_GLOBAL_APPROVAL_REQUIRED");return{entities:[{id:f,version:c.version}],groups:[]}}function i(a,b,c){let d=new Map,f=()=>{};try{for(let a of new Set(c))d.set(a,b.acquire(a));f=g(a,b);let h=new Map;for(let[c,f]of d){let d=b.snapshot().find(a=>a.referenceId===f.referenceId);h.set(c,[d.referenceId,...d.dependencyReferenceIds].map(b=>{let c=e(b),d=a.entity(c);if(!d||d.deleted)throw Error("SECTION_CONTRACT_ENTITY_MISSING");return{id:c,version:d.version}}))}let i=b=>{for(let c of b){let b=d.get(c);if(!b)throw Error(`SECTION_CONTRACT_SCOPE_DENIED:${c}`);for(let d of(b.assertCurrent(),h.get(c)))if(a.entity(d.id)?.version!==d.version)throw Error(`SECTION_CONTRACT_READ_STALE:${d.id}`)}};return{signal:AbortSignal.any([...d.values()].map(a=>a.signal)),assertCurrent:i,reads:a=>(i(a),{entities:a.flatMap(a=>h.get(a)),groups:[]}),release:()=>{for(let a of(f(),d.values()))a.release()}}}catch(a){for(let a of(f(),d.values()))a.release();throw a}}},60806:(a,b,c)=>{c.d(b,{R:()=>g});var d=c(745),e=c(4053),f=c(25353);function g(a,b,c,g){let h=b.revision;if(!h)return c;let i=b.sectionIds[0],j=a=>(0,e.tp)(b.responsibilityId,b.purpose,a,i),k=new Map;for(let b;;){let c=a.entityPage({groupKey:`section-units:${i}`,...b?{afterId:b}:{},limit:200});for(let a of c.entities)(0,e.iC)(a)&&k.set(a.id,a);if(!c.nextAfterId)break;b=c.nextAfterId}let l=new Map(c.map(a=>[a.id,a])),m=new Set(h.retire.map(a=>j(a.unitId)));if(m.size!==h.retire.length)throw Error("WRITING_REVISION_RETIRE_DUPLICATE");for(let a of h.retire){let b=j(a.unitId),c=k.get(b);if(!c||c.version!==a.version)throw Error(`WRITING_REVISION_CONFLICT:${b}@${a.version}`);if(l.has(b))throw Error(`WRITING_REVISION_RETIRED_AND_WRITTEN:${b}`);l.set(b,{id:b,kind:"writing-unit",expectedVersion:a.version,value:null})}let n=new Map(h.replacements.map(a=>[j(a.fromUnitId),a.toUnitIds.map(j)]));if(n.size!==h.replacements.length||[...n.keys()].some(a=>!m.has(a))||[...m].some(a=>!n.has(a)))throw Error("WRITING_REVISION_REPLACEMENT_REQUIRED");for(let[a,b]of n)for(let c of b){let b=l.get(c);if(!b?.value||"writing-unit"!==b.kind)throw Error(`WRITING_REVISION_REPLACEMENT_MISSING:${c}`);let d=Array.isArray(b.value.replaces)?b.value.replaces:[];b.value={...b.value,replaces:[...d,{entityId:a,version:k.get(a).version}]}}let o=new Map;for(let[a,b]of k)o.set(a,(0,e.iC)(b));for(let a of l.values())a.value?o.set(a.id,a.value):o.delete(a.id);if(new Set(h.redirects.map(a=>a.fromUnitId)).size!==h.redirects.length)throw Error("WRITING_REVISION_REDIRECT_AMBIGUOUS");for(let a of h.redirects){let c=j(a.fromUnitId),d=j(a.toUnitId),e=o.get(d);if(!m.has(c)||!e||"paragraph"===e.kind)throw Error("WRITING_REVISION_REDIRECT_INVALID");for(let[c,d]of o){if(!d.text)continue;let f=d.text;for(let b of["table","figure"])f=f.split(`{{${b}:${a.fromUnitId}}}`).join(`{{${e.kind}:${a.toUnitId}}}`);if(f!==d.text){let g=k.get(c);if(g?.value?.responsibilityId!==b.responsibilityId&&!l.has(c))throw Error("WRITING_REVISION_CROSS_AUTHOR_REFERENCE");let h=b=>["table","figure"].reduce((b,c)=>b.split(`{{${c}:${a.fromUnitId}}}`).join(`{{${e.kind}:${a.toUnitId}}}`),b),i={...d,text:f,...d.implementations?{implementations:d.implementations.map(a=>({...a,location:{...a.location,...a.location.quote?{quote:h(a.location.quote)}:{}}}))}:{},...d.claims?{claims:d.claims.map(a=>({...a,location:{...a.location,...a.location.quote?{quote:h(a.location.quote)}:{}}}))}:{}};o.set(c,i),l.set(c,{id:c,kind:"writing-unit",expectedVersion:g?.version??null,value:i})}}}for(let a of o.values())for(let b of h.retire)if(["table","figure"].some(c=>a.text?.includes(`{{${c}:${b.unitId}}}`)))throw Error(`WRITING_REVISION_DANGLING_REFERENCE:${b.unitId}`);for(let[a,b]of o)for(let c of[...b.references??[],...(b.assertions??[]).map(a=>a.reference)])if("decision"===c.kind&&m.has(c.entityId))throw Error(`WRITING_REVISION_RETIRED_DECISION_REFERENCE:${a} -> ${c.entityId};正文载体引用使用可重定向的表/图引用,工程断言须重新绑定真实决定或证据`);let p=[...new Set([...m,...[...l.values()].filter(a=>"writing-unit"===a.kind&&k.has(a.id)).map(a=>a.id)])].map(a=>(0,e.iC)(k.get(a))),q=new Set(p.flatMap(a=>a.coverageItemIds??[])),r=new Set(p.flatMap(a=>a.outputId?[a.outputId]:[]));for(let a of q)if(1!==[...o.values()].filter(b=>b.coverageItemIds?.includes(a)).length)throw Error(`WRITING_REVISION_COVERAGE_NOT_CONSERVED:${a}`);for(let a of r)if(1!==[...o.values()].filter(b=>b.outputId===a&&"paragraph"!==b.kind).length)throw Error(`WRITING_REVISION_OUTPUT_NOT_CONSERVED:${a}`);for(let b of(0,f.bF)(a,[...m])){let c=[...new Set(b.scope.entityIds.flatMap(a=>{let b=n.get(a);return b?.length?b:b?[...o.keys()]:[a]}))];if(!c.length)throw Error(`WRITING_REVISION_UNRESOLVED_FINDING:${b.id}`);let d=(0,f.wI)(b.id),e=a.entity(d);l.set(d,{id:d,kind:"review-finding-targets",expectedVersion:e?.version??null,value:{issueId:b.id,targets:c.map(b=>({id:b,version:l.has(b)?(l.get(b).expectedVersion??0)+1:k.get(b)?.version??a.entity(b)?.version??1}))}})}let s="writing-revision:"+(0,d.Fu)([b.responsibilityId,i,h,b.units]).slice(0,32),t=a.entity(s);return l.set(s,{id:s,kind:"writing-revision",expectedVersion:t?.version??null,value:JSON.parse(JSON.stringify({sectionId:i,revision:h,requestHash:(0,d.Fu)([b,g])}))}),[...l.values()]}},65131:(a,b,c)=>{c.d(b,{_M:()=>s,pu:()=>j});var d=c(45532),e=c(745),f=c(17768),g=c(20209),h=c(5468);let i={"source-check":["read-current","professional-decision"],"method-decision":["read-current","work-package","source-allocation","production","shared-definition"],"production-calculation":["read-current","source-allocation","production","shared-definition"],writing:["read-current","writing"]};function j(a,b){return i[a].filter(a=>b.includes(a))}let k={writing:"writing","production-calculation":"production"},l={"source-check":[],"method-decision":[],"production-calculation":[],writing:["compare","read_calculation","query_work_packages","list_construction_responsibility_options","delegate_construction_responsibility","conclude_construction_organization","section_workspace","read_scope","read_object","search_evidence","set_focus","plan_section","query_project_facts","query_cad_context","query_source_units","discover_files","list_skills","match_skills","load_skill","preview","inspect_source_coverage"]},m=["source-check","method-decision","production-calculation","writing"],n=[...m];function o(a){let b={...a},c=(a,c)=>{let d=((...a)=>{for(let c of a){let a=b[c];if(null!=a&&!("string"==typeof a&&!a.trim()))return a}})(a,...c);if(void 0!==d)for(let e of(b[a]=d,c))e!==a&&delete b[e]};for(let a of(c("profileId",["profile","profile_id","profileKey","role"]),c("responsibilityKey",["responsibility_key","responsibility","key"]),c("purpose",["workPurpose","work_purpose","intent"]),c("workPackageIds",["work_packages","workPackageId","workPackage"]),c("sectionIds",["sections","sectionId","section_ids"]),c("goal",["objective","target"]),c("expectedOutcome",["expected_outcome","outcome","deliverable"]),c("reason",["basis","rationale"]),["workPackageIds","sectionIds"])){let c=b[a];"string"==typeof c?b[a]=c.split(/[,,、\n]/u).map(a=>a.trim()).filter(Boolean):Array.isArray(c)&&(b[a]=[...new Set(c.map(a=>String(a).trim()).filter(Boolean))])}if("string"==typeof b.primary?b.primary=["true","1","yes","是"].includes(b.primary.trim().toLowerCase()):(void 0===b.primary||null===b.primary)&&(b.primary=!1),"string"==typeof b.purpose){let a=b.purpose.trim().toLowerCase().replace(/[\s_]+/gu,"-");b.purpose=({"source-check":"source-check",查证:"source-check",核验:"source-check",取证:"source-check","method-decision":"method-decision",方法:"method-decision",工艺:"method-decision",组织:"method-decision","production-calculation":"production-calculation",计算:"production-calculation",排程:"production-calculation",writing:"writing",write:"writing",写作:"writing",成文:"writing",正文:"writing"})[a]??b.purpose}for(let a of["profileId","responsibilityKey","goal","expectedOutcome","reason"])"string"==typeof b[a]&&(b[a]=b[a].trim());return b}let p={type:"string",minLength:1},q=(a,b=Object.keys(a))=>({type:"object",properties:a,required:b,additionalProperties:!1}),r=a=>Array.isArray(a)&&a.every(a=>"string"==typeof a&&!!a.trim())&&new Set(a).size===a.length;function s(a){let{chief:b}=a,c=b.store,i=new Map(a.profiles.map(a=>[a.id,{...a,permissions:[...a.permissions],evidence:a.evidence&&{...a.evidence,skills:structuredClone([...a.evidence.skills]),scopeRootNames:[...a.evidence.scopeRootNames],toolNames:[...a.evidence.toolNames]},extraTools:(a.extraTools??[]).map(a=>({...a,parameters:structuredClone(a.parameters)}))}]));if("document-chief"!==b.responsibilityKind||i.size!==a.profiles.length||[...i.values()].some(a=>!/^[a-z][a-z0-9-]*$/u.test(a.id)||!a.system.trim()||"function"!=typeof a.caller||"professional"!==a.kind||a.permissions.some(a=>!h.m.includes(a))||a.permissions.some(a=>!b.permissions.includes(a))))throw Error("CONSTRUCTION_RESPONSIBILITY_PROFILE_INVALID");let s=new Map((0,d.BI)(b.project).map(a=>[a.memberId,a])),t=a=>{let d=i.get(a.profileId);if(!d)throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:profileId「${String(a.profileId)}」不在能力目录里;可选:${[...i.keys()].join("、")}`);let f=m;if(!f.includes(a.purpose))throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:purpose「${String(a.purpose)}」不适用于档案「${d.id}」(role=${d.kind});可选:${f.join("、")}。purpose 决定本条职责暴露的工具面与工作集投影,不是可省略的标签,也不是阶段顺序。`);let g=k[a.purpose];if(g&&!d.permissions.includes(g))throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:档案「${d.id}」缺少目的「${a.purpose}」的核心授权「${g}」,按目的取交集会静默删掉主能力;请换用具备该能力的档案,或在本项目能力目录中补上该授权。`);if(!/^[a-z][a-z0-9-]{0,63}$/u.test(a.responsibilityKey))throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:responsibilityKey「${String(a.responsibilityKey)}」不合形状——只允许小写字母开头、后接小写字母/数字/连字符(**不含冒号、下划线、空格**),长度 ≤64;它是稳定身份,不随显示名或轮次变化`);if(!r(a.workPackageIds))throw Error("CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:workPackageIds 必须是不重复的非空字符串数组(可传 [] 表示本职责不含工作包)");if(!r(a.sectionIds)||!a.sectionIds.length)throw Error("CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:sectionIds 必须是不重复的非空字符串数组(至少承接一个合同章节)");if(!a.goal.trim()||!a.expectedOutcome.trim())throw Error("CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:goal 与 expectedOutcome 都不能为空——首条指令必须说清目标与所需成果");if(a.sectionIds.some(a=>!b.authority.sectionIds.includes(a)))throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:sectionIds 里有章节不在本次范围;本次可用:${[...b.authority.sectionIds].join("、")}`);if(a.sectionIds.some(a=>!b.contract.sections.some(b=>b.id===a)))throw Error("CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:sectionIds 里有合同里不存在的章节");if("writing"===a.purpose){let d="responsibility:"+(0,e.Fu)([c.workspaceId,a.responsibilityKey]).slice(0,24),f=new Map;for(let e of c.supervisedActors(b.authority.actorId)){if(e.actorId===d)continue;let b=e.definition;if(!Array.isArray(b.toolFace)||!b.toolFace.includes("writing"))continue;let c=new Set(Array.isArray(b.sectionIds)?b.sectionIds.map(String):[]),g=String(b.assignmentBinding?.responsibilityKey??e.actorId);for(let b of a.sectionIds)c.has(b)&&f.set(b,[...f.get(b)??[],g])}if(f.size)throw Error(`CONSTRUCTION_DELEGATION_WRITING_SECTION_DUPLICATED:以下章节已有 writing 职责承接:${[...f].slice(0,8).map(([a,b])=>`${a}(${b.join("、")})`).join(";")}。同一节只能有一个 writing 职责;请从本次 sectionIds 移除这些节,剩余节用新的 responsibilityKey 另立职责,或把补充内容写给已有职责。不要原样重试,也不要等到 conclude 才发现重复。`)}if(a.primary&&"professional"!==d.kind)throw Error(`CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID:primary 只能给专业档案(本档案 kind=${d.kind})`);let h=a.workPackageIds.map(a=>{let d=c.entity(a);if(!d||d.deleted||"work-package"!==d.kind||!b.authorizeRead(d)||!r(d.value?.memberIds)||!r(d.value?.sectionIds))throw Error("CONSTRUCTION_DELEGATION_PACKAGE_REQUIRED");return d}),n=[...new Set(h.flatMap(a=>a.value.memberIds))].map(a=>{let d=s.get(a),f=c.entity(a);if(!d||!b.authority.memberIndices.includes(d.index)||f?.kind!=="source-member"||f.value?.originalEntryHash!==(0,e.Fu)(JSON.parse(JSON.stringify(d.entry))))throw Error("CONSTRUCTION_DELEGATION_MEMBER_SCOPE_DENIED");return d.index}).sort((a,b)=>a-b),o=h.length?a.sectionIds.filter(a=>!h.some(b=>b.value.sectionIds.includes(a))):[];if(o.length)throw Error(`CONSTRUCTION_DELEGATION_SECTION_PACKAGE_MISMATCH:章节 ${o.join("、")} 不在本次委派任何工作包的覆盖范围内;各包覆盖:${h.map(a=>`${a.id}→[${a.value.sectionIds.join("、")}]`).join(";")}。请为这些章节选择覆盖它们的工作包,或先提交覆盖这些章节的工作包再委派。`);let p=j(a.purpose,d.permissions);if(!h.length&&p.some(a=>"read-current"!==a))throw Error("CONSTRUCTION_DELEGATION_PRODUCTION_SCOPE_REQUIRED");let q="responsibility:"+(0,e.Fu)([c.workspaceId,a.responsibilityKey]).slice(0,24),t=l[a.purpose],u={profileId:a.profileId,responsibilityKey:a.responsibilityKey,workPackageIds:[...a.workPackageIds].sort(),sectionIds:[...a.sectionIds].sort(),primary:a.primary,goal:a.goal,expectedOutcome:a.expectedOutcome,purpose:a.purpose},w={...b,coordination:void 0,authority:{actorId:q,memberIndices:n,sectionIds:[...a.sectionIds].sort(),canManageSharedResources:p.includes("shared-definition")&&b.authority.canManageSharedResources},system:d.purposeSystems?.[a.purpose]??d.system,caller:d.caller,goal:a.goal,responsibilityKind:d.kind,supervisorActorId:b.authority.actorId,...d.deferSectionReview?{deferSectionReview:d.deferSectionReview}:{},resumeCompleted:()=>v(q),toolFace:p,excludeTools:t,permissions:d.permissions,evidence:d.evidence,extraTools:d.extraTools,assignmentBinding:u,initialFocus:{purpose:a.purpose,entityIds:a.workPackageIds.slice(0,1)}};return{actorId:q,value:w,basis:{entities:h.map(a=>({id:a.id,version:a.version})),groups:[]}}},u=new Set,v=a=>{let b=[],d=[];for(let a;;){let b=c.issuePage({states:["open","investigating","awaiting-decision","resolved","invalidated"],...void 0===a?{}:{afterSequence:a},limit:200});if(d.push(...b.issues),void 0===b.nextAfterSequence)break;a=b.nextAfterSequence}for(let c of d)if(c.owner===a&&["open","investigating","awaiting-decision"].includes(c.state)){let a=["owned",c.id,c.state,c.updatedAt].join(":");if(u.has(a))continue;u.add(a),b.push(`- 问题「${c.title}」(${c.id},由 ${c.raisedBy} 登记)**需要你处理**:`+(c.decision?`要作出的决定:${c.decision.question};可选:${c.decision.options.join("、")}。`:`${c.detail}。`)+"用 `inspect_issues` 读完整记录,按你的职责给出意见或推进状态(不要原样重开、不要假装通过)。")}else if(c.raisedBy===a&&["resolved","invalidated"].includes(c.state)){let a=["answered",c.id,c.state,String(c.resolution?.at??c.updatedAt)].join(":");if(u.has(a))continue;u.add(a),b.push(`- 你登记的问题「${c.title}」已被${"resolved"===c.state?"答复":"作废"}:${c.resolution?.note??""}(by ${c.resolution?.by??""})。据此决定你的成果是否需要修改或继续推进。`)}if(b.length)return`【运行反馈\xb7问题账变化】
41
43
  ${b.join("\n")}
42
- 按实际状态处理;需要时先读完整问题记录,不改动已生效成果就不要重复提交同一动作。`},w={kind:"construction-responsibility-profiles-v1",profiles:[...i.values()].map(a=>({id:a.id,role:a.kind,systemHash:(0,e.Fu)(a.system),permissions:[...a.permissions].sort(),...a.purposeSystems?{purposeSystemHashes:Object.fromEntries(Object.entries(a.purposeSystems).map(([a,b])=>[a,(0,e.Fu)(b)]))}:{},evidenceHash:a.evidence?(0,e.Fu)((0,g.d)(a.evidence,b.project).binding):null,extraTools:a.extraTools.map(a=>({name:a.name,description:a.description,parameters:JSON.parse(JSON.stringify(a.parameters)),terminal:!!a.terminal,housekeeping:!!a.housekeeping})).sort((a,b)=>a.name.localeCompare(b.name))})).sort((a,b)=>a.id.localeCompare(b.id))};return{binding:w,responsibility:{has(a){let d=c.actor(a);return!!(d?.definition.supervisorActorId===b.authority.actorId&&d.definition.assignmentBinding)},get:a=>{let d=c.actor(a);if(!d||d.definition.supervisorActorId!==b.authority.actorId)return;let g=d.definition.assignmentBinding;if(g)try{let a=t(g),b=(0,f.j)(a.value);if(a.actorId!==d.actorId||(0,e.Fu)(b.definition)!==(0,e.Fu)(d.definition))throw Error("CONSTRUCTION_DELEGATION_SCOPE_MIGRATION_REQUIRED");return a.value}catch(b){if(b instanceof Error&&/^(CONSTRUCTION_DELEGATION_|CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID)/u.test(b.message))throw Error("CONSTRUCTION_DELEGATION_SCOPE_MIGRATION_REQUIRED:"+a+":"+b.message,{cause:b});throw b}}},tools(a){if(a.actorId!==b.authority.actorId)throw Error("CONSTRUCTION_COORDINATOR_CHIEF_IDENTITY_MISMATCH");let d=()=>{let b=c.assertActorLease(a);if("document-chief"!==b.definition.role||!b.definition.coordinationBinding||(0,e.Fu)(b.definition.coordinationBinding)!==(0,e.Fu)(w))throw Error("CONSTRUCTION_COORDINATOR_ROLE_OR_CAPABILITY_MIGRATION_REQUIRED")},g=(g,h)=>{d();let i=o(g);if(!i.purpose){let a=function(a){let b=[a.responsibilityKey,a.goal,a.expectedOutcome,a.reason].map(a=>String(a??"")).join(" ");return/查证|核验|来源|证据|取证|source[-_ ]?check/iu.test(b)?"source-check":/计算|排程|工日|资源|峰值|劳动力|机械|材料批次|production[-_ ]?calculation/iu.test(b)?"production-calculation":/方法|工艺|工序|组织|对象|方案|深化|接口|method[-_ ]?decision/iu.test(b)?"method-decision":/写|正文|成文|章节|小节|编制|writing/iu.test(b)?"writing":void 0}(i);if(!a)throw Error("CONSTRUCTION_DELEGATION_PURPOSE_REQUIRED:目标/预期成果无法判断本条职责的实际目的;必须写明 purpose(source-check/method-decision/production-calculation/writing)。独立审查不是可委派的持久职责。");i.purpose=a}if("writing"===i.purpose&&Array.isArray(i.sectionIds)&&1!==i.sectionIds.length)throw Error(`CONSTRUCTION_DELEGATION_WRITING_ONE_SECTION:写作职责只能承接一节(「${String(i.responsibilityKey)}」声明了 ${i.sectionIds.length} 节)。结构计划有多少节就派多少条写作职责,不要合并多节;每节独立获得焦点并按节计费。`);i.responsibilityKey=String(i.responsibilityKey).trim().toLowerCase();let j="responsibility:"+(0,e.Fu)([c.workspaceId,i.responsibilityKey]).slice(0,24),k={profileId:i.profileId,responsibilityKey:i.responsibilityKey,purpose:i.purpose,workPackageIds:i.workPackageIds,sectionIds:i.sectionIds,primary:!0===i.primary,goal:i.goal,expectedOutcome:i.expectedOutcome,reason:String(i.reason??""),profileBinding:w,buildId:b.buildId,sourceSnapshotId:b.project.snapshotId,contractId:b.contract.id},l=c.actorDelegationReceipt(a,j,k,h);if(l)return{data:l};let m=t(i),n=(0,f.j)(m.value),p=c.actor(m.actorId),q=p?.definition.assignmentBinding;if(p&&q&&q.purpose!==i.purpose)throw Error(`CONSTRUCTION_DELEGATION_PURPOSE_MIGRATION_REQUIRED:职责「${i.responsibilityKey}」已按目的「${String(q.purpose)}」建立,改为「${i.purpose}」会改变其工具面与工作集。须以新的 responsibilityKey 另立职责;不要用重复委派静默改写一个持续职责的能力面。`);if(p&&q){let a={...n.definition,assignmentBinding:{...n.definition.assignmentBinding,goal:q.goal,expectedOutcome:q.expectedOutcome}};if((0,e.Fu)(a)===(0,e.Fu)(p.definition)&&(q.goal!==i.goal||q.expectedOutcome!==i.expectedOutcome))throw Error("CONSTRUCTION_DELEGATION_EXISTS_USE_CONCRETE_REVISION:"+m.actorId)}let r=c.delegateActor(a,m.actorId,n.definition,n.focus,{goal:i.goal,reason:String(i.reason??""),expectedOutcome:i.expectedOutcome,basis:m.basis},h,k);return{data:r,progressLedger:{effective:[(0,e.Fu)(["delegation",m.actorId,r])]}}};return[{name:"list_construction_responsibility_options",housekeeping:!0,description:"按游标读取实际合同章节或服务端可装配的职责能力配置。能力配置只是授权工具与知识入口,未核适用条件不等于专业采用或通过。回执 data 字段:view、records(对象数组)、total、nextOffset、professionalAccepted。",parameters:q({view:{...p,enum:["profiles","sections"]},offset:{type:"integer",minimum:0},limit:{type:"integer",minimum:1}},["view"]),invoke:a=>{d();let c=Number(a.offset??0),e=Number(a.limit??24);if(!Number.isSafeInteger(c)||c<0||!Number.isSafeInteger(e)||e<1)throw Error("CONSTRUCTION_COORDINATOR_PAGE_INVALID");let f="sections"===a.view?b.contract.sections.filter(a=>b.authority.sectionIds.includes(a.id)).map(a=>({id:a.id,title:a.title,chapterId:a.chapterId,responsibility:a.responsibility})):[...i.values()].map(a=>({id:a.id,label:a.label,role:a.kind,permissions:a.permissions,purposes:[...m],professionalAccepted:!1}));return{data:{view:a.view,records:f.slice(c,c+e),total:f.length,nextOffset:c+e<f.length?c+e:null,professionalAccepted:!1}}}},{name:"delegate_construction_responsibility",housekeeping:!0,parallelSafe:!0,housekeepingIdentity:(a,b)=>String(b.data.instructionId),description:'按已提交施工工作包与实际合同章节委派完整专业成果。稳定responsibilityKey不随显示名、目录或轮次变化;**responsibilityKey 统一用小写字母**(大写开头会被程序转小写;冒号/下划线/空格仍会拒收)。**profileId 必填**:从 `list_construction_responsibility_options {view:"profiles"}` 回执的 `records[].id` **逐字复制**;不知道有哪些档案时先查这个目录,不要猜名称、不要省略该字段。**purpose 优先写明**:本条职责实际要做的目的(source-check=查证、method-decision=方法与对象组织、production-calculation=生产计算、writing=成文),它决定该职责暴露的工具面与工作集投影;不是阶段顺序,也不能用一条职责同时覆盖写作与生产计算。若省略,程序只在职责目标/预期成果能明确判断动作时按实际动作推断;无法判断会拒收并要求补写。后台展开成员,只建同一持续职责,原子保存职责与首条具体指令。重复委派不重开,修改目标用原角色修订,修改范围或目的须以新的 responsibilityKey 另立职责;不自报专业通过。sectionIds 必须全部被所选工作包覆盖:对照建包回执 data.workPackages[].sectionIds。缺覆盖时由你选择有工程依据的包或提交补充包;工具不会自动扩范围。回执 data 字段(读回执按这些路径,不要猜层级):actorId(职责 id)、instructionId(首条指令 id)、created、sameResponsibility、businessProgress、professionalAccepted。',parameters:q({profileId:{...p,description:'能力档案 id:从 list_construction_responsibility_options {view:"profiles"} 的 records[].id 逐字复制,不猜名称'},responsibilityKey:p,purpose:{...p,enum:[...n],description:"本条职责的实际目的:source-check/method-decision/production-calculation/writing。独立审查不再是可委派的持久职责——作者提交正文时会同步触发独立审查调用。"},workPackageIds:{type:"array",items:p,description:"已提交包 id;其 sectionIds 并集须覆盖本次全部委派小节"},sectionIds:{type:"array",items:p,minItems:1,description:"职责实际承接的小节;逐一核对建包回执的覆盖范围,不能用未声明覆盖的包支撑"},primary:{type:"boolean"},goal:p,expectedOutcome:p,reason:p},["profileId","responsibilityKey","workPackageIds","sectionIds","goal","expectedOutcome","reason"]),normalizeArgs:a=>{let b=o(a),c=[...new Set([...Object.keys(a),...Object.keys(b)])].filter(c=>JSON.stringify(a[c])!==JSON.stringify(b[c])).map(a=>`$.${a}`);return{args:b,paths:c}},invoke:(a,b)=>g(a,b)},{name:"delegate_construction_sections",housekeeping:!0,parallelSafe:!0,housekeepingIdentity:(a,b)=>(b.data.assignments??[]).map(a=>a.instructionId).filter(Boolean).join(":"),description:"批量委派写作职责:一次提交多条**一节**职责(结构计划有 N 节就派 N 条),程序逐条校验并创建;适合 20+ 节整稿。每条给 profileId/responsibilityKey/purpose=writing/workPackageIds/sectionIds(恰好 1 节)/goal/expectedOutcome/reason;程序校验一节一责、工作包覆盖、章节不重复与责任键唯一,返回逐条结果与错误;失败条目按 error 修正后重提,已成功条目不会重开。",parameters:q({assignments:{type:"array",minItems:1,maxItems:64,items:q({profileId:{...p,description:'能力档案 id,从 list_construction_responsibility_options {view:"profiles"} 逐字复制'},responsibilityKey:p,purpose:{...p,enum:[...n],description:"本条职责实际目的;整稿写作批量通常全是 writing"},workPackageIds:{type:"array",items:p,description:"所选已提交工作包;并集须覆盖本条的 sectionIds"},sectionIds:{type:"array",items:p,minItems:1,maxItems:1,description:"写作职责恰好 1 节;结构计划有多少节就派多少条"},primary:{type:"boolean"},goal:p,expectedOutcome:p,reason:p},["profileId","responsibilityKey","workPackageIds","sectionIds","goal","expectedOutcome","reason"])}},["assignments"]),normalizeArgs:a=>{let b=Array.isArray(a.assignments)?a.assignments:[],c=[],d=b.map((a,b)=>{let d=a??{},e=o(d);for(let a of new Set([...Object.keys(d),...Object.keys(e)]))JSON.stringify(d[a])!==JSON.stringify(e[a])&&c.push(`$.assignments[${b}].${a}`);return e});return{args:{...a,assignments:d},paths:c}},invoke:(a,b)=>{d();let c=Array.isArray(a.assignments)?a.assignments:[],e=[],f=[],h=[];for(let[a,d]of c.entries())try{let c=g(d,`${b}:${a}`);e.push({index:a,...c.data}),h.push(...c.progressLedger?.effective??[])}catch(b){f.push({index:a,sectionIds:Array.isArray(d.sectionIds)?d.sectionIds.map(String):[],error:b instanceof Error?b.message:String(b)})}return{data:{requested:c.length,created:e.length,assignments:e,errors:f},...f.length?{feedbackRequired:!0}:{},...h.length?{progressLedger:{effective:[...new Set(h)]}}:{}}}}]}}}},65970:(a,b,c)=>{c.d(b,{$p:()=>R,Li:()=>S,Pw:()=>al});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(59339),i=c(98943),j=c(3737),k=c(45532),l=c(44967),m=c(745);let n=a=>JSON.parse(JSON.stringify(a)),o=a=>Array.isArray(a)&&a.every(a=>"string"==typeof a&&a.trim()),p=(a,b)=>{if("string"!=typeof a||"string"!=typeof b||!/^[1-9]\d*$/u.test(a)||!/^[1-9]\d*$/u.test(b))throw Error("DOMAIN_ALLOCATION_FRACTION_REQUIRED");let c=BigInt(a),d=BigInt(b);if(c>d)throw Error("DOMAIN_ALLOCATION_EXCEEDS_SOURCE");return{n:c,d}};function q(a){let{store:b,project:c,contract:d}=a;if(b.identity.sourceSnapshotId!==c.snapshotId||b.identity.contractId!==d.id||d.projectSnapshotId!==c.snapshotId)throw Error("DOMAIN_BUSINESS_IDENTITY_MISMATCH");let e={actorId:a.authority.actorId,members:new Set(a.authority.memberIndices),sections:new Set(a.authority.sectionIds)},f=(0,k.BI)(c),g=(0,k.rl)(c),h=new Map(f.map(a=>[a.memberId,a]));if(!e.actorId.trim()||[...e.members].some(a=>!Number.isSafeInteger(a)||!f[a])||[...e.sections].some(a=>!d.sections.some(b=>b.id===a)))throw Error("DOMAIN_AUTHORITY_INVALID");let i=a=>{let c=h.get(a),d=b.entity(a);if(!c)throw Error(`DOMAIN_MEMBER_UNKNOWN:冻结清单里没有成员 ${a}`);if(!e.members.has(c.index))throw Error(`DOMAIN_MEMBER_SCOPE_DENIED:成员 ${a} 的全局序号是 ${c.index},不在本次授权范围内;${(()=>{let a=[...e.members].sort((a,b)=>a-b);return`本职责被授权的全局 memberIndices:${a.slice(0,6).join("、")}${a.length>6?`…(共 ${a.length} 条)`:""}`})()}`);if(d?.kind!=="source-member"||d.value?.originalEntryHash!==(0,m.Fu)(n(c.entry)))throw Error("DOMAIN_FROZEN_MEMBER_MISMATCH:冻结身份与工作库中的来源成员不一致")},j=a=>{let b,c=Object.keys(a);if(1!==c.length||!["memberIndices","memberIds","groupIndices","sourceFiles"].includes(c[0])||!Array.isArray(a[c[0]])||!a[c[0]].length||new Set(a[c[0]]).size!==a[c[0]].length)throw Error("DOMAIN_MEMBER_SELECTION_INVALID");if("memberIndices"in a)b=a.memberIndices;else if("memberIds"in a)b=a.memberIds.map(a=>{let b=h.get(a);if(!b)throw Error(`DOMAIN_MEMBER_UNKNOWN:冻结清单里没有成员 ${a}`);return b.index});else if("groupIndices"in a){if(a.groupIndices.some(a=>!g.some(b=>b.groupIndex===a)))throw Error("DOMAIN_SOURCE_GROUP_NOT_FOUND");b=g.filter(b=>a.groupIndices.includes(b.groupIndex)).flatMap(a=>a.memberIndices)}else{if(a.sourceFiles.some(a=>!g.some(b=>b.sourceFile===a)))throw Error("DOMAIN_SOURCE_FILE_NOT_FOUND");b=g.filter(b=>a.sourceFiles.includes(b.sourceFile)).flatMap(a=>a.memberIndices)}let d=[...new Set(b)].sort((a,b)=>a-b),j=d.filter(a=>!Number.isSafeInteger(a)||!e.members.has(a)||!f[a]);if(!d.length||j.length){let b=[...e.members].sort((a,b)=>a-b);throw Error(`DOMAIN_MEMBER_SCOPE_DENIED:本职责被授权的 memberIndices 为 ${b.slice(0,8).join("、")}${b.length>8?`…(共 ${b.length} 条,完整范围见 read_scope 的 members 视图)`:""};本次选中 ${d.length} 条,其中 ${j.length} 条不在授权范围:${j.slice(0,8).join("、")}${j.length>8?"…":""}。${"groupIndices"in a?'groupIndices 会展开整组,可能包含未授权成员;请改用 read_scope {view:"members"} 读出授权成员序号,再用 memberIndices 只选授权成员。':"sourceFiles"in a?'sourceFiles 会展开整份来源文件,可能包含未授权成员;请改用 read_scope {view:"members"} 读出授权成员序号,再用 memberIndices 精确选择。':"请只选择授权范围内的 memberIndices。"}`)}let k=d.map(a=>f[a].memberId);return k.forEach(i),k},q=(a,c=!1)=>{let d=b.entity(a);if(!d||d.deleted||"work-package"!==d.kind||!o(d.value?.memberIds)||!o(d.value?.sectionIds)){let b=a.startsWith("source-group:"),c=d?d.deleted?`工作包「${a}」已删除,不能在其上继续准备`:"work-package"!==d.kind?`id「${a}」的对象类型是 ${d.kind},不是施工工作包`:"工作包缺少真实成员或职责章节,不能作为准备范围":`工作库里没有 id 为「${a}」的施工工作包`;throw Error(`DOMAIN_WORK_PACKAGE_NOT_FOUND:${c}。`+(b?"冻结来源分组的身份是 `source-group:…`(由 query_work_packages 读取),**不是**工作库里的施工工作包——两者不可互传。":"")+"新建工作包时**不要传 workPackageId**(不传即新建);要修订已提交的工作包,用 commit 回执里的实际 entityId;本职责当前的工作包见 read_scope 的 packages 视图。")}if(d.value.memberIds.some(a=>!h.has(a)||!e.members.has(h.get(a).index))||(c?d.value.sectionIds.some(a=>!e.sections.has(a)):!d.value.sectionIds.some(a=>e.sections.has(a))))throw Error("DOMAIN_WORK_PACKAGE_SCOPE_DENIED");return d},r=(a,c)=>{let d=b.readSnapshot(a),f=d.context;if(f.type!==c||f.actorId!==e.actorId)throw Error("DOMAIN_SCOPE_SNAPSHOT_DENIED");if(f.memberIds.some(a=>!h.has(a)||!e.members.has(h.get(a).index)))throw Error("DOMAIN_MEMBER_SCOPE_DENIED");if(f.memberIds.forEach(i),"work-package"===f.type&&f.sectionIds.some(a=>!e.sections.has(a)))throw Error("DOMAIN_SECTION_SCOPE_DENIED");return"source-allocation"===f.type&&q(f.workPackageId),{...d,scope:f}},s=a=>{let c=b.proposal(a);if(!c||c.actorId!==e.actorId)throw Error("DOMAIN_PROPOSAL_ACTOR_DENIED");for(let a of c.changes){let c=a.value??b.entityHistory(a.id).find(b=>b.version===a.expectedVersion)?.value;if(!c)throw Error("DOMAIN_PROPOSAL_SCOPE_INVALID");if("work-package"===a.kind){if(!o(c.memberIds)||!o(c.sectionIds)||c.sectionIds.some(a=>!e.sections.has(a)))throw Error("DOMAIN_SECTION_SCOPE_DENIED");c.memberIds.forEach(i)}else if("source-allocation"===a.kind)i(String(c.memberId)),q(String(c.workPackageId));else throw Error("DOMAIN_BUSINESS_KIND_DENIED")}return c};return{prepareWorkPackage(a,c){let d=j(a.selection),f=[...new Set(a.sectionIds)].sort();if(!f.length||f.length!==a.sectionIds.length||f.some(a=>!e.sections.has(a)))throw Error("DOMAIN_SECTION_SCOPE_DENIED");let g=a.workPackageId??"work-package:"+(0,m.Fu)([b.workspaceId,e.actorId,c]).slice(0,24);a.workPackageId&&q(a.workPackageId,!0);let h={type:"work-package",actorId:e.actorId,workPackageId:g,memberIds:d,sectionIds:f},i=b.captureReadSnapshot({entityIds:[g,...d],groupKeys:["work-package-allocations:"+g],context:n(h)});return{snapshotId:i.id,workPackageId:g,memberCount:d.length,sectionIds:f,currentVersion:i.reads.entities.find(a=>a.id===g).version}},proposeWorkPackage(a,c,d,f){let g=r(a,"work-package"),h=g.scope,i=g.reads.entities.find(a=>a.id===h.workPackageId).version,j=null===i?{}:b.entityHistory(h.workPackageId).find(a=>a.version===i)?.value;if(!j)throw Error("DOMAIN_PACKAGE_BASE_VERSION_NOT_FOUND");return b.propose({actorId:e.actorId,purpose:"work-package-draft",reason:d,reads:g.reads,changes:[{id:h.workPackageId,kind:"work-package",expectedVersion:i,value:{...j,...c,memberIds:h.memberIds,sectionIds:h.sectionIds,planningState:"draft"}}]},f)},prepareAllocations(a,c,d){let f=q(a),g=j(d);if(!c?.trim()||g.some(a=>!f.value.memberIds.includes(a)))throw Error("DOMAIN_ALLOCATION_SCOPE_DENIED");let h=g.map(b=>"source-allocation:"+(0,m.Fu)([a,b,c]).slice(0,24)),i={type:"source-allocation",actorId:e.actorId,workPackageId:a,operation:c,memberIds:g,allocationIds:h};return{snapshotId:b.captureReadSnapshot({entityIds:[a,...g,...h,...(a=>{let c,d=new Set(a),e=[];for(;;){let a=b.entityPageByKind({kind:"source-allocation",...c?{afterId:c}:{},limit:500});for(let b of a.entities)!b.deleted&&b.value&&d.has(String(b.value.memberId??""))&&e.push(b.id);if(!a.nextAfterId)break;c=a.nextAfterId}return e})(g)],groupKeys:g.map(a=>"allocation:"+(0,m.Fu)([a,c])),context:n(i)}).id,workPackageId:a,memberCount:g.length,operation:c}},proposeAllocations(a,c,d,f){p(c.numerator,c.denominator);let g=r(a,"source-allocation"),h=g.scope;return b.propose({actorId:e.actorId,purpose:"source-allocation-draft",reason:d,reads:g.reads,changes:h.memberIds.map((a,b)=>({id:h.allocationIds[b],kind:"source-allocation",expectedVersion:g.reads.entities.find(a=>a.id===h.allocationIds[b]).version,value:{workPackageId:h.workPackageId,memberId:a,operation:h.operation,numerator:c.numerator,denominator:c.denominator,reason:d}}))},f)},withdrawAllocations(a,c,d){let f=r(a,"source-allocation"),g=f.scope;return b.propose({actorId:e.actorId,purpose:"withdraw-source-allocation-draft",reason:c,reads:f.reads,changes:g.allocationIds.map(a=>({id:a,kind:"source-allocation",expectedVersion:f.reads.entities.find(b=>b.id===a).version,value:null}))},d)},evaluate:a=>(s(a),b.evaluate(a,"construction-allocation-draft-v1",a=>{let b=[],d=[],e=new Map(a.candidateEntities.map(a=>[a.id,a])),f=new Map;for(let b of a.groupMembers)for(let a of b.members)(b.key.startsWith("allocation:")||b.key.startsWith("work-package-allocations:"))&&f.set(a.id,a.value);for(let b of a.candidateEntities)"source-allocation"===b.kind&&(b.deleted?f.delete(b.id):f.set(b.id,b.value));for(let d of a.proposal.changes){let a=e.get(d.id);if("work-package"===a.kind)!(!a.value||!o(a.value.memberIds)||!o(a.value.sectionIds)||!a.value.memberIds.length||!a.value.sectionIds.length||["title","objectScope","workfront"].some(b=>"string"!=typeof a.value[b]||!String(a.value[b]).trim()))?[...f.values()].some(b=>b.workPackageId===a.id&&!a.value.memberIds.includes(String(b.memberId)))&&b.push({code:"WORK_PACKAGE_ALLOCATION_SCOPE",entityId:a.id,reason:"不能移除仍有工序分配的成员,须先修订实际分配"}):b.push({code:"WORK_PACKAGE_FIELDS",entityId:a.id,reason:"工作包须有真实成员、职责、对象和工作面"});else if("source-allocation"===a.kind){if(a.value){let d=h.get(String(a.value.memberId));d&&"eligible"===(0,l.L2)(c,d.entry).sourceVersionFieldEligibility.quantity.status||b.push({code:"SOURCE_QUANTITY_NOT_ELIGIBLE",entityId:a.id,reason:"该成员没有当前数量采用资格"})}}else b.push({code:"BUSINESS_KIND_NOT_SUPPORTED",entityId:a.id,reason:"本入口只处理施工职责工作包与原量分配草案"})}let g=new Set(a.proposal.changes.filter(a=>"source-allocation"===a.kind).map(b=>{let c=b.value??a.entities.find(a=>a.id===b.id).value;return JSON.stringify([c.memberId,c.operation])}));for(let a of g){let[c,e]=JSON.parse(a),g=0n,h=1n;for(let a of f.values())if(a.memberId===c&&a.operation===e){let{n:b,d:c}=p(a.numerator,a.denominator),d=(a,b)=>b?d(b,a%b):a,e=d(g=g*c+b*h,h*=c);g/=e,h/=e}g>h&&b.push({code:"SOURCE_ALLOCATION_EXCEEDS_ORIGINAL",entityId:c,reason:"同一原成员同工序的分配超过原量,候选不生效"}),d.push({memberId:c,operation:e,numerator:g.toString(),denominator:h.toString(),complete:g===h})}for(let a of new Set([...g].map(a=>JSON.parse(a)[0]))){let c=0n,d=1n;for(let b of f.values())if(b.memberId===a){let{n:a,d:e}=p(b.numerator,b.denominator),f=(a,b)=>b?f(b,a%b):a,g=f(c=c*e+a*d,d*=e);c/=g,d/=g}c>d&&b.push({code:"SOURCE_ALLOCATION_EXCEEDS_ORIGINAL",entityId:a,reason:"同一原成员跨工序的分配合计超过原量;按工序拆分份额,合计不得超过 1,不能每个工序都按 100%"})}return{dataValidity:b.length?"invalid":"valid",relatedConstraints:b.length?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:b,result:{validationScope:"work-package-and-allocation-draft",productionQualified:!1,professionalAccepted:!1,allocationBalances:d}}})),commit:(a,c)=>(s(a),b.commit(a,c))}}var r=c(55650);let s=a=>JSON.parse(JSON.stringify(a)),t=a=>"string"==typeof a&&!!a.trim();var u=c(86265),v=c(4053);let w=a=>JSON.parse(JSON.stringify(a)),x=a=>"string"==typeof a&&!!a.trim(),y=a=>!!(a&&"object"==typeof a&&!Array.isArray(a));var z=c(61505),A=c(54050),B=c(34389);let C=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),D=/\{\{(?:table|figure):[^}]+\}\}|见\s*[表图]\s*[\d一二三四五六七八九十百]+(?:[-—–][\d]+)?/u,E=/<[a-z][^>]*>/iu,F=a=>(a.match(/[、,,]/gu)??[]).length+1,G=/^\s*(?:\d+[.、))]|[((]?\d+[))]?|[①-⑳]|[-·•●▪◦])\s*\S/u,H=a=>{let b=a.split("\n").map(a=>a.trim()).filter(Boolean);return b.length>=2&&b.every(a=>G.test(a))},I=(a,b,c,d={})=>({severity:a,rule:b,message:c,hint:c,...d});function J(a){let b=[],c=[],d=Math.max(1,Number(a.policy?.sentenceDuplicateMinLength??B.sentenceDuplicateMinLength)),e=Math.max(2,Number(a.policy?.enumerationItemThreshold??B.enumerationItemThreshold)),f=Math.max(1,Number(a.policy?.paragraphMinChars??B.paragraphMinChars)),g=Math.max(1,Number(a.policy?.tableMinDataRows??B.tableMinDataRows)),h=new Set(a.submitted.map(a=>a.id)),i=[...a.documentUnits.filter(a=>!h.has(a.id)),...a.submitted].flatMap(a=>((a,b)=>{let c=[],d=!!a.coverageItemIds?.length;for(let e of(a=>{let b=[];if("paragraph"===a.kind&&"string"==typeof a.text&&b.push(a.text),"table"===a.kind)for(let c of a.rows??[])for(let a of Object.values(c.cells??{}))"string"==typeof a&&a.trim()&&b.push(a);return b})(a))for(let f of e.split(/[。;;!?!?\n]/u)){let e=C(f);e.length<b||c.push({unitId:a.id,raw:f.trim(),normalized:e,isPrimaryCarrier:d,hasCitation:D.test(f)})}return c})(a,d)),j=new Map;for(let a of i)j.set(a.normalized,[...j.get(a.normalized)??[],a]);for(let[a,c]of j){if(c.length<2)continue;let d=c.find(a=>h.has(a.unitId));if(!d||c.some(a=>a.isPrimaryCarrier&&a.unitId!==d.unitId)&&d.hasCitation)continue;let e=c.filter(a=>a.unitId!==d.unitId);if(!e.length){b.push(I("blocking","sentence-duplicate-within-unit",`单元「${d.unitId}」内部同一句重复 ${c.length} 次:「${d.raw.slice(0,40)}${d.raw.length>40?"…":""}」。同一句在一个单元内只出现一次,删除或改写重复句,不要原样重复提交。`,{unitId:d.unitId}));continue}b.push(I("blocking","sentence-duplicate",`单元「${d.unitId}」的句子「${d.raw.slice(0,40)}${d.raw.length>40?"…":""}」与「${e.map(a=>a.unitId).join("、")}」逐字重复(归一后 ${a.length} 字):同一句只由一个主载体陈述,其余位置用 \`{{table:<表单元id>}}\`/\`{{figure:<图单元id>}}\` 或真实表号/图号引用,不要复述`,{unitId:d.unitId,observed:d.raw,expected:e[0].unitId}))}for(let b of a.submitted)if("paragraph"===b.kind||"table"===b.kind)for(let a of"paragraph"===b.kind&&"string"==typeof b.text?[b.text]:(b.rows??[]).flatMap(a=>Object.values(a.cells??{}).filter(a=>"string"==typeof a&&!!a.trim())))for(let d of a.split(/[。;;!?!?\n]/u)){if(!d.trim())continue;let a=F(d);if(a<e)continue;let f=d.trim().slice(0,60);"paragraph"===b.kind?c.push(I("advisory","enumeration-in-prose",`单元「${b.id}」把 ${a} 个并列项挤在一句:「${f}…」。并列清单用编号/项目符号行表达,或改由表格承载;清单已在别的单元承载时只写表号/图号引用,不复述`,{unitId:b.id})):c.push(I("advisory","enumeration-in-cell",`表格单元「${b.id}」的单元格把 ${a} 个并列项挤在一个值里:「${f}…」。单元格只写值/条件/判据/岗位,长清单用单独的表或列表单元承载`,{unitId:b.id}))}for(let b of a.submitted){if("table"!==b.kind||b.outputId)continue;let a=(b.rows??[]).length;a>=g||c.push(I("advisory","table-too-thin",`表格单元「${b.id}」有 ${a} 行数据:请独立审查其对照关系与覆盖是否完整;有效对照可保留,不为达到行数补造数据`,{unitId:b.id}))}for(let b of a.submitted){if("paragraph"!==b.kind||"string"!=typeof b.text)continue;let a=b.text.trim();!(!a||a.length>=f||D.test(a)||H(a))&&(E.test(a)||c.push(I("advisory","paragraph-too-thin",`段落单元「${b.id}」有 ${a.length} 字:请独立审查对象、条件、措施与验收是否充分;内容完整可保留,不为达到字数重复扩写`,{unitId:b.id})))}return{blocking:b,advisory:c}}var K=c(16669),L=c(31232),M=c(61485),N=c(25164),O=c(60806),P=c(68515);let Q=new Map,R=["work-package","source-allocation","production-operation","shared-definition","writing-unit","project-feature"],S={"work-package":"work-package","source-allocation":"source-allocation","production-operation":"production","shared-definition":"shared-definition","writing-unit":"writing","project-feature":"professional-decision"},T={"work-package":["work-package"],"source-allocation":["source-allocation"],"production-operation":["construction-operation"],"shared-definition":["resource-pool","work-calendar"],"writing-unit":["writing-unit"],"project-feature":["project-feature"]},U={type:"string",minLength:1},V={type:"integer",minimum:0},W={type:"integer",minimum:1},X=a=>({type:"array",items:a}),Y=(a,b=Object.keys(a))=>({type:"object",properties:a,required:b,additionalProperties:!1}),Z=Y({memberIndices:X({...V,description:"全局 memberIndices(见 read_scope 的 members 视图)"}),memberIds:X({...U,description:"冻结清单成员 id(query_work_packages/read_scope 的成员 id);程序解析为 memberIndices"}),groupIndices:X({...V,description:"来源分组序号(见 read_scope 的 members 视图 sourceGroup 字段)"}),sourceFiles:X({...U,description:"来源文件在资料范围内的相对路径"}),sourceGroupIds:X({...U,description:"冻结来源分组身份(query_work_packages 返回的 source-group:…);程序解析为 memberIndices"})},[]),$=Y({ratePerCrewShift:Y({value:U,unit:U,basis:U}),plannedCrews:W,productiveCrews:W,parallelismBasis:U,hoursPerShift:{type:"number",minimum:0,maximum:24}}),_=X(Y({resourcePoolId:U,demand:W,mode:{...U,enum:["work","retained"]},holdAfterTicks:V,basis:U},["resourcePoolId","demand","mode","basis"])),aa=X(Y({operationId:U,from:{...U,enum:["start","finish"]},lag:{type:"integer"},basis:U})),ab={title:U,method:U,workfront:U,execution:{...U,enum:["sequential"]},continuityBasis:U,production:$,requirements:_,predecessors:aa,rounding:Y({quantumTicks:W,basis:U}),release:V,latestFinish:V},ac={type:"number",minimum:0,maximum:1},ad=Y({coordinateSystem:{...U,enum:["relative-schematic"]},placements:X(Y({nodeId:U,x:ac,y:ac,width:ac,height:ac})),routes:X(Y({edgeIndex:V,points:X(Y({x:ac,y:ac}))}))}),ae={"work-package":{type:"object",additionalProperties:!1,properties:{selection:Z,sectionIds:{...X(U),description:"本包实际支撑的全部合同小节。后续委派的 sectionIds 必须包含在所选包的 sectionIds 并集中;先确定职责节组,再声明覆盖,不只列代表小节。"},workPackageId:{...U,description:"**只用于修订已提交的工作包**;新建时不要传"},title:U,objectScope:U,workfront:U},required:["selection","sectionIds","title","objectScope","workfront"]},"source-allocation":{type:"object",additionalProperties:!1,properties:{workPackageId:U,operation:U,selection:Z,numerator:U,denominator:U},required:["workPackageId","operation","selection","numerator","denominator"]},"production-operation":{type:"object",additionalProperties:!1,properties:{workPackageId:U,operation:U,selection:Z,calendarId:U,resourcePoolIds:X(U),predecessorIds:X(U),operationId:{...U,description:"修订既有作业时填实际实体 id;新建时不要传"},draft:Y(ab,Object.keys(ab).filter(a=>!["release","latestFinish"].includes(a))),intent:Y(ab,[])},required:["workPackageId","operation","selection","calendarId","resourcePoolIds","predecessorIds"]},"shared-definition":{type:"object",additionalProperties:!1,properties:{kind:{...U,enum:["resource-pool","work-calendar"]},id:U,definition:Y({title:U,unit:{...U,description:"resource-pool 必填:计量单位(人/台/套等);work-calendar 不填"},capacityBasis:{...U,description:"resource-pool 必填:容量依据,按实际资源能力声明,不能从需求峰值反推"},basis:{...U,description:"必填:该日历/资源池的工程来源与依据"},availability:X(Y({start:V,end:W,capacity:V})),windows:X(Y({start:V,end:W}))},["title","basis"])},required:["kind","id","definition"]},"writing-unit":{type:"object",additionalProperties:!1,properties:{purpose:U,sectionIds:X(U),revision:Y({reason:U,retire:X(Y({unitId:U,version:{type:"integer",minimum:1}},["unitId","version"])),replacements:X(Y({fromUnitId:U,toUnitIds:X(U)},["fromUnitId","toUnitIds"])),redirects:X(Y({fromUnitId:U,toUnitId:U},["fromUnitId","toUnitId"]))},["retire","replacements","redirects"]),units:X(Y({id:U,kind:{...U,enum:["paragraph","table","figure"]},subsectionId:{...U,description:"冻结的节计划小节 id(plan_section 返回的 subsections[].subsectionId);新流程必填,旧归档可缺省"},planHash:{...U,description:"plan_section 返回的全局计划 hash;单元写作时必须与冻结计划一致"},sectionPlanHash:{...U,description:"plan_section 返回的 sectionPlanHash;单元写作时必须与冻结节计划一致"},blockId:{...U,description:"当前小节的写作块 id(sectionPlan.subsections[].writingOutline[].blockId):一次提交本小节全部写作块,每个块各一个单元、各带自己的 blockId,一主题一块"},contentContractHash:{...U,description:"当前小节contentContract.hash;与当前内容安排使用同一身份"},claims:X(Y({id:U,subject:U,attribute:U,value:U,unit:U,condition:U,support:{...U,enum:["literal","requires-review"]},nature:{...U,enum:["project-fact","proposed-decision","calculation","technical-basis"]},source:Y({evidenceId:U,entityId:U,entityVersion:{type:"integer",minimum:1},certificateId:U,sourceHash:U,quote:U},[]),location:Y({quote:U,rowId:U,columnKey:U},[]),verification:{...U,enum:["unverified"]}},["id","subject","attribute","value","condition","nature","source","location"])),implementations:X(Y({obligationId:U,role:{...U,enum:["method","data","acceptance","reference"]},claimId:U,location:Y({quote:U,rowId:U,columnKey:U},[])},["obligationId","role","location"])),heading:{...U,description:"只写标题文字,不含 1.1/3.4/一、等章节编号;新流程必须与计划小节标题逐字一致"},title:{...U,description:"heading 的同义字段;同样只写标题文字,不含章节编号"},criterionIds:X(U),coverageItemIds:{...X(U),description:"本单元作为**主载体**承接的契约项 id(sectionBriefs[].coverageItems[].id):同一契约项在本节只能由一个主载体认领;实质性单元必须至少认领或引用一项"},referencedCoverageItemIds:{...X(U),description:"本单元只是引用、主载体在别处(如表/图)的契约项 id;引用单元只写判断/接口并用真实表号/图号引用,不复述主载体内容"},decisionReason:{...U,description:"作者自选表(没有 outputId)必须说明为什么必须用表、承载哪组唯一内容;纯摘要表会被拒收"},standardCitations:X(Y({name:U,code:U,version:U,scope:U,verification:{...U,enum:["verified","unverified"]}},["name","code","version","scope","verification"])),outputId:{...U,description:"对应 tenderResponse.requiredOutputs[].id:本表/图承接哪个点名输出;一张载体只填一个"},text:U,caption:U,notes:X(U),formFieldBindings:X(Y({fieldId:U,columnKey:U},["fieldId","columnKey"])),tableRowGroups:X(Y({id:U,label:U},["id","label"])),columns:X(Y({key:U,title:U,unit:U,headerPath:X(U)},["key","title"])),rows:X(Y({id:U,cells:{type:"object",additionalProperties:!0,description:"键为同单元 `columns[].key` 声明的列名;不得留空或占位"},groupId:U},["id"])),nodes:X(Y({id:U,label:U,group:{...U,description:"非计算图:节点所属阶段/分组,用于泳道列(部署图如 准备/主体/安装/收尾;危大管控图用 识别/对策/责任/验证)"},lane:{...U,description:"非计算图:节点所属区段/工作面,用于行对齐"}},["id","label"])),edges:X(Y({from:U,to:U,label:U},["from","to"])),graphLayout:{...U,enum:["grid","tree"],description:"仅非计算图:tree=按父子边排层级(组织机构/汇报关系);grid=一般关系图"},figureSemantics:{...U,enum:["org","deployment","risk-control","process","generic"],description:"仅非计算图:图例语义;org=组织层级,deployment=区段/阶段/顺序/移交,risk-control=识别→对策→责任→验证,process=工序流转"},planChart:Y({view:{...U,enum:["schedule","network"],description:"由执行基准直接渲染的日历轴计划图:总进度横道图/里程碑网络图;不填证书,日期/里程碑取自唯一执行基准"}}),layout:{...ad,description:"仅图件:明确拟定的相对示意区域与逐关系线路,图题须标示意;不补造现场尺寸或北向"},references:X(Y({kind:U,type:U,evidenceId:U,quote:U,entityId:U,entityVersion:V,certificateId:U,ref:U,refId:U,id:U,sourceId:U,note:U},[])),assertions:X(Y({subject:U,purpose:U,condition:U,reference:Y({kind:U,type:U,evidenceId:U,quote:U,entityId:U,entityVersion:V,certificateId:U,ref:U,refId:U,id:U,sourceId:U,note:U},[])},["subject","purpose","reference"]))},["id","kind"]))},required:["purpose","sectionIds","units"]},"project-feature":{type:"object",additionalProperties:!1,properties:{workPackageId:U,key:U,value:U,dimension:U,evidence:{type:"array",minItems:1,items:Y({observationIndex:V,sourceEvidenceId:U,quote:U,sourceSelection:{...U,enum:["full-excerpt"]}},["observationIndex","sourceEvidenceId"])}},required:["workPackageId","key","value","dimension","evidence"]}};function af(a){let b=[];if(!Array.isArray(a.units))return{payload:a,paths:b};let c=a.units.map((a,c)=>{let d={...a??{}};for(let a of["requiredOutputId","outputID","output_id"])void 0!==d[a]&&((void 0===d.outputId||""===String(d.outputId).trim())&&String(d[a]??"").trim()&&(d.outputId=d[a]),delete d[a],b.push(`$.units[${c}].${a}`));if(Array.isArray(d.claims)&&(d.claims=d.claims.map((a,d)=>{let e={...a??{}};for(let a of("string"!=typeof e.unit||e.unit.trim()||(delete e.unit,b.push(`$.units[${c}].claims[${d}].unit`)),["location","source"]))(void 0===e[a]||null===e[a])&&(e[a]={},b.push(`$.units[${c}].claims[${d}].${a}`));if(e.source&&"object"==typeof e.source&&!Array.isArray(e.source)){let a={...e.source},f=new Set(["evidenceId","entityId","entityVersion","certificateId","sourceHash","quote"]);for(let e of Object.keys(a))f.has(e)||(delete a[e],b.push(`$.units[${c}].claims[${d}].source.${e}`));e.source=a}return e})),Array.isArray(d.rows)){let a=Array.isArray(d.columns)?d.columns.flatMap(a=>{let b=a??{};return"string"==typeof b.key&&b.key?[b.key]:[]}):[];d.rows=d.rows.map((d,e)=>{if(!d||"object"!=typeof d||Array.isArray(d))return d;let f={...d};for(let d of Object.keys(f))if("id"!==d&&"cells"!==d&&"groupId"!==d){if(a.includes(d)){let a=f.cells&&"object"==typeof f.cells&&!Array.isArray(f.cells)?{...f.cells}:{};void 0===a[d]&&(a[d]=f[d]),f.cells=a}delete f[d],b.push(`$.units[${c}].rows[${e}].${d}`)}return"string"==typeof f.id&&f.id.trim()||(f.id=`row-${e+1}`),f})}return d});return{payload:{...a,units:c},paths:b}}let ag=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},ah={evidence:"evidence",source:"evidence","source-excerpt":"evidence",excerpt:"evidence",quote:"evidence",citation:"evidence",reference:"evidence","frozen-source":"evidence","frozen-evidence":"evidence",frozen:"evidence",decision:"decision","work-package":"decision",workpackage:"decision","submitted-decision":"decision",certificate:"certificate",calculation:"certificate",calc:"certificate","calculation-certificate":"certificate"},ai={paragraph:"paragraph",text:"paragraph",prose:"paragraph",table:"table",grid:"table",figure:"figure",diagram:"figure",chart:"figure",image:"figure"},aj=(a,b)=>{let c={...ag(a)};void 0===c.kind&&"string"==typeof c.type&&(c.kind=c.type);let d=String(c.kind??"").trim().toLowerCase().replace(/[\s_]+/gu,"-"),e=ah[d]??function(a,b=""){let c=a=>"string"==typeof a&&!!a.trim();if(/certificate|calc/u.test(b))return"certificate";if(/work[-_ ]?package|decision/u.test(b))return"decision";if(/source|evidence|excerpt|quote|citation|frozen/u.test(b))return"evidence";if(c(a.certificateId))return"certificate";if(c(a.entityId)||c(a.workPackageId))return"decision";if(c(a.evidenceId)||c(a.quote)||c(a.sourceId))return"evidence";if(c(a.id)){if(/^(?:work-package|decision):/u.test(a.id))return"decision";if(/^(?:certificate|calc):/u.test(a.id))return"certificate";if(/^(?:source-excerpt|evidence|fact):/u.test(a.id))return"evidence"}if(c(a.ref)||c(a.refId)||c(a.id))return"evidence"}(c,d);if(!e)throw Error(`WRITING_REFERENCE_KIND_INVALID:引用类型「${String(c.kind??"(空)")}」不合法;合法类型:evidence(冻结原字/来源摘录)、decision(已提交决定/工作包)、certificate(计算证书)。也可只给 evidenceId/entityId/certificateId(或 source-excerpt:/work-package:/certificate: 开头的 id),程序会反推类型。`);c.kind=e;let f=[c.evidenceId,c.entityId,c.certificateId,c.ref,c.refId,c.id,c.sourceId].find(a=>"string"==typeof a&&a.trim());if("evidence"===e&&"string"!=typeof c.evidenceId&&f&&(c.evidenceId=f),"decision"===e&&"string"!=typeof c.entityId&&f&&(c.entityId=f),"certificate"===e&&"string"!=typeof c.certificateId&&f&&(c.certificateId=f),"decision"===e&&void 0===c.entityVersion&&"string"==typeof c.entityId&&b){let a=b.entity(c.entityId)?.version;void 0!==a&&(c.entityVersion=a)}for(let a of["ref","refId","id","type","note","sourceId"])delete c[a];let g=["kind","evidenceId","quote","entityId","entityVersion","certificateId"];for(let a of Object.keys(c))g.includes(a)||delete c[a];let h="evidence"===e?"evidenceId":"decision"===e?"entityId":"certificateId";if("string"!=typeof c[h]||!String(c[h]).trim())throw Error(`WRITING_REFERENCE_IDENTITY_REQUIRED:${e} 引用必须给 ${h}(可写 id/refId/ref,程序会映射;当前引用字段:${Object.keys(ag(a)).join("、")||"空"})。`);return void 0!==c.entityVersion&&"string"==typeof c.entityVersion&&/^\d+$/u.test(c.entityVersion)&&(c.entityVersion=Number(c.entityVersion)),c},ak=(a,b,c,d)=>{if("writing-unit"!==a){let c={...b},e=ag(c.selection);if(d&&Array.isArray(e.memberIds)&&!("memberIndices"in e)&&!("groupIndices"in e)&&!("sourceFiles"in e)&&!("sourceGroupIds"in e)){let a=[...new Set(e.memberIds.map(String).map(a=>a.trim()).filter(Boolean))],b=new Map((0,k.BI)(d).map(a=>[a.memberId,a.index])),f=a.filter(a=>!b.has(a));if(f.length)throw Error(`DOMAIN_MEMBER_UNKNOWN:冻结清单里没有成员 ${f.slice(0,8).join("、")}`);let g=[...new Set(a.map(a=>b.get(a)))].sort((a,b)=>a-b);g.length&&(c.selection={memberIndices:g})}if(d&&Array.isArray(e.sourceGroupIds)&&!("memberIndices"in e)&&!("groupIndices"in e)&&!("sourceFiles"in e)){let a=[...new Set(e.sourceGroupIds.map(String).map(a=>a.trim()).filter(Boolean))];if(a.length){let b=[...new Set((0,z.HV)(d,{query:"*",sourceGroupIds:a,limit:1e5}).items.map(a=>a.memberIndex))].sort((a,b)=>a-b);if(!b.length)throw Error(`DOMAIN_SOURCE_GROUP_NOT_FOUND:${a.join("、")} 不在冻结清单来源分组中`);c.selection={memberIndices:b}}}if("source-allocation"===a&&("number"==typeof c.numerator&&(c.numerator=String(c.numerator)),"number"==typeof c.denominator&&(c.denominator=String(c.denominator))),"production-operation"===a){void 0===c.predecessorIds&&(c.predecessorIds=[]),void 0===c.resourcePoolIds&&(c.resourcePoolIds=[]);let a=ag(c.draft),b=ag(a.production),d=ag(b.ratePerCrewShift);"number"==typeof d.value&&(d.value=String(d.value)),Object.keys(d).length&&(b.ratePerCrewShift=d),Object.keys(b).length&&(a.production=b),Object.keys(a).length&&(c.draft=a)}return c}if("writing-unit"!==a)return b;let e={...b};return("string"==typeof e.sectionIds&&(e.sectionIds=[e.sectionIds]),void 0===e.units||Array.isArray(e.units)||(e.units=[e.units]),Array.isArray(e.units))?{...e,units:e.units.map(a=>{let b={...ag(a)};delete b.carrierRevisionReason,void 0===b.id&&"string"==typeof b.unitId&&(b.id=b.unitId),void 0===b.kind&&"string"==typeof b.type&&(b.kind=b.type),void 0===b.heading&&"string"==typeof b.title&&(b.heading=b.title);let d=ai[String(b.kind??"").trim().toLowerCase()];if(!d)throw Error(`WRITING_UNIT_KIND_REQUIRED:单元「${String(b.id??"(无 id)")}」缺少合法 kind;合法值:paragraph/table/figure。`);if(b.kind=d,"string"!=typeof b.id||!b.id.trim())throw Error("WRITING_UNIT_ID_REQUIRED:每个正文单元必须有 id(可写 unitId,程序会映射)。");if("string"==typeof b.criterionIds&&(b.criterionIds=[b.criterionIds]),void 0===b.criterionIds&&(b.criterionIds=[]),"string"==typeof b.coverageItemIds&&(b.coverageItemIds=[b.coverageItemIds]),Array.isArray(b.coverageItemIds)&&(b.coverageItemIds=[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]),"string"==typeof b.referencedCoverageItemIds&&(b.referencedCoverageItemIds=[b.referencedCoverageItemIds]),Array.isArray(b.referencedCoverageItemIds)&&(b.referencedCoverageItemIds=[...new Set(b.referencedCoverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]),void 0===b.standardCitations||Array.isArray(b.standardCitations)||(b.standardCitations=[b.standardCitations]),void 0===b.references||Array.isArray(b.references)||(b.references=[b.references]),void 0===b.references&&(b.references=[]),void 0===b.assertions||Array.isArray(b.assertions)||(b.assertions=[b.assertions]),void 0===b.assertions&&(b.assertions=[]),b.references=b.references.map(a=>aj(a,c)),b.assertions=b.assertions.map(a=>{let b={...ag(a)};return void 0!==b.reference&&(b.reference=aj(b.reference,c)),b}),Array.isArray(b.columns)&&(b.columns=b.columns.map((a,b)=>{if("string"==typeof a&&a.trim())return{key:`col-${b+1}`,title:a};let c={...ag(a)};return void 0===c.title&&"string"==typeof c.label&&(c.title=c.label),delete c.label,"string"==typeof c.key&&c.key.trim()||(c.key=`col-${b+1}`),"string"==typeof c.title&&c.title.trim()||(c.title=String(c.key)),c})),Array.isArray(b.rows)){let a=Array.isArray(b.columns)?b.columns.map(a=>String(a.key??"")).filter(Boolean):[];b.rows=b.rows.map((b,c)=>{if(Array.isArray(b)){let d={};return b.forEach((b,c)=>{let e=a[c];e&&(d[e]=b)}),{id:`row-${c+1}`,cells:d}}let d={...ag(b)};if(void 0===d.cells||null===d.cells||"object"!=typeof d.cells||Array.isArray(d.cells)){let b={};for(let c of a)void 0!==d[c]&&(b[c]=d[c]);d.cells=b}for(let a of("string"==typeof d.id&&d.id.trim()||(d.id=`row-${c+1}`),Object.keys(d)))"id"!==a&&"cells"!==a&&"groupId"!==a&&delete d[a];return d})}for(let a of["unitId","type","title"])delete b[a];return b})}:e};function al(a){let b=q(a),c=function(a){let{store:b}=a,c={...a.authority,memberIndices:[...a.authority.memberIndices],sectionIds:[...a.authority.sectionIds]},d=new Map((0,k.BI)(a.project).map(a=>[a.memberId,a.index])),e=q(a),f=a=>{let e=b.entity(a);if(e?.kind!=="work-package"||e.deleted||!Array.isArray(e.value?.memberIds)||!Array.isArray(e.value?.sectionIds)||!e.value.sectionIds.some(a=>c.sectionIds.includes(a)))throw Error("PRODUCTION_PACKAGE_SCOPE_DENIED");for(let a of e.value.memberIds){let e=b.entity(a),f=d.get(a);if(!e||void 0===f||!c.memberIndices.includes(f))throw Error("PRODUCTION_MEMBER_SCOPE_DENIED")}return e},g=a=>{let d=b.readSnapshot(a),e=d.context;if("production-operation"!==e.type||e.actorId!==c.actorId)throw Error("PRODUCTION_SCOPE_DENIED");return f(e.workPackageId),{snapshot:d,scope:e}},h=a=>{let d=b.proposal(a);if(!d||d.actorId!==c.actorId)throw Error("PRODUCTION_PROPOSAL_ACTOR_DENIED");for(let a of d.changes)if("construction-operation"===a.kind&&a.value)f(String(a.value.workPackageId));else if(!c.canManageSharedResources||!["resource-pool","work-calendar"].includes(a.kind))throw Error("PRODUCTION_SHARED_DEFINITION_DENIED");return d};return{prepareDefinition(a,d){if(!c.canManageSharedResources||!t(d)||!["resource-pool","work-calendar"].includes(a))throw Error("PRODUCTION_SHARED_DEFINITION_DENIED");let e=b.entity(d);if(e&&e.kind!==a)throw Error("PRODUCTION_DEFINITION_ID_CONFLICT");return b.captureReadSnapshot({entityIds:[d],groupKeys:"resource-pool"===a?["resource:"+d]:[],context:s({type:"production-definition",actorId:c.actorId,id:d,kind:a})})},proposeDefinition(d,e,f,g){let h=b.readSnapshot(d),i=h.context;if(!c.canManageSharedResources||"production-definition"!==i.type||i.actorId!==c.actorId)throw Error("PRODUCTION_SHARED_DEFINITION_DENIED");return b.propose({actorId:c.actorId,purpose:"declare-"+i.kind,reason:f,reads:h.reads,changes:[{id:i.id,kind:i.kind,expectedVersion:h.reads.entities.find(a=>a.id===i.id).version,value:{...e,timelineId:a.clock.timelineId,timeUnit:s(a.clock.timeUnit)}}]},g)},evaluateDefinition(a){if(h(a).changes.some(a=>!["resource-pool","work-calendar"].includes(a.kind)))throw Error("PRODUCTION_DEFINITION_EVALUATOR_SCOPE");return b.evaluate(a,"construction-resource-definition-v1",a=>{let b=[];for(let c of a.proposal.changes){let a=c.value,d=a["work-calendar"===c.kind?"windows":"availability"];if(!a||!t(a.title)||!t(a["work-calendar"===c.kind?"basis":"capacityBasis"])||"resource-pool"===c.kind&&!t(a.unit)||!Array.isArray(d)||!d.length){b.push({code:"RESOURCE_DEFINITION_REQUIRED",entityId:c.id,reason:"须由实际决定声明资源身份、可用容量或生产日历及依据,不能从需求峰值反推库存"});continue}let e=0;for(let a of d)(!Number.isSafeInteger(a.start)||0>Number(a.start)||!Number.isSafeInteger(a.end)||Number(a.end)<=Number(a.start)||Number(a.start)<e||"resource-pool"===c.kind&&(!Number.isSafeInteger(a.capacity)||0>Number(a.capacity)))&&b.push({code:"RESOURCE_DEFINITION_WINDOW",entityId:c.id,reason:"实际窗口须有序、不重叠且容量明确非负"}),e=Number(a.end)}return{dataValidity:b.length?"invalid":"valid",relatedConstraints:b.length?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:b,result:{scope:"declared-resource-or-calendar-only",professionalAccepted:!1,globalFeasibilityAccepted:!1}}})},prepareOperation(a,d){if(f(a.workPackageId),new Set(a.resourcePoolIds).size!==a.resourcePoolIds.length||new Set(a.predecessorIds).size!==a.predecessorIds.length)throw Error("PRODUCTION_DUPLICATE_DEPENDENCY");let g=e.prepareAllocations(a.workPackageId,a.operation,a.selection),h=b.readSnapshot(g.snapshotId).context.allocationIds,i=a.operationId??"construction-operation:"+(0,m.Fu)([b.workspaceId,c.actorId,d]).slice(0,24),j=b.entity(i);if(j&&("construction-operation"!==j.kind||j.value?.workPackageId!==a.workPackageId))throw Error("PRODUCTION_OPERATION_IDENTITY_CONFLICT");let k={type:"production-operation",actorId:c.actorId,operationId:i,workPackageId:a.workPackageId,operation:a.operation,allocationIds:h,calendarId:a.calendarId,resourcePoolIds:[...a.resourcePoolIds].sort(),predecessorIds:[...a.predecessorIds].sort()},l={id:i,kind:"construction-operation",version:j?.version??1,deleted:!1,value:s({workPackageId:a.workPackageId,calendarId:a.calendarId,components:h.map(a=>({allocationId:a})),requirements:a.resourcePoolIds.map(a=>({resourcePoolId:a})),predecessors:a.predecessorIds.map(a=>({operationId:a}))})},n=b.captureResolvedReadSnapshot(a=>{let b=(0,r.bL)(a,[i],[l]);return{entityIds:b.entityIds,groupKeys:b.groupKeys,context:s(k)}});return{snapshotId:n.id,operationId:i,memberCount:h.length,relatedEntityCount:n.reads.entities.length,currentVersion:n.reads.entities.find(a=>a.id===i).version}},proposeOperation(a,d,e,f){let{snapshot:h,scope:i}=g(a);if((0,m.Fu)(d.requirements.map(a=>a.resourcePoolId).sort())!==(0,m.Fu)(i.resourcePoolIds)||(0,m.Fu)(d.predecessors.map(a=>a.operationId).sort())!==(0,m.Fu)(i.predecessorIds))throw Error("PRODUCTION_SNAPSHOT_DEPENDENCIES_CHANGED");let{production:j,...k}=d;return b.propose({actorId:c.actorId,purpose:"construction-production-candidate",reason:e,reads:h.reads,changes:[{id:i.operationId,kind:"construction-operation",expectedVersion:h.reads.entities.find(a=>a.id===i.operationId).version,value:s({...k,workPackageId:i.workPackageId,operation:i.operation,calendarId:i.calendarId,components:i.allocationIds.map(a=>({...j,allocationId:a}))})}]},f)},reviseOperation(a,d,e,f){let{snapshot:h,scope:i}=g(a),j=h.reads.entities.find(a=>a.id===i.operationId).version,k=b.entityHistory(i.operationId).find(a=>a.version===j);if(k?.kind!=="construction-operation"||k.deleted||!k.value)throw Error("PRODUCTION_REVISION_BASE_REQUIRED");let l=["title","method","workfront","execution","continuityBasis","requirements","predecessors","rounding","release","latestFinish","production"];if(!Object.keys(d).length||Object.keys(d).some(a=>!l.includes(a)))throw Error("PRODUCTION_REVISION_INTENT_REQUIRED");let{production:n,...o}=d,p=k.value,q=i.allocationIds.map(a=>{let b=p.components.find(b=>b.allocationId===a);if(!b&&!n)throw Error("PRODUCTION_NEW_COMPONENT_CONFIGURATION_REQUIRED");return{...b??{},...n??{},allocationId:a}}),r=s({...k.value,...o,calendarId:i.calendarId,components:q}),t=r.requirements,u=r.predecessors;if((0,m.Fu)(t.map(a=>a.resourcePoolId).sort())!==(0,m.Fu)(i.resourcePoolIds)||(0,m.Fu)(u.map(a=>a.operationId).sort())!==(0,m.Fu)(i.predecessorIds))throw Error("PRODUCTION_SNAPSHOT_DEPENDENCIES_CHANGED");return(0,m.Fu)(r)===(0,m.Fu)(k.value)?b.confirmUnchanged(a,i.operationId,r,f):b.propose({actorId:c.actorId,purpose:"revise-construction-production-candidate",reason:e,reads:h.reads,changes:[{id:i.operationId,kind:"construction-operation",expectedVersion:j,value:r}]},f)},evaluateOperation(b,c){let d=h(b);if(d.changes.some(a=>"construction-operation"!==a.kind))throw Error("PRODUCTION_OPERATION_EVALUATOR_SCOPE");return(0,r.zA)({...a,proposalId:b,rootOperationIds:d.changes.map(a=>a.id),signal:c})},commit:(a,c)=>(h(a),b.commit(a,c))}}(a),d=(0,u.J)({sectionContractReads:a.sectionContractReads,store:a.store,contract:a.contract,authority:a.authority,tenderResponsePlan:a.tenderResponsePlan,evidenceExists:b=>(a.project.sourceControls??[]).some(a=>a.factId===b&&"verified-source-excerpt"===a.roleId),evidenceText:b=>(a.project.sourceControls??[]).find(a=>a.factId===b&&"verified-source-excerpt"===a.roleId)?.value}),f=a.readObservation&&a.permissions.includes("professional-decision")?function(a){let{store:b,project:c,authority:d}=a;if(b.identity.sourceSnapshotId!==c.snapshotId||b.identity.contractId!==a.contract.id||a.contract.projectSnapshotId!==c.snapshotId)throw Error("FEATURE_PROJECT_IDENTITY_MISMATCH");let e=new Map((0,k.BI)(c).map(a=>[a.memberId,a])),f=a=>{let c=b.entity(a);if(c?.kind!=="work-package"||c.deleted||!Array.isArray(c.value?.memberIds)||!Array.isArray(c.value?.sectionIds)||!c.value.sectionIds.some(a=>d.sectionIds.includes(String(a))))throw Error("FEATURE_PACKAGE_SCOPE_DENIED");for(let a of c.value.memberIds){let c=e.get(String(a)),f=b.entity(String(a));if(!c||!d.memberIndices.includes(c.index)||f?.kind!=="source-member"||f.value?.originalEntryHash!==(0,m.Fu)(w(c.entry)))throw Error("FEATURE_MEMBER_SCOPE_DENIED")}return c},g=b=>{if(!Number.isSafeInteger(b.observationIndex)||b.observationIndex<0||!x(b.sourceEvidenceId)||(x(b.quote)?void 0!==b.sourceSelection:"full-excerpt"!==b.sourceSelection||void 0!==b.quote))throw Error("FEATURE_EVIDENCE_SELECTION_INVALID");let d=a.readObservation(b.observationIndex),e=d.result;if("read_source"!==d.tool||!y(e)||!0!==e.performed||!y(e.data)||!Array.isArray(e.data.chunks))throw Error("FEATURE_ACTUAL_SOURCE_READ_REQUIRED");let f=c.sourceControls?.find(a=>"verified-source-excerpt"===a.roleId&&a.factId===b.sourceEvidenceId),g=e.data.chunks.find(a=>y(a)&&a.sourceEvidenceId===b.sourceEvidenceId);if(!f||!y(g)||e.data.relativePath!==f.sourceFile||g.chunkIndex!==f.sourceRef?.chunkIndex||g.content!==f.value||void 0!==b.quote&&!f.value.includes(b.quote))throw Error("FEATURE_FROZEN_QUOTATION_MISMATCH");let h=c.sourceVersionPolicy.sources[f.sourceFile],i=(0,l.bz)(c,{sourceFile:f.sourceFile,sourceChunkIndex:f.sourceRef?.chunkIndex,quote:b.quote??f.value,usage:"project-fact",domain:"construction-method"});if("eligible"!==i.status)throw Error("FEATURE_SOURCE_VERSION_NOT_ELIGIBLE:"+i.reason);return{...b,sourceFile:f.sourceFile,chunkIndex:f.sourceRef.chunkIndex,sourceIdentity:h,operationId:d.operationId,receiptSha256:(0,m.Fu)(e),excerptSha256:(0,m.Fu)(f.value),eligibility:i,sourceKinds:["projectMaterial"],semanticEntailment:"unmeasured"}},h=a=>{let c=b.proposal(a);if(!c||c.actorId!==d.actorId||"project-feature-assertion"!==c.purpose||c.changes.some(a=>"project-feature"!==a.kind||!a.value))throw Error("FEATURE_PROPOSAL_SCOPE_DENIED");for(let a of c.changes)f(String(a.value.workPackageId));return c};return{prepare(a,c){if(!x(c))throw Error("FEATURE_KEY_REQUIRED");let e=f(a),g="project-feature:"+(0,m.Fu)([b.workspaceId,a,c]).slice(0,24),h=b.entity(g);if(h&&("project-feature"!==h.kind||h.value?.workPackageId!==a||h.value?.key!==c))throw Error("FEATURE_IDENTITY_CONFLICT");if(h&&h.value?.assertionActorId!==d.actorId)throw Error("FEATURE_OWNER_REVISION_REQUIRED");let i={type:"project-feature",actorId:d.actorId,featureId:g,workPackageId:a,key:c};return{snapshotId:b.captureReadSnapshot({entityIds:[a,g,...e.value.memberIds],groupKeys:[],context:w(i)}).id,featureId:g,key:c,workPackageId:a,currentVersion:h?.version??null,professionalAccepted:!1}},propose(a,c,e,h){let{snapshot:i,scope:j}=(a=>{let c=b.readSnapshot(a),e=c.context;if("project-feature"!==e.type||e.actorId!==d.actorId)throw Error("FEATURE_SNAPSHOT_ACTOR_DENIED");return f(e.workPackageId),{snapshot:c,scope:e}})(a);if(!x(c.value)||!x(c.dimension)||!Array.isArray(c.evidence)||!c.evidence.length||new Set(c.evidence.map(a=>(0,m.Fu)(a))).size!==c.evidence.length)throw Error("FEATURE_ASSERTION_REQUIRED");let k=c.evidence.map(g),l=i.reads.entities.find(a=>a.id===j.featureId).version,n=null===l?void 0:b.entityVersion(j.featureId,l),o=a=>a.map(a=>(0,m.Fu)([a.sourceEvidenceId,a.sourceIdentity,a.excerptSha256,a.sourceSelection??null,a.quote??null])).sort();return n?.value?.value===c.value&&n.value.dimension===c.dimension&&Array.isArray(n.value.evidence)&&(0,m.Fu)(o(n.value.evidence))===(0,m.Fu)(o(w({evidence:k}).evidence))?b.confirmUnchanged(a,j.featureId,n.value,h):b.propose({actorId:d.actorId,purpose:"project-feature-assertion",reason:e,reads:i.reads,changes:[{id:j.featureId,kind:"project-feature",expectedVersion:l,value:{workPackageId:j.workPackageId,key:j.key,value:c.value,dimension:c.dimension,evidence:w({evidence:k}).evidence,assertionActorId:d.actorId,valueKind:"source-supported-assertion",semanticEntailment:"unmeasured",professionalAccepted:!1,executableQuantity:!1}}]},h)},evaluate:a=>(h(a),b.evaluate(a,"source-backed-feature-v1:"+c.snapshotId,a=>{let b=[];for(let c of a.proposal.changes){let a=c.value;try{if(!Array.isArray(a.evidence)||!a.evidence.length)throw Error("FEATURE_EVIDENCE_REQUIRED");for(let b of a.evidence){let a=g(b);if((0,m.Fu)(w(a))!==(0,m.Fu)(b))throw Error("FEATURE_OBSERVED_RECEIPT_CHANGED")}}catch(a){b.push({code:"FEATURE_PROVENANCE_REJECTED",entityId:c.id,reason:a instanceof Error?a.message:String(a)})}}return{dataValidity:b.length?"invalid":"valid",relatedConstraints:b.length?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:b,result:{assertionIds:a.proposal.changes.map(a=>a.id),provenanceChecked:!b.length,semanticEntailment:"unmeasured",professionalAccepted:!1,executableQuantity:!1}}})),commit:(a,c)=>(h(a),b.commit(a,c))}}({...a,readObservation:a.readObservation}):void 0,n=a.authority.actorId,o=new Set(a.allowedActions?a.allowedActions:R.filter(b=>a.permissions.includes(S[b]))),p=b=>{let c=String(b);if(!R.includes(c))throw Error(`CONSTRUCTION_SUBMIT_ACTION_UNKNOWN:action「${String(b)}」不在允许集合:${R.join("/")}`);if(!o.has(c))throw Error(`CONSTRUCTION_SUBMIT_ACTION_UNAVAILABLE:action「${c}」不在本职责当前目的的工具面(可用:${[...o].join("/")||"无"});请按实际职责另立目的或请求协调。`);let d=S[c];if(!a.permissions.includes(d))throw Error(`CONSTRUCTION_SUBMIT_PERMISSION_DENIED:action「${c}」需要能力「${d}」,本职责没有;请按实际职责分割目的或向主控请求相应职责。`);return c},z=(a,e,g,h)=>{switch(a){case"work-package":{let a="submit-key:"+(0,m.Fu)([n,"work-package",e.workPackageId??null,e.selection,[...e.sectionIds].sort(),e.title,e.objectScope,e.workfront]),c=b.prepareWorkPackage({selection:e.selection,sectionIds:e.sectionIds,..."string"==typeof e.workPackageId?{workPackageId:e.workPackageId}:{}},a);return b.proposeWorkPackage(c.snapshotId,{title:String(e.title),objectScope:String(e.objectScope),workfront:String(e.workfront)},g,`${h}:propose`)}case"source-allocation":{let a=b.prepareAllocations(String(e.workPackageId),String(e.operation),e.selection);return b.proposeAllocations(a.snapshotId,{numerator:String(e.numerator),denominator:String(e.denominator)},g,`${h}:propose`)}case"production-operation":{let a="submit-key:"+(0,m.Fu)([n,"production-operation",e.workPackageId,e.operation,e.selection,e.calendarId,[...e.resourcePoolIds].sort(),[...e.predecessorIds].sort(),e.operationId??null]),b=c.prepareOperation({workPackageId:String(e.workPackageId),operation:String(e.operation),selection:e.selection,calendarId:String(e.calendarId),resourcePoolIds:e.resourcePoolIds,predecessorIds:e.predecessorIds,..."string"==typeof e.operationId?{operationId:e.operationId}:{}},a);if(e.intent&&"object"==typeof e.intent&&!Array.isArray(e.intent))return c.reviseOperation(b.snapshotId,e.intent,g,`${h}:propose`);if(!e.draft||"object"!=typeof e.draft||Array.isArray(e.draft))throw Error("CONSTRUCTION_SUBMIT_PAYLOAD_INVALID:production-operation 需要 draft(新建)或 intent(修订)之一");return c.proposeOperation(b.snapshotId,e.draft,g,`${h}:propose`)}case"shared-definition":{let a=c.prepareDefinition(e.kind,String(e.id));return c.proposeDefinition(a.id,e.definition,g,`${h}:propose`)}case"writing-unit":{let a=e.units,b=e.revision,c=d.prepareWriting({responsibilityId:n,purpose:String(e.purpose),sectionIds:e.sectionIds,unitIds:[...a.map(a=>String(a.id)),...(b?.retire??[]).map(a=>a.unitId)]});return d.proposeWriting(c.id,{responsibilityId:n,purpose:String(e.purpose),sectionIds:e.sectionIds,units:e.units,...e.revision?{revision:e.revision}:{}},g,`${h}:propose`)}case"project-feature":{if(!f)throw Error("CONSTRUCTION_SUBMIT_FEATURE_UNAVAILABLE:本职责没有工程特征观测能力,不能提交 project-feature");let a=f.prepare(String(e.workPackageId),String(e.key));return f.propose(a.snapshotId,{value:String(e.value),dimension:String(e.dimension),evidence:e.evidence},g,`${h}:propose`)}}},B=(e,g)=>{switch(e){case"production-operation":return c.evaluateOperation(g,a.signal);case"shared-definition":return c.evaluateDefinition(g);case"writing-unit":return d.evaluateWriting(g);case"project-feature":return f.evaluate(g);default:return b.evaluate(g)}},C=(a,b,c)=>{let d=b.value,e=d.result;return{action:c,proposalId:a,evaluationId:b.id,dataValidity:d.dataValidity,relatedConstraints:d.relatedConstraints,schedule:d.schedule,issues:d.issues.slice(0,24),issueCount:d.issues.length,selectedStrategy:e.selectedStrategy??null,professionalAccepted:!1,globalFeasibilityAccepted:!1,fullEvaluationAvailable:!0}},{evaluationOutcomeKey:D,trackEvaluationOutcome:E}=function(a){let b=(a,b,c)=>{let d=b.value.result??{},e=b.value.issues.map(b=>{let c=b??{};return"work-package"===a?[c.code??c.kind??null,c.path??null]:[c.code??c.kind??null,c.entityId??c.operationId??null,c.path??null]});return(0,m.Fu)(["evaluation-outcome",a,..."work-package"===a?[c??b.inputHash]:[],b.value.dataValidity,b.value.relatedConstraints,d.selectedStrategy??null,d.professionalAccepted??!1,d.globalFeasibilityAccepted??!1,e])},c=new Map;return{evaluationOutcomeKey:b,trackEvaluationOutcome:(d,e,f)=>{let g=b(d,e,f);if((a=>{let b=a.value.result??{};return!0===b.professionalAccepted||!0===b.globalFeasibilityAccepted})(e))return c.clear(),{key:g,attempts:1,repeated:!1};let h=(c.get(g)??0)+1;return c.set(g,h),{key:g,attempts:h,repeated:h>=a}}}}(Math.max(2,Math.floor(Number(P.AV?.evaluationOutcomeRepeatLimit??3)))),F=(a,b,c,d)=>({data:{submitted:!1,stage:"evaluation-outcome-repeat",...C(b.id,c,a),action:a,proposalId:b.id,evaluationOutcomeKey:d.key,evaluationOutcomeAttempts:d.attempts,issues:c.value.issues.slice(0,24),message:`同一评估结果已重复 ${d.attempts} 次;本次候选未提交生效。不要只改一个实体原样重提:先读清 issue 的实体与原因,补齐资源/窗口/来源数据或更换策略,再提交。`,nextReading:"同一评估结果重复:停止原样提交;报告未解决依赖,或改变策略/输入后重新提交。"},feedbackRequired:!0,progressLedger:{evidence:[],effective:[]},pause:{reason:`同一评估结果已重复 ${d.attempts} 次,本次候选仍未提交生效;按未解决依赖/来源/窗口问题收口,换策略或交还主控,不再原样重试。`}}),G=0,H=a=>{let b=a.changes.filter(a=>"work-package"===a.kind&&a.value);if(!b.length)return;let c=b.map(a=>{let b=a.value??{},c=a=>Array.isArray(b[a])?[...new Set(b[a].map(String))].sort():b[a];return{kind:a.kind,title:b.title,objectScope:b.objectScope,workfront:b.workfront,sectionIds:c("sectionIds"),memberIds:c("memberIds")}});return"work-package-content:"+(0,m.Fu)((0,m.V5)(c))},I=(e,g,h,i,j)=>{let k,l=((a,e,g)=>{switch(a){case"production-operation":case"shared-definition":return c.commit(e,g);case"writing-unit":return d.commit(e,g);case"project-feature":return f.commit(e,g);default:return b.commit(e,g)}})(e,g.id,h);!0!==l.unchanged&&a.onBusinessCommit?.();let n=i&&"writing-unit"!==e?j??D(e,i,H(g)):void 0,o=new Set(g.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.id)),p=g.changes.filter(a=>"writing-unit"===a.kind&&!a.value).map(a=>a.id);return{data:{...l,action:e,proposalId:g.id,submitted:!0!==l.unchanged,effective:!0!==l.unchanged,...G?{programFactFixups:G}:{},committed:!0!==l.unchanged,changedEntityIds:l.changedEntities.filter(a=>"writing-unit"!==e||o.has(a.id)).map(a=>a.id),..."work-package"===e?{workPackages:(k=l.changedEntities,g.changes.filter(a=>"work-package"===a.kind&&a.value).map(a=>({id:a.id,version:k.find(b=>b.id===a.id)?.version??null,title:a.value.title,sectionIds:a.value.sectionIds})))}:{},...p.length?{retiredEntityIds:p}:{},...!0===l.unchanged?{message:"提交内容与当前版本相同,没有产生新版本;若要送审已有正文,请用 submit_for_independent_review;不要重复提交同一正文。"}:{},...i?{evaluation:{...C(g.id,i,e),...n?{evaluationOutcomeKey:n}:{}}}:{}},...!0===l.unchanged?{feedbackRequired:!0}:{progressLedger:{effective:n?[n]:l.changedEntities.map(a=>(0,m.Fu)([a.id,a.version]))}}}},V=b=>{let c=Array.isArray(b.sectionIds)?b.sectionIds.map(String):[],d=new Set(a.contract.criteria.filter(a=>!c.length||c.includes(String(a.sectionId??""))).map(a=>a.id)),e=[];for(let a of Array.isArray(b.units)?b.units:[]){let b=ag(a),c=(Array.isArray(b.criterionIds)?b.criterionIds.map(String):[]).filter(a=>!d.has(a));if(c.length){let a=[...d],f=c.map(b=>{let c=b.split(":").slice(-2).join(":"),d=a.find(a=>a.endsWith(":"+c));return d&&d!==b?`${b} → ${d}`:`${b}(本节无同维度准则,改用合法 id)`});e.push(`WRITING_CRITERION_UNKNOWN:单元「${String(b.id??"")}」声明了未知评价项 ${c.join("、")};建议替换:${f.join(";")};本节合法准则 id:${a.slice(0,24).join("、")}${a.length>24?"…":""}`)}}return e},W={name:"submit",description:"统一业务提交:一次动作完成校验→候选→求值→原子提交。action 决定业务类型(work-package/source-allocation/production-operation/shared-definition/writing-unit/project-feature);求值不合法时候选不生效并返回具体字段问题;提交不等于专业接收。",parameters:{type:"object",properties:{action:{type:"string",enum:[...o]},payload:{type:"object",additionalProperties:!0,description:"按 action 的负载;服务端逐类校验并返回 $.字段 级问题"},reason:{type:"string",minLength:1},previewId:{type:"string",minLength:1,description:"先用 preview 得到的候选身份;提供它时可不带 payload,提交前复核读集"}},required:["action","reason"],additionalProperties:!1},normalizeArgs:a=>{if("writing-unit"!==a.action||!a.payload||"object"!=typeof a.payload||Array.isArray(a.payload))return{args:a,paths:[]};let b=af(a.payload);return{args:{...a,payload:b.payload},paths:b.paths.map(a=>`$.payload.${a.slice(2)}`)}},invoke:async(b,c)=>{let d,f,k,l,o,q=p(b.action),r=String(b.reason??"").trim();if(!r)throw Error("CONSTRUCTION_SUBMIT_REASON_REQUIRED:每次提交必须写明业务理由");if("string"==typeof b.previewId&&b.previewId.trim()){let d=a.store.proposal(b.previewId.trim());if(!d||d.actorId!==n)throw Error("CONSTRUCTION_PREVIEW_SCOPE_DENIED");if(d.changes.some(a=>!T[q].includes(a.kind)))throw Error("CONSTRUCTION_PREVIEW_ACTION_MISMATCH");let e=d.reads.entities.filter(b=>(a.store.entity(b.id)?.version??null)!==b.version);if("committed"===d.state)return{data:{submitted:!0,effective:!1,alreadyCommitted:!0,action:q,proposalId:d.id,changedEntityIds:d.changes.map(a=>a.id),changedEntities:d.changes.map(b=>({id:b.id,version:a.store.entity(b.id)?.version??null})),message:"该候选已提交:返回既有身份,不重复生效。"}};if("evaluated"!==d.state)return{data:{submitted:!1,action:q,proposalId:d.id,error:"CONSTRUCTION_PREVIEW_NOT_EVALUATED",message:`候选当前状态为 ${d.state},不能提交;请重新 preview。`},feedbackRequired:!0};let f=d.reads.groups.filter(b=>a.store.group(b.key).version!==b.version);if(e.length||f.length)return{data:{submitted:!1,action:q,proposalId:d.id,error:"STALE_PREVIEW",stale:e.map(b=>({entityId:b.id,expectedVersion:b.version,currentVersion:a.store.entity(b.id)?.version??null})),staleGroups:f.map(b=>({groupKey:b.key,expectedVersion:b.version,currentVersion:a.store.group(b.key).version})),message:"预览之后相关对象或分组已变化:请重新 preview 后再提交。"},feedbackRequired:!0};let g=a.store.proposalEvaluation(d.id);if(!g)return{data:{submitted:!1,action:q,proposalId:d.id,error:"CONSTRUCTION_PREVIEW_NOT_EVALUATED",message:"该候选尚未求值:请重新 preview。"},feedbackRequired:!0};let h="writing-unit"===q?void 0:E(q,g,H(d));return h?.repeated?F(q,d,g,h):"valid"!==g.value.dataValidity||"valid"!==g.value.relatedConstraints?{data:{submitted:!1,action:q,stage:"evaluation-rejected",proposalId:d.id,dataValidity:g.value.dataValidity,relatedConstraints:g.value.relatedConstraints,issues:g.value.issues.slice(0,24),issueCount:g.value.issues.length,...h?{evaluationOutcomeKey:h.key,evaluationOutcomeAttempts:h.attempts}:{}},feedbackRequired:!0}:I(q,d,c,g,h?.key)}try{d=ak(q,ag(b.payload),a.store,a.project)}catch(b){let a=b instanceof Error?b.message:String(b);if(a.startsWith("WRITING_"))return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:[a],message:"正文单元/引用形状不成立:按字段问题修正后重提,不要原样重试。"},feedbackRequired:!0};throw b}let s=[];if("writing-unit"===q&&a.structurePlan){let b=Array.isArray(d.sectionIds)?d.sectionIds.map(String):[],c=1===b.length?a.sectionPlans?.get(b[0]):void 0,e=Array.isArray(d.units)?d.units:[];if(c&&e.length){let f=function(a){let b=[],c=new Set(a.units.map(a=>a.id)),d=new Set((a.existingUnits??[]).filter(a=>!c.has(a.id)).flatMap(a=>a.coverageItemIds??[]));return{units:a.units.map(c=>{let e=a.sectionPlan.subsections.find(a=>a.subsectionId===c.subsectionId?.trim());if(!e)return c;let f=[],g={...c};g.planHash||(g.planHash=a.structurePlan.planHash,f.push("planHash")),g.sectionPlanHash||(g.sectionPlanHash=a.sectionPlan.sectionPlanHash,f.push("sectionPlanHash")),e.contentContract&&!g.contentContractHash&&(g.contentContractHash=e.contentContract.hash,f.push("contentContractHash")),g.heading?.trim()||(g.heading=e.title,f.push("heading"));let h="table"===e.primaryCarrier||"figure"===e.primaryCarrier?e.primaryCarrier:void 0;for(let a of(h&&e.requiredOutputId&&g.kind===h&&!g.outputId&&(g.outputId=e.requiredOutputId,f.push("outputId")),"paragraph"===g.kind||g.caption?.trim()||(g.caption=g.heading?.trim()||e.title,f.push("caption")),g.coverageItemIds?.length||g.referencedCoverageItemIds?.length||!e.coverageItemIds.length||(g.kind!==e.primaryCarrier||e.coverageItemIds.some(a=>d.has(a))?(g.referencedCoverageItemIds=[...e.coverageItemIds],f.push("referencedCoverageItemIds")):(g.coverageItemIds=[...e.coverageItemIds],f.push("coverageItemIds"))),g.coverageItemIds??[]))d.add(a);return f.length&&b.push({unitId:c.id,fields:f}),g}),normalized:b}}({units:e,sectionPlan:c,structurePlan:a.structurePlan,existingUnits:(0,A.Z1)(a.store,n,b).map(a=>a.unit).filter(a=>!d.revision?.retire?.some(b=>b.unitId===a.id))});d={...d,units:f.units},s=f.normalized}}let t=[],u=[],w=[],x=!1,y=[];if("writing-unit"===q&&!d.revision&&Array.isArray(d.units)&&d.units.length>1){let b=[];for(let c of d.units){let e={...d,units:[c]},f=(0,v.Dp)({...e,responsibilityId:n,units:[(0,h.Mf)(c??{},a.tenderResponsePlan,Array.isArray(d.sectionIds)?d.sectionIds.map(String):[])]}),g=[...(0,i.validateJsonAgainstSchema)(e,ae[q]),...f.issues.map(a=>`${a.unitId}:${a.code}:${a.message}`),...V(e)];g.length?t.push({unitId:String(ag(c).id??""),issues:g}):b.push(c)}if(!b.length)return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:t.flatMap(a=>a.issues),rejectedUnits:t,message:"本批没有可生效的正文单元:按每个 unitId 的字段问题修正后重提;不要原样重试整批。"},feedbackRequired:!0};t.length&&(d={...d,units:b})}let D=(0,i.validateJsonAgainstSchema)(d,ae[q]);if(D.length)return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:D,message:"payload 不符合该 action 的字段约束:按 $.字段 修正后重提;不要原样重试。"},feedbackRequired:!0};if("writing-unit"===q&&Array.isArray(d.units)&&(d.units=d.units.map(b=>(0,h.Mf)(b??{},a.tenderResponsePlan,Array.isArray(d.sectionIds)?d.sectionIds.map(String):[]))),"writing-unit"===q&&"string"==typeof ag(d.revision).reason){let a=String(ag(d.revision).reason).trim();a&&(d={...d,units:d.units.map(b=>({...b,carrierRevisionReason:a}))})}if("writing-unit"===q){let a=V(d);if(a.length)return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:a,message:"正文单元声明了未知评价项:只能使用本节合同准则 id;按 issues 里的合法 id 修正后重提。"},feedbackRequired:!0}}let P=a.planningContext&&a.structurePlan?(0,K.XI)(a.planningContext):void 0;if("writing-unit"===q){let b,c,h=d.sectionIds??[];k=1===h.length?h[0]:void 0;let i=d.units;if(a.sourceDraftOnly&&i.some(a=>a.planChart||[...a.references,...a.assertions.map(a=>a.reference)].some(a=>"evidence"!==a.kind)))throw Error("SOURCE_DRAFT_EXTERNAL_DECISION_REQUIRED:该内容依赖尚未就绪的决定/计算/基准,保留草稿等待正式流程");if(a.structurePlan){if(1!==h.length)return{data:{submitted:!1,action:q,stage:"plan-section-required",error:"WRITING_SECTION_SINGLE_REQUIRED:按节写作必须一次提交一个 sectionId;跨节内容拆成多次提交或引用他节表/图。"},feedbackRequired:!0};let c=h[0];if(!(b=a.sectionPlans?.get(c)))return{data:{submitted:!1,action:q,stage:"plan-required",error:`SECTION_PLAN_REQUIRED:本节还没有冻结的节计划。先调用 plan_section(sectionId="${c}"),再按小节写作。`},feedbackRequired:!0};let d=(0,L.qA)({store:a.store,sectionId:c,structurePlan:a.structurePlan,sectionPlan:b,units:(0,L.rz)(a.store,c),reviewContext:{project:a.project,expectedBidCompositionHash:(0,M.IQ)(a.bidComposition,a.bidCompositionSources),tenderResponsePlan:a.tenderResponsePlan}});if("valid"===d.status)return{data:{submitted:!1,action:q,stage:"section-locked",error:`SECTION_LOCKED:本节已于 ${new Date(d.lock.lockedAt).toISOString()} 锁定(sectionPlanHash ${d.lock.sectionPlanHash}),不得再修改。进入下一节。`},feedbackRequired:!0}}b&&(f=b,k=h[0]);let j=new Set(h),o=(0,A.Z1)(a.store,n,a.authority.sectionIds),p=o.filter(a=>a.sectionIds.some(a=>j.has(a))),s=new Map(p.map(a=>[a.unit.id,a])),x=new Map(o.map(a=>[a.unit.id,a]));for(let a of d.revision?.retire??[])s.delete(a.unitId),x.delete(a.unitId);for(let a of i)s.set(a.id,{unit:a,sectionIds:h}),x.set(a.id,{unit:a,sectionIds:h});if(d.revision){let b=(0,v.Dp)({...d,responsibilityId:n});if(!b.submission)return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:b.issues},feedbackRequired:!0};try{for(let c of(0,O.R)(a.store,b.submission,i.map(b=>{let c=(0,v.tp)(n,String(d.purpose),b.id,h[0]);return{id:c,kind:"writing-unit",expectedVersion:a.store.entity(c)?.version??null,value:{...b,responsibilityId:n,purpose:String(d.purpose),sectionIds:h}}}),r))if("writing-unit"===c.kind&&c.value){let a=c.value;s.set(a.id,{unit:a,sectionIds:h}),x.set(a.id,{unit:a,sectionIds:h})}}catch(a){return{data:{submitted:!1,action:q,stage:"structural-revision",issues:[a instanceof Error?a.message:String(a)],message:"结构变更整组未生效;按原单元版本、覆盖/输出迁移与引用重定向修正后重提。"},feedbackRequired:!0}}}l=(0,A.ly)({contract:a.contract,sectionIds:h,submitted:i,sectionUnits:[...s.values()],...a.sourceDraftOnly?{sourceDraftContracts:a.sectionContracts}:{},carrierUnits:[...x.values()],...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.executionBaselineRef?.current?{executionBaseline:a.executionBaselineRef.current}:{},project:a.project,...a.structurePlan?{structurePlan:a.structurePlan}:{},...b?{sectionPlan:b}:{},...P?{projectBasicFacts:P.facts,...P.projectName?{projectName:P.projectName}:{}}:{}});let z=[];for(;;){let b=a.store.entityPage({groupKey:"writing-units",...c?{afterId:c}:{},limit:200});for(let a of b.entities){if(a.deleted||"writing-unit"!==a.kind)continue;let b=(0,v.iC)(a);b&&z.push(b)}if(!b.nextAfterId)break;c=b.nextAfterId}let B=J({submitted:i,documentUnits:z});(B.blocking.length||B.advisory.length)&&(l={passed:l.passed&&!B.blocking.length,blocking:[...l.blocking,...B.blocking],advisory:[...l.advisory,...B.advisory]});let C=c=>c.map(c=>{let d=c.subsectionId?.trim(),e=d&&b?b.subsections.find(a=>a.subsectionId===d):void 0,f=e?.requiredOutputId?a.structurePlan?.outputRegistry.find(a=>a.outputId===e.requiredOutputId):void 0,g=f?"table"===f.form?"table":"figure":void 0,h=e?.writingOutline??[],i=f?h.findIndex(a=>(a.evidenceRefs??[]).includes(f.outputId)):-1,j=i>=0?i:f?h.findIndex(a=>a.carrier===g):-1;return{unitId:c.id,...d?{subsectionId:d}:{},...e?{heading:e.title,primaryCarrier:e.primaryCarrier,writingOutline:h.map((a,b)=>({...a,coverageRole:a.carrier===e.primaryCarrier?"primary":"supporting",ownsRequiredOutput:b===j})),...e.requiredOutputId?{requiredOutputId:e.requiredOutputId,...g?{requiredOutputCarrier:g}:{}}:{}}:{},sectionPlanHash:b?.sectionPlanHash??null}});if(G=0,y=[],!l.passed){let c=(0,A.az)(i,l.blocking,P);if(c){let e=(0,A.ly)({contract:a.contract,sectionIds:h,submitted:c.fixed,...a.sourceDraftOnly?{sourceDraftContracts:a.sectionContracts}:{},sectionUnits:[...s.values()].map(a=>c.fixed.some(b=>b.id===a.unit.id)?{unit:c.fixed.find(b=>b.id===a.unit.id),sectionIds:a.sectionIds}:a),carrierUnits:[...x.values()].map(a=>c.fixed.some(b=>b.id===a.unit.id)?{unit:c.fixed.find(b=>b.id===a.unit.id),sectionIds:a.sectionIds}:a),...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.executionBaselineRef?.current?{executionBaseline:a.executionBaselineRef.current}:{},project:a.project,...a.structurePlan?{structurePlan:a.structurePlan}:{},...b?{sectionPlan:b}:{},...P?{projectBasicFacts:P.facts,...P.projectName?{projectName:P.projectName}:{}}:{}}),f=J({submitted:c.fixed,documentUnits:z}),g={passed:e.passed&&!f.blocking.length,blocking:[...e.blocking,...f.blocking],advisory:[...e.advisory,...f.advisory]};if(g.passed){for(let a of(d={...d,units:c.fixed},i.splice(0,i.length,...c.fixed),c.fixed))s.set(a.id,{unit:a,sectionIds:h}),x.set(a.id,{unit:a,sectionIds:h});G=c.count,l=g}else{for(let a of(i.splice(0,i.length,...c.fixed),c.fixed))s.set(a.id,{unit:a,sectionIds:h}),x.set(a.id,{unit:a,sectionIds:h});G=c.count,l=g}}}if(!l.passed){let c=new Set(i.map(a=>a.id)),f=new Map;for(let a of l.blocking){if(!a.unitId||!c.has(a.unitId)){y.push({rule:a.rule,message:a.message});continue}f.set(a.unitId,[...f.get(a.unitId)??[],{rule:a.rule,message:a.message}])}let j=i.filter(a=>f.has(a.id)),n=i.filter(a=>!f.has(a.id)),r=0===j.length&&y.length>0;if(!d.revision&&j.length&&n.length){let c=new Map(p.map(a=>[a.unit.id,a])),i=new Map(o.map(a=>[a.unit.id,a]));for(let a of n)c.set(a.id,{unit:a,sectionIds:h}),i.set(a.id,{unit:a,sectionIds:h});let r=(0,A.ly)({contract:a.contract,sectionIds:h,submitted:n,...a.sourceDraftOnly?{sourceDraftContracts:a.sectionContracts}:{},sectionUnits:[...c.values()],carrierUnits:[...i.values()],...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.executionBaselineRef?.current?{executionBaseline:a.executionBaselineRef.current}:{},project:a.project,...a.structurePlan?{structurePlan:a.structurePlan}:{},...b?{sectionPlan:b}:{},...P?{projectBasicFacts:P.facts,...P.projectName?{projectName:P.projectName}:{}}:{}});if(r.passed&&!r.advisory.some(a=>"carrier-reference-without-primary"===a.rule)){for(let a of(d={...d,units:n},j))t.push({unitId:a.id,issues:(f.get(a.id)??[]).map(a=>a.message)});if(u.push(...j),w.push(...C(j)),l=r,a.generatedDir)try{let b=g().join(a.generatedDir,"construction");e().mkdirSync(b,{recursive:!0}),e().appendFileSync(g().join(b,"write-check-failures.jsonl"),JSON.stringify({version:"write-check-failure-v1",runId:a.runId??null,at:new Date().toISOString(),action:q,sectionId:k??null,unitIds:j.map(a=>a.id),blocking:j.flatMap(a=>(f.get(a.id)??[]).map(b=>({code:b.rule,location:`unit:${a.id}`,hint:b.message}))),requiredBindings:C(j),partial:!0,fingerprint:(0,m.Fu)([...f].flatMap(([a,b])=>b.map(b=>[b.rule,a])).sort())})+"\n")}catch{}Q.delete(`${a.store.workspaceId}:${k??""}`)}else if(j.length){for(let a of j)t.push({unitId:a.id,issues:(f.get(a.id)??[]).map(a=>a.message)});u.push(...j),w.push(...C(j))}}if(!l.passed&&j.length&&(!r||d.revision)){let b=l.blocking.map(a=>({code:a.rule,...a.unitId?{location:`unit:${a.unitId}`}:a.location?{location:a.location}:{},...void 0!==a.observed?{observed:a.observed}:{},...void 0!==a.expected?{expected:a.expected}:{},hint:a.hint??a.message})),c=(0,m.Fu)(l.blocking.map(a=>[a.rule,a.unitId??"",a.expected??"",a.observed??""]).sort()),d=`${a.store.workspaceId}:${k??""}`,f=Q.get(d),h=f&&f.fingerprint===c?f.count+1:1;Q.set(d,{fingerprint:c,count:h});let j=h>=2?{pause:{reason:`同一写前拒收已连续 ${h} 次(${b.slice(0,3).map(a=>a.code).join("、")||"write-check"}):停止原样重试,交运行级按未决/阻塞处理;请换实质不同的写法或报告依赖`}}:{};if(a.generatedDir)try{let d=g().join(a.generatedDir,"construction");e().mkdirSync(d,{recursive:!0}),e().appendFileSync(g().join(d,"write-check-failures.jsonl"),JSON.stringify({version:"write-check-failure-v1",runId:a.runId??null,at:new Date().toISOString(),action:q,sectionId:k??null,unitIds:i.map(a=>a.id),blocking:b,requiredBindings:C(i),fingerprint:c})+"\n")}catch{}return{data:{submitted:!1,action:q,stage:"write-check",writeCheck:l,issues:b,...h>=2?{rejectionStreak:h}:{},...t.length?{rejectedUnits:t}:{},...b[0]?{error:`${b[0].code}${b[0].location?` @${b[0].location}`:""}:${b[0].hint}`}:{},requiredBindings:C(i),message:"写作时校验未通过:按 issues 的 code/location/observed/expected/hint 与 requiredBindings 逐条修订后重提;修订必须让至少部分单元通过校验生效,连续多轮没有单元生效会按停滞处理。"},feedbackRequired:!0,...j,progressLedger:{evidence:[],effective:[]}}}}}try{o=z(q,d,r,c)}catch(b){let a=b instanceof Error?b.message:String(b);if(a.startsWith("WRITING_"))return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:[a],message:"正文单元结构不成立:按问题补齐后重提,不要原样重试。"},feedbackRequired:!0};throw b}let R=()=>!!(f&&k&&f.subsections.filter(a=>"transition"!==a.role).every(b=>(0,L.rz)(a.store,k).some(a=>a.subsectionId===b.subsectionId))),S=a=>R()&&a?{autoClosureDeferred:"first-draft-pending",nextAction:"await_closure",invocationBoundary:{sectionId:a??"",state:"drafted",reason:"本节首版完成,交还运行级收口",key:`first-draft-complete:${a??""}`,deferUntilClosure:!0},nextReading:"本节首版已写完,程序已把执行交还调度;不要再重复送审/finalize/complete。全部节首版铺满后程序会审查/锁定本节并唤醒你按 findings 修订或 complete。"}:{autoClosureDeferred:"first-draft-pending",nextAction:"next_section",nextReading:"首版阶段:审查/锁定统一在全部节首版铺满后执行;现在写本职责其余未写小节,不要重复送审。"},U=(()=>{if("writing-unit"!==q)return{};if(!a.sourceDraftOnly&&a.deferSectionReview?.())return S(k);let b=k;if(!b)return{};let c=(0,M.cD)(a.store,{contract:a.contract,responsibilityId:n,expectedBidCompositionHash:(0,M.IQ)(a.bidComposition,a.bidCompositionSources),...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{}}).missingUnitIds.filter(c=>{let d=a.store.entity(c)?.value;return Array.isArray(d?.sectionIds)&&d.sectionIds.map(String).includes(b)});return c.length?{nextAction:"submit_for_independent_review",unreviewedUnitIds:c,nextReading:"当前单元内容已是最新版本;不要原样重提。请调用 submit_for_independent_review 送审这些单元。"}:{nextAction:"finalize_section",nextReading:"当前单元内容已是最新版本;不要原样重提。请调用 finalize_section 检查合同完整度并按节锁定。"}})();if("unchanged"in o)return{data:{action:q,...o,submitted:!1,effective:!1,...U,reading:"该提交与当前版本一致,没有产生新版本。不要原样重提:继续写下一段/下一个单元,或声明完成。"}};let W=o;if("committed"===W.state)return I(q,W,c,a.store.proposalEvaluation(W.id));if(W.changes.every(b=>(0,m.V5)(b.value)===(0,m.V5)(a.store.entity(b.id)?.value??null)))return{data:{action:q,proposalId:W.id,unchanged:!0,submitted:!1,effective:!1,entities:W.changes.map(b=>({entityId:b.id,version:a.store.entity(b.id)?.version??null})),...U,reading:"提交内容与当前生效版本完全一致,没有产生新版本。不要原样重提;继续写下一个单元/下一节,或声明完成。"}};let X=await B(q,W.id),Y="writing-unit"===q?void 0:E(q,X,H(W));if(Y?.repeated)return F(q,W,X,Y);if("valid"!==X.value.dataValidity||"valid"!==X.value.relatedConstraints)return{data:{submitted:!1,stage:"evaluation-rejected",...C(W.id,X,q),...Y?{evaluationOutcomeKey:Y.key,evaluationOutcomeAttempts:Y.attempts}:{}},feedbackRequired:!0,progressLedger:Y?{effective:[Y.key]}:{evidence:[(0,m.Fu)(["actual-evaluation",X.id,X.inputHash])]}};let Z=I(q,W,c,X,Y?.key);x=R();let $="writing-unit"===q&&!a.sourceDraftOnly&&!!a.deferSectionReview?.(),_=!a.sourceDraftOnly&&!a.deferBodyReview&&!$&&"writing-unit"===q&&x&&k&&a.structurePlan&&a.sectionPlans?.get(k)&&a.caller&&a.generatedDir&&a.runId?await (async()=>{try{let b={store:a.store,contract:a.contract,project:a.project,responsibilityId:n,sectionId:k,authoritySectionIds:a.authority.sectionIds,structurePlan:a.structurePlan,sectionPlans:a.sectionPlans,...a.planningContext?{planningContext:a.planningContext}:{},...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.bidComposition?{bidComposition:a.bidComposition,bidCompositionSources:a.bidCompositionSources}:{},...a.executionBaselineRef?.current?{executionBaseline:a.executionBaselineRef.current}:{},...a.evidence?.projectRoot?{projectRoot:a.evidence.projectRoot}:{},...a.signal?{signal:a.signal}:{},...a.sourceCoverageLock?{sourceCoverageLock:a.sourceCoverageLock}:{},caller:a.caller,diagnostics:a.diagnostics,artifactDir:a.generatedDir,runId:a.runId},d=await (0,j.P7)({...b,lockActorId:n,lockedBy:n,operationId:c+":auto-closure"}),e=d.closure,f=d.sourceCoverage;return{reviewed:d.reviewed,...d.reason?{reviewSkipped:d.reason}:{},...d.receipt?{reviewOk:d.receipt.ok,reviewInvocationId:d.receipt.invocationId,...d.receipt.error?{reviewError:d.receipt.error}:{}}:{},...d.planGaps?.length?{planGaps:d.planGaps}:{},locked:!!e.lock,lockable:e.lockable,openFindings:e.openFindingIds.length,unreviewedUnitIds:e.unreviewedUnitIds,deficientCriterionIds:e.deficientCriterionIds,...e.gaps.length?{gaps:e.gaps}:{},...f?{sourceCoverage:f}:{}}}catch(a){return{reviewed:!1,reviewOk:!1,locked:!1,lockable:!1,openFindings:0,unreviewedUnitIds:[],gaps:[],reviewError:a instanceof Error?a.message:String(a)}}})():void 0,aa=b=>{let c="writing-unit"===q?(0,M.cD)(a.store,{contract:a.contract,responsibilityId:n,expectedBidCompositionHash:(0,M.IQ)(a.bidComposition,a.bidCompositionSources),tenderResponsePlan:a.tenderResponsePlan}):void 0,d=c?.missingUnitIds??[],e=(()=>{if("writing-unit"!==q||!k||!f)return[];let b=new Set((0,L.rz)(a.store,k).flatMap(b=>{let c=a.store.entity(b.entityId)?.value;return Array.isArray(c?.coverageItemIds)?c.coverageItemIds.map(String):[]}));return f.subsections.filter(a=>"transition"!==a.role).flatMap(a=>a.coverageItemIds.filter(a=>!b.has(a)).map(b=>({subsectionId:a.subsectionId,title:a.title,coverageItemId:b})))})(),g=_&&!_.locked&&(_.openFindings>0||_.unreviewedUnitIds.length>0||!1===_.reviewOk||(_.gaps?.length??0)>0),h={...s.length?{normalizedBindings:s}:{},...l?.advisory.length?{writeCheck:{passed:!0,advisory:l.advisory}}:{},...y.length?{sectionIssues:y}:{},..._?{autoClosure:_}:{},..._&&k?{invocationBoundary:{sectionId:k,state:(0,N.Pp)(a.store,k)?.phase??(_.locked?"locked":"reviewing"),reason:_.locked?"本节已锁定,交还调度选择下一节":"当前审查结果已保存,交还调度处理修订或依赖",key:(0,N.Pp)(a.store,k)?.boundaryKey??(0,m.Fu)([k,_])}}:{},..._?.locked?{nextAction:"complete",nextReading:"本节已由机械收口审查并锁定;确认成果后调用 complete。"}:g?{nextAction:"review_revision_plan",nextReading:"机械审查已完成,但本节仍有未关闭 finding 或未审单元;先按 review_revision_plan 修订/举证,再重新提交。"}:d.length?{nextAction:"submit_for_independent_review",unreviewedUnitIds:d,nextReading:`这些单元还没有当前审查档位:一次调用 submit_for_independent_review 把上面 ${d.length} 个 id **放进 unitEntityIds 批量送审(一次最多 6 个,超过分两批)**,不要一个单元送一次;审查通过后再 finalize_section。`}:x?{nextAction:"finalize_section",nextReading:"本节全部计划小节已有单元且都有当前审查档位;调用 finalize_section 检查合同完整度并按节锁定。"}:{},...e.length?{coverageGaps:e,nextAction:"bind_coverage",nextReading:`以下计划契约项没有主载体:${e.slice(0,8).map(a=>`${a.title}(${a.coverageItemId})`).join("、")}${e.length>8?` 等 ${e.length} 项`:""}。在对应小节的单元 coverageItemIds 中认领后重提;不要原样提交,也不要等到 finalize_section 才补。`}:{},...$&&!e.length&&!t.length?S(k):{}};return Object.keys(h).length?{...b,...e.length?{feedbackRequired:!0}:{},data:{...b.data,...h}}:b};return t.length?aa({...Z,feedbackRequired:!0,progressLedger:{evidence:[],effective:[]},data:{...Z.data,partial:!0,rejectedUnits:t,requiredBindings:w,message:`已生效 ${d.units?.length??0} 个单元;${t.length} 个单元未通过校验:${t.map(a=>a.unitId).join("、")}。按每个 unitId 的 issues 与 requiredBindings 单独修正后重提;不要原样重复整批。`}}):(Q.delete(`${a.store.workspaceId}:${k??""}`),aa(Z))}},Y={name:"preview",description:"只求值不生效(生产排程等需要先看计算结果的场景):返回 previewId、inputHash 与读集版本;随后 submit 带 previewId 提交,读集变化会返回 STALE_PREVIEW。",parameters:{type:"object",properties:{action:{type:"string",enum:[...o]},payload:{type:"object",additionalProperties:!0},reason:{type:"string",minLength:1}},required:["action","payload","reason"],additionalProperties:!1},invoke:async(b,c)=>{let d,e=p(b.action);if("writing-unit"===e)throw Error("CONSTRUCTION_PREVIEW_NOT_SUPPORTED:正文单元请直接 submit(一次完成校验→求值→原子提交),不需要 preview。");let f=String(b.reason??"").trim();if(!f)throw Error("CONSTRUCTION_SUBMIT_REASON_REQUIRED");try{d=ak(e,ag(b.payload),a.store,a.project)}catch(b){let a=b instanceof Error?b.message:String(b);if(a.startsWith("WRITING_"))return{data:{previewed:!1,action:e,stage:"payload-invalid",issues:[a]},feedbackRequired:!0};throw b}let g=(0,i.validateJsonAgainstSchema)(d,ae[e]);if(g.length)return{data:{previewed:!1,action:e,stage:"payload-invalid",issues:g},feedbackRequired:!0};let h=z(e,d,f,c);if("unchanged"in h)return{data:{previewed:!0,effective:!1,action:e,...h}};let j=await B(e,h.id);return{data:{previewed:!0,effective:!1,...C(h.id,j,e),previewId:h.id,inputHash:j.inputHash,readSetVersion:(0,m.Fu)(h.reads)},..."valid"!==j.value.dataValidity||"valid"!==j.value.relatedConstraints?{feedbackRequired:!0}:{}}}},Z=ae["writing-unit"].properties.units.items,$={...Z.properties};for(let a of["planHash","sectionPlanHash","contentContractHash","subsectionId"])delete $[a];let _={name:"write_subsection",description:"按当前冻结小节提交正文;作者决定内容、引用和写作块,程序绑定单元身份、计划哈希与输出。优先使用本工具。每个计划块提供一个 units 项;多个块时须给 blockId。复用既有块的单元身份;提交仍须经过全部写前校验与独立审查。",parameters:{type:"object",additionalProperties:!1,required:["sectionId","subsectionId","units","reason"],properties:{sectionId:U,subsectionId:U,reason:U,expectedSectionPlanHash:{...U,description:"可选的并发前置条件;若已读计划过期则拒绝本次写入"},units:X({...Z,properties:$,required:["kind"]})}},normalizeArgs:a=>{let b=af(a);return{args:b.payload,paths:b.paths}},invoke:async(b,c)=>{let d=String(b.sectionId),e=String(b.subsectionId);if(!a.authority.sectionIds.includes(d))throw Error("WRITING_SECTION_SCOPE_DENIED");let f=a.store.entity(`section-plan:${d}`)?.value?.plan??a.sectionPlans?.get(d);if(!f||!a.structurePlan)throw Error("WRITING_SECTION_PLAN_REQUIRED");if(b.expectedSectionPlanHash&&b.expectedSectionPlanHash!==f.sectionPlanHash)throw Error("WRITING_SECTION_PLAN_STALE:请读取当前节计划后修订");let g=f.subsections.find(a=>a.subsectionId===e);if(!g)throw Error("WRITING_SUBSECTION_UNKNOWN");let h=(0,A.Z1)(a.store,n,[d]).map(a=>a.unit),i=b.units.map(a=>{let b=a.blockId??(g.writingOutline?.length===1?g.writingOutline[0].blockId:void 0);if(g.writingOutline?.length&&!g.writingOutline.some(a=>a.blockId===b))throw Error(`WRITING_BLOCK_REQUIRED:可用 blockId:${g.writingOutline.map(a=>a.blockId).join("、")}`);let c=h.find(a=>a.subsectionId===e&&a.blockId===b);return{...a,subsectionId:e,...b?{blockId:b}:{},id:a.id??c?.id??`unit:${(0,m.Fu)([d,e,b??a.kind]).slice(0,24)}`}});if(new Set(i.map(a=>a.blockId??"")).size!==i.length||new Set(i.map(a=>a.id)).size!==i.length)throw Error("WRITING_DUPLICATE_BLOCK:每个写作块只提交一个单元");return W.invoke({action:"writing-unit",reason:b.reason,payload:{purpose:"writing",sectionIds:[d],units:i}},c)}},aa={name:"write_section",description:"一次提交本节多个小节的正文:每个 units 项必须带 subsectionId(可选 blockId)。一节有 2 个及以上小节时优先用本工具,避免逐小节重复发送同一节上下文;单小节用 write_subsection。程序逐单元绑定小节/块身份、计划哈希与输出,提交仍经过全部写前校验与独立审查。",parameters:{type:"object",additionalProperties:!1,required:["sectionId","units","reason"],properties:{sectionId:U,reason:U,expectedSectionPlanHash:{...U,description:"可选的并发前置条件;若已读计划过期则拒绝本次写入"},units:X({...Z,properties:{...$,subsectionId:U},required:["kind","subsectionId"]})}},normalizeArgs:a=>{let b=af(a);return{args:b.payload,paths:b.paths}},invoke:async(b,c)=>{let d=String(b.sectionId);if(!a.authority.sectionIds.includes(d))throw Error("WRITING_SECTION_SCOPE_DENIED");let e=a.store.entity(`section-plan:${d}`)?.value?.plan??a.sectionPlans?.get(d);if(!e||!a.structurePlan)throw Error("WRITING_SECTION_PLAN_REQUIRED");if(b.expectedSectionPlanHash&&b.expectedSectionPlanHash!==e.sectionPlanHash)throw Error("WRITING_SECTION_PLAN_STALE:请读取当前节计划后修订");let f=(0,A.Z1)(a.store,n,[d]).map(a=>a.unit),g=b.units.map(a=>{let b=String(a.subsectionId??"").trim(),c=e.subsections.find(a=>a.subsectionId===b);if(!c)throw Error(`WRITING_SUBSECTION_UNKNOWN:${b||"(空)"};可用:${e.subsections.map(a=>a.subsectionId).join("、")}`);let g=a.blockId??(c.writingOutline?.length===1?c.writingOutline[0].blockId:void 0);if(c.writingOutline?.length&&!c.writingOutline.some(a=>a.blockId===g))throw Error(`WRITING_BLOCK_REQUIRED:小节 ${b} 可用 blockId:${c.writingOutline.map(a=>a.blockId).join("、")}`);let h=f.find(a=>a.subsectionId===b&&a.blockId===g);return{...a,subsectionId:b,...g?{blockId:g}:{},id:a.id??h?.id??`unit:${(0,m.Fu)([d,b,g??a.kind]).slice(0,24)}`}});if(new Set(g.map(a=>`${String(a.subsectionId??"")}\u0000${String(a.blockId??"")}`)).size!==g.length||new Set(g.map(a=>a.id)).size!==g.length)throw Error("WRITING_DUPLICATE_BLOCK:每个写作块只提交一个单元");return W.invoke({action:"writing-unit",reason:b.reason,payload:{purpose:"writing",sectionIds:[d],units:g}},c)}};return[...o.has("writing-unit")&&a.structurePlan?[_,aa]:[],W,Y]}},68011:(a,b,c)=>{c.d(b,{G:()=>k});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c(34933);let j=a=>(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function k(a,b,c,d){let f=(0,i.x)(b),k=a=>{if(!/^[a-f0-9]{64}$/u.test(a))throw Error("当前模型响应缓存输入身份无效");return j({version:c,inputKey:a,model:f})};return{load(b){let d=k(b),f=g().join(a,`${d}.json`);if(!e().existsSync(f))return;let h=JSON.parse(e().readFileSync(f,"utf8"));if(h.version!==c||h.cacheKey!==d||j(h.response)!==h.responseSha256)throw Error("当前模型响应缓存身份或内容校验失败");return{response:h.response,receipt:{cacheKey:d,responseSha256:h.responseSha256,...h.originRunId?{originRunId:h.originRunId}:{}}}},save(b,f){let i=k(b),l=g().join(a,`${i}.json`);e().mkdirSync(a,{recursive:!0});let m=`${l}.${process.pid}.${(0,h.randomUUID)()}.tmp`;try{e().writeFileSync(m,JSON.stringify({version:c,cacheKey:i,responseSha256:j(f),response:f,...d?{originRunId:d}:{}})),e().renameSync(m,l)}finally{e().rmSync(m,{force:!0})}}}}},72538:(a,b,c)=>{c.d(b,{C3:()=>i,ZB:()=>h,qg:()=>j,zY:()=>f});var d=c(3410),e=c(745);let f="__document__",g=a=>`section-source-review:${a}`;function h(a,b){let c=a.entity(g(b));return c?.deleted||c?.kind!=="section-source-review"||c.value?.version!=="section-source-review-v1"?void 0:c.value}function i(a,b){let c=g(b.sectionId),d=a.entity(c);if(d?.value&&(0,e.Fu)(d.value)===(0,e.Fu)(b))return;let f=`${c}:${d?.version??0}:${(0,e.Fu)(b)}`,h=a.propose({actorId:"program-runtime",purpose:"source-review-progress",reason:"持久保存来源审查分页身份与已完成ID",reads:{entities:[{id:c,version:d?.version??null}],groups:[]},changes:[{id:c,kind:"section-source-review",expectedVersion:d?.version??null,value:b}]},`${f}:propose`);a.evaluate(h.id,"section-source-review-v1",()=>({dataValidity:"valid",relatedConstraints:"valid",schedule:{scope:"local",state:"not-evaluated"},issues:[],result:{complete:b.complete}})),a.commit(h.id,`${f}:commit`)}function j(a,b,c){let g=(0,d.vx)(a,b,{documentHash:"source-review-current-dependencies"}),i=[...new Set([...g.missingOpinions,...g.conflicts])].sort(),j=(0,d.ik)(b),k=h(a,f)??h(a,c),l=k?.cursor.sourceSnapshotHash===j?k.cursor:void 0,m=!!(l&&(k?.complete===!0||l.sourceIds.length>0&&l.completedSourceIds.length>=l.sourceIds.length)),n=0===g.sources.length||m,o=i.length?[`${i.length} 份未引用来源缺少有效意见或意见冲突`]:[];return{complete:n,missingSourceIds:i,reasons:o,identity:(0,e.Fu)({snapshot:j,missingSourceIds:i,cursor:l?.offset??null,opinions:g.opinions.map(a=>[a.filePath,a.verdict,a.reviewInvocationId??"",a.reviewedUnitRefs??[]])})}}},78863:(a,b,c)=>{function d(a,b,c){let d=new Set([...b.coverageItemIds,...b.referencedCoverageItemIds??[]]),f=a.coverageItems.filter(a=>d.has(a.id)),g=new Set(f.map(a=>e(a.text))),h=new Set(a.coverageItems.map(a=>e(a.text))),i=a.requirements.filter(a=>g.has(e(a.text))),j=a.requirements.filter(a=>!h.has(e(a.text))),k=f.filter(a=>b.coverageItemIds.includes(a.id)).map(a=>a.text),l=b.requiredOutputId?a.requiredOutputs.filter(a=>a.outputId===b.requiredOutputId):[],m=[...d].filter(b=>!a.coverageItems.some(a=>a.id===b)).map(a=>({code:"focus-coverage-unknown",id:a}));b.requiredOutputId&&!l.length&&m.push({code:"focus-output-unknown",id:b.requiredOutputId});let n=new Set([b.title,...f.map(a=>a.text),b.contentContract?.objectOrProcess??"",...b.contentContract?.response??[],...b.contentContract?.data??[],...b.contentContract?.acceptance??[]].flatMap(a=>e(a).match(/[一-龥]{2,6}|[a-z][a-z0-9_-]+/gu)??[])),o=[...i,...j,...l.flatMap(a=>[...a.source?.filePath?[{sourceFile:a.source.filePath,quote:a.source.quote}]:[],...a.originalForm?.sourceRefs??[],...a.originalForm?.fields.flatMap(a=>a.basisRefs)??[]])],p=a.evidence.filter(a=>{if(o.some(b=>b.sourceFile===a.sourceFile&&e(b.quote)&&(e(a.quote).includes(e(b.quote))||e(b.quote).includes(e(a.quote)))))return!0;let b=e(`${a.quote}
44
+ 按实际状态处理;需要时先读完整问题记录,不改动已生效成果就不要重复提交同一动作。`},w={kind:"construction-responsibility-profiles-v1",profiles:[...i.values()].map(a=>({id:a.id,role:a.kind,systemHash:(0,e.Fu)(a.system),permissions:[...a.permissions].sort(),...a.purposeSystems?{purposeSystemHashes:Object.fromEntries(Object.entries(a.purposeSystems).map(([a,b])=>[a,(0,e.Fu)(b)]))}:{},evidenceHash:a.evidence?(0,e.Fu)((0,g.d)(a.evidence,b.project).binding):null,extraTools:a.extraTools.map(a=>({name:a.name,description:a.description,parameters:JSON.parse(JSON.stringify(a.parameters)),terminal:!!a.terminal,housekeeping:!!a.housekeeping})).sort((a,b)=>a.name.localeCompare(b.name))})).sort((a,b)=>a.id.localeCompare(b.id))};return{binding:w,responsibility:{has(a){let d=c.actor(a);return!!(d?.definition.supervisorActorId===b.authority.actorId&&d.definition.assignmentBinding)},get:a=>{let d=c.actor(a);if(!d||d.definition.supervisorActorId!==b.authority.actorId)return;let g=d.definition.assignmentBinding;if(g)try{let a=t(g),b=(0,f.j)(a.value);if(a.actorId!==d.actorId||(0,e.Fu)(b.definition)!==(0,e.Fu)(d.definition))throw Error("CONSTRUCTION_DELEGATION_SCOPE_MIGRATION_REQUIRED");return a.value}catch(b){if(b instanceof Error&&/^(CONSTRUCTION_DELEGATION_|CONSTRUCTION_RESPONSIBILITY_ASSIGNMENT_INVALID)/u.test(b.message))throw Error("CONSTRUCTION_DELEGATION_SCOPE_MIGRATION_REQUIRED:"+a+":"+b.message,{cause:b});throw b}}},tools(a){if(a.actorId!==b.authority.actorId)throw Error("CONSTRUCTION_COORDINATOR_CHIEF_IDENTITY_MISMATCH");let d=()=>{let b=c.assertActorLease(a);if("document-chief"!==b.definition.role||!b.definition.coordinationBinding||(0,e.Fu)(b.definition.coordinationBinding)!==(0,e.Fu)(w))throw Error("CONSTRUCTION_COORDINATOR_ROLE_OR_CAPABILITY_MIGRATION_REQUIRED")},g=(g,h)=>{d();let i=o(g);if(!i.purpose){let a=function(a){let b=[a.responsibilityKey,a.goal,a.expectedOutcome,a.reason].map(a=>String(a??"")).join(" ");return/查证|核验|来源|证据|取证|source[-_ ]?check/iu.test(b)?"source-check":/计算|排程|工日|资源|峰值|劳动力|机械|材料批次|production[-_ ]?calculation/iu.test(b)?"production-calculation":/方法|工艺|工序|组织|对象|方案|深化|接口|method[-_ ]?decision/iu.test(b)?"method-decision":/写|正文|成文|章节|小节|编制|writing/iu.test(b)?"writing":void 0}(i);if(!a)throw Error("CONSTRUCTION_DELEGATION_PURPOSE_REQUIRED:目标/预期成果无法判断本条职责的实际目的;必须写明 purpose(source-check/method-decision/production-calculation/writing)。独立审查不是可委派的持久职责。");i.purpose=a}if("writing"===i.purpose&&Array.isArray(i.sectionIds)&&1!==i.sectionIds.length)throw Error(`CONSTRUCTION_DELEGATION_WRITING_ONE_SECTION:写作职责只能承接一节(「${String(i.responsibilityKey)}」声明了 ${i.sectionIds.length} 节)。结构计划有多少节就派多少条写作职责,不要合并多节;每节独立获得焦点并按节计费。`);i.responsibilityKey=String(i.responsibilityKey).trim().toLowerCase();let j="responsibility:"+(0,e.Fu)([c.workspaceId,i.responsibilityKey]).slice(0,24),k={profileId:i.profileId,responsibilityKey:i.responsibilityKey,purpose:i.purpose,workPackageIds:i.workPackageIds,sectionIds:i.sectionIds,primary:!0===i.primary,goal:i.goal,expectedOutcome:i.expectedOutcome,reason:String(i.reason??""),profileBinding:w,buildId:b.buildId,sourceSnapshotId:b.project.snapshotId,contractId:b.contract.id},l=c.actorDelegationReceipt(a,j,k,h);if(l)return{data:l};let m=t(i),n=(0,f.j)(m.value),p=c.actor(m.actorId),q=p?.definition.assignmentBinding;if(p&&q&&q.purpose!==i.purpose)throw Error(`CONSTRUCTION_DELEGATION_PURPOSE_MIGRATION_REQUIRED:职责「${i.responsibilityKey}」已按目的「${String(q.purpose)}」建立,改为「${i.purpose}」会改变其工具面与工作集。须以新的 responsibilityKey 另立职责;不要用重复委派静默改写一个持续职责的能力面。`);if(p&&q){let a={...n.definition,assignmentBinding:{...n.definition.assignmentBinding,goal:q.goal,expectedOutcome:q.expectedOutcome}};if((0,e.Fu)(a)===(0,e.Fu)(p.definition)&&(q.goal!==i.goal||q.expectedOutcome!==i.expectedOutcome))throw Error("CONSTRUCTION_DELEGATION_EXISTS_USE_CONCRETE_REVISION:"+m.actorId)}let r=c.delegateActor(a,m.actorId,n.definition,n.focus,{goal:i.goal,reason:String(i.reason??""),expectedOutcome:i.expectedOutcome,basis:m.basis},h,k);return{data:r,progressLedger:{effective:[(0,e.Fu)(["delegation",m.actorId,r])]}}};return[{name:"list_construction_responsibility_options",housekeeping:!0,description:"按游标读取实际合同章节或服务端可装配的职责能力配置。能力配置只是授权工具与知识入口,未核适用条件不等于专业采用或通过。回执 data 字段:view、records(对象数组)、total、nextOffset、professionalAccepted。",parameters:q({view:{...p,enum:["profiles","sections"]},offset:{type:"integer",minimum:0},limit:{type:"integer",minimum:1}},["view"]),invoke:a=>{d();let c=Number(a.offset??0),e=Number(a.limit??24);if(!Number.isSafeInteger(c)||c<0||!Number.isSafeInteger(e)||e<1)throw Error("CONSTRUCTION_COORDINATOR_PAGE_INVALID");let f="sections"===a.view?b.contract.sections.filter(a=>b.authority.sectionIds.includes(a.id)).map(a=>({id:a.id,title:a.title,chapterId:a.chapterId,responsibility:a.responsibility})):[...i.values()].map(a=>({id:a.id,label:a.label,role:a.kind,permissions:a.permissions,purposes:[...m],professionalAccepted:!1}));return{data:{view:a.view,records:f.slice(c,c+e),total:f.length,nextOffset:c+e<f.length?c+e:null,professionalAccepted:!1}}}},{name:"delegate_construction_responsibility",housekeeping:!0,parallelSafe:!0,housekeepingIdentity:(a,b)=>String(b.data.instructionId),description:'按已提交施工工作包与实际合同章节委派完整专业成果。稳定responsibilityKey不随显示名、目录或轮次变化;**responsibilityKey 统一用小写字母**(大写开头会被程序转小写;冒号/下划线/空格仍会拒收)。**profileId 必填**:从 `list_construction_responsibility_options {view:"profiles"}` 回执的 `records[].id` **逐字复制**;不知道有哪些档案时先查这个目录,不要猜名称、不要省略该字段。**purpose 优先写明**:本条职责实际要做的目的(source-check=查证、method-decision=方法与对象组织、production-calculation=生产计算、writing=成文),它决定该职责暴露的工具面与工作集投影;不是阶段顺序,也不能用一条职责同时覆盖写作与生产计算。若省略,程序只在职责目标/预期成果能明确判断动作时按实际动作推断;无法判断会拒收并要求补写。后台展开成员,只建同一持续职责,原子保存职责与首条具体指令。重复委派不重开,修改目标用原角色修订,修改范围或目的须以新的 responsibilityKey 另立职责;不自报专业通过。sectionIds 必须全部被所选工作包覆盖:对照建包回执 data.workPackages[].sectionIds。缺覆盖时由你选择有工程依据的包或提交补充包;工具不会自动扩范围。回执 data 字段(读回执按这些路径,不要猜层级):actorId(职责 id)、instructionId(首条指令 id)、created、sameResponsibility、businessProgress、professionalAccepted。',parameters:q({profileId:{...p,description:'能力档案 id:从 list_construction_responsibility_options {view:"profiles"} 的 records[].id 逐字复制,不猜名称'},responsibilityKey:p,purpose:{...p,enum:[...n],description:"本条职责的实际目的:source-check/method-decision/production-calculation/writing。独立审查不再是可委派的持久职责——作者提交正文时会同步触发独立审查调用。"},workPackageIds:{type:"array",items:p,description:"已提交包 id;其 sectionIds 并集须覆盖本次全部委派小节"},sectionIds:{type:"array",items:p,minItems:1,description:"职责实际承接的小节;逐一核对建包回执的覆盖范围,不能用未声明覆盖的包支撑"},primary:{type:"boolean"},goal:p,expectedOutcome:p,reason:p},["profileId","responsibilityKey","workPackageIds","sectionIds","goal","expectedOutcome","reason"]),normalizeArgs:a=>{let b=o(a),c=[...new Set([...Object.keys(a),...Object.keys(b)])].filter(c=>JSON.stringify(a[c])!==JSON.stringify(b[c])).map(a=>`$.${a}`);return{args:b,paths:c}},invoke:(a,b)=>g(a,b)},{name:"delegate_construction_sections",housekeeping:!0,parallelSafe:!0,housekeepingIdentity:(a,b)=>(b.data.assignments??[]).map(a=>a.instructionId).filter(Boolean).join(":"),description:"批量委派写作职责:一次提交多条**一节**职责(结构计划有 N 节就派 N 条),程序逐条校验并创建;适合 20+ 节整稿。每条给 profileId/responsibilityKey/purpose=writing/workPackageIds/sectionIds(恰好 1 节)/goal/expectedOutcome/reason;程序校验一节一责、工作包覆盖、章节不重复与责任键唯一,返回逐条结果与错误;失败条目按 error 修正后重提,已成功条目不会重开。",parameters:q({assignments:{type:"array",minItems:1,maxItems:64,items:q({profileId:{...p,description:'能力档案 id,从 list_construction_responsibility_options {view:"profiles"} 逐字复制'},responsibilityKey:p,purpose:{...p,enum:[...n],description:"本条职责实际目的;整稿写作批量通常全是 writing"},workPackageIds:{type:"array",items:p,description:"所选已提交工作包;并集须覆盖本条的 sectionIds"},sectionIds:{type:"array",items:p,minItems:1,maxItems:1,description:"写作职责恰好 1 节;结构计划有多少节就派多少条"},primary:{type:"boolean"},goal:p,expectedOutcome:p,reason:p},["profileId","responsibilityKey","workPackageIds","sectionIds","goal","expectedOutcome","reason"])}},["assignments"]),normalizeArgs:a=>{let b=Array.isArray(a.assignments)?a.assignments:[],c=[],d=b.map((a,b)=>{let d=a??{},e=o(d);for(let a of new Set([...Object.keys(d),...Object.keys(e)]))JSON.stringify(d[a])!==JSON.stringify(e[a])&&c.push(`$.assignments[${b}].${a}`);return e});return{args:{...a,assignments:d},paths:c}},invoke:(a,b)=>{d();let c=Array.isArray(a.assignments)?a.assignments:[],e=[],f=[],h=[];for(let[a,d]of c.entries())try{let c=g(d,`${b}:${a}`);e.push({index:a,...c.data}),h.push(...c.progressLedger?.effective??[])}catch(b){f.push({index:a,sectionIds:Array.isArray(d.sectionIds)?d.sectionIds.map(String):[],error:b instanceof Error?b.message:String(b)})}return{data:{requested:c.length,created:e.length,assignments:e,errors:f},...f.length?{feedbackRequired:!0}:{},...h.length?{progressLedger:{effective:[...new Set(h)]}}:{}}}}]}}}},65970:(a,b,c)=>{c.d(b,{$p:()=>R,Li:()=>S,Pw:()=>al});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(59339),i=c(98943),j=c(3737),k=c(45532),l=c(44967),m=c(745);let n=a=>JSON.parse(JSON.stringify(a)),o=a=>Array.isArray(a)&&a.every(a=>"string"==typeof a&&a.trim()),p=(a,b)=>{if("string"!=typeof a||"string"!=typeof b||!/^[1-9]\d*$/u.test(a)||!/^[1-9]\d*$/u.test(b))throw Error("DOMAIN_ALLOCATION_FRACTION_REQUIRED");let c=BigInt(a),d=BigInt(b);if(c>d)throw Error("DOMAIN_ALLOCATION_EXCEEDS_SOURCE");return{n:c,d}};function q(a){let{store:b,project:c,contract:d}=a;if(b.identity.sourceSnapshotId!==c.snapshotId||b.identity.contractId!==d.id||d.projectSnapshotId!==c.snapshotId)throw Error("DOMAIN_BUSINESS_IDENTITY_MISMATCH");let e={actorId:a.authority.actorId,members:new Set(a.authority.memberIndices),sections:new Set(a.authority.sectionIds)},f=(0,k.BI)(c),g=(0,k.rl)(c),h=new Map(f.map(a=>[a.memberId,a]));if(!e.actorId.trim()||[...e.members].some(a=>!Number.isSafeInteger(a)||!f[a])||[...e.sections].some(a=>!d.sections.some(b=>b.id===a)))throw Error("DOMAIN_AUTHORITY_INVALID");let i=a=>{let c=h.get(a),d=b.entity(a);if(!c)throw Error(`DOMAIN_MEMBER_UNKNOWN:冻结清单里没有成员 ${a}`);if(!e.members.has(c.index))throw Error(`DOMAIN_MEMBER_SCOPE_DENIED:成员 ${a} 的全局序号是 ${c.index},不在本次授权范围内;${(()=>{let a=[...e.members].sort((a,b)=>a-b);return`本职责被授权的全局 memberIndices:${a.slice(0,6).join("、")}${a.length>6?`…(共 ${a.length} 条)`:""}`})()}`);if(d?.kind!=="source-member"||d.value?.originalEntryHash!==(0,m.Fu)(n(c.entry)))throw Error("DOMAIN_FROZEN_MEMBER_MISMATCH:冻结身份与工作库中的来源成员不一致")},j=a=>{let b,c=Object.keys(a);if(1!==c.length||!["memberIndices","memberIds","groupIndices","sourceFiles"].includes(c[0])||!Array.isArray(a[c[0]])||!a[c[0]].length||new Set(a[c[0]]).size!==a[c[0]].length)throw Error("DOMAIN_MEMBER_SELECTION_INVALID");if("memberIndices"in a)b=a.memberIndices;else if("memberIds"in a)b=a.memberIds.map(a=>{let b=h.get(a);if(!b)throw Error(`DOMAIN_MEMBER_UNKNOWN:冻结清单里没有成员 ${a}`);return b.index});else if("groupIndices"in a){if(a.groupIndices.some(a=>!g.some(b=>b.groupIndex===a)))throw Error("DOMAIN_SOURCE_GROUP_NOT_FOUND");b=g.filter(b=>a.groupIndices.includes(b.groupIndex)).flatMap(a=>a.memberIndices)}else{if(a.sourceFiles.some(a=>!g.some(b=>b.sourceFile===a)))throw Error("DOMAIN_SOURCE_FILE_NOT_FOUND");b=g.filter(b=>a.sourceFiles.includes(b.sourceFile)).flatMap(a=>a.memberIndices)}let d=[...new Set(b)].sort((a,b)=>a-b),j=d.filter(a=>!Number.isSafeInteger(a)||!e.members.has(a)||!f[a]);if(!d.length||j.length){let b=[...e.members].sort((a,b)=>a-b);throw Error(`DOMAIN_MEMBER_SCOPE_DENIED:本职责被授权的 memberIndices 为 ${b.slice(0,8).join("、")}${b.length>8?`…(共 ${b.length} 条,完整范围见 read_scope 的 members 视图)`:""};本次选中 ${d.length} 条,其中 ${j.length} 条不在授权范围:${j.slice(0,8).join("、")}${j.length>8?"…":""}。${"groupIndices"in a?'groupIndices 会展开整组,可能包含未授权成员;请改用 read_scope {view:"members"} 读出授权成员序号,再用 memberIndices 只选授权成员。':"sourceFiles"in a?'sourceFiles 会展开整份来源文件,可能包含未授权成员;请改用 read_scope {view:"members"} 读出授权成员序号,再用 memberIndices 精确选择。':"请只选择授权范围内的 memberIndices。"}`)}let k=d.map(a=>f[a].memberId);return k.forEach(i),k},q=(a,c=!1)=>{let d=b.entity(a);if(!d||d.deleted||"work-package"!==d.kind||!o(d.value?.memberIds)||!o(d.value?.sectionIds)){let b=a.startsWith("source-group:"),c=d?d.deleted?`工作包「${a}」已删除,不能在其上继续准备`:"work-package"!==d.kind?`id「${a}」的对象类型是 ${d.kind},不是施工工作包`:"工作包缺少真实成员或职责章节,不能作为准备范围":`工作库里没有 id 为「${a}」的施工工作包`;throw Error(`DOMAIN_WORK_PACKAGE_NOT_FOUND:${c}。`+(b?"冻结来源分组的身份是 `source-group:…`(由 query_work_packages 读取),**不是**工作库里的施工工作包——两者不可互传。":"")+"新建工作包时**不要传 workPackageId**(不传即新建);要修订已提交的工作包,用 commit 回执里的实际 entityId;本职责当前的工作包见 read_scope 的 packages 视图。")}if(d.value.memberIds.some(a=>!h.has(a)||!e.members.has(h.get(a).index))||(c?d.value.sectionIds.some(a=>!e.sections.has(a)):!d.value.sectionIds.some(a=>e.sections.has(a))))throw Error("DOMAIN_WORK_PACKAGE_SCOPE_DENIED");return d},r=(a,c)=>{let d=b.readSnapshot(a),f=d.context;if(f.type!==c||f.actorId!==e.actorId)throw Error("DOMAIN_SCOPE_SNAPSHOT_DENIED");if(f.memberIds.some(a=>!h.has(a)||!e.members.has(h.get(a).index)))throw Error("DOMAIN_MEMBER_SCOPE_DENIED");if(f.memberIds.forEach(i),"work-package"===f.type&&f.sectionIds.some(a=>!e.sections.has(a)))throw Error("DOMAIN_SECTION_SCOPE_DENIED");return"source-allocation"===f.type&&q(f.workPackageId),{...d,scope:f}},s=a=>{let c=b.proposal(a);if(!c||c.actorId!==e.actorId)throw Error("DOMAIN_PROPOSAL_ACTOR_DENIED");for(let a of c.changes){let c=a.value??b.entityHistory(a.id).find(b=>b.version===a.expectedVersion)?.value;if(!c)throw Error("DOMAIN_PROPOSAL_SCOPE_INVALID");if("work-package"===a.kind){if(!o(c.memberIds)||!o(c.sectionIds)||c.sectionIds.some(a=>!e.sections.has(a)))throw Error("DOMAIN_SECTION_SCOPE_DENIED");c.memberIds.forEach(i)}else if("source-allocation"===a.kind)i(String(c.memberId)),q(String(c.workPackageId));else throw Error("DOMAIN_BUSINESS_KIND_DENIED")}return c};return{prepareWorkPackage(a,c){let d=j(a.selection),f=[...new Set(a.sectionIds)].sort();if(!f.length||f.length!==a.sectionIds.length||f.some(a=>!e.sections.has(a)))throw Error("DOMAIN_SECTION_SCOPE_DENIED");let g=a.workPackageId??"work-package:"+(0,m.Fu)([b.workspaceId,e.actorId,c]).slice(0,24);a.workPackageId&&q(a.workPackageId,!0);let h={type:"work-package",actorId:e.actorId,workPackageId:g,memberIds:d,sectionIds:f},i=b.captureReadSnapshot({entityIds:[g,...d],groupKeys:["work-package-allocations:"+g],context:n(h)});return{snapshotId:i.id,workPackageId:g,memberCount:d.length,sectionIds:f,currentVersion:i.reads.entities.find(a=>a.id===g).version}},proposeWorkPackage(a,c,d,f){let g=r(a,"work-package"),h=g.scope,i=g.reads.entities.find(a=>a.id===h.workPackageId).version,j=null===i?{}:b.entityHistory(h.workPackageId).find(a=>a.version===i)?.value;if(!j)throw Error("DOMAIN_PACKAGE_BASE_VERSION_NOT_FOUND");return b.propose({actorId:e.actorId,purpose:"work-package-draft",reason:d,reads:g.reads,changes:[{id:h.workPackageId,kind:"work-package",expectedVersion:i,value:{...j,...c,memberIds:h.memberIds,sectionIds:h.sectionIds,planningState:"draft"}}]},f)},prepareAllocations(a,c,d){let f=q(a),g=j(d);if(!c?.trim()||g.some(a=>!f.value.memberIds.includes(a)))throw Error("DOMAIN_ALLOCATION_SCOPE_DENIED");let h=g.map(b=>"source-allocation:"+(0,m.Fu)([a,b,c]).slice(0,24)),i={type:"source-allocation",actorId:e.actorId,workPackageId:a,operation:c,memberIds:g,allocationIds:h};return{snapshotId:b.captureReadSnapshot({entityIds:[a,...g,...h,...(a=>{let c,d=new Set(a),e=[];for(;;){let a=b.entityPageByKind({kind:"source-allocation",...c?{afterId:c}:{},limit:500});for(let b of a.entities)!b.deleted&&b.value&&d.has(String(b.value.memberId??""))&&e.push(b.id);if(!a.nextAfterId)break;c=a.nextAfterId}return e})(g)],groupKeys:g.map(a=>"allocation:"+(0,m.Fu)([a,c])),context:n(i)}).id,workPackageId:a,memberCount:g.length,operation:c}},proposeAllocations(a,c,d,f){p(c.numerator,c.denominator);let g=r(a,"source-allocation"),h=g.scope;return b.propose({actorId:e.actorId,purpose:"source-allocation-draft",reason:d,reads:g.reads,changes:h.memberIds.map((a,b)=>({id:h.allocationIds[b],kind:"source-allocation",expectedVersion:g.reads.entities.find(a=>a.id===h.allocationIds[b]).version,value:{workPackageId:h.workPackageId,memberId:a,operation:h.operation,numerator:c.numerator,denominator:c.denominator,reason:d}}))},f)},withdrawAllocations(a,c,d){let f=r(a,"source-allocation"),g=f.scope;return b.propose({actorId:e.actorId,purpose:"withdraw-source-allocation-draft",reason:c,reads:f.reads,changes:g.allocationIds.map(a=>({id:a,kind:"source-allocation",expectedVersion:f.reads.entities.find(b=>b.id===a).version,value:null}))},d)},evaluate:a=>(s(a),b.evaluate(a,"construction-allocation-draft-v1",a=>{let b=[],d=[],e=new Map(a.candidateEntities.map(a=>[a.id,a])),f=new Map;for(let b of a.groupMembers)for(let a of b.members)(b.key.startsWith("allocation:")||b.key.startsWith("work-package-allocations:"))&&f.set(a.id,a.value);for(let b of a.candidateEntities)"source-allocation"===b.kind&&(b.deleted?f.delete(b.id):f.set(b.id,b.value));for(let d of a.proposal.changes){let a=e.get(d.id);if("work-package"===a.kind)!(!a.value||!o(a.value.memberIds)||!o(a.value.sectionIds)||!a.value.memberIds.length||!a.value.sectionIds.length||["title","objectScope","workfront"].some(b=>"string"!=typeof a.value[b]||!String(a.value[b]).trim()))?[...f.values()].some(b=>b.workPackageId===a.id&&!a.value.memberIds.includes(String(b.memberId)))&&b.push({code:"WORK_PACKAGE_ALLOCATION_SCOPE",entityId:a.id,reason:"不能移除仍有工序分配的成员,须先修订实际分配"}):b.push({code:"WORK_PACKAGE_FIELDS",entityId:a.id,reason:"工作包须有真实成员、职责、对象和工作面"});else if("source-allocation"===a.kind){if(a.value){let d=h.get(String(a.value.memberId));d&&"eligible"===(0,l.L2)(c,d.entry).sourceVersionFieldEligibility.quantity.status||b.push({code:"SOURCE_QUANTITY_NOT_ELIGIBLE",entityId:a.id,reason:"该成员没有当前数量采用资格"})}}else b.push({code:"BUSINESS_KIND_NOT_SUPPORTED",entityId:a.id,reason:"本入口只处理施工职责工作包与原量分配草案"})}let g=new Set(a.proposal.changes.filter(a=>"source-allocation"===a.kind).map(b=>{let c=b.value??a.entities.find(a=>a.id===b.id).value;return JSON.stringify([c.memberId,c.operation])}));for(let a of g){let[c,e]=JSON.parse(a),g=0n,h=1n;for(let a of f.values())if(a.memberId===c&&a.operation===e){let{n:b,d:c}=p(a.numerator,a.denominator),d=(a,b)=>b?d(b,a%b):a,e=d(g=g*c+b*h,h*=c);g/=e,h/=e}g>h&&b.push({code:"SOURCE_ALLOCATION_EXCEEDS_ORIGINAL",entityId:c,reason:"同一原成员同工序的分配超过原量,候选不生效"}),d.push({memberId:c,operation:e,numerator:g.toString(),denominator:h.toString(),complete:g===h})}for(let a of new Set([...g].map(a=>JSON.parse(a)[0]))){let c=0n,d=1n;for(let b of f.values())if(b.memberId===a){let{n:a,d:e}=p(b.numerator,b.denominator),f=(a,b)=>b?f(b,a%b):a,g=f(c=c*e+a*d,d*=e);c/=g,d/=g}c>d&&b.push({code:"SOURCE_ALLOCATION_EXCEEDS_ORIGINAL",entityId:a,reason:"同一原成员跨工序的分配合计超过原量;按工序拆分份额,合计不得超过 1,不能每个工序都按 100%"})}return{dataValidity:b.length?"invalid":"valid",relatedConstraints:b.length?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:b,result:{validationScope:"work-package-and-allocation-draft",productionQualified:!1,professionalAccepted:!1,allocationBalances:d}}})),commit:(a,c)=>(s(a),b.commit(a,c))}}var r=c(55650);let s=a=>JSON.parse(JSON.stringify(a)),t=a=>"string"==typeof a&&!!a.trim();var u=c(86265),v=c(4053);let w=a=>JSON.parse(JSON.stringify(a)),x=a=>"string"==typeof a&&!!a.trim(),y=a=>!!(a&&"object"==typeof a&&!Array.isArray(a));var z=c(61505),A=c(54050),B=c(34389);let C=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),D=/\{\{(?:table|figure):[^}]+\}\}|见\s*[表图]\s*[\d一二三四五六七八九十百]+(?:[-—–][\d]+)?/u,E=/<[a-z][^>]*>/iu,F=a=>(a.match(/[、,,]/gu)??[]).length+1,G=/^\s*(?:\d+[.、))]|[((]?\d+[))]?|[①-⑳]|[-·•●▪◦])\s*\S/u,H=a=>{let b=a.split("\n").map(a=>a.trim()).filter(Boolean);return b.length>=2&&b.every(a=>G.test(a))},I=(a,b,c,d={})=>({severity:a,rule:b,message:c,hint:c,...d});function J(a){let b=[],c=[],d=Math.max(1,Number(a.policy?.sentenceDuplicateMinLength??B.sentenceDuplicateMinLength)),e=Math.max(2,Number(a.policy?.enumerationItemThreshold??B.enumerationItemThreshold)),f=Math.max(1,Number(a.policy?.paragraphMinChars??B.paragraphMinChars)),g=Math.max(1,Number(a.policy?.tableMinDataRows??B.tableMinDataRows)),h=new Set(a.submitted.map(a=>a.id)),i=[...a.documentUnits.filter(a=>!h.has(a.id)),...a.submitted].flatMap(a=>((a,b)=>{let c=[],d=!!a.coverageItemIds?.length;for(let e of(a=>{let b=[];if("paragraph"===a.kind&&"string"==typeof a.text&&b.push(a.text),"table"===a.kind)for(let c of a.rows??[])for(let a of Object.values(c.cells??{}))"string"==typeof a&&a.trim()&&b.push(a);return b})(a))for(let f of e.split(/[。;;!?!?\n]/u)){let e=C(f);e.length<b||c.push({unitId:a.id,raw:f.trim(),normalized:e,isPrimaryCarrier:d,hasCitation:D.test(f)})}return c})(a,d)),j=new Map;for(let a of i)j.set(a.normalized,[...j.get(a.normalized)??[],a]);for(let[a,c]of j){if(c.length<2)continue;let d=c.find(a=>h.has(a.unitId));if(!d||c.some(a=>a.isPrimaryCarrier&&a.unitId!==d.unitId)&&d.hasCitation)continue;let e=c.filter(a=>a.unitId!==d.unitId);if(!e.length){b.push(I("blocking","sentence-duplicate-within-unit",`单元「${d.unitId}」内部同一句重复 ${c.length} 次:「${d.raw.slice(0,40)}${d.raw.length>40?"…":""}」。同一句在一个单元内只出现一次,删除或改写重复句,不要原样重复提交。`,{unitId:d.unitId,observed:d.raw}));continue}b.push(I("blocking","sentence-duplicate",`单元「${d.unitId}」的句子「${d.raw.slice(0,40)}${d.raw.length>40?"…":""}」与「${e.map(a=>a.unitId).join("、")}」逐字重复(归一后 ${a.length} 字):同一句只由一个主载体陈述,其余位置用 \`{{table:<表单元id>}}\`/\`{{figure:<图单元id>}}\` 或真实表号/图号引用,不要复述`,{unitId:d.unitId,observed:d.raw,expected:e[0].unitId}))}for(let b of a.submitted)if("paragraph"===b.kind||"table"===b.kind)for(let a of"paragraph"===b.kind&&"string"==typeof b.text?[b.text]:(b.rows??[]).flatMap(a=>Object.values(a.cells??{}).filter(a=>"string"==typeof a&&!!a.trim())))for(let d of a.split(/[。;;!?!?\n]/u)){if(!d.trim())continue;let a=F(d);if(a<e)continue;let f=d.trim().slice(0,60);"paragraph"===b.kind?c.push(I("advisory","enumeration-in-prose",`单元「${b.id}」把 ${a} 个并列项挤在一句:「${f}…」。并列清单用编号/项目符号行表达,或改由表格承载;清单已在别的单元承载时只写表号/图号引用,不复述`,{unitId:b.id})):c.push(I("advisory","enumeration-in-cell",`表格单元「${b.id}」的单元格把 ${a} 个并列项挤在一个值里:「${f}…」。单元格只写值/条件/判据/岗位,长清单用单独的表或列表单元承载`,{unitId:b.id}))}for(let b of a.submitted){if("table"!==b.kind||b.outputId)continue;let a=(b.rows??[]).length;a>=g||c.push(I("advisory","table-too-thin",`表格单元「${b.id}」有 ${a} 行数据:请独立审查其对照关系与覆盖是否完整;有效对照可保留,不为达到行数补造数据`,{unitId:b.id}))}for(let b of a.submitted){if("paragraph"!==b.kind||"string"!=typeof b.text)continue;let a=b.text.trim();!(!a||a.length>=f||D.test(a)||H(a))&&(E.test(a)||c.push(I("advisory","paragraph-too-thin",`段落单元「${b.id}」有 ${a.length} 字:请独立审查对象、条件、措施与验收是否充分;内容完整可保留,不为达到字数重复扩写`,{unitId:b.id})))}return{blocking:b,advisory:c}}var K=c(16669),L=c(31232),M=c(61485),N=c(25164),O=c(60806),P=c(68515);let Q=new Map,R=["work-package","source-allocation","production-operation","shared-definition","writing-unit","project-feature"],S={"work-package":"work-package","source-allocation":"source-allocation","production-operation":"production","shared-definition":"shared-definition","writing-unit":"writing","project-feature":"professional-decision"},T={"work-package":["work-package"],"source-allocation":["source-allocation"],"production-operation":["construction-operation"],"shared-definition":["resource-pool","work-calendar"],"writing-unit":["writing-unit"],"project-feature":["project-feature"]},U={type:"string",minLength:1},V={type:"integer",minimum:0},W={type:"integer",minimum:1},X=a=>({type:"array",items:a}),Y=(a,b=Object.keys(a))=>({type:"object",properties:a,required:b,additionalProperties:!1}),Z=Y({memberIndices:X({...V,description:"全局 memberIndices(见 read_scope 的 members 视图)"}),memberIds:X({...U,description:"冻结清单成员 id(query_work_packages/read_scope 的成员 id);程序解析为 memberIndices"}),groupIndices:X({...V,description:"来源分组序号(见 read_scope 的 members 视图 sourceGroup 字段)"}),sourceFiles:X({...U,description:"来源文件在资料范围内的相对路径"}),sourceGroupIds:X({...U,description:"冻结来源分组身份(query_work_packages 返回的 source-group:…);程序解析为 memberIndices"})},[]),$=Y({ratePerCrewShift:Y({value:U,unit:U,basis:U}),plannedCrews:W,productiveCrews:W,parallelismBasis:U,hoursPerShift:{type:"number",minimum:0,maximum:24}}),_=X(Y({resourcePoolId:U,demand:W,mode:{...U,enum:["work","retained"]},holdAfterTicks:V,basis:U},["resourcePoolId","demand","mode","basis"])),aa=X(Y({operationId:U,from:{...U,enum:["start","finish"]},lag:{type:"integer"},basis:U})),ab={title:U,method:U,workfront:U,execution:{...U,enum:["sequential"]},continuityBasis:U,production:$,requirements:_,predecessors:aa,rounding:Y({quantumTicks:W,basis:U}),release:V,latestFinish:V},ac={type:"number",minimum:0,maximum:1},ad=Y({coordinateSystem:{...U,enum:["relative-schematic"]},placements:X(Y({nodeId:U,x:ac,y:ac,width:ac,height:ac})),routes:X(Y({edgeIndex:V,points:X(Y({x:ac,y:ac}))}))}),ae={"work-package":{type:"object",additionalProperties:!1,properties:{selection:Z,sectionIds:{...X(U),description:"本包实际支撑的全部合同小节。后续委派的 sectionIds 必须包含在所选包的 sectionIds 并集中;先确定职责节组,再声明覆盖,不只列代表小节。"},workPackageId:{...U,description:"**只用于修订已提交的工作包**;新建时不要传"},title:U,objectScope:U,workfront:U},required:["selection","sectionIds","title","objectScope","workfront"]},"source-allocation":{type:"object",additionalProperties:!1,properties:{workPackageId:U,operation:U,selection:Z,numerator:U,denominator:U},required:["workPackageId","operation","selection","numerator","denominator"]},"production-operation":{type:"object",additionalProperties:!1,properties:{workPackageId:U,operation:U,selection:Z,calendarId:U,resourcePoolIds:X(U),predecessorIds:X(U),operationId:{...U,description:"修订既有作业时填实际实体 id;新建时不要传"},draft:Y(ab,Object.keys(ab).filter(a=>!["release","latestFinish"].includes(a))),intent:Y(ab,[])},required:["workPackageId","operation","selection","calendarId","resourcePoolIds","predecessorIds"]},"shared-definition":{type:"object",additionalProperties:!1,properties:{kind:{...U,enum:["resource-pool","work-calendar"]},id:U,definition:Y({title:U,unit:{...U,description:"resource-pool 必填:计量单位(人/台/套等);work-calendar 不填"},capacityBasis:{...U,description:"resource-pool 必填:容量依据,按实际资源能力声明,不能从需求峰值反推"},basis:{...U,description:"必填:该日历/资源池的工程来源与依据"},availability:X(Y({start:V,end:W,capacity:V})),windows:X(Y({start:V,end:W}))},["title","basis"])},required:["kind","id","definition"]},"writing-unit":{type:"object",additionalProperties:!1,properties:{purpose:U,sectionIds:X(U),revision:Y({reason:U,retire:X(Y({unitId:U,version:{type:"integer",minimum:1}},["unitId","version"])),replacements:X(Y({fromUnitId:U,toUnitIds:X(U)},["fromUnitId","toUnitIds"])),redirects:X(Y({fromUnitId:U,toUnitId:U},["fromUnitId","toUnitId"]))},["retire","replacements","redirects"]),units:X(Y({id:U,kind:{...U,enum:["paragraph","table","figure"]},subsectionId:{...U,description:"冻结的节计划小节 id(plan_section 返回的 subsections[].subsectionId);新流程必填,旧归档可缺省"},planHash:{...U,description:"plan_section 返回的全局计划 hash;单元写作时必须与冻结计划一致"},sectionPlanHash:{...U,description:"plan_section 返回的 sectionPlanHash;单元写作时必须与冻结节计划一致"},blockId:{...U,description:"当前小节的写作块 id(sectionPlan.subsections[].writingOutline[].blockId):一次提交本小节全部写作块,每个块各一个单元、各带自己的 blockId,一主题一块"},contentContractHash:{...U,description:"当前小节contentContract.hash;与当前内容安排使用同一身份"},claims:X(Y({id:U,subject:U,attribute:U,value:U,unit:U,condition:U,support:{...U,enum:["literal","requires-review"]},nature:{...U,enum:["project-fact","proposed-decision","calculation","technical-basis"]},source:Y({evidenceId:U,entityId:U,entityVersion:{type:"integer",minimum:1},certificateId:U,sourceHash:U,quote:U},[]),location:Y({quote:U,rowId:U,columnKey:U},[]),verification:{...U,enum:["unverified"]}},["id","subject","attribute","value","condition","nature","source","location"])),implementations:X(Y({obligationId:U,role:{...U,enum:["method","data","acceptance","reference"]},claimId:U,location:Y({quote:U,rowId:U,columnKey:U},[])},["obligationId","role","location"])),heading:{...U,description:"只写标题文字,不含 1.1/3.4/一、等章节编号;新流程必须与计划小节标题逐字一致"},title:{...U,description:"heading 的同义字段;同样只写标题文字,不含章节编号"},criterionIds:X(U),coverageItemIds:{...X(U),description:"本单元作为**主载体**承接的契约项 id(sectionBriefs[].coverageItems[].id):同一契约项在本节只能由一个主载体认领;实质性单元必须至少认领或引用一项"},referencedCoverageItemIds:{...X(U),description:"本单元只是引用、主载体在别处(如表/图)的契约项 id;引用单元只写判断/接口并用真实表号/图号引用,不复述主载体内容"},decisionReason:{...U,description:"作者自选表(没有 outputId)必须说明为什么必须用表、承载哪组唯一内容;纯摘要表会被拒收"},standardCitations:X(Y({name:U,code:U,version:U,scope:U,verification:{...U,enum:["verified","unverified"]}},["name","code","version","scope","verification"])),outputId:{...U,description:"对应 tenderResponse.requiredOutputs[].id:本表/图承接哪个点名输出;一张载体只填一个"},text:U,caption:U,notes:X(U),formFieldBindings:X(Y({fieldId:U,columnKey:U},["fieldId","columnKey"])),tableRowGroups:X(Y({id:U,label:U},["id","label"])),columns:X(Y({key:U,title:U,unit:U,headerPath:X(U)},["key","title"])),rows:X(Y({id:U,cells:{type:"object",additionalProperties:!0,description:"键为同单元 `columns[].key` 声明的列名;不得留空或占位"},groupId:U},["id"])),nodes:X(Y({id:U,label:U,group:{...U,description:"非计算图:节点所属阶段/分组,用于泳道列(部署图如 准备/主体/安装/收尾;危大管控图用 识别/对策/责任/验证)"},lane:{...U,description:"非计算图:节点所属区段/工作面,用于行对齐"}},["id","label"])),edges:X(Y({from:U,to:U,label:U},["from","to"])),graphLayout:{...U,enum:["grid","tree"],description:"仅非计算图:tree=按父子边排层级(组织机构/汇报关系);grid=一般关系图"},figureSemantics:{...U,enum:["org","deployment","risk-control","process","generic"],description:"仅非计算图:图例语义;org=组织层级,deployment=区段/阶段/顺序/移交,risk-control=识别→对策→责任→验证,process=工序流转"},planChart:Y({view:{...U,enum:["schedule","network"],description:"由执行基准直接渲染的日历轴计划图:总进度横道图/里程碑网络图;不填证书,日期/里程碑取自唯一执行基准"}}),layout:{...ad,description:"仅图件:明确拟定的相对示意区域与逐关系线路,图题须标示意;不补造现场尺寸或北向"},references:X(Y({kind:U,type:U,evidenceId:U,quote:U,entityId:U,entityVersion:V,certificateId:U,ref:U,refId:U,id:U,sourceId:U,note:U},[])),assertions:X(Y({subject:U,purpose:U,condition:U,reference:Y({kind:U,type:U,evidenceId:U,quote:U,entityId:U,entityVersion:V,certificateId:U,ref:U,refId:U,id:U,sourceId:U,note:U},[])},["subject","purpose","reference"]))},["id","kind"]))},required:["purpose","sectionIds","units"]},"project-feature":{type:"object",additionalProperties:!1,properties:{workPackageId:U,key:U,value:U,dimension:U,evidence:{type:"array",minItems:1,items:Y({observationIndex:V,sourceEvidenceId:U,quote:U,sourceSelection:{...U,enum:["full-excerpt"]}},["observationIndex","sourceEvidenceId"])}},required:["workPackageId","key","value","dimension","evidence"]}};function af(a){let b=[];if(!Array.isArray(a.units))return{payload:a,paths:b};let c=a.units.map((a,c)=>{let d={...a??{}};for(let a of["requiredOutputId","outputID","output_id"])void 0!==d[a]&&((void 0===d.outputId||""===String(d.outputId).trim())&&String(d[a]??"").trim()&&(d.outputId=d[a]),delete d[a],b.push(`$.units[${c}].${a}`));if(Array.isArray(d.claims)&&(d.claims=d.claims.map((a,d)=>{let e={...a??{}};for(let a of("string"!=typeof e.unit||e.unit.trim()||(delete e.unit,b.push(`$.units[${c}].claims[${d}].unit`)),["location","source"]))(void 0===e[a]||null===e[a])&&(e[a]={},b.push(`$.units[${c}].claims[${d}].${a}`));if(e.source&&"object"==typeof e.source&&!Array.isArray(e.source)){let a={...e.source},f=new Set(["evidenceId","entityId","entityVersion","certificateId","sourceHash","quote"]);for(let e of Object.keys(a))f.has(e)||(delete a[e],b.push(`$.units[${c}].claims[${d}].source.${e}`));e.source=a}return e})),Array.isArray(d.rows)){let a=Array.isArray(d.columns)?d.columns.flatMap(a=>{let b=a??{};return"string"==typeof b.key&&b.key?[b.key]:[]}):[];d.rows=d.rows.map((d,e)=>{if(!d||"object"!=typeof d||Array.isArray(d))return d;let f={...d};for(let d of Object.keys(f))if("id"!==d&&"cells"!==d&&"groupId"!==d){if(a.includes(d)){let a=f.cells&&"object"==typeof f.cells&&!Array.isArray(f.cells)?{...f.cells}:{};void 0===a[d]&&(a[d]=f[d]),f.cells=a}delete f[d],b.push(`$.units[${c}].rows[${e}].${d}`)}return"string"==typeof f.id&&f.id.trim()||(f.id=`row-${e+1}`),f})}return d});return{payload:{...a,units:c},paths:b}}let ag=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},ah={evidence:"evidence",source:"evidence","source-excerpt":"evidence",excerpt:"evidence",quote:"evidence",citation:"evidence",reference:"evidence","frozen-source":"evidence","frozen-evidence":"evidence",frozen:"evidence",decision:"decision","work-package":"decision",workpackage:"decision","submitted-decision":"decision",certificate:"certificate",calculation:"certificate",calc:"certificate","calculation-certificate":"certificate"},ai={paragraph:"paragraph",text:"paragraph",prose:"paragraph",table:"table",grid:"table",figure:"figure",diagram:"figure",chart:"figure",image:"figure"},aj=(a,b)=>{let c={...ag(a)};void 0===c.kind&&"string"==typeof c.type&&(c.kind=c.type);let d=String(c.kind??"").trim().toLowerCase().replace(/[\s_]+/gu,"-"),e=ah[d]??function(a,b=""){let c=a=>"string"==typeof a&&!!a.trim();if(/certificate|calc/u.test(b))return"certificate";if(/work[-_ ]?package|decision/u.test(b))return"decision";if(/source|evidence|excerpt|quote|citation|frozen/u.test(b))return"evidence";if(c(a.certificateId))return"certificate";if(c(a.entityId)||c(a.workPackageId))return"decision";if(c(a.evidenceId)||c(a.quote)||c(a.sourceId))return"evidence";if(c(a.id)){if(/^(?:work-package|decision):/u.test(a.id))return"decision";if(/^(?:certificate|calc):/u.test(a.id))return"certificate";if(/^(?:source-excerpt|evidence|fact):/u.test(a.id))return"evidence"}if(c(a.ref)||c(a.refId)||c(a.id))return"evidence"}(c,d);if(!e)throw Error(`WRITING_REFERENCE_KIND_INVALID:引用类型「${String(c.kind??"(空)")}」不合法;合法类型:evidence(冻结原字/来源摘录)、decision(已提交决定/工作包)、certificate(计算证书)。也可只给 evidenceId/entityId/certificateId(或 source-excerpt:/work-package:/certificate: 开头的 id),程序会反推类型。`);c.kind=e;let f=[c.evidenceId,c.entityId,c.certificateId,c.ref,c.refId,c.id,c.sourceId].find(a=>"string"==typeof a&&a.trim());if("evidence"===e&&"string"!=typeof c.evidenceId&&f&&(c.evidenceId=f),"decision"===e&&"string"!=typeof c.entityId&&f&&(c.entityId=f),"certificate"===e&&"string"!=typeof c.certificateId&&f&&(c.certificateId=f),"decision"===e&&void 0===c.entityVersion&&"string"==typeof c.entityId&&b){let a=b.entity(c.entityId)?.version;void 0!==a&&(c.entityVersion=a)}for(let a of["ref","refId","id","type","note","sourceId"])delete c[a];let g=["kind","evidenceId","quote","entityId","entityVersion","certificateId"];for(let a of Object.keys(c))g.includes(a)||delete c[a];let h="evidence"===e?"evidenceId":"decision"===e?"entityId":"certificateId";if("string"!=typeof c[h]||!String(c[h]).trim())throw Error(`WRITING_REFERENCE_IDENTITY_REQUIRED:${e} 引用必须给 ${h}(可写 id/refId/ref,程序会映射;当前引用字段:${Object.keys(ag(a)).join("、")||"空"})。`);return void 0!==c.entityVersion&&"string"==typeof c.entityVersion&&/^\d+$/u.test(c.entityVersion)&&(c.entityVersion=Number(c.entityVersion)),c},ak=(a,b,c,d)=>{if("writing-unit"!==a){let c={...b},e=ag(c.selection);if(d&&Array.isArray(e.memberIds)&&!("memberIndices"in e)&&!("groupIndices"in e)&&!("sourceFiles"in e)&&!("sourceGroupIds"in e)){let a=[...new Set(e.memberIds.map(String).map(a=>a.trim()).filter(Boolean))],b=new Map((0,k.BI)(d).map(a=>[a.memberId,a.index])),f=a.filter(a=>!b.has(a));if(f.length)throw Error(`DOMAIN_MEMBER_UNKNOWN:冻结清单里没有成员 ${f.slice(0,8).join("、")}`);let g=[...new Set(a.map(a=>b.get(a)))].sort((a,b)=>a-b);g.length&&(c.selection={memberIndices:g})}if(d&&Array.isArray(e.sourceGroupIds)&&!("memberIndices"in e)&&!("groupIndices"in e)&&!("sourceFiles"in e)){let a=[...new Set(e.sourceGroupIds.map(String).map(a=>a.trim()).filter(Boolean))];if(a.length){let b=[...new Set((0,z.HV)(d,{query:"*",sourceGroupIds:a,limit:1e5}).items.map(a=>a.memberIndex))].sort((a,b)=>a-b);if(!b.length)throw Error(`DOMAIN_SOURCE_GROUP_NOT_FOUND:${a.join("、")} 不在冻结清单来源分组中`);c.selection={memberIndices:b}}}if("source-allocation"===a&&("number"==typeof c.numerator&&(c.numerator=String(c.numerator)),"number"==typeof c.denominator&&(c.denominator=String(c.denominator))),"production-operation"===a){void 0===c.predecessorIds&&(c.predecessorIds=[]),void 0===c.resourcePoolIds&&(c.resourcePoolIds=[]);let a=ag(c.draft),b=ag(a.production),d=ag(b.ratePerCrewShift);"number"==typeof d.value&&(d.value=String(d.value)),Object.keys(d).length&&(b.ratePerCrewShift=d),Object.keys(b).length&&(a.production=b),Object.keys(a).length&&(c.draft=a)}return c}if("writing-unit"!==a)return b;let e={...b};return("string"==typeof e.sectionIds&&(e.sectionIds=[e.sectionIds]),void 0===e.units||Array.isArray(e.units)||(e.units=[e.units]),Array.isArray(e.units))?{...e,units:e.units.map(a=>{let b={...ag(a)};delete b.carrierRevisionReason,void 0===b.id&&"string"==typeof b.unitId&&(b.id=b.unitId),void 0===b.kind&&"string"==typeof b.type&&(b.kind=b.type),void 0===b.heading&&"string"==typeof b.title&&(b.heading=b.title);let d=ai[String(b.kind??"").trim().toLowerCase()];if(!d)throw Error(`WRITING_UNIT_KIND_REQUIRED:单元「${String(b.id??"(无 id)")}」缺少合法 kind;合法值:paragraph/table/figure。`);if(b.kind=d,"string"!=typeof b.id||!b.id.trim())throw Error("WRITING_UNIT_ID_REQUIRED:每个正文单元必须有 id(可写 unitId,程序会映射)。");if("string"==typeof b.criterionIds&&(b.criterionIds=[b.criterionIds]),void 0===b.criterionIds&&(b.criterionIds=[]),"string"==typeof b.coverageItemIds&&(b.coverageItemIds=[b.coverageItemIds]),Array.isArray(b.coverageItemIds)&&(b.coverageItemIds=[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]),"string"==typeof b.referencedCoverageItemIds&&(b.referencedCoverageItemIds=[b.referencedCoverageItemIds]),Array.isArray(b.referencedCoverageItemIds)&&(b.referencedCoverageItemIds=[...new Set(b.referencedCoverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]),void 0===b.standardCitations||Array.isArray(b.standardCitations)||(b.standardCitations=[b.standardCitations]),void 0===b.references||Array.isArray(b.references)||(b.references=[b.references]),void 0===b.references&&(b.references=[]),void 0===b.assertions||Array.isArray(b.assertions)||(b.assertions=[b.assertions]),void 0===b.assertions&&(b.assertions=[]),b.references=b.references.map(a=>aj(a,c)),b.assertions=b.assertions.map(a=>{let b={...ag(a)};return void 0!==b.reference&&(b.reference=aj(b.reference,c)),b}),Array.isArray(b.columns)&&(b.columns=b.columns.map((a,b)=>{if("string"==typeof a&&a.trim())return{key:`col-${b+1}`,title:a};let c={...ag(a)};return void 0===c.title&&"string"==typeof c.label&&(c.title=c.label),delete c.label,"string"==typeof c.key&&c.key.trim()||(c.key=`col-${b+1}`),"string"==typeof c.title&&c.title.trim()||(c.title=String(c.key)),c})),Array.isArray(b.rows)){let a=Array.isArray(b.columns)?b.columns.map(a=>String(a.key??"")).filter(Boolean):[];b.rows=b.rows.map((b,c)=>{if(Array.isArray(b)){let d={};return b.forEach((b,c)=>{let e=a[c];e&&(d[e]=b)}),{id:`row-${c+1}`,cells:d}}let d={...ag(b)};if(void 0===d.cells||null===d.cells||"object"!=typeof d.cells||Array.isArray(d.cells)){let b={};for(let c of a)void 0!==d[c]&&(b[c]=d[c]);d.cells=b}for(let a of("string"==typeof d.id&&d.id.trim()||(d.id=`row-${c+1}`),Object.keys(d)))"id"!==a&&"cells"!==a&&"groupId"!==a&&delete d[a];return d})}for(let a of["unitId","type","title"])delete b[a];return b})}:e};function al(a){let b=q(a),c=function(a){let{store:b}=a,c={...a.authority,memberIndices:[...a.authority.memberIndices],sectionIds:[...a.authority.sectionIds]},d=new Map((0,k.BI)(a.project).map(a=>[a.memberId,a.index])),e=q(a),f=a=>{let e=b.entity(a);if(e?.kind!=="work-package"||e.deleted||!Array.isArray(e.value?.memberIds)||!Array.isArray(e.value?.sectionIds)||!e.value.sectionIds.some(a=>c.sectionIds.includes(a)))throw Error("PRODUCTION_PACKAGE_SCOPE_DENIED");for(let a of e.value.memberIds){let e=b.entity(a),f=d.get(a);if(!e||void 0===f||!c.memberIndices.includes(f))throw Error("PRODUCTION_MEMBER_SCOPE_DENIED")}return e},g=a=>{let d=b.readSnapshot(a),e=d.context;if("production-operation"!==e.type||e.actorId!==c.actorId)throw Error("PRODUCTION_SCOPE_DENIED");return f(e.workPackageId),{snapshot:d,scope:e}},h=a=>{let d=b.proposal(a);if(!d||d.actorId!==c.actorId)throw Error("PRODUCTION_PROPOSAL_ACTOR_DENIED");for(let a of d.changes)if("construction-operation"===a.kind&&a.value)f(String(a.value.workPackageId));else if(!c.canManageSharedResources||!["resource-pool","work-calendar"].includes(a.kind))throw Error("PRODUCTION_SHARED_DEFINITION_DENIED");return d};return{prepareDefinition(a,d){if(!c.canManageSharedResources||!t(d)||!["resource-pool","work-calendar"].includes(a))throw Error("PRODUCTION_SHARED_DEFINITION_DENIED");let e=b.entity(d);if(e&&e.kind!==a)throw Error("PRODUCTION_DEFINITION_ID_CONFLICT");return b.captureReadSnapshot({entityIds:[d],groupKeys:"resource-pool"===a?["resource:"+d]:[],context:s({type:"production-definition",actorId:c.actorId,id:d,kind:a})})},proposeDefinition(d,e,f,g){let h=b.readSnapshot(d),i=h.context;if(!c.canManageSharedResources||"production-definition"!==i.type||i.actorId!==c.actorId)throw Error("PRODUCTION_SHARED_DEFINITION_DENIED");return b.propose({actorId:c.actorId,purpose:"declare-"+i.kind,reason:f,reads:h.reads,changes:[{id:i.id,kind:i.kind,expectedVersion:h.reads.entities.find(a=>a.id===i.id).version,value:{...e,timelineId:a.clock.timelineId,timeUnit:s(a.clock.timeUnit)}}]},g)},evaluateDefinition(a){if(h(a).changes.some(a=>!["resource-pool","work-calendar"].includes(a.kind)))throw Error("PRODUCTION_DEFINITION_EVALUATOR_SCOPE");return b.evaluate(a,"construction-resource-definition-v1",a=>{let b=[];for(let c of a.proposal.changes){let a=c.value,d=a["work-calendar"===c.kind?"windows":"availability"];if(!a||!t(a.title)||!t(a["work-calendar"===c.kind?"basis":"capacityBasis"])||"resource-pool"===c.kind&&!t(a.unit)||!Array.isArray(d)||!d.length){b.push({code:"RESOURCE_DEFINITION_REQUIRED",entityId:c.id,reason:"须由实际决定声明资源身份、可用容量或生产日历及依据,不能从需求峰值反推库存"});continue}let e=0;for(let a of d)(!Number.isSafeInteger(a.start)||0>Number(a.start)||!Number.isSafeInteger(a.end)||Number(a.end)<=Number(a.start)||Number(a.start)<e||"resource-pool"===c.kind&&(!Number.isSafeInteger(a.capacity)||0>Number(a.capacity)))&&b.push({code:"RESOURCE_DEFINITION_WINDOW",entityId:c.id,reason:"实际窗口须有序、不重叠且容量明确非负"}),e=Number(a.end)}return{dataValidity:b.length?"invalid":"valid",relatedConstraints:b.length?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:b,result:{scope:"declared-resource-or-calendar-only",professionalAccepted:!1,globalFeasibilityAccepted:!1}}})},prepareOperation(a,d){if(f(a.workPackageId),new Set(a.resourcePoolIds).size!==a.resourcePoolIds.length||new Set(a.predecessorIds).size!==a.predecessorIds.length)throw Error("PRODUCTION_DUPLICATE_DEPENDENCY");let g=e.prepareAllocations(a.workPackageId,a.operation,a.selection),h=b.readSnapshot(g.snapshotId).context.allocationIds,i=a.operationId??"construction-operation:"+(0,m.Fu)([b.workspaceId,c.actorId,d]).slice(0,24),j=b.entity(i);if(j&&("construction-operation"!==j.kind||j.value?.workPackageId!==a.workPackageId))throw Error("PRODUCTION_OPERATION_IDENTITY_CONFLICT");let k={type:"production-operation",actorId:c.actorId,operationId:i,workPackageId:a.workPackageId,operation:a.operation,allocationIds:h,calendarId:a.calendarId,resourcePoolIds:[...a.resourcePoolIds].sort(),predecessorIds:[...a.predecessorIds].sort()},l={id:i,kind:"construction-operation",version:j?.version??1,deleted:!1,value:s({workPackageId:a.workPackageId,calendarId:a.calendarId,components:h.map(a=>({allocationId:a})),requirements:a.resourcePoolIds.map(a=>({resourcePoolId:a})),predecessors:a.predecessorIds.map(a=>({operationId:a}))})},n=b.captureResolvedReadSnapshot(a=>{let b=(0,r.bL)(a,[i],[l]);return{entityIds:b.entityIds,groupKeys:b.groupKeys,context:s(k)}});return{snapshotId:n.id,operationId:i,memberCount:h.length,relatedEntityCount:n.reads.entities.length,currentVersion:n.reads.entities.find(a=>a.id===i).version}},proposeOperation(a,d,e,f){let{snapshot:h,scope:i}=g(a);if((0,m.Fu)(d.requirements.map(a=>a.resourcePoolId).sort())!==(0,m.Fu)(i.resourcePoolIds)||(0,m.Fu)(d.predecessors.map(a=>a.operationId).sort())!==(0,m.Fu)(i.predecessorIds))throw Error("PRODUCTION_SNAPSHOT_DEPENDENCIES_CHANGED");let{production:j,...k}=d;return b.propose({actorId:c.actorId,purpose:"construction-production-candidate",reason:e,reads:h.reads,changes:[{id:i.operationId,kind:"construction-operation",expectedVersion:h.reads.entities.find(a=>a.id===i.operationId).version,value:s({...k,workPackageId:i.workPackageId,operation:i.operation,calendarId:i.calendarId,components:i.allocationIds.map(a=>({...j,allocationId:a}))})}]},f)},reviseOperation(a,d,e,f){let{snapshot:h,scope:i}=g(a),j=h.reads.entities.find(a=>a.id===i.operationId).version,k=b.entityHistory(i.operationId).find(a=>a.version===j);if(k?.kind!=="construction-operation"||k.deleted||!k.value)throw Error("PRODUCTION_REVISION_BASE_REQUIRED");let l=["title","method","workfront","execution","continuityBasis","requirements","predecessors","rounding","release","latestFinish","production"];if(!Object.keys(d).length||Object.keys(d).some(a=>!l.includes(a)))throw Error("PRODUCTION_REVISION_INTENT_REQUIRED");let{production:n,...o}=d,p=k.value,q=i.allocationIds.map(a=>{let b=p.components.find(b=>b.allocationId===a);if(!b&&!n)throw Error("PRODUCTION_NEW_COMPONENT_CONFIGURATION_REQUIRED");return{...b??{},...n??{},allocationId:a}}),r=s({...k.value,...o,calendarId:i.calendarId,components:q}),t=r.requirements,u=r.predecessors;if((0,m.Fu)(t.map(a=>a.resourcePoolId).sort())!==(0,m.Fu)(i.resourcePoolIds)||(0,m.Fu)(u.map(a=>a.operationId).sort())!==(0,m.Fu)(i.predecessorIds))throw Error("PRODUCTION_SNAPSHOT_DEPENDENCIES_CHANGED");return(0,m.Fu)(r)===(0,m.Fu)(k.value)?b.confirmUnchanged(a,i.operationId,r,f):b.propose({actorId:c.actorId,purpose:"revise-construction-production-candidate",reason:e,reads:h.reads,changes:[{id:i.operationId,kind:"construction-operation",expectedVersion:j,value:r}]},f)},evaluateOperation(b,c){let d=h(b);if(d.changes.some(a=>"construction-operation"!==a.kind))throw Error("PRODUCTION_OPERATION_EVALUATOR_SCOPE");return(0,r.zA)({...a,proposalId:b,rootOperationIds:d.changes.map(a=>a.id),signal:c})},commit:(a,c)=>(h(a),b.commit(a,c))}}(a),d=(0,u.J)({sectionContractReads:a.sectionContractReads,store:a.store,contract:a.contract,authority:a.authority,tenderResponsePlan:a.tenderResponsePlan,evidenceExists:b=>(a.project.sourceControls??[]).some(a=>a.factId===b&&"verified-source-excerpt"===a.roleId),evidenceText:b=>(a.project.sourceControls??[]).find(a=>a.factId===b&&"verified-source-excerpt"===a.roleId)?.value}),f=a.readObservation&&a.permissions.includes("professional-decision")?function(a){let{store:b,project:c,authority:d}=a;if(b.identity.sourceSnapshotId!==c.snapshotId||b.identity.contractId!==a.contract.id||a.contract.projectSnapshotId!==c.snapshotId)throw Error("FEATURE_PROJECT_IDENTITY_MISMATCH");let e=new Map((0,k.BI)(c).map(a=>[a.memberId,a])),f=a=>{let c=b.entity(a);if(c?.kind!=="work-package"||c.deleted||!Array.isArray(c.value?.memberIds)||!Array.isArray(c.value?.sectionIds)||!c.value.sectionIds.some(a=>d.sectionIds.includes(String(a))))throw Error("FEATURE_PACKAGE_SCOPE_DENIED");for(let a of c.value.memberIds){let c=e.get(String(a)),f=b.entity(String(a));if(!c||!d.memberIndices.includes(c.index)||f?.kind!=="source-member"||f.value?.originalEntryHash!==(0,m.Fu)(w(c.entry)))throw Error("FEATURE_MEMBER_SCOPE_DENIED")}return c},g=b=>{if(!Number.isSafeInteger(b.observationIndex)||b.observationIndex<0||!x(b.sourceEvidenceId)||(x(b.quote)?void 0!==b.sourceSelection:"full-excerpt"!==b.sourceSelection||void 0!==b.quote))throw Error("FEATURE_EVIDENCE_SELECTION_INVALID");let d=a.readObservation(b.observationIndex),e=d.result;if("read_source"!==d.tool||!y(e)||!0!==e.performed||!y(e.data)||!Array.isArray(e.data.chunks))throw Error("FEATURE_ACTUAL_SOURCE_READ_REQUIRED");let f=c.sourceControls?.find(a=>"verified-source-excerpt"===a.roleId&&a.factId===b.sourceEvidenceId),g=e.data.chunks.find(a=>y(a)&&a.sourceEvidenceId===b.sourceEvidenceId);if(!f||!y(g)||e.data.relativePath!==f.sourceFile||g.chunkIndex!==f.sourceRef?.chunkIndex||g.content!==f.value||void 0!==b.quote&&!f.value.includes(b.quote))throw Error("FEATURE_FROZEN_QUOTATION_MISMATCH");let h=c.sourceVersionPolicy.sources[f.sourceFile],i=(0,l.bz)(c,{sourceFile:f.sourceFile,sourceChunkIndex:f.sourceRef?.chunkIndex,quote:b.quote??f.value,usage:"project-fact",domain:"construction-method"});if("eligible"!==i.status)throw Error("FEATURE_SOURCE_VERSION_NOT_ELIGIBLE:"+i.reason);return{...b,sourceFile:f.sourceFile,chunkIndex:f.sourceRef.chunkIndex,sourceIdentity:h,operationId:d.operationId,receiptSha256:(0,m.Fu)(e),excerptSha256:(0,m.Fu)(f.value),eligibility:i,sourceKinds:["projectMaterial"],semanticEntailment:"unmeasured"}},h=a=>{let c=b.proposal(a);if(!c||c.actorId!==d.actorId||"project-feature-assertion"!==c.purpose||c.changes.some(a=>"project-feature"!==a.kind||!a.value))throw Error("FEATURE_PROPOSAL_SCOPE_DENIED");for(let a of c.changes)f(String(a.value.workPackageId));return c};return{prepare(a,c){if(!x(c))throw Error("FEATURE_KEY_REQUIRED");let e=f(a),g="project-feature:"+(0,m.Fu)([b.workspaceId,a,c]).slice(0,24),h=b.entity(g);if(h&&("project-feature"!==h.kind||h.value?.workPackageId!==a||h.value?.key!==c))throw Error("FEATURE_IDENTITY_CONFLICT");if(h&&h.value?.assertionActorId!==d.actorId)throw Error("FEATURE_OWNER_REVISION_REQUIRED");let i={type:"project-feature",actorId:d.actorId,featureId:g,workPackageId:a,key:c};return{snapshotId:b.captureReadSnapshot({entityIds:[a,g,...e.value.memberIds],groupKeys:[],context:w(i)}).id,featureId:g,key:c,workPackageId:a,currentVersion:h?.version??null,professionalAccepted:!1}},propose(a,c,e,h){let{snapshot:i,scope:j}=(a=>{let c=b.readSnapshot(a),e=c.context;if("project-feature"!==e.type||e.actorId!==d.actorId)throw Error("FEATURE_SNAPSHOT_ACTOR_DENIED");return f(e.workPackageId),{snapshot:c,scope:e}})(a);if(!x(c.value)||!x(c.dimension)||!Array.isArray(c.evidence)||!c.evidence.length||new Set(c.evidence.map(a=>(0,m.Fu)(a))).size!==c.evidence.length)throw Error("FEATURE_ASSERTION_REQUIRED");let k=c.evidence.map(g),l=i.reads.entities.find(a=>a.id===j.featureId).version,n=null===l?void 0:b.entityVersion(j.featureId,l),o=a=>a.map(a=>(0,m.Fu)([a.sourceEvidenceId,a.sourceIdentity,a.excerptSha256,a.sourceSelection??null,a.quote??null])).sort();return n?.value?.value===c.value&&n.value.dimension===c.dimension&&Array.isArray(n.value.evidence)&&(0,m.Fu)(o(n.value.evidence))===(0,m.Fu)(o(w({evidence:k}).evidence))?b.confirmUnchanged(a,j.featureId,n.value,h):b.propose({actorId:d.actorId,purpose:"project-feature-assertion",reason:e,reads:i.reads,changes:[{id:j.featureId,kind:"project-feature",expectedVersion:l,value:{workPackageId:j.workPackageId,key:j.key,value:c.value,dimension:c.dimension,evidence:w({evidence:k}).evidence,assertionActorId:d.actorId,valueKind:"source-supported-assertion",semanticEntailment:"unmeasured",professionalAccepted:!1,executableQuantity:!1}}]},h)},evaluate:a=>(h(a),b.evaluate(a,"source-backed-feature-v1:"+c.snapshotId,a=>{let b=[];for(let c of a.proposal.changes){let a=c.value;try{if(!Array.isArray(a.evidence)||!a.evidence.length)throw Error("FEATURE_EVIDENCE_REQUIRED");for(let b of a.evidence){let a=g(b);if((0,m.Fu)(w(a))!==(0,m.Fu)(b))throw Error("FEATURE_OBSERVED_RECEIPT_CHANGED")}}catch(a){b.push({code:"FEATURE_PROVENANCE_REJECTED",entityId:c.id,reason:a instanceof Error?a.message:String(a)})}}return{dataValidity:b.length?"invalid":"valid",relatedConstraints:b.length?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:b,result:{assertionIds:a.proposal.changes.map(a=>a.id),provenanceChecked:!b.length,semanticEntailment:"unmeasured",professionalAccepted:!1,executableQuantity:!1}}})),commit:(a,c)=>(h(a),b.commit(a,c))}}({...a,readObservation:a.readObservation}):void 0,n=a.authority.actorId,o=new Set(a.allowedActions?a.allowedActions:R.filter(b=>a.permissions.includes(S[b]))),p=b=>{let c=String(b);if(!R.includes(c))throw Error(`CONSTRUCTION_SUBMIT_ACTION_UNKNOWN:action「${String(b)}」不在允许集合:${R.join("/")}`);if(!o.has(c))throw Error(`CONSTRUCTION_SUBMIT_ACTION_UNAVAILABLE:action「${c}」不在本职责当前目的的工具面(可用:${[...o].join("/")||"无"});请按实际职责另立目的或请求协调。`);let d=S[c];if(!a.permissions.includes(d))throw Error(`CONSTRUCTION_SUBMIT_PERMISSION_DENIED:action「${c}」需要能力「${d}」,本职责没有;请按实际职责分割目的或向主控请求相应职责。`);return c},z=(a,e,g,h)=>{switch(a){case"work-package":{let a="submit-key:"+(0,m.Fu)([n,"work-package",e.workPackageId??null,e.selection,[...e.sectionIds].sort(),e.title,e.objectScope,e.workfront]),c=b.prepareWorkPackage({selection:e.selection,sectionIds:e.sectionIds,..."string"==typeof e.workPackageId?{workPackageId:e.workPackageId}:{}},a);return b.proposeWorkPackage(c.snapshotId,{title:String(e.title),objectScope:String(e.objectScope),workfront:String(e.workfront)},g,`${h}:propose`)}case"source-allocation":{let a=b.prepareAllocations(String(e.workPackageId),String(e.operation),e.selection);return b.proposeAllocations(a.snapshotId,{numerator:String(e.numerator),denominator:String(e.denominator)},g,`${h}:propose`)}case"production-operation":{let a="submit-key:"+(0,m.Fu)([n,"production-operation",e.workPackageId,e.operation,e.selection,e.calendarId,[...e.resourcePoolIds].sort(),[...e.predecessorIds].sort(),e.operationId??null]),b=c.prepareOperation({workPackageId:String(e.workPackageId),operation:String(e.operation),selection:e.selection,calendarId:String(e.calendarId),resourcePoolIds:e.resourcePoolIds,predecessorIds:e.predecessorIds,..."string"==typeof e.operationId?{operationId:e.operationId}:{}},a);if(e.intent&&"object"==typeof e.intent&&!Array.isArray(e.intent))return c.reviseOperation(b.snapshotId,e.intent,g,`${h}:propose`);if(!e.draft||"object"!=typeof e.draft||Array.isArray(e.draft))throw Error("CONSTRUCTION_SUBMIT_PAYLOAD_INVALID:production-operation 需要 draft(新建)或 intent(修订)之一");return c.proposeOperation(b.snapshotId,e.draft,g,`${h}:propose`)}case"shared-definition":{let a=c.prepareDefinition(e.kind,String(e.id));return c.proposeDefinition(a.id,e.definition,g,`${h}:propose`)}case"writing-unit":{let a=e.units,b=e.revision,c=d.prepareWriting({responsibilityId:n,purpose:String(e.purpose),sectionIds:e.sectionIds,unitIds:[...a.map(a=>String(a.id)),...(b?.retire??[]).map(a=>a.unitId)]});return d.proposeWriting(c.id,{responsibilityId:n,purpose:String(e.purpose),sectionIds:e.sectionIds,units:e.units,...e.revision?{revision:e.revision}:{}},g,`${h}:propose`)}case"project-feature":{if(!f)throw Error("CONSTRUCTION_SUBMIT_FEATURE_UNAVAILABLE:本职责没有工程特征观测能力,不能提交 project-feature");let a=f.prepare(String(e.workPackageId),String(e.key));return f.propose(a.snapshotId,{value:String(e.value),dimension:String(e.dimension),evidence:e.evidence},g,`${h}:propose`)}}},B=(e,g)=>{switch(e){case"production-operation":return c.evaluateOperation(g,a.signal);case"shared-definition":return c.evaluateDefinition(g);case"writing-unit":return d.evaluateWriting(g);case"project-feature":return f.evaluate(g);default:return b.evaluate(g)}},C=(a,b,c)=>{let d=b.value,e=d.result;return{action:c,proposalId:a,evaluationId:b.id,dataValidity:d.dataValidity,relatedConstraints:d.relatedConstraints,schedule:d.schedule,issues:d.issues.slice(0,24),issueCount:d.issues.length,selectedStrategy:e.selectedStrategy??null,professionalAccepted:!1,globalFeasibilityAccepted:!1,fullEvaluationAvailable:!0}},{evaluationOutcomeKey:D,trackEvaluationOutcome:E}=function(a){let b=(a,b,c)=>{let d=b.value.result??{},e=b.value.issues.map(b=>{let c=b??{};return"work-package"===a?[c.code??c.kind??null,c.path??null]:[c.code??c.kind??null,c.entityId??c.operationId??null,c.path??null]});return(0,m.Fu)(["evaluation-outcome",a,..."work-package"===a?[c??b.inputHash]:[],b.value.dataValidity,b.value.relatedConstraints,d.selectedStrategy??null,d.professionalAccepted??!1,d.globalFeasibilityAccepted??!1,e])},c=new Map;return{evaluationOutcomeKey:b,trackEvaluationOutcome:(d,e,f)=>{let g=b(d,e,f);if((a=>{let b=a.value.result??{};return!0===b.professionalAccepted||!0===b.globalFeasibilityAccepted})(e))return c.clear(),{key:g,attempts:1,repeated:!1};let h=(c.get(g)??0)+1;return c.set(g,h),{key:g,attempts:h,repeated:h>=a}}}}(Math.max(2,Math.floor(Number(P.AV?.evaluationOutcomeRepeatLimit??3)))),F=(a,b,c,d)=>({data:{submitted:!1,stage:"evaluation-outcome-repeat",...C(b.id,c,a),action:a,proposalId:b.id,evaluationOutcomeKey:d.key,evaluationOutcomeAttempts:d.attempts,issues:c.value.issues.slice(0,24),message:`同一评估结果已重复 ${d.attempts} 次;本次候选未提交生效。不要只改一个实体原样重提:先读清 issue 的实体与原因,补齐资源/窗口/来源数据或更换策略,再提交。`,nextReading:"同一评估结果重复:停止原样提交;报告未解决依赖,或改变策略/输入后重新提交。"},feedbackRequired:!0,progressLedger:{evidence:[],effective:[]},pause:{reason:`同一评估结果已重复 ${d.attempts} 次,本次候选仍未提交生效;按未解决依赖/来源/窗口问题收口,换策略或交还主控,不再原样重试。`}}),G=0,H=a=>{let b=a.changes.filter(a=>"work-package"===a.kind&&a.value);if(!b.length)return;let c=b.map(a=>{let b=a.value??{},c=a=>Array.isArray(b[a])?[...new Set(b[a].map(String))].sort():b[a];return{kind:a.kind,title:b.title,objectScope:b.objectScope,workfront:b.workfront,sectionIds:c("sectionIds"),memberIds:c("memberIds")}});return"work-package-content:"+(0,m.Fu)((0,m.V5)(c))},I=(e,g,h,i,j)=>{let k,l=((a,e,g)=>{switch(a){case"production-operation":case"shared-definition":return c.commit(e,g);case"writing-unit":return d.commit(e,g);case"project-feature":return f.commit(e,g);default:return b.commit(e,g)}})(e,g.id,h);!0!==l.unchanged&&a.onBusinessCommit?.();let n=i&&"writing-unit"!==e?j??D(e,i,H(g)):void 0,o=new Set(g.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.id)),p=g.changes.filter(a=>"writing-unit"===a.kind&&!a.value).map(a=>a.id);return{data:{...l,action:e,proposalId:g.id,submitted:!0!==l.unchanged,effective:!0!==l.unchanged,...G?{programFactFixups:G}:{},committed:!0!==l.unchanged,changedEntityIds:l.changedEntities.filter(a=>"writing-unit"!==e||o.has(a.id)).map(a=>a.id),..."work-package"===e?{workPackages:(k=l.changedEntities,g.changes.filter(a=>"work-package"===a.kind&&a.value).map(a=>({id:a.id,version:k.find(b=>b.id===a.id)?.version??null,title:a.value.title,sectionIds:a.value.sectionIds})))}:{},...p.length?{retiredEntityIds:p}:{},...!0===l.unchanged?{message:"提交内容与当前版本相同,没有产生新版本;若要送审已有正文,请用 submit_for_independent_review;不要重复提交同一正文。"}:{},...i?{evaluation:{...C(g.id,i,e),...n?{evaluationOutcomeKey:n}:{}}}:{}},...!0===l.unchanged?{feedbackRequired:!0}:{progressLedger:{effective:n?[n]:l.changedEntities.map(a=>(0,m.Fu)([a.id,a.version]))}}}},V=b=>{let c=Array.isArray(b.sectionIds)?b.sectionIds.map(String):[],d=new Set(a.contract.criteria.filter(a=>!c.length||c.includes(String(a.sectionId??""))).map(a=>a.id)),e=[];for(let a of Array.isArray(b.units)?b.units:[]){let b=ag(a),c=(Array.isArray(b.criterionIds)?b.criterionIds.map(String):[]).filter(a=>!d.has(a));if(c.length){let a=[...d],f=c.map(b=>{let c=b.split(":").slice(-2).join(":"),d=a.find(a=>a.endsWith(":"+c));return d&&d!==b?`${b} → ${d}`:`${b}(本节无同维度准则,改用合法 id)`});e.push(`WRITING_CRITERION_UNKNOWN:单元「${String(b.id??"")}」声明了未知评价项 ${c.join("、")};建议替换:${f.join(";")};本节合法准则 id:${a.slice(0,24).join("、")}${a.length>24?"…":""}`)}}return e},W={name:"submit",description:"统一业务提交:一次动作完成校验→候选→求值→原子提交。action 决定业务类型(work-package/source-allocation/production-operation/shared-definition/writing-unit/project-feature);求值不合法时候选不生效并返回具体字段问题;提交不等于专业接收。",parameters:{type:"object",properties:{action:{type:"string",enum:[...o]},payload:{type:"object",additionalProperties:!0,description:"按 action 的负载;服务端逐类校验并返回 $.字段 级问题"},reason:{type:"string",minLength:1},previewId:{type:"string",minLength:1,description:"先用 preview 得到的候选身份;提供它时可不带 payload,提交前复核读集"}},required:["action","reason"],additionalProperties:!1},normalizeArgs:a=>{if("writing-unit"!==a.action||!a.payload||"object"!=typeof a.payload||Array.isArray(a.payload))return{args:a,paths:[]};let b=af(a.payload);return{args:{...a,payload:b.payload},paths:b.paths.map(a=>`$.payload.${a.slice(2)}`)}},invoke:async(b,c)=>{let d,f,k,l,o,q=p(b.action),r=String(b.reason??"").trim();if(!r)throw Error("CONSTRUCTION_SUBMIT_REASON_REQUIRED:每次提交必须写明业务理由");if("string"==typeof b.previewId&&b.previewId.trim()){let d=a.store.proposal(b.previewId.trim());if(!d||d.actorId!==n)throw Error("CONSTRUCTION_PREVIEW_SCOPE_DENIED");if(d.changes.some(a=>!T[q].includes(a.kind)))throw Error("CONSTRUCTION_PREVIEW_ACTION_MISMATCH");let e=d.reads.entities.filter(b=>(a.store.entity(b.id)?.version??null)!==b.version);if("committed"===d.state)return{data:{submitted:!0,effective:!1,alreadyCommitted:!0,action:q,proposalId:d.id,changedEntityIds:d.changes.map(a=>a.id),changedEntities:d.changes.map(b=>({id:b.id,version:a.store.entity(b.id)?.version??null})),message:"该候选已提交:返回既有身份,不重复生效。"}};if("evaluated"!==d.state)return{data:{submitted:!1,action:q,proposalId:d.id,error:"CONSTRUCTION_PREVIEW_NOT_EVALUATED",message:`候选当前状态为 ${d.state},不能提交;请重新 preview。`},feedbackRequired:!0};let f=d.reads.groups.filter(b=>a.store.group(b.key).version!==b.version);if(e.length||f.length)return{data:{submitted:!1,action:q,proposalId:d.id,error:"STALE_PREVIEW",stale:e.map(b=>({entityId:b.id,expectedVersion:b.version,currentVersion:a.store.entity(b.id)?.version??null})),staleGroups:f.map(b=>({groupKey:b.key,expectedVersion:b.version,currentVersion:a.store.group(b.key).version})),message:"预览之后相关对象或分组已变化:请重新 preview 后再提交。"},feedbackRequired:!0};let g=a.store.proposalEvaluation(d.id);if(!g)return{data:{submitted:!1,action:q,proposalId:d.id,error:"CONSTRUCTION_PREVIEW_NOT_EVALUATED",message:"该候选尚未求值:请重新 preview。"},feedbackRequired:!0};let h="writing-unit"===q?void 0:E(q,g,H(d));return h?.repeated?F(q,d,g,h):"valid"!==g.value.dataValidity||"valid"!==g.value.relatedConstraints?{data:{submitted:!1,action:q,stage:"evaluation-rejected",proposalId:d.id,dataValidity:g.value.dataValidity,relatedConstraints:g.value.relatedConstraints,issues:g.value.issues.slice(0,24),issueCount:g.value.issues.length,...h?{evaluationOutcomeKey:h.key,evaluationOutcomeAttempts:h.attempts}:{}},feedbackRequired:!0}:I(q,d,c,g,h?.key)}try{d=ak(q,ag(b.payload),a.store,a.project)}catch(b){let a=b instanceof Error?b.message:String(b);if(a.startsWith("WRITING_"))return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:[a],message:"正文单元/引用形状不成立:按字段问题修正后重提,不要原样重试。"},feedbackRequired:!0};throw b}let s=[];if("writing-unit"===q&&a.structurePlan){let b=Array.isArray(d.sectionIds)?d.sectionIds.map(String):[],c=1===b.length?a.sectionPlans?.get(b[0]):void 0,e=Array.isArray(d.units)?d.units:[];if(c&&e.length){let f=function(a){let b=[],c=new Set(a.units.map(a=>a.id)),d=new Set((a.existingUnits??[]).filter(a=>!c.has(a.id)).flatMap(a=>a.coverageItemIds??[]));return{units:a.units.map(c=>{let e=a.sectionPlan.subsections.find(a=>a.subsectionId===c.subsectionId?.trim());if(!e)return c;let f=[],g={...c};g.planHash||(g.planHash=a.structurePlan.planHash,f.push("planHash")),g.sectionPlanHash||(g.sectionPlanHash=a.sectionPlan.sectionPlanHash,f.push("sectionPlanHash")),e.contentContract&&!g.contentContractHash&&(g.contentContractHash=e.contentContract.hash,f.push("contentContractHash")),g.heading?.trim()||(g.heading=e.title,f.push("heading"));let h="table"===e.primaryCarrier||"figure"===e.primaryCarrier?e.primaryCarrier:void 0;for(let a of(h&&e.requiredOutputId&&g.kind===h&&!g.outputId&&(g.outputId=e.requiredOutputId,f.push("outputId")),"paragraph"===g.kind||g.caption?.trim()||(g.caption=g.heading?.trim()||e.title,f.push("caption")),g.coverageItemIds?.length||g.referencedCoverageItemIds?.length||!e.coverageItemIds.length||(g.kind!==e.primaryCarrier||e.coverageItemIds.some(a=>d.has(a))?(g.referencedCoverageItemIds=[...e.coverageItemIds],f.push("referencedCoverageItemIds")):(g.coverageItemIds=[...e.coverageItemIds],f.push("coverageItemIds"))),g.coverageItemIds??[]))d.add(a);return f.length&&b.push({unitId:c.id,fields:f}),g}),normalized:b}}({units:e,sectionPlan:c,structurePlan:a.structurePlan,existingUnits:(0,A.Z1)(a.store,n,b).map(a=>a.unit).filter(a=>!d.revision?.retire?.some(b=>b.unitId===a.id))});d={...d,units:f.units},s=f.normalized}}let t=[],u=[],w=[],x=!1,y=[];if("writing-unit"===q&&!d.revision&&Array.isArray(d.units)&&d.units.length>1){let b=[];for(let c of d.units){let e={...d,units:[c]},f=(0,v.Dp)({...e,responsibilityId:n,units:[(0,h.Mf)(c??{},a.tenderResponsePlan,Array.isArray(d.sectionIds)?d.sectionIds.map(String):[])]}),g=[...(0,i.validateJsonAgainstSchema)(e,ae[q]),...f.issues.map(a=>`${a.unitId}:${a.code}:${a.message}`),...V(e)];g.length?t.push({unitId:String(ag(c).id??""),issues:g}):b.push(c)}if(!b.length)return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:t.flatMap(a=>a.issues),rejectedUnits:t,message:"本批没有可生效的正文单元:按每个 unitId 的字段问题修正后重提;不要原样重试整批。"},feedbackRequired:!0};t.length&&(d={...d,units:b})}let D=(0,i.validateJsonAgainstSchema)(d,ae[q]);if(D.length)return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:D,message:"payload 不符合该 action 的字段约束:按 $.字段 修正后重提;不要原样重试。"},feedbackRequired:!0};if("writing-unit"===q&&Array.isArray(d.units)&&(d.units=d.units.map(b=>(0,h.Mf)(b??{},a.tenderResponsePlan,Array.isArray(d.sectionIds)?d.sectionIds.map(String):[]))),"writing-unit"===q&&"string"==typeof ag(d.revision).reason){let a=String(ag(d.revision).reason).trim();a&&(d={...d,units:d.units.map(b=>({...b,carrierRevisionReason:a}))})}if("writing-unit"===q){let a=V(d);if(a.length)return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:a,message:"正文单元声明了未知评价项:只能使用本节合同准则 id;按 issues 里的合法 id 修正后重提。"},feedbackRequired:!0}}let P=a.planningContext&&a.structurePlan?(0,K.XI)(a.planningContext):void 0;if("writing-unit"===q){let b,c,h=d.sectionIds??[];k=1===h.length?h[0]:void 0;let i=d.units;if(a.sourceDraftOnly&&i.some(a=>a.planChart||[...a.references,...a.assertions.map(a=>a.reference)].some(a=>"evidence"!==a.kind)))throw Error("SOURCE_DRAFT_EXTERNAL_DECISION_REQUIRED:该内容依赖尚未就绪的决定/计算/基准,保留草稿等待正式流程");if(a.structurePlan){if(1!==h.length)return{data:{submitted:!1,action:q,stage:"plan-section-required",error:"WRITING_SECTION_SINGLE_REQUIRED:按节写作必须一次提交一个 sectionId;跨节内容拆成多次提交或引用他节表/图。"},feedbackRequired:!0};let c=h[0];if(!(b=a.sectionPlans?.get(c)))return{data:{submitted:!1,action:q,stage:"plan-required",error:`SECTION_PLAN_REQUIRED:本节还没有冻结的节计划。先调用 plan_section(sectionId="${c}"),再按小节写作。`},feedbackRequired:!0};let d=(0,L.qA)({store:a.store,sectionId:c,structurePlan:a.structurePlan,sectionPlan:b,units:(0,L.rz)(a.store,c),reviewContext:{project:a.project,expectedBidCompositionHash:(0,M.IQ)(a.bidComposition,a.bidCompositionSources),tenderResponsePlan:a.tenderResponsePlan}});if("valid"===d.status)return{data:{submitted:!1,action:q,stage:"section-locked",error:`SECTION_LOCKED:本节已于 ${new Date(d.lock.lockedAt).toISOString()} 锁定(sectionPlanHash ${d.lock.sectionPlanHash}),不得再修改。进入下一节。`},feedbackRequired:!0}}b&&(f=b,k=h[0]);let j=new Set(h),o=(0,A.Z1)(a.store,n,a.authority.sectionIds),p=o.filter(a=>a.sectionIds.some(a=>j.has(a))),s=new Map(p.map(a=>[a.unit.id,a])),x=new Map(o.map(a=>[a.unit.id,a]));for(let a of d.revision?.retire??[])s.delete(a.unitId),x.delete(a.unitId);for(let a of i)s.set(a.id,{unit:a,sectionIds:h}),x.set(a.id,{unit:a,sectionIds:h});if(d.revision){let b=(0,v.Dp)({...d,responsibilityId:n});if(!b.submission)return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:b.issues},feedbackRequired:!0};try{for(let c of(0,O.R)(a.store,b.submission,i.map(b=>{let c=(0,v.tp)(n,String(d.purpose),b.id,h[0]);return{id:c,kind:"writing-unit",expectedVersion:a.store.entity(c)?.version??null,value:{...b,responsibilityId:n,purpose:String(d.purpose),sectionIds:h}}}),r))if("writing-unit"===c.kind&&c.value){let a=c.value;s.set(a.id,{unit:a,sectionIds:h}),x.set(a.id,{unit:a,sectionIds:h})}}catch(a){return{data:{submitted:!1,action:q,stage:"structural-revision",issues:[a instanceof Error?a.message:String(a)],message:"结构变更整组未生效;按原单元版本、覆盖/输出迁移与引用重定向修正后重提。"},feedbackRequired:!0}}}l=(0,A.ly)({contract:a.contract,sectionIds:h,submitted:i,sectionUnits:[...s.values()],...a.sourceDraftOnly?{sourceDraftContracts:a.sectionContracts}:{},carrierUnits:[...x.values()],...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.executionBaselineRef?.current?{executionBaseline:a.executionBaselineRef.current}:{},project:a.project,...a.structurePlan?{structurePlan:a.structurePlan}:{},...b?{sectionPlan:b}:{},...P?{projectBasicFacts:P.facts,...P.projectName?{projectName:P.projectName}:{}}:{}});let z=[];for(;;){let b=a.store.entityPage({groupKey:"writing-units",...c?{afterId:c}:{},limit:200});for(let a of b.entities){if(a.deleted||"writing-unit"!==a.kind)continue;let b=(0,v.iC)(a);b&&z.push(b)}if(!b.nextAfterId)break;c=b.nextAfterId}let B=J({submitted:i,documentUnits:z});(B.blocking.length||B.advisory.length)&&(l={passed:l.passed&&!B.blocking.length,blocking:[...l.blocking,...B.blocking],advisory:[...l.advisory,...B.advisory]});let C=c=>c.map(c=>{let d=c.subsectionId?.trim(),e=d&&b?b.subsections.find(a=>a.subsectionId===d):void 0,f=e?.requiredOutputId?a.structurePlan?.outputRegistry.find(a=>a.outputId===e.requiredOutputId):void 0,g=f?"table"===f.form?"table":"figure":void 0,h=e?.writingOutline??[],i=f?h.findIndex(a=>(a.evidenceRefs??[]).includes(f.outputId)):-1,j=i>=0?i:f?h.findIndex(a=>a.carrier===g):-1;return{unitId:c.id,...d?{subsectionId:d}:{},...e?{heading:e.title,primaryCarrier:e.primaryCarrier,writingOutline:h.map((a,b)=>({...a,coverageRole:a.carrier===e.primaryCarrier?"primary":"supporting",ownsRequiredOutput:b===j})),...e.requiredOutputId?{requiredOutputId:e.requiredOutputId,...g?{requiredOutputCarrier:g}:{}}:{}}:{},sectionPlanHash:b?.sectionPlanHash??null}});if(G=0,y=[],!l.passed){let c=(0,A.az)(i,l.blocking,P);if(c){let e=(0,A.ly)({contract:a.contract,sectionIds:h,submitted:c.fixed,...a.sourceDraftOnly?{sourceDraftContracts:a.sectionContracts}:{},sectionUnits:[...s.values()].map(a=>c.fixed.some(b=>b.id===a.unit.id)?{unit:c.fixed.find(b=>b.id===a.unit.id),sectionIds:a.sectionIds}:a),carrierUnits:[...x.values()].map(a=>c.fixed.some(b=>b.id===a.unit.id)?{unit:c.fixed.find(b=>b.id===a.unit.id),sectionIds:a.sectionIds}:a),...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.executionBaselineRef?.current?{executionBaseline:a.executionBaselineRef.current}:{},project:a.project,...a.structurePlan?{structurePlan:a.structurePlan}:{},...b?{sectionPlan:b}:{},...P?{projectBasicFacts:P.facts,...P.projectName?{projectName:P.projectName}:{}}:{}}),f=J({submitted:c.fixed,documentUnits:z}),g={passed:e.passed&&!f.blocking.length,blocking:[...e.blocking,...f.blocking],advisory:[...e.advisory,...f.advisory]};if(g.passed){for(let a of(d={...d,units:c.fixed},i.splice(0,i.length,...c.fixed),c.fixed))s.set(a.id,{unit:a,sectionIds:h}),x.set(a.id,{unit:a,sectionIds:h});G=c.count,l=g}else{for(let a of(i.splice(0,i.length,...c.fixed),c.fixed))s.set(a.id,{unit:a,sectionIds:h}),x.set(a.id,{unit:a,sectionIds:h});G=c.count,l=g}}}if(!l.passed){let c=new Set(i.map(a=>a.id)),f=new Map;for(let a of l.blocking){if(!a.unitId||!c.has(a.unitId)){y.push({rule:a.rule,message:a.message});continue}f.set(a.unitId,[...f.get(a.unitId)??[],{rule:a.rule,message:a.message}])}let j=i.filter(a=>f.has(a.id)),n=i.filter(a=>!f.has(a.id)),r=0===j.length&&y.length>0;if(!d.revision&&j.length&&n.length){let c=new Map(p.map(a=>[a.unit.id,a])),i=new Map(o.map(a=>[a.unit.id,a]));for(let a of n)c.set(a.id,{unit:a,sectionIds:h}),i.set(a.id,{unit:a,sectionIds:h});let r=(0,A.ly)({contract:a.contract,sectionIds:h,submitted:n,...a.sourceDraftOnly?{sourceDraftContracts:a.sectionContracts}:{},sectionUnits:[...c.values()],carrierUnits:[...i.values()],...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.executionBaselineRef?.current?{executionBaseline:a.executionBaselineRef.current}:{},project:a.project,...a.structurePlan?{structurePlan:a.structurePlan}:{},...b?{sectionPlan:b}:{},...P?{projectBasicFacts:P.facts,...P.projectName?{projectName:P.projectName}:{}}:{}});if(r.passed&&!r.advisory.some(a=>"carrier-reference-without-primary"===a.rule)){for(let a of(d={...d,units:n},j))t.push({unitId:a.id,issues:(f.get(a.id)??[]).map(a=>a.message)});if(u.push(...j),w.push(...C(j)),l=r,a.generatedDir)try{let b=g().join(a.generatedDir,"construction");e().mkdirSync(b,{recursive:!0}),e().appendFileSync(g().join(b,"write-check-failures.jsonl"),JSON.stringify({version:"write-check-failure-v1",runId:a.runId??null,at:new Date().toISOString(),action:q,sectionId:k??null,unitIds:j.map(a=>a.id),blocking:j.flatMap(a=>(f.get(a.id)??[]).map(b=>({code:b.rule,location:`unit:${a.id}`,hint:b.message}))),requiredBindings:C(j),partial:!0,fingerprint:(0,m.Fu)([...f].flatMap(([a,b])=>b.map(b=>[b.rule,a])).sort())})+"\n")}catch{}Q.delete(`${a.store.workspaceId}:${a.runId??""}:${k??""}`)}else if(j.length){for(let a of j)t.push({unitId:a.id,issues:(f.get(a.id)??[]).map(a=>a.message)});u.push(...j),w.push(...C(j))}}if(!l.passed&&j.length&&(!r||d.revision)){let b=l.blocking.map(a=>({code:a.rule,...a.unitId?{location:`unit:${a.unitId}`}:a.location?{location:a.location}:{},...void 0!==a.observed?{observed:a.observed}:{},...void 0!==a.expected?{expected:a.expected}:{},hint:a.hint??a.message})),c=(0,m.Fu)(l.blocking.map(a=>[a.rule,a.unitId??"",a.expected??"",a.observed??""]).sort()),d=`${a.store.workspaceId}:${a.runId??""}:${k??""}`,f=Q.get(d),h=f&&f.fingerprint===c?f.count+1:1;Q.set(d,{fingerprint:c,count:h}),Q.size>2e3&&Q.clear();let j=h>=2?{pause:{reason:`同一写前拒收已连续 ${h} 次(${b.slice(0,3).map(a=>a.code).join("、")||"write-check"}):停止原样重试,交运行级按未决/阻塞处理;请换实质不同的写法或报告依赖`}}:{};if(a.generatedDir)try{let d=g().join(a.generatedDir,"construction");e().mkdirSync(d,{recursive:!0}),e().appendFileSync(g().join(d,"write-check-failures.jsonl"),JSON.stringify({version:"write-check-failure-v1",runId:a.runId??null,at:new Date().toISOString(),action:q,sectionId:k??null,unitIds:i.map(a=>a.id),blocking:b,requiredBindings:C(i),fingerprint:c})+"\n")}catch{}return{data:{submitted:!1,action:q,stage:"write-check",writeCheck:l,issues:b,...h>=2?{rejectionStreak:h}:{},...t.length?{rejectedUnits:t}:{},...b[0]?{error:`${b[0].code}${b[0].location?` @${b[0].location}`:""}:${b[0].hint}`}:{},requiredBindings:C(i),message:"写作时校验未通过:按 issues 的 code/location/observed/expected/hint 与 requiredBindings 逐条修订后重提;修订必须让至少部分单元通过校验生效,连续多轮没有单元生效会按停滞处理。"},feedbackRequired:!0,...j,progressLedger:{evidence:[],effective:[]}}}}}try{o=z(q,d,r,c)}catch(b){let a=b instanceof Error?b.message:String(b);if(a.startsWith("WRITING_"))return{data:{submitted:!1,action:q,stage:"payload-invalid",issues:[a],message:"正文单元结构不成立:按问题补齐后重提,不要原样重试。"},feedbackRequired:!0};throw b}let R=()=>!!(f&&k&&f.subsections.filter(a=>"transition"!==a.role).every(b=>(0,L.rz)(a.store,k).some(a=>a.subsectionId===b.subsectionId))),S=a=>R()&&a?{autoClosureDeferred:"first-draft-pending",nextAction:"await_closure",invocationBoundary:{sectionId:a??"",state:"drafted",reason:"本节首版完成,交还运行级收口",key:`first-draft-complete:${a??""}`,deferUntilClosure:!0},nextReading:"本节首版已写完,程序已把执行交还调度;不要再重复送审/finalize/complete。全部节首版铺满后程序会审查/锁定本节并唤醒你按 findings 修订或 complete。"}:{autoClosureDeferred:"first-draft-pending",nextAction:"next_section",nextReading:"首版阶段:审查/锁定统一在全部节首版铺满后执行;现在写本职责其余未写小节,不要重复送审。"},U=(()=>{if("writing-unit"!==q)return{};if(!a.sourceDraftOnly&&a.deferSectionReview?.())return S(k);let b=k;if(!b)return{};let c=(0,M.cD)(a.store,{contract:a.contract,responsibilityId:n,expectedBidCompositionHash:(0,M.IQ)(a.bidComposition,a.bidCompositionSources),...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{}}).missingUnitIds.filter(c=>{let d=a.store.entity(c)?.value;return Array.isArray(d?.sectionIds)&&d.sectionIds.map(String).includes(b)});return c.length?{nextAction:"submit_for_independent_review",unreviewedUnitIds:c,nextReading:"当前单元内容已是最新版本;不要原样重提。请调用 submit_for_independent_review 送审这些单元。"}:{nextAction:"finalize_section",nextReading:"当前单元内容已是最新版本;不要原样重提。请调用 finalize_section 检查合同完整度并按节锁定。"}})();if("unchanged"in o)return{data:{action:q,...o,submitted:!1,effective:!1,...U,reading:"该提交与当前版本一致,没有产生新版本。不要原样重提:继续写下一段/下一个单元,或声明完成。"}};let W=o;if("committed"===W.state)return I(q,W,c,a.store.proposalEvaluation(W.id));if(W.changes.every(b=>(0,m.V5)(b.value)===(0,m.V5)(a.store.entity(b.id)?.value??null)))return{data:{action:q,proposalId:W.id,unchanged:!0,submitted:!1,effective:!1,entities:W.changes.map(b=>({entityId:b.id,version:a.store.entity(b.id)?.version??null})),...U,reading:"提交内容与当前生效版本完全一致,没有产生新版本。不要原样重提;继续写下一个单元/下一节,或声明完成。"}};let X=await B(q,W.id),Y="writing-unit"===q?void 0:E(q,X,H(W));if(Y?.repeated)return F(q,W,X,Y);if("valid"!==X.value.dataValidity||"valid"!==X.value.relatedConstraints)return{data:{submitted:!1,stage:"evaluation-rejected",...C(W.id,X,q),...Y?{evaluationOutcomeKey:Y.key,evaluationOutcomeAttempts:Y.attempts}:{}},feedbackRequired:!0,progressLedger:Y?{effective:[Y.key]}:{evidence:[(0,m.Fu)(["actual-evaluation",X.id,X.inputHash])]}};let Z=I(q,W,c,X,Y?.key);x=R();let $="writing-unit"===q&&!a.sourceDraftOnly&&!!a.deferSectionReview?.(),_=!a.sourceDraftOnly&&!a.deferBodyReview&&!$&&"writing-unit"===q&&x&&k&&a.structurePlan&&a.sectionPlans?.get(k)&&a.caller&&a.generatedDir&&a.runId?await (async()=>{try{let b={store:a.store,contract:a.contract,project:a.project,responsibilityId:n,sectionId:k,authoritySectionIds:a.authority.sectionIds,structurePlan:a.structurePlan,sectionPlans:a.sectionPlans,...a.planningContext?{planningContext:a.planningContext}:{},...a.tenderResponsePlan?{tenderResponsePlan:a.tenderResponsePlan}:{},...a.bidComposition?{bidComposition:a.bidComposition,bidCompositionSources:a.bidCompositionSources}:{},...a.executionBaselineRef?.current?{executionBaseline:a.executionBaselineRef.current}:{},...a.evidence?.projectRoot?{projectRoot:a.evidence.projectRoot}:{},...a.signal?{signal:a.signal}:{},...a.sourceCoverageLock?{sourceCoverageLock:a.sourceCoverageLock}:{},caller:a.caller,diagnostics:a.diagnostics,artifactDir:a.generatedDir,runId:a.runId},d=await (0,j.P7)({...b,lockActorId:n,lockedBy:n,operationId:c+":auto-closure"}),e=d.closure,f=d.sourceCoverage;return{reviewed:d.reviewed,...d.reason?{reviewSkipped:d.reason}:{},...d.receipt?{reviewOk:d.receipt.ok,reviewInvocationId:d.receipt.invocationId,...d.receipt.error?{reviewError:d.receipt.error}:{}}:{},...d.planGaps?.length?{planGaps:d.planGaps}:{},locked:!!e.lock,lockable:e.lockable,openFindings:e.openFindingIds.length,unreviewedUnitIds:e.unreviewedUnitIds,deficientCriterionIds:e.deficientCriterionIds,...e.gaps.length?{gaps:e.gaps}:{},...f?{sourceCoverage:f}:{}}}catch(a){return{reviewed:!1,reviewOk:!1,locked:!1,lockable:!1,openFindings:0,unreviewedUnitIds:[],gaps:[],reviewError:a instanceof Error?a.message:String(a)}}})():void 0,aa=b=>{let c="writing-unit"===q?(0,M.cD)(a.store,{contract:a.contract,responsibilityId:n,expectedBidCompositionHash:(0,M.IQ)(a.bidComposition,a.bidCompositionSources),tenderResponsePlan:a.tenderResponsePlan}):void 0,d=c?.missingUnitIds??[],e=(()=>{if("writing-unit"!==q||!k||!f)return[];let b=new Set((0,L.rz)(a.store,k).flatMap(b=>{let c=a.store.entity(b.entityId)?.value;return Array.isArray(c?.coverageItemIds)?c.coverageItemIds.map(String):[]}));return f.subsections.filter(a=>"transition"!==a.role).flatMap(a=>a.coverageItemIds.filter(a=>!b.has(a)).map(b=>({subsectionId:a.subsectionId,title:a.title,coverageItemId:b})))})(),g=_&&!_.locked&&(_.openFindings>0||_.unreviewedUnitIds.length>0||!1===_.reviewOk||(_.gaps?.length??0)>0),h={...s.length?{normalizedBindings:s}:{},...l?.advisory.length?{writeCheck:{passed:!0,advisory:l.advisory}}:{},...y.length?{sectionIssues:y}:{},..._?{autoClosure:_}:{},..._&&k?{invocationBoundary:{sectionId:k,state:(0,N.Pp)(a.store,k)?.phase??(_.locked?"locked":"reviewing"),reason:_.locked?"本节已锁定,交还调度选择下一节":"当前审查结果已保存,交还调度处理修订或依赖",key:(0,N.Pp)(a.store,k)?.boundaryKey??(0,m.Fu)([k,_])}}:{},..._?.locked?{nextAction:"complete",nextReading:"本节已由机械收口审查并锁定;确认成果后调用 complete。"}:g?{nextAction:"review_revision_plan",nextReading:"机械审查已完成,但本节仍有未关闭 finding 或未审单元;先按 review_revision_plan 修订/举证,再重新提交。"}:d.length?{nextAction:"submit_for_independent_review",unreviewedUnitIds:d,nextReading:`这些单元还没有当前审查档位:一次调用 submit_for_independent_review 把上面 ${d.length} 个 id **放进 unitEntityIds 批量送审(一次最多 6 个,超过分两批)**,不要一个单元送一次;审查通过后再 finalize_section。`}:x?{nextAction:"finalize_section",nextReading:"本节全部计划小节已有单元且都有当前审查档位;调用 finalize_section 检查合同完整度并按节锁定。"}:{},...e.length?{coverageGaps:e,nextAction:"bind_coverage",nextReading:`以下计划契约项没有主载体:${e.slice(0,8).map(a=>`${a.title}(${a.coverageItemId})`).join("、")}${e.length>8?` 等 ${e.length} 项`:""}。在对应小节的单元 coverageItemIds 中认领后重提;不要原样提交,也不要等到 finalize_section 才补。`}:{},...$&&!e.length&&!t.length?S(k):{}};return Object.keys(h).length?{...b,...e.length?{feedbackRequired:!0}:{},data:{...b.data,...h}}:b};return t.length?aa({...Z,feedbackRequired:!0,progressLedger:{evidence:[],effective:[]},data:{...Z.data,partial:!0,rejectedUnits:t,requiredBindings:w,message:`已生效 ${d.units?.length??0} 个单元;${t.length} 个单元未通过校验:${t.map(a=>a.unitId).join("、")}。按每个 unitId 的 issues 与 requiredBindings 单独修正后重提;不要原样重复整批。`}}):(Q.delete(`${a.store.workspaceId}:${a.runId??""}:${k??""}`),aa(Z))}},Y={name:"preview",description:"只求值不生效(生产排程等需要先看计算结果的场景):返回 previewId、inputHash 与读集版本;随后 submit 带 previewId 提交,读集变化会返回 STALE_PREVIEW。",parameters:{type:"object",properties:{action:{type:"string",enum:[...o]},payload:{type:"object",additionalProperties:!0},reason:{type:"string",minLength:1}},required:["action","payload","reason"],additionalProperties:!1},invoke:async(b,c)=>{let d,e=p(b.action);if("writing-unit"===e)throw Error("CONSTRUCTION_PREVIEW_NOT_SUPPORTED:正文单元请直接 submit(一次完成校验→求值→原子提交),不需要 preview。");let f=String(b.reason??"").trim();if(!f)throw Error("CONSTRUCTION_SUBMIT_REASON_REQUIRED");try{d=ak(e,ag(b.payload),a.store,a.project)}catch(b){let a=b instanceof Error?b.message:String(b);if(a.startsWith("WRITING_"))return{data:{previewed:!1,action:e,stage:"payload-invalid",issues:[a]},feedbackRequired:!0};throw b}let g=(0,i.validateJsonAgainstSchema)(d,ae[e]);if(g.length)return{data:{previewed:!1,action:e,stage:"payload-invalid",issues:g},feedbackRequired:!0};let h=z(e,d,f,c);if("unchanged"in h)return{data:{previewed:!0,effective:!1,action:e,...h}};let j=await B(e,h.id);return{data:{previewed:!0,effective:!1,...C(h.id,j,e),previewId:h.id,inputHash:j.inputHash,readSetVersion:(0,m.Fu)(h.reads)},..."valid"!==j.value.dataValidity||"valid"!==j.value.relatedConstraints?{feedbackRequired:!0}:{}}}},Z=ae["writing-unit"].properties.units.items,$={...Z.properties};for(let a of["planHash","sectionPlanHash","contentContractHash","subsectionId"])delete $[a];let _={name:"write_subsection",description:"按当前冻结小节提交正文;作者决定内容、引用和写作块,程序绑定单元身份、计划哈希与输出。优先使用本工具。每个计划块提供一个 units 项;多个块时须给 blockId。复用既有块的单元身份;提交仍须经过全部写前校验与独立审查。",parameters:{type:"object",additionalProperties:!1,required:["sectionId","subsectionId","units","reason"],properties:{sectionId:U,subsectionId:U,reason:U,expectedSectionPlanHash:{...U,description:"可选的并发前置条件;若已读计划过期则拒绝本次写入"},units:X({...Z,properties:$,required:["kind"]})}},normalizeArgs:a=>{let b=af(a);return{args:b.payload,paths:b.paths}},invoke:async(b,c)=>{let d=String(b.sectionId),e=String(b.subsectionId);if(!a.authority.sectionIds.includes(d))throw Error("WRITING_SECTION_SCOPE_DENIED");let f=a.store.entity(`section-plan:${d}`)?.value?.plan??a.sectionPlans?.get(d);if(!f||!a.structurePlan)throw Error("WRITING_SECTION_PLAN_REQUIRED");if(b.expectedSectionPlanHash&&b.expectedSectionPlanHash!==f.sectionPlanHash)throw Error("WRITING_SECTION_PLAN_STALE:请读取当前节计划后修订");let g=f.subsections.find(a=>a.subsectionId===e);if(!g)throw Error("WRITING_SUBSECTION_UNKNOWN");let h=(0,A.Z1)(a.store,n,[d]).map(a=>a.unit),i=b.units.map(a=>{let b=a.blockId??(g.writingOutline?.length===1?g.writingOutline[0].blockId:void 0);if(g.writingOutline?.length&&!g.writingOutline.some(a=>a.blockId===b))throw Error(`WRITING_BLOCK_REQUIRED:可用 blockId:${g.writingOutline.map(a=>a.blockId).join("、")}`);let c=h.find(a=>a.subsectionId===e&&a.blockId===b);return{...a,subsectionId:e,...b?{blockId:b}:{},id:a.id??c?.id??`unit:${(0,m.Fu)([d,e,b??a.kind]).slice(0,24)}`}});if(new Set(i.map(a=>a.blockId??"")).size!==i.length||new Set(i.map(a=>a.id)).size!==i.length)throw Error("WRITING_DUPLICATE_BLOCK:每个写作块只提交一个单元");return W.invoke({action:"writing-unit",reason:b.reason,payload:{purpose:"writing",sectionIds:[d],units:i}},c)}},aa={name:"write_section",description:"一次提交本节多个小节的正文:每个 units 项必须带 subsectionId(可选 blockId)。一节有 2 个及以上小节时优先用本工具,避免逐小节重复发送同一节上下文;单小节用 write_subsection。程序逐单元绑定小节/块身份、计划哈希与输出,提交仍经过全部写前校验与独立审查。",parameters:{type:"object",additionalProperties:!1,required:["sectionId","units","reason"],properties:{sectionId:U,reason:U,expectedSectionPlanHash:{...U,description:"可选的并发前置条件;若已读计划过期则拒绝本次写入"},units:X({...Z,properties:{...$,subsectionId:U},required:["kind","subsectionId"]})}},normalizeArgs:a=>{let b=af(a);return{args:b.payload,paths:b.paths}},invoke:async(b,c)=>{let d=String(b.sectionId);if(!a.authority.sectionIds.includes(d))throw Error("WRITING_SECTION_SCOPE_DENIED");let e=a.store.entity(`section-plan:${d}`)?.value?.plan??a.sectionPlans?.get(d);if(!e||!a.structurePlan)throw Error("WRITING_SECTION_PLAN_REQUIRED");if(b.expectedSectionPlanHash&&b.expectedSectionPlanHash!==e.sectionPlanHash)throw Error("WRITING_SECTION_PLAN_STALE:请读取当前节计划后修订");let f=(0,A.Z1)(a.store,n,[d]).map(a=>a.unit),g=b.units.map(a=>{let b=String(a.subsectionId??"").trim(),c=e.subsections.find(a=>a.subsectionId===b);if(!c)throw Error(`WRITING_SUBSECTION_UNKNOWN:${b||"(空)"};可用:${e.subsections.map(a=>a.subsectionId).join("、")}`);let g=a.blockId??(c.writingOutline?.length===1?c.writingOutline[0].blockId:void 0);if(c.writingOutline?.length&&!c.writingOutline.some(a=>a.blockId===g))throw Error(`WRITING_BLOCK_REQUIRED:小节 ${b} 可用 blockId:${c.writingOutline.map(a=>a.blockId).join("、")}`);let h=f.find(a=>a.subsectionId===b&&a.blockId===g);return{...a,subsectionId:b,...g?{blockId:g}:{},id:a.id??h?.id??`unit:${(0,m.Fu)([d,b,g??a.kind]).slice(0,24)}`}});if(new Set(g.map(a=>`${String(a.subsectionId??"")}\u0000${String(a.blockId??"")}`)).size!==g.length||new Set(g.map(a=>a.id)).size!==g.length)throw Error("WRITING_DUPLICATE_BLOCK:每个写作块只提交一个单元");return W.invoke({action:"writing-unit",reason:b.reason,payload:{purpose:"writing",sectionIds:[d],units:g}},c)}};return[...o.has("writing-unit")&&a.structurePlan?[_,aa]:[],W,Y]}},68011:(a,b,c)=>{c.d(b,{G:()=>k});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(77598),i=c(34933);let j=a=>(0,h.createHash)("sha256").update(JSON.stringify(a)).digest("hex");function k(a,b,c,d){let f=(0,i.x)(b),k=a=>{if(!/^[a-f0-9]{64}$/u.test(a))throw Error("当前模型响应缓存输入身份无效");return j({version:c,inputKey:a,model:f})};return{load(b){let d=k(b),f=g().join(a,`${d}.json`);if(!e().existsSync(f))return;let h=JSON.parse(e().readFileSync(f,"utf8"));if(h.version!==c||h.cacheKey!==d||j(h.response)!==h.responseSha256)throw Error("当前模型响应缓存身份或内容校验失败");return{response:h.response,receipt:{cacheKey:d,responseSha256:h.responseSha256,...h.originRunId?{originRunId:h.originRunId}:{}}}},save(b,f){let i=k(b),l=g().join(a,`${i}.json`);e().mkdirSync(a,{recursive:!0});let m=`${l}.${process.pid}.${(0,h.randomUUID)()}.tmp`;try{e().writeFileSync(m,JSON.stringify({version:c,cacheKey:i,responseSha256:j(f),response:f,...d?{originRunId:d}:{}})),e().renameSync(m,l)}finally{e().rmSync(m,{force:!0})}}}}},72538:(a,b,c)=>{c.d(b,{C3:()=>i,ZB:()=>h,qg:()=>j,zY:()=>f});var d=c(3410),e=c(745);let f="__document__",g=a=>`section-source-review:${a}`;function h(a,b){let c=a.entity(g(b));return c?.deleted||c?.kind!=="section-source-review"||c.value?.version!=="section-source-review-v1"?void 0:c.value}function i(a,b){let c=g(b.sectionId),d=a.entity(c);if(d?.value&&(0,e.Fu)(d.value)===(0,e.Fu)(b))return;let f=`${c}:${d?.version??0}:${(0,e.Fu)(b)}`,h=a.propose({actorId:"program-runtime",purpose:"source-review-progress",reason:"持久保存来源审查分页身份与已完成ID",reads:{entities:[{id:c,version:d?.version??null}],groups:[]},changes:[{id:c,kind:"section-source-review",expectedVersion:d?.version??null,value:b}]},`${f}:propose`);a.evaluate(h.id,"section-source-review-v1",()=>({dataValidity:"valid",relatedConstraints:"valid",schedule:{scope:"local",state:"not-evaluated"},issues:[],result:{complete:b.complete}})),a.commit(h.id,`${f}:commit`)}function j(a,b,c){let g=(0,d.vx)(a,b,{documentHash:"source-review-current-dependencies"}),i=[...new Set([...g.missingOpinions,...g.conflicts])].sort(),j=(0,d.ik)(b),k=h(a,f)??h(a,c),l=k?.cursor.sourceSnapshotHash===j?k.cursor:void 0,m=!!(l&&(k?.complete===!0||l.sourceIds.length>0&&l.completedSourceIds.length>=l.sourceIds.length)),n=0===g.sources.length||m,o=i.length?[`${i.length} 份未引用来源缺少有效意见或意见冲突`]:[];return{complete:n,missingSourceIds:i,reasons:o,identity:(0,e.Fu)({snapshot:j,missingSourceIds:i,cursor:l?.offset??null,opinions:g.opinions.map(a=>[a.filePath,a.verdict,a.reviewInvocationId??"",a.reviewedUnitRefs??[]])})}}},78863:(a,b,c)=>{function d(a,b,c){let d=new Set([...b.coverageItemIds,...b.referencedCoverageItemIds??[]]),f=a.coverageItems.filter(a=>d.has(a.id)),g=new Set(f.map(a=>e(a.text))),h=new Set(a.coverageItems.map(a=>e(a.text))),i=a.requirements.filter(a=>g.has(e(a.text))),j=a.requirements.filter(a=>!h.has(e(a.text))),k=f.filter(a=>b.coverageItemIds.includes(a.id)).map(a=>a.text),l=b.requiredOutputId?a.requiredOutputs.filter(a=>a.outputId===b.requiredOutputId):[],m=[...d].filter(b=>!a.coverageItems.some(a=>a.id===b)).map(a=>({code:"focus-coverage-unknown",id:a}));b.requiredOutputId&&!l.length&&m.push({code:"focus-output-unknown",id:b.requiredOutputId});let n=new Set([b.title,...f.map(a=>a.text),b.contentContract?.objectOrProcess??"",...b.contentContract?.response??[],...b.contentContract?.data??[],...b.contentContract?.acceptance??[]].flatMap(a=>e(a).match(/[一-龥]{2,6}|[a-z][a-z0-9_-]+/gu)??[])),o=[...i,...j,...l.flatMap(a=>[...a.source?.filePath?[{sourceFile:a.source.filePath,quote:a.source.quote}]:[],...a.originalForm?.sourceRefs??[],...a.originalForm?.fields.flatMap(a=>a.basisRefs)??[]])],p=a.evidence.filter(a=>{if(o.some(b=>b.sourceFile===a.sourceFile&&e(b.quote)&&(e(a.quote).includes(e(b.quote))||e(b.quote).includes(e(a.quote)))))return!0;let b=e(`${a.quote}
43
45
  ${a.whyRelevant}`);return[...n].some(a=>b.includes(a))}),q=a.evidence.filter(a=>!p.includes(a)),r=a.methodRequirements.filter(a=>g.has(e(a)));return{...a,writingOutline:[...b.writingOutline??[]],writingOutlineReading:"writingOutline 是按阅读顺序排列的写作块:每块一个主题、一种载体(paragraph/list/table/figure);**一次 submit 提交本小节全部写作块**,每个块各一个单元、各带自己的 blockId(列表块用段落单元、行首编号表达),不要一个块拆一轮。不要把所有覆盖项堆进一个长段。evidenceRefs 只用本小节已有契约项/输出/事实身份。",coverageItems:f,mustAnswer:k,requirements:i,contextRequirements:j,contextQuestions:a.mustAnswer.filter(a=>!h.has(e(a))&&!j.some(b=>e(b.text)===e(a))),requiredOutputs:l,evidence:p,requiredTables:l.filter(a=>"table"===a.form).map(a=>({title:a.element,columns:a.originalForm?.fields.map(a=>a.label)??[],reason:a.originalForm?"按独立审定原表保留字段、分组和说明,空值按各字段契约核验":"当前小节点名输出,列由对象与内容决定"})),outputForms:a.outputForms.filter(a=>l.some(b=>b.form===a.form&&b.element===a.element)),methodRequirements:r,...a.methodPlan?{methodPlan:{methods:r}}:{},obligationIds:[...new Set(i.flatMap(a=>a.obligationId?[a.obligationId]:[]))],factKeys:[...b.factKeys??[]],evidenceOmitted:(a.evidenceOmitted??0)+q.length,deferred:{coverageItems:a.coverageItems.length-f.length,requirements:a.requirements.length-i.length-j.length,requiredOutputs:a.requiredOutputs.length-l.length,evidence:(a.evidenceOmitted??0)+q.length,evidenceIds:q.flatMap(a=>a.evidenceId?[a.evidenceId]:[]),sourceFiles:[...new Set(q.map(a=>a.sourceFile))],reading:"省略项仍保留在节级简报与冻结计划中,不表示没有义务或来源。其余小节按sectionPlan目录逐项承接;需原文时用search_evidence/read_source/read_object按来源身份读取。contextRequirements是尚未逐项映射的节级来源上下文,不要求在每个小节重复;bindingIssues非空须核计划身份,不能认领其它输出补位。"},bindingIssues:m,focusSubsection:{subsectionId:b.subsectionId,title:b.title,primaryCoverageItemIds:[...b.coverageItemIds],referencedCoverageItemIds:[...b.referencedCoverageItemIds??[]],...b.requiredOutputId?{requiredOutputId:b.requiredOutputId}:{},...c?{sectionPlanHash:c}:{},...b.contentContract?{contentContractHash:b.contentContract.hash}:{}}}}c.d(b,{I_:()=>d,Q9:()=>h,kC:()=>g});let e=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase();function f(a,b){let c=e(a),d=0;for(let a of b)c.includes(e(a))&&(d+=1);return d}function g(a){let b=a.contract.sections.find(b=>b.id===a.sectionId);if(!b)return;let c=a.contract.chapters.find(a=>a.id===b.chapterId),d=a.tenderResponsePlan?.sections.find(b=>b.sectionId===a.sectionId),e=d?.contentContract,g=[...new Set([...e?.questions??[],...(e?.coverageItems??[]).map(a=>a.text)])],h=(d?.requiredOutputs??[]).filter(a=>a.allowed).map(a=>({...a.originalForm?{originalForm:a.originalForm}:{},...a.applicability?.delivery.location==="technical-appendix"||a.applicability?.delivery.location==="technical-body"?{deliveryLocation:a.applicability.delivery.location}:{},outputId:a.id??"",form:a.form,element:a.basis,basis:a.source?.quote??a.basis,...a.source?{source:{kind:a.source.kind,quote:a.source.quote,...a.source.filePath?{filePath:a.source.filePath}:{},...a.source.page?{page:a.source.page}:{},...a.source.clause?{clause:a.source.clause}:{},...a.source.fileBinding?{fileBinding:{policy:a.source.fileBinding.policy,filePath:a.source.fileBinding.filePath,parsedSha256:a.source.fileBinding.parsedSha256,quoteHash:a.source.fileBinding.quoteHash}}:{}}}:{}})),i=function(a,b,c){if(!a)return{evidence:[],omitted:0};let d=function(a,b){let c=`${a.title}
44
46
  ${a.objectScope??""}
45
47
  ${b.join("\n")}`,d=new Set;for(let a of c.matchAll(/[一-龥]{2,6}/gu)){let b=a[0];b.length>=2&&d.add(b)}return[...d].slice(0,40)}(b,c),e=[];for(let b of a.sourceControls??[]){let a=(b.sourceRef?.contextSpan??b.sourceRef?.sourceSpan??b.value??"").trim();if(!a)continue;let c=f(a,d);c&&e.push({...b.factId?{evidenceId:b.factId}:{},sourceFile:b.sourceRef?.filePath??b.sourceFile,quote:a,whyRelevant:`与本节关键词命中 ${c} 个:${b.key||b.fieldName||"来源原句"}`})}if(!e.length)for(let b of a.facts){let a=`${b.fieldName??b.key}:${b.value}`.trim();a&&f(a,d)&&e.push({...b.factId?{evidenceId:b.factId}:{},sourceFile:b.sourceFile,quote:a,whyRelevant:"项目冻结事实"})}let g=[...new Map(e.map(a=>[a.sourceFile+"|"+a.quote,a])).values()].sort((a,b)=>f(b.quote,d)-f(a.quote,d)),h=0,i=0,j=[];for(let a of g){if(h+a.quote.length>2e4){i+=1;continue}j.push(a),h+=a.quote.length}return{evidence:j,omitted:i}}(a.project,{title:b.title,...e?.objectScope?{objectScope:e.objectScope}:{}},g);return{sectionId:a.sectionId,title:b.title,chapterTitle:c?.title??b.title,...e?.objectScope?{objectScope:e.objectScope}:{},...e?.rationale?{rationale:e.rationale}:{},mustAnswer:g,requirements:(d?.requirements??[]).map(a=>({text:a.text,...a.obligationId?{obligationId:a.obligationId}:{},sourceFile:a.source.filePath,quote:a.source.quote,...a.source.page?{page:a.source.page}:{},...a.source.clause?{clause:a.source.clause}:{}})),requiredOutputs:h,coverageItems:(e?.coverageItems??[]).map(a=>({id:a.id,text:a.text,enumerated:a.enumerated,kind:a.kind,...a.suggestedCarrier?{suggestedCarrier:a.suggestedCarrier}:{}})),mustNotInclude:d?.mustNotInclude??[],globalRules:a.tenderResponsePlan?.globalRules??[],methodRequirements:e?.methodRequirements??[],...e?.methodPlan?{methodPlan:e.methodPlan}:{},...e?.standardCitations?.length?{standardCitations:e.standardCitations}:{},evidenceSources:e?.evidenceSources??[],outputForms:e?.outputForms??[],obligationIds:e?.obligationIds??[],factKeys:e?.factKeys??[],responsibilityPositions:e?.responsibilityPositions??[],requiredTables:h.filter(b=>"table"===b.form&&(!a.tablesForbidden||"technical-appendix"===b.deliveryLocation)).map(a=>({title:a.element,columns:a.originalForm?.fields.map(a=>a.label)??[],reason:a.originalForm?"必须保留审定原表字段顺序、分组和说明":"招标/计划要求的表;列由作者按本节对象确定"})),evidence:i.evidence,evidenceOmitted:i.omitted,canonicalFacts:function(a,b){if(!b)return{};if(!/工期|进度|里程碑|阶段|资源|劳动|机械|材料|设备|吊装|平面/u.test(a))return{startDate:b.startDate,totalDays:b.totalDays};let c=new Map(b.phases.map(a=>[a.id,a.title]));return{startDate:b.startDate,totalDays:b.totalDays,dayZero:b.dayZero,milestones:b.milestones.map(a=>({title:a.title,day:a.day,date:a.date})),phases:b.phases.map(a=>({title:a.title,startDay:a.startDay,endDay:a.endDay,startDate:a.startDate,endDate:a.endDate})),labor:{peak:b.labor.peak,totalWorkdays:b.labor.totalWorkdays,phaseTotals:b.labor.phaseTotals},machines:b.machines.map(a=>({name:a.name,count:a.count,phase:c.get(a.phaseId)})),.../材料|进场|批次|采购|设备/u.test(a)?{materialBatches:b.materialBatches.map(a=>({name:a.name,batch:a.batch,startDay:a.startDay,endDay:a.endDay}))}:{},reading:"以上是本节可引用的投标策划基准(由工程量与施工方法计算,不是合同承诺);正文引用阶段/里程碑的名称、日期或第 N 天,不得另算另一套日期、阶段或数量,也不得把内部编号写进正文。"}}(b.title,a.executionBaseline)}}function h(a){return a.sectionIds.flatMap(b=>{let c=g({...a,sectionId:b});return c?[c]:[]})}},81146:(a,b,c)=>{function d(a){return{...a?{strategy:a}:{},metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,failureStreak:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}}}c.r(b),c.d(b,{createGenerationDiagnostics:()=>d})},85254:(a,b,c)=>{c.d(b,{Av:()=>Z,KY:()=>r,Y4:()=>Y,yW:()=>X});var d=c(29245),e=c(68515),f=c(34389),g=c(15038),h=c(69977),i=c(6873),j=c(80154),k=c(91088),l=c(745),m=c(49724),n=c(33074),o=c(23105),p=c(36690),q=c(10402);class r extends Error{constructor(a){super(`SECTION_STRUCTURE_PLAN_INVALID:${a.issues.slice(0,8).join(";")}`),this.name="SectionPlanInvalidError",this.detail=a}}let s=["paragraph","table","figure"],t={chart:"figure",diagram:"figure",org_chart:"figure",list:"paragraph"},u=[...s,...Object.keys(t)],v={version:"section-carrier-contract-v1",canonicalPrimaryCarriers:s,writingBlockCarriers:j.TE,inputAliases:t,reading:"primaryCarrier 与程序派生的 contentContract.carrier 使用 paragraph/table/figure;chart/diagram/org_chart 只是输入兼容别名,保存和送审时归一为 figure,不是缺失输出或作者未修订。list 是写作块载体;primaryCarrier 收到 list 时归一为 paragraph,列表排版仍由写作块的 list 承载。requiredOutputs.form 保留图的具体输出形式,carrierSemantic 保留专业语义;每项 expectedPrimaryCarrier/expectedWritingBlockCarrier 与确定性校验同源。组织图 form=org_chart 必须由 figure 小节及 figure 块承接,并实际规划组织层级、岗位、汇报关系;载体值合法不代表这些专业内容已满足。独审仍须核这些语义及原输出要求,不得要求把规范载体改成别名,也不得因规范映射自动放行。"},w=new Set(["coverage-item-not-in-section","coverage-item-unknown","coverage-item-duplicate","coverage-item-missing","referenced-coverage-unknown","referenced-coverage-without-primary","coverage-map-invalid","coverage-map-missing"]),x=new Set(["writing-outline-invalid","output-unallocated","output-coverage-missing","output-coverage-invalid","output-duplicate","business-content-in-technical-plan"]),y={type:"string"},z=a=>({type:"array",items:a}),A=(a,b,c=!1)=>({type:"object",properties:a,required:b,additionalProperties:c});function B(a){let b=String(a??"").toLowerCase();return"table"===b?"table":"paragraph"===b?"paragraph":"figure"===b?"figure":t[b]??"figure"}function C(a){return["blocking","critical","major"].includes(String(a??"").toLowerCase())?"blocking":"advisory"}let D=A({questions:z({...y,minLength:1}),methods:z({...y,minLength:1}),sequence:z({...y,minLength:1}),controlValues:z({...y,minLength:1}),tolerances:z({...y,minLength:1}),acceptance:z({...y,minLength:1}),responsibilities:z({...y,minLength:1}),interfaces:z({...y,minLength:1})},[],!0),E=A({blockId:y,topic:{...y,minLength:1},purpose:{...y,minLength:1},carrier:{...y,enum:j.TE},evidenceRefs:z(y),mustNotRepeat:z(y)},["topic","purpose","carrier"],!0),F=A({title:{...y,minLength:1},coverageItemIds:z({...y,minLength:1}),referencedCoverageItemIds:z({...y,minLength:1}),primaryCarrier:{...y,enum:u,description:"规范载体为 paragraph/table/figure;chart/diagram/org_chart 仅兼容输入,统一保存为 figure;list 仅兼容输入,统一保存为 paragraph,列表排版由写作块的 list 承载。具体图形形式保留在 requiredOutputs.form。"},requiredOutputId:{...y,nullable:!0},factKeys:z({...y,minLength:1}),quantityKeys:z({...y,minLength:1}),outline:D,writingOutline:z(E),objectOrProcess:{...y,minLength:1},response:z(y),data:z(y),acceptance:z(y),decisionReason:{...y,nullable:!0},role:{...y,enum:["content","transition"]}},["title"],!0),G={type:"object",additionalProperties:!1,required:["subsections"],properties:{subsections:z(F)}},H={type:"object",additionalProperties:!1,required:["verdict","findings"],properties:{verdict:{...y,enum:["pass","revise","reject","accept"]},findings:z(A({category:{...y,minLength:1},severity:{...y,enum:["blocking","advisory","critical","major","minor","moderate","warning","medium","non-blocking","info"]},targetSubsectionId:{...y,nullable:!0},detail:{...y,minLength:2},fix:{...y,minLength:2}},["category","severity","detail","fix"],!0)),patches:z(A({subsectionId:{...y,minLength:1},title:{...y,minLength:1},coverageItemIds:z({...y,minLength:1}),referencedCoverageItemIds:z({...y,minLength:1}),primaryCarrier:{...y,enum:u,description:"修改规范载体 paragraph/table/figure;chart/diagram/org_chart 别名仍归一为 figure,不是不同的可保存载体。"},objectOrProcess:y,response:z(y),data:z(y),acceptance:z(y),requiredOutputId:{...y,nullable:!0},factKeys:z({...y,minLength:1}),quantityKeys:z({...y,minLength:1}),outline:D,writingOutline:z(E),controlValues:z({...y,minLength:1}),decisionReason:{...y,nullable:!0},role:{...y,enum:["content","transition"]},mergeInto:{...y,minLength:1}},["subsectionId"],!0))}};function I(a,b){return a.chapters.flatMap(a=>a.sections).find(a=>a.sectionId===b)}function J(a){let b=a??{};return Object.fromEntries(["questions","methods","sequence","controlValues","tolerances","acceptance","responsibilities","interfaces"].map(a=>[a,Array.isArray(b[a])?[...new Set(b[a].map(a=>String(a).trim()).filter(Boolean))]:[]]))}function K(a,b){let c=String(a??"").trim();if(!c)return"";let d=b.get(c.toUpperCase());return d||(/^\d{1,3}$/u.test(c)?b.get(`C${Number(c)}`)??c:c)}function L(a){return a.map(({subsectionId:a,order:b,contentContract:c,...d})=>({...d,...c?{objectOrProcess:c.objectOrProcess,response:c.response,data:c.data,acceptance:c.acceptance}:{}}))}function M(a,b){let c=b.coverageItemIds;if(!c.length)return;let d=new Set,e=a.subsections.map(a=>({...a,coverageItemIds:[...a.coverageItemIds],referencedCoverageItemIds:[...a.referencedCoverageItemIds]}));for(let a of e){let b=[];for(let e of a.coverageItemIds){if(c.includes(e)&&!d.has(e)&&!b.includes(e)){b.push(e),d.add(e);continue}if(c.includes(e)){a.referencedCoverageItemIds.includes(e)||a.referencedCoverageItemIds.push(e);continue}let f=c.find(a=>!d.has(a)&&!b.includes(a));f&&(b.push(f),d.add(f))}a.coverageItemIds=b,a.referencedCoverageItemIds=[...new Set(a.referencedCoverageItemIds)].filter(a=>c.includes(a)&&!b.includes(a))}for(let a of c)if(!d.has(a)){let b=[...e].reverse().find(a=>"transition"!==a.role)??e[0];if(!b)return;b.coverageItemIds=[...b.coverageItemIds,a],d.add(a)}let f=e.map((a,b)=>({...a,order:b}));return(0,q.mn)({...a,subsections:f,...O(f),state:a.state})}function N(a,b){let c=()=>({questions:[],methods:[],sequence:[],controlValues:[],tolerances:[],acceptance:[],responsibilities:[],interfaces:[]}),d=new Set,e=a=>{let c=a.trim()||b.title,e=2;for(;d.has((0,o.ri)(c));)c=`${a}(${e++})`;return d.add((0,o.ri)(c)),c},f=[];for(let a of b.requiredOutputs){let b=(0,q.Z4)(a);f.push({subsectionId:`sub-${f.length+1}`,title:e(a.element),order:f.length,coverageItemIds:[],referencedCoverageItemIds:[],primaryCarrier:b,requiredOutputId:a.outputId,factKeys:[],quantityKeys:[],outline:c(),writingOutline:[{blockId:"blk-1",topic:a.element,purpose:"按冻结必出输出承接,写清对象、判据与责任",carrier:b,evidenceRefs:[a.outputId],mustNotRepeat:[]}],contentContract:(0,i.Gv)({objectOrProcess:a.element,response:["按本节冻结输出承接"],data:[],carrier:b,acceptance:[]})})}(b.coverageItemIds.length||b.factKeys.length||b.quantityKeys.length||!f.length)&&f.push({subsectionId:`sub-${f.length+1}`,title:e(b.title),order:f.length,coverageItemIds:[...b.coverageItemIds],referencedCoverageItemIds:[],primaryCarrier:"paragraph",factKeys:[...b.factKeys],quantityKeys:[...b.quantityKeys],outline:c(),writingOutline:[{blockId:"blk-1",topic:b.title,purpose:"按本节契约项写出对象、措施、控制值、岗位与验收",carrier:"paragraph",evidenceRefs:[...b.coverageItemIds,...b.factKeys,...b.quantityKeys],mustNotRepeat:[]}],contentContract:(0,i.Gv)({objectOrProcess:b.title,response:b.coverageItemIds,data:[],carrier:"paragraph",acceptance:[]})});let g=P({structurePlan:a.structurePlan,sectionId:a.sectionId,subsections:f}),h=(0,q.WM)(g,U(a,b));return(0,q.vs)((0,q.vs)(h,"reviewed"),"frozen")}function O(a){return{coverage:a.flatMap(a=>a.coverageItemIds.map(b=>({coverageItemId:b,subsectionId:a.subsectionId}))),outputCoverage:a.flatMap(a=>a.requiredOutputId?[{outputId:a.requiredOutputId,subsectionId:a.subsectionId}]:[])}}function P(a){let b={structurePlanId:a.structurePlan.planId,structurePlanHash:a.structurePlan.planHash,sectionId:a.sectionId};return{version:"section-structure-plan-v1",planId:"section-plan:"+b.structurePlanHash.slice(0,12)+":"+a.sectionId,...b,state:"draft",subsections:[...a.subsections],...O(a.subsections),sectionPlanHash:""}}function Q(a){return a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()}function R(a,b,c,e,f,g){var i;return[g?"你是独立的施工组织设计节级结构规划审查者,不是本计划的作者。只审小节拆分、粒度、载体与重复;只输出 JSON。":"你是施工组织设计总编与节级结构规划者。只依据冻结的全局结构、本节证据与上下文规划小节;只输出 JSON。","",(0,k.dk)({carrierContract:v,planningContext:function(a,b,c,d){let e=a.planningContext,f=new Set;for(let a of b.coverageItemIds){let b=c.find(b=>b.id===a);b?.obligationId&&f.add(b.obligationId)}return{version:e.version,documentType:e.documentType,...e.projectIdentity?{projectIdentity:e.projectIdentity}:{},tenderProfile:{projectType:e.tenderProfile.projectType,...e.tenderProfile.bidType?{bidType:e.tenderProfile.bidType}:{},...void 0!==e.tenderProfile.identityMarksForbidden?{identityMarksForbidden:e.tenderProfile.identityMarksForbidden}:{},...e.tenderProfile.bodyTablePolicy?{bodyTablePolicy:e.tenderProfile.bodyTablePolicy}:{},...e.tenderProfile.bodyFigurePolicy?{bodyFigurePolicy:e.tenderProfile.bodyFigurePolicy}:{},...e.tenderProfile.bodyDiagramPolicy?{bodyDiagramPolicy:e.tenderProfile.bodyDiagramPolicy}:{}},contractObligations:e.contractObligations.filter(a=>f.has(a.id)&&(0,h.Ln)(a)).map(a=>({id:a.id,text:a.text,...a.items?.length?{items:a.items}:{},quote:a.quote,sourceFile:a.sourceFile,applicability:a.applicability})),methodRequirements:[...d.texts]}}(a,b,e,f),sectionEvidence:function(a,b){let c=a.planningContext.factsBaseline.filter(a=>a.selected&&(b.factKeys.includes(a.key)||`${b.objectScope}
46
- ${b.rationale}`.includes(a.key))).map(b=>({key:b.key,fieldName:b.fieldName??null,objectName:b.objectName??null,...b.condition?{condition:b.condition}:{},status:b.status,sourceFile:b.selected.sourceFile,sourceId:b.selected.sourceId,sourceClass:b.selected.sourceClass,...b.selected.version?{version:b.selected.version}:{},...b.selected.sourceSpan?{sourceSpan:b.selected.sourceSpan}:{},snapshotId:a.planningContext.provenance.projectSnapshotId,valueChars:b.selected.value.length,quoteChars:b.selected.quote?.length??0,valuesDeferred:!0,reading:{tool:"query_project_facts",attribute:b.fieldName||b.key,...b.objectName?{objectName:b.objectName}:{}}}));return{section:{sectionId:b.sectionId,title:b.title,contentGroup:b.contentGroup,objectScope:(0,d.eq)(a.structurePlan,b.objectScope),rationale:(0,d.eq)(a.structurePlan,b.rationale),responsibilityPositions:b.responsibilityPositions,coverageItemIds:b.coverageItemIds,factKeys:b.factKeys,quantityKeys:b.quantityKeys,requiredOutputs:b.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,expectedPrimaryCarrier:(0,q.Z4)(a),expectedWritingBlockCarrier:(0,q.Z4)(a),...a.carrierSemantic?{carrierSemantic:a.carrierSemantic}:{},element:a.element,semanticRole:a.semanticRole,...a.obligationId?{obligationId:a.obligationId}:{},...a.baselineId?{baselineId:a.baselineId}:{},source:{kind:a.source.kind,...a.source.quote?{quote:a.source.quote}:{}}}))},facts:c,factsReading:"facts是完整的本节相关事实目录,原值与原文未送达;不能据此填控制值、公差或数字。已核对象边界和技术条件仍按section.objectScope、契约项与方法要求承接,不得把未送原值解释为没有该条件。小节只规划查询问题/字段/主载;写作时用每项reading的query_project_facts,再按sourceFile用read_source逐字核对,原值不作截断或摘要。",lockedSubsectionTitles:a.lockedSubsectionTitles??[]}}(a,b),coverageItems:(i=b.coverageItemIds,c.map(a=>{let b=i.indexOf(a.id);return{...a,...b>=0?{ref:`C${b+1}`}:{}}}))})].join("\n")}function S(a,b,c,d,e){return(0,k.dk)({...b?{priorReview:b,recheck:"前轮要求修订;按当前候选与实际补丁结果复核。仍需修改则保持 revise/reject,明确无需修改才 pass。"}:{},...c?{coverageSalvage:c,salvageRecheck:"程序为修复覆盖类错误做了机器回填;逐项核对被降级/补入的 coverageItemId 语义归属,若不符用 patches 修正。"}:{},...d?{structuralSalvage:d,structuralRecheck:"程序为补必出输出/写作大纲做了机器回填;逐项核对回填小节的输出、载体、责任与语义归属,若不符用 patches 修正。"}:{},...e?{businessSalvage:e,businessRecheck:"程序已删除商务/费用小节并把其契约项回填到技术小节;核对技术小节语义归属,确认没有残留报价/费用/台账类内容。"}:{},sectionPlan:a,task:"独立审查本节三级小节计划:只审拆分是否专业、粒度、对象/接口/风险/阶段、载体与重复;不写正文",rules:["你是独立节级规划审查者,不是本节计划作者;不得因为作者写了理由就接受。","检查:小节是否覆盖本节对象范围与契约项;是否遗漏对象/专业系统/工作界面/风险/阶段;是否混合不相干对象/工序,或把同一施工关系拆碎;多个区域共用同一流程合法,不按对象数判废。","检查:每个契约项是否恰好一个主载体;每个必出输出是否由正确形态的表/图小节承接;引用小节是否只引用不复述。","**已有主载体的契约项只能引用**:某契约项已由一个小节主载时,其他小节只能用 referencedCoverageItemIds 引用;发现缺失时 fix 必须要求引用或把主载整体移到更合适的小节,不得建议把它加入第二个小节的 coverageItemIds。","载体协议以系统块 carrierContract 和每项必出输出的 expectedPrimaryCarrier/expectedWritingBlockCarrier 为准。不要将 requiredOutputs.form 与 primaryCarrier 逐字比较;org_chart/diagram/chart 均由规范 figure 承接。独立核验图的专业语义(例如组织图的层级、岗位、汇报关系),实际缺少这些内容仍可阻断;规范值与别名不同本身不是专业缺陷。","检查:自选表/图是否有具体理由;标题过渡小节是否真的只作过渡;是否与已锁定节重复。","检查:每个小节的 writingOutline 是否按阅读顺序、每块一个主题、载体与内容形态匹配(并列项→list、可对照矩阵→table、流程/关系/空间/时序→figure、判断/措施/责任→paragraph);必出表/图是否有对应载体的块;`mustNotRepeat` 是否覆盖本节/跨节已承载内容。大纲不新增义务,块不按字数判断。载体按实际关系与阅读需要判断;不得按来源数、字数、表行数或写作块数量判废。仅有表达偏好时给 advisory,确有遗漏、事实冲突或无效对照时定位问题并给补丁。","第一章第一节的第一个块必须是项目基本信息表(冻结事实;缺失写“待核”),且不得排在范围/界面等实质内容之后。","检查:事实/工程量落点是否与本节声明一致;是否出现空泛模板、固定阶段/工日/机械或项目常量。",'检查:相邻自选表小节**列结构相同、行是同类可比较对象**(专业/单体/区段/阶段/输出)即属于同一对照关系,应建议合并为一张表,把拆分维度变成一列;不再要求 objectOrProcess 为同一对象或连续工序。只有字段不兼容、不同对象独立施工内容无法共用列、或合同分别点名输出时才保持分开;不能按标题相近合并段落内容。合并用 `{subsectionId:"<被并入的小节>", mergeInto:"<目标小节>", title:"合并后标题"}` 补丁。',"可修的用 patches 返回(subsectionId + 修改字段);blocking 必须定位对象并给出可核依据及修法。一般表达偏好记 advisory。结构校验通过不等于专业通过;blocking 修订后须独立复核,不能靠降低严重性消失。**只有 blocking finding 才判 revise;仅有 advisory/info 且没有 blocking 时 verdict=pass 并保留 advisory,不得把表达偏好判 revise。**","只输出 JSON。"],output:{verdict:"revise",findings:[{category:"granularity",severity:"blocking",targetSubsectionId:"sub-1",detail:"可核问题",fix:"具体修法"}],patches:[{subsectionId:"sub-1",title:"修订后标题"}]}})}function T(a){return a.map(a=>a.message)}function U(a,b){let c=(0,n.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}).filter(a=>b.coverageItemIds.includes(a.id));return{structurePlan:a.structurePlan,coverageItems:c.map(a=>({id:a.id,text:a.text,enumerated:a.enumerated})),lockedSubsectionTitles:a.lockedSubsectionTitles??[],lockedOutputDedupeKeys:a.lockedOutputDedupeKeys??[],requireStructureFrozen:!0,sourceDraftContracts:a.sourceDraftContracts,requireWritingOutline:!0}}function V(a,b,c){return(0,q.Sw)((0,q.mn)({...a,state:a.state??"draft"}),U(b,c))}function W(a,b){let c="string"==typeof b.mergeInto?b.mergeInto.trim():"";if(c&&c!==String(b.subsectionId??"")){let d=a.subsections.find(a=>a.subsectionId===String(b.subsectionId)),e=a.subsections.find(a=>a.subsectionId===c);if(!d||!e)throw Error("SECTION_MERGE_TARGET_MISSING:合并源或目标不存在");if(d.requiredOutputId||e.requiredOutputId||"transition"===d.role||"transition"===e.role||"table"!==d.primaryCarrier||"table"!==e.primaryCarrier||!d.contentContract||!e.contentContract||!d.contentContract.data.length||JSON.stringify([...d.contentContract.data].sort())!==JSON.stringify([...e.contentContract.data].sort()))throw Error("SECTION_MERGE_INCOMPATIBLE:仅允许字段兼容的自选对照表;必出输出、段落和过渡小节不得合并");let f={...e.outline};for(let a of Object.keys(f))f[a]=[...new Set([...e.outline[a],...d.outline[a]])];let g=a.subsections.filter(a=>a.subsectionId!==d.subsectionId).map(a=>a.subsectionId!==e.subsectionId?a:{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},coverageItemIds:[...new Set([...a.coverageItemIds,...d.coverageItemIds])],referencedCoverageItemIds:[...new Set([...a.referencedCoverageItemIds,...d.referencedCoverageItemIds])],factKeys:[...new Set([...a.factKeys,...d.factKeys])],quantityKeys:[...new Set([...a.quantityKeys,...d.quantityKeys])],writingOutline:(0,j.uR)([...a.writingOutline??[],...d.writingOutline??[]]),outline:f,contentContract:(0,i.Gv)({...e.contentContract,objectOrProcess:[...new Set([e.contentContract.objectOrProcess,d.contentContract.objectOrProcess])].join(";"),response:[...e.contentContract.response,...d.contentContract.response],acceptance:[...e.contentContract.acceptance,...d.contentContract.acceptance]}),...d.decisionReason||a.decisionReason?{decisionReason:[a.decisionReason,d.decisionReason].filter(Boolean).join(";")}:{}}).map((a,b)=>({...a,order:b}));return{...a,subsections:g,...O(g)}}let d=a.subsections.map(a=>{if(String(b.subsectionId??"")!==a.subsectionId)return a;let c=J(b.outline);return Array.isArray(b.controlValues)&&(c.controlValues=[...new Set(b.controlValues.map(String).map(a=>a.trim()).filter(Boolean))]),{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.referencedCoverageItemIds)?{referencedCoverageItemIds:[...new Set(b.referencedCoverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...u.includes(b.primaryCarrier)?{primaryCarrier:B(b.primaryCarrier)}:{},..."string"==typeof b.requiredOutputId&&b.requiredOutputId.trim()?{requiredOutputId:b.requiredOutputId.trim()}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...void 0!==b.outline||Array.isArray(b.controlValues)?{outline:c}:{},...void 0!==b.writingOutline?{writingOutline:(0,j.uR)(b.writingOutline)}:{},..."string"==typeof b.decisionReason&&b.decisionReason.trim()?{decisionReason:b.decisionReason.trim()}:{},...a.contentContract?{contentContract:(0,i.Gv)({...a.contentContract,carrier:u.includes(b.primaryCarrier)?B(b.primaryCarrier):a.primaryCarrier,..."string"==typeof b.objectOrProcess?{objectOrProcess:b.objectOrProcess}:{},...Array.isArray(b.response)?{response:b.response.map(String)}:{},...Array.isArray(b.data)?{data:b.data.map(String)}:{},...Array.isArray(b.acceptance)?{acceptance:b.acceptance.map(String)}:{}})}:{},..."transition"===b.role?{role:"transition"}:{}}});return{...a,subsections:d,...O(d)}}function X(a,b){let c=a=>String(a??"").replace(/\s+/gu,"").trim(),d=new Set;for(let a of b)for(let b of a.subsections)d.add(c(b.title));return a.subsections.map(a=>c(a.title)).filter((a,b,c)=>a&&(d.has(a)||c.indexOf(a)!==b)).filter((a,b,c)=>c.indexOf(a)===b)}async function Y(a){let b,c,h,s,t;a.sourceDraftContracts?a.sourceDraftContracts.assertSourceDraft(a.structurePlan,a.sectionId):(0,p.UW)(a.structurePlan);let u=I(a.structurePlan,a.sectionId);if(!u)throw Error(`SECTION_STRUCTURE_PLAN_INVALID:节「${a.sectionId}」不在冻结的全局结构计划里`);let v=(0,n.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}),y=function(a,b){var c,d;let e=(c=a.structurePlan,d=b.sectionId,c.chapters.find(a=>a.sections.some(a=>a.sectionId===d))),f=e?.title??"",g=new Set,h=new Set;for(let b of a.planningContext.professionalCandidates)if((0,o.ri)(b.chapterTitle)===(0,o.ri)(f))for(let a of[...b.sectionCandidates.flatMap(a=>a.required),...b.contentRequirements.flatMap(a=>a.required)]){let b=String(a).trim();b&&(g.add(b),h.add(Q(b)))}return{texts:[...g],keys:h}}(a,u),z=v.filter(a=>u.coverageItemIds.includes(a.id)||"method"===a.kind&&y.keys.has(Q(a.text))).map(a=>({id:a.id,text:a.text,kind:a.kind,...a.enumerated?{enumerated:!0}:{}})),A={diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"structuredGeneration",callKind:"section-planning",maxTokens:e.sL.y,...a.responseCache?{responseCache:a.responseCache}:{}},D=R(a,u,z,v,y,!1),E=a.revision?{subsections:L(a.revision.previousPlan.subsections)}:void 0,F=a.authorAttempts??{used:0},X={},Y=async b=>{if(F.used>=2)throw new g.f({scope:a.sectionId,candidate:E,findings:[],reason:`节级规划已用完初稿与1次共享作者修订,保留候选与具体校验反馈,不能重新从头计费`});let c=b?.length?(0,k.dk)({task:"局部纠正:为已冻结的节规划三级小节,不重新推演全文内容",previousResponse:E,deterministicIssues:b,section:{sectionId:u.sectionId,title:u.title,contentGroup:u.contentGroup,objectScope:(0,d.eq)(a.structurePlan,u.objectScope),coverageItemIds:u.coverageItemIds,factKeys:u.factKeys,quantityKeys:u.quantityKeys,requiredOutputs:u.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element}))},lockedSubsectionTitles:a.lockedSubsectionTitles??[],rules:["只纠正具体错误,保留前候选其他有效内容,不改节身份或范围。","每项契约项恰好一个主载,每个必出输出由正确表/图载体承接,事实与工程量键只用本节给定身份。","已有主载体的契约项不得再加第二个主载:其他小节写 referencedCoverageItemIds;复合义务的子项用引用,不复制父项。","coverageItemIds 只能写 coverageItems 列表里的 ref(C1、C2…)或逐字复制其 id;不得编造哈希 id。","保留并补齐每个内容小节的 writingOutline:按阅读顺序、每块只回答一个问题、载体按内容形态选择;必出表/图必须有对应载体的块。","自选表/图小节(无 requiredOutputId)必须在 decisionReason 写明唯一对照关系与必须用表/图的理由;同一对照关系只规划一张表,不按专业/单体/区段拆成多张同构表。","不得新增来源、对象、标准、数值或原文没有的内容;返回完整纠正后的subsections。"]}):function(a,b){let c=a.structurePlan.chapters[0]?.sections[0]?.sectionId===b.sectionId;return(0,k.dk)({task:"为已冻结的节规划三级小节:每项契约项恰好一个主载小节,每个必出输出落到表/图小节,事实/工程量有落点",rules:["只规划本节内部的小节,不得新增/删除/改名节,不得写正文。","**内容组**:sectionEvidence.section.contentGroup 是本节唯一主载的内容组;小节只在本节内展开,不得把它写成跨节主载。","小节标题必须是工程名词短语,同级平行;不得出现评审/说明语言,不得以动词开头或标点结尾;本节内不得重名,不得与 lockedSubsectionTitles 语义重叠(确属不同语义角色必须写 decisionReason)。","**契约项**:section.coverageItemIds 中每一项必须恰好出现在一个小节的 coverageItemIds 中,不得遗漏或重复;只是引用别的小节主载体时填 referencedCoverageItemIds,不得同时主载与引用同一项。coverageItems[].ref 是本节契约项的短引用(C1、C2…):coverageItemIds 优先写 ref,程序会映射为真实 id;也可逐字复制 coverageItems[].id。**不得编造或改写哈希 id**:不在 coverageItems 列表里的 id 一律无效,整份计划会被退回。","**已有主载体的契约项只能引用**:某契约项已由一个小节主载时,其他小节只能用 referencedCoverageItemIds 引用,不得再写进第二个小节的 coverageItemIds;复合义务(例如“施组应覆盖供应进场、人员、质保、安全文明、机械、进度、技术措施、应急预案、工资”)的专项子项用引用/覆盖映射表达,不复制父项主载体。","**必出输出**:section.requiredOutputs 中每一项必须恰好有一个小节用 requiredOutputId 承接;表输出只能由 primaryCarrier=table 的小节承接,图/框图/组织图/横道/网络等由 primaryCarrier=figure 承接;不得用段落替代。","**载体**:同字段事实、可对照对象(≥3 行同类数据)、参数矩阵→table;清单→list(段落行表达,不设表格默认);因果、措施、论证、责任、验收→paragraph;流程、关系、空间、层次→figure。自选表/图(没有 requiredOutputId)必须写 decisionReason;**自选表成立条件**:契约项+事实键+工程量键合计至少 2 个来源,且表格有 ≥3 行可比较数据——内容很少的对照写成段落,不硬凑表格。","**同一对照关系只能有一张表**:行是同类可比较对象(专业/单体/区段/阶段/输出),列是共同字段;拆分维度必须作为一列,不得按对象拆成多张同构表。相邻小节列结构相同、行是同类对象时必须合并;只有字段不兼容、不同对象独立施工内容无法共用列,或合同分别点名输出时才分开。","**写作大纲**:每个小节必须按阅读顺序给 writingOutline;每块只回答一个问题(topic)、写清读者应得到的结论(purpose)、按内容形态选载体(paragraph/list/table/figure)。evidenceRefs 只用本小节 coverageItemIds/outputId/factKeys/quantityKeys 中已有的身份;mustNotRepeat 写本节或跨节已承载、本块只能引用不能复述的内容。大纲不新增义务,不改变覆盖账。","**一主题一块**:并列条件/步骤/岗位/检查项/验收要点→list;可对照对象/参数矩阵→table;流程/关系/层次/空间/时序→figure;判断/措施/理由/责任/接口/风险→paragraph。不要把一个块写成覆盖清单,也不要把互不统属的主题堆进同一段。列表块在提交时用段落单元、行首编号或项目符号表达。**每小节 paragraph 块 ≤2、list 块 ≤2**:同一论证链/措施链的连续主题合并成一个块写完,不按问题数拆碎;列表 ≥3 项才成立,2 项以下写进段落。",...c?["**本节是第一章第一节**:writingOutline 的第一个块必须是项目基本信息表(carrier=table),承载项目名称、项目编号、建设单位、建设地点、工程范围/规模、标段/包件、计划开工日期、合同工期、质量标准等冻结事实;缺失值在正文写“待核”。该表固定**两列:项目、内容**;不写“口径/来源/核验状态”等第三列。表后主题与顺序由你按项目资料规划,不得把承包范围/分包界面/实施条件写成跨项目固定清单,也不得把其他实质内容排在基本信息表之前。"]:[],"**事实/工程量**:section.factKeys/quantityKeys 中每个键至少落到一个小节;不得引用本节没有声明的键。","**实质内容**:每个小节至少有一个契约项、引用、输出、事实或内容提纲;空小节拒收。纯标题过渡小节用 role=transition 并写理由,且不得挂契约项/输出/事实。","**内容契约**:objectOrProcess明确同一施工对象/部位或连续工序链;response回答已有契约问题,data列成组查询字段,acceptance列有依据的验收/岗位/记录;primaryCarrier决定carrier。生成摘要不能新增项目事实、规范或合同义务。允许同小节中表与施工段分工,不按对象数拆段。","**合并**:相邻自选表小节只要**列结构相同、行是同类可比较对象**(专业/单体/区段/阶段/输出),就属于同一对照关系,必须合并为一张表,把拆分维度变成一列;不再要求 objectOrProcess 为同一对象或连续工序。只有字段不兼容、不同对象独立施工内容无法共用列、或合同分别点名输出时才保持分开;不能仅因标题相近合并段落内容。","**提交前自检(逐项,不通过就改)**:①section.coverageItemIds 每项恰好一个小节主载,且落在描述同一对象/对照关系的小节;②相邻小节不得共享同一对象/工序链/对照关系,共享就合并;③每个内容小节给独立 objectOrProcess 与 writingOutline,outline 至少填 questions/methods/sequence/acceptance 之一,禁止空 outline;④primaryCarrier 与 requiredOutputs 的规范载体一致,必出输出有对应表/图块;⑤事实/工程量键落到实际使用其数值的小节;⑥同一对照关系只规划一张表,不按专业/单体/区段拆同构表。","不得写死固定阶段/工日/机械/项目常量;对象、标准、数字只引用给定上下文。","输出 JSON;不要解释。"],output:{subsections:[{title:"工程名词短语",coverageItemIds:["C1"],referencedCoverageItemIds:[],primaryCarrier:"table",requiredOutputId:"output:…",factKeys:[],quantityKeys:[],outline:{questions:[],methods:[],sequence:[],controlValues:[],tolerances:[],acceptance:[],responsibilities:[],interfaces:[]},writingOutline:[{blockId:"blk-1",topic:"这个块回答的问题",purpose:"读者应得到的结论",carrier:"paragraph",evidenceRefs:["coverage:…"],mustNotRepeat:["已在表X/节X承载的内容"]}],decisionReason:"载体或跨节去重理由"}]}})}(a,u);X.current=void 0,a.sourceDraftContracts?.assertSourceDraft(a.structurePlan,a.sectionId);let e=await a.caller(D,c,{...A,schema:G,onAttempt:a=>{X.current=a}});if(!e){let a=X.current,b=a?.validationFailure??a?.failure?.value;throw Error(`SECTION_STRUCTURE_PLAN_FAILED:节级规划未返回可校验结果${b?`(${b.slice(0,800)})`:""}`)}F.used+=1,E=e;let f=function(a,b=new Map){return(Array.isArray(a)?a:[]).map((a,c)=>{let d=a??{};return{subsectionId:`sub-${c+1}`,title:String(d.title??"").trim(),order:c,coverageItemIds:Array.isArray(d.coverageItemIds)?[...new Set(d.coverageItemIds.map(a=>K(a,b)).filter(Boolean))]:[],referencedCoverageItemIds:Array.isArray(d.referencedCoverageItemIds)?[...new Set(d.referencedCoverageItemIds.map(a=>K(a,b)).filter(Boolean))]:[],primaryCarrier:B(d.primaryCarrier),..."string"==typeof d.requiredOutputId&&d.requiredOutputId.trim()?{requiredOutputId:d.requiredOutputId.trim()}:{},factKeys:Array.isArray(d.factKeys)?[...new Set(d.factKeys.map(a=>String(a).trim()).filter(Boolean))]:[],quantityKeys:Array.isArray(d.quantityKeys)?[...new Set(d.quantityKeys.map(a=>String(a).trim()).filter(Boolean))]:[],outline:J(d.outline),writingOutline:(0,j.uR)(d.writingOutline).map(a=>({...a,evidenceRefs:a.evidenceRefs.map(a=>K(a,b))})),contentContract:(0,i.Gv)({objectOrProcess:String(d.objectOrProcess??d.title??"").trim(),response:Array.isArray(d.response)?d.response.map(String):J(d.outline).questions,data:Array.isArray(d.data)?d.data.map(String):[],carrier:B(d.primaryCarrier),acceptance:Array.isArray(d.acceptance)?d.acceptance.map(String):J(d.outline).acceptance}),..."string"==typeof d.decisionReason&&d.decisionReason.trim()?{decisionReason:d.decisionReason.trim()}:{},..."transition"===d.role?{role:"transition"}:{}}})}(e?.subsections,new Map(u.coverageItemIds.map((a,b)=>[`C${b+1}`,a])));return P({structurePlan:a.structurePlan,sectionId:a.sectionId,subsections:f})},Z=b=>{let c=X.current;c?.raw&&(0,m.archiveDocumentJsonFailure)(a.diagnostics,{...c,raw:c.raw,validationFailure:"SECTION_STRUCTURE_PLAN_INVALID:"+T(b).join(";"),outputTruncated:!1,callKind:"section-planning"})},$=async a=>{let b;for(let c=0;c<2;c+=1)try{return await Y(a)}catch(c){b=c;let a=c instanceof Error?c.message:String(c);if(!/SECTION_STRUCTURE_PLAN_FAILED|incomplete|transport|ECONN|timeout|stream/iu.test(a))throw c}throw b};try{b=await $(a.revision?[`计划修订理由:${a.revision.reason}`,`当前已读依据:${JSON.stringify(a.revision.evidence)}`]:void 0)}catch(d){let c=d instanceof Error?d.message:String(d);if(!/SECTION_STRUCTURE_PLAN_FAILED|incomplete|transport|ECONN|timeout|stream/iu.test(c)||a.revision)throw d;E={subsections:L((b=N(a,u)).subsections)}}let _=!1,aa=!1,ab=!1,ac=[],ad=async b=>{let d=b,e=V(d,a,u),g=new Set,i=!1,j=()=>{if(!e.length||!e.every(a=>w.has(a.code)))return!1;let b=M(d,u);return!!b&&!V(b,a,u).length&&(e=[],_=!0,c=(d=b).sectionPlanHash,!0)},k=()=>{if(!e.length||!e.every(a=>w.has(a.code)||x.has(a.code)))return!1;let b=f.businessContentTitlePatterns,c=a=>b.some(b=>(a.title+(a.contentContract?.objectOrProcess??"")).includes(b)),g=d.subsections.filter(c),i=g.length?d.subsections.filter(a=>!c(a)).map((a,b)=>({...a,order:b})):d.subsections,j=N(a,u),k=new Set(i.map(a=>a.subsectionId)),l=new Set(i.map(a=>(0,o.ri)(a.title))),m=[...i];for(let a of u.requiredOutputs){if(m.some(b=>b.requiredOutputId===a.outputId))continue;let b=j.subsections.find(b=>b.requiredOutputId===a.outputId);if(!b)continue;let c=m.length+1;for(;k.has(`sub-${c}`);)c+=1;let d=`sub-${c}`;k.add(d);let e=b.title,f=2;for(;l.has((0,o.ri)(e));)e=`${b.title}(${f++})`;l.add((0,o.ri)(e)),m.push({...b,subsectionId:d,title:e,order:m.length})}let n=new Set,p=m.filter(a=>!a.requiredOutputId||!n.has(a.requiredOutputId)&&(n.add(a.requiredOutputId),!0)).map((a,b)=>{let c=new Set([...a.coverageItemIds,...a.referencedCoverageItemIds,...a.factKeys,...a.quantityKeys,...a.requiredOutputId?[a.requiredOutputId]:[]]),d=(a.writingOutline??[]).map(a=>({...a,evidenceRefs:a.evidenceRefs.filter(a=>!/^(?:coverage|output):/u.test(a)||c.has(a))})),e=d.length||"transition"===a.role?d:[{blockId:"blk-1",topic:a.title,purpose:a.contentContract?.objectOrProcess||a.title,carrier:a.primaryCarrier,evidenceRefs:[...a.requiredOutputId?[a.requiredOutputId]:[],...a.coverageItemIds],mustNotRepeat:[]}];return{...a,order:b,writingOutline:e}}),r=(0,q.mn)({...d,subsections:p,...O(p)}),t=u.coverageItemIds.length?M(r,u):r;return!!t&&!V(t,a,u).length&&(e=[],aa=!0,h=(d=t).sectionPlanHash,g.length&&(ab=!0,s=d.sectionPlanHash,ac=g.map(a=>a.title)),!0)};for(;e.length&&(Z(e),!(j()||k()));){let b=(0,l.Fu)(d);if((i=g.has(b))||F.used>=2)break;g.add(b),e=V(d=await $(T(e)),a,u),j(),e.length&&k()}if(e.length&&j(),e.length&&k(),e.length){let b=new Set(u.coverageItemIds),c=[...new Set(d.subsections.flatMap(a=>[...a.coverageItemIds,...a.referencedCoverageItemIds]))].filter(a=>!b.has(a)).map(b=>({id:b,sourceSectionId:a.structurePlan.chapters.flatMap(a=>a.sections).find(a=>a.sectionId!==u.sectionId&&a.coverageItemIds.includes(b))?.sectionId??""})).filter(a=>a.sourceSectionId);throw new r({sectionId:a.sectionId,issues:T(e),availableCoverageItems:z.map(a=>({id:a.id,text:a.text,suggestedCarrier:a.enumerated?"table":"paragraph"})),foreignCoverageItems:c,identicalRetry:i})}return d};b=await ad(b);let ae=a=>({id:"section-plan:coverage-ref-recovery",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"coverage-ref-recovery",severity:"advisory",target:{},detail:"模型输出的覆盖映射不合法(重复主载体/无效引用),程序已按本节契约项清单回填或把重复主载降为引用;请核对每个契约项的语义归属",fix:"若归属不符,用 patches 调整 coverageItemIds/referencedCoverageItemIds;不要删除本节契约项"}),af=a=>({id:"section-plan:structural-ref-recovery",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"structural-ref-recovery",severity:"advisory",target:{},detail:"模型输出的必出输出小节/写作大纲不完整,程序已按本节冻结 requiredOutputs 与契约项回填缺项;请核对每个输出小节的语义、载体与责任",fix:"若归属不符,用 patches 调整 requiredOutputId/标题/块;不要删除本节必出输出"}),ag=a=>({id:"section-plan:business-content-removal",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"business-content-removal",severity:"advisory",target:{},detail:`程序已从节计划删除商务/费用小节(${ac.join("、")||"费用类小节"}):报价构成、费用计取、台账凭证不进入技术标;其契约项已回填到技术小节,请核对语义归属并确认没有残留费用表述`,fix:"若删除后技术内容不足,用 patches 补技术小节(工艺、组织、质量、安全、进度或接口);不得恢复商务/费用内容以凑覆盖"}),ah=[];_&&ah.push(ae(b)),aa&&ah.push(af(b)),ab&&ah.push(ag(b));let ai=(0,q.WM)(b,U(a,u)),aj=ai.sectionPlanHash,ak=await a.caller(R(a,u,z,v,y,!0),S(ai,void 0,_?ae(ai):void 0,aa?af(ai):void 0,ab?ag(ai):void 0),{...A,schema:H});ak||ah.push({id:"section-plan-review:unavailable",planId:ai.planId,sectionPlanHash:aj,category:"review-unavailable",severity:"advisory",target:{},detail:"独立节规划审查未取得;候选结构确定性校验通过,按未取得审查记录并继续",fix:"整稿终审与后续节可继续核对;不伪造专业通过"});let al=ak??{verdict:"pass",findings:[],patches:[]};for(let[a,b]of(Array.isArray(al.findings)?al.findings:[]).entries()){let c=b??{},d=C(c.severity),e=String(c.detail??"");ah.push({id:`section-plan-review:1:${a+1}`,planId:ai.planId,sectionPlanHash:aj,category:String(c.category??"structure"),severity:d,target:{..."string"==typeof c.targetSubsectionId&&c.targetSubsectionId?{subsectionId:c.targetSubsectionId}:{}},detail:e,fix:String(c.fix??"")})}let am=(Array.isArray(al.patches)?al.patches:[]).map(a=>a??{}).filter(a=>String(a.subsectionId??"").trim()),an=[],ao=[],ap=ai,aq=(a,b)=>{let c=b instanceof Error?b.message:String(b);an.push({subsectionId:String(a.subsectionId),status:"refused",reason:c}),ah.push({id:`section-plan-review:patch:${an.length}`,planId:ai.planId,sectionPlanHash:aj,category:"patch",severity:"advisory",target:{subsectionId:String(a.subsectionId)},detail:`审查补丁被拒绝(未采用):${c}`,fix:"按当前小节身份与确定性错误修正,不得删除必出输出或契约项"})};for(let a of am)try{if(!ap.subsections.some(b=>b.subsectionId===String(a.subsectionId)))throw Error("SECTION_PATCH_TARGET_MISSING");let b=W(ap,a);(0,l.Fu)(b)===(0,l.Fu)(ap)?an.push({subsectionId:String(a.subsectionId),status:"no-op",reason:"候选与当前计划一致"}):(ap=b,ao.push(a))}catch(b){aq(a,b)}try{ai=(0,q.WM)({...ap,state:"validated"},U(a,u)),an.push(...ao.map(a=>({subsectionId:String(a.subsectionId),status:"applied"})))}catch{for(let b of ao)try{ai=(0,q.WM)({...W(ai,b),state:"validated"},U(a,u)),an.push({subsectionId:String(b.subsectionId),status:"applied"})}catch(a){aq(b,a)}}ai=(0,q.WM)({...ai,state:"validated"},U(a,u));let ar=1,as=0,at=ah,au=al,av=[],aw=(0,g.C)(al,ah);for(;aw&&as<3;){if(av.push(...at),F.used>=2){at.push({id:"section-plan-review:revision-budget",planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:"revision-budget",severity:"advisory",target:{},detail:"节级规划作者修订额度已用尽;保留当前有效节计划,未落地意见进入整稿台账",fix:""});break}try{E={subsections:L(ai.subsections)};let b=await ad(await $(at.map(b=>`${b.target.subsectionId??a.sectionId}:${b.detail};修法:${b.fix}`)));ai=(0,q.WM)({...b,state:"validated"},U(a,u))}catch(a){at.push({id:`section-plan-review:revision-recorded:${as+1}`,planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:"revision-recorded",severity:"advisory",target:{},detail:`作者修订未产出可校验候选:${a instanceof Error?a.message:String(a)};保留上一有效节计划,按未决项记录`,fix:""});break}if(as+=1,_&&c===ai.sectionPlanHash&&!at.some(a=>"coverage-ref-recovery"===a.category)&&at.push(ae(ai)),aa&&h===ai.sectionPlanHash&&!at.some(a=>"structural-ref-recovery"===a.category)&&at.push(af(ai)),ab&&s===ai.sectionPlanHash&&!at.some(a=>"business-content-removal"===a.category)&&at.push(ag(ai)),ar>=3)break;if(t&&ai.sectionPlanHash===t){at.push({id:"section-plan-review:unchanged",planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:"review-skipped-unchanged",severity:"advisory",target:{},detail:"修订未改变节计划 hash;不重复审查同一输入,按未决项记录",fix:""});break}let b=ai.sectionPlanHash,d=await a.caller(R(a,u,z,v,y,!0),S(ai,{verdict:au.verdict,findings:at,patches:an}),{...A,schema:H});if(ar+=1,!d){at.push({id:"section-plan-review:unavailable",planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:"review-unavailable",severity:"advisory",target:{},detail:"修订后独立节规划审查未取得;保留当前有效节计划,按未取得审查记录",fix:""});break}au=d,at=(Array.isArray(d.findings)?d.findings:[]).map((a,b)=>({id:`section-plan-review:${ar}:${b+1}`,planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:String(a.category??"structure"),severity:C(a.severity),target:"string"==typeof a.targetSubsectionId?{subsectionId:a.targetSubsectionId}:{},detail:String(a.detail??""),fix:String(a.fix??"")})),t=b,aw=(0,g.C)(d,at)}_&&c===ai.sectionPlanHash&&!at.some(a=>"coverage-ref-recovery"===a.category)&&at.push(ae(ai)),aa&&h===ai.sectionPlanHash&&!at.some(a=>"structural-ref-recovery"===a.category)&&at.push(af(ai)),ab&&s===ai.sectionPlanHash&&!at.some(a=>"business-content-removal"===a.category)&&at.push(ag(ai)),ar>1&&at.push(...ah.filter(a=>"patch"===a.category));let ax=(0,q.vs)((0,q.vs)(ai,"reviewed"),"frozen"),ay=at.filter(a=>"blocking"===a.severity).length;return{plan:ax,review:{planId:ax.planId,sectionPlanHash:ax.sectionPlanHash,reviewer:"independent-section-plan-review",rounds:ar,findings:at,...ar>1?{priorFindings:av}:{},patches:an,verdict:ay?"revise":"pass",advisoriesOnly:0===ay,...ay?{recorded:!0,recordedBlocking:ay}:{}},coverage:{subsections:ax.subsections.length,coverageItems:ax.coverage.length,outputs:ax.outputCoverage.length,facts:u.factKeys.length+u.quantityKeys.length}}}function Z(a){(0,q.aT)(a.original),a.contracts.assertGlobal(a.structurePlan.planHash),a.contracts.assertSourceDraft(a.originalStructure,a.sectionId),a.contracts.assertSourceDraft(a.structurePlan,a.sectionId);let b=I(a.structurePlan,a.sectionId);if(!b||"frozen"!==a.original.state)throw Error("EARLY_DRAFT_PLAN_NOT_APPROVED");return(0,q.WM)({...a.original,planId:"section-plan:"+a.structurePlan.planHash.slice(0,12)+":"+a.sectionId,structurePlanId:a.structurePlan.planId,structurePlanHash:a.structurePlan.planHash},U(a,b))}},85585:(a,b,c)=>{c.d(b,{M:()=>h});let d=[["一步瞃过","一步跨过"],["癹定与碰撞","锁定与碰撞"],["钢権条","钢檩条"],["通风菡管","通风风管"],["墙面髄体","墙面墙体"],["施工阶断","施工阶段"],["深化设计阶断","深化设计阶段"],["条件件驱动","条件驱动"],["版次控制与与","版次控制与"],["峰窝廊面","蜂窝麻面"],["偏、将料、油漆","偏、浆料、油漆"],["偏、将料","偏、浆料"]],e={権:"权",髄:"髓",亜:"亚",団:"团",実:"实",単:"单",気:"气",徳:"德",広:"广",対:"对"},f=(a,b)=>a.slice(0,b).split("\n").length,g=(a,b,c=60)=>{let d=a.lastIndexOf("\n",b)+1,e=a.indexOf("\n",b);return a.slice(d,e<0?a.length:e).trim().slice(0,c)};function h(a){let b=[],c=new Set,h=a=>{let d=a.code+":"+(a.line??"")+":"+a.message;c.has(d)||(c.add(d),b.push(a))};for(let[b,c]of d){let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(e<0)break;d=e+b.length,h({code:"typo-known-wrong-word",severity:"blocker",line:f(a,e),excerpt:g(a,e),message:`已知错词「${b}」应为「${c}」;逐处替换后再交付`})}}for(let[b,c]of Object.entries(e)){let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(e<0)break;d=e+1,h({code:"typo-variant-character",severity:"blocker",line:f(a,e),excerpt:g(a,e),message:`出现日式异体字「${b}」应为「${c}」;简体中文工程文档不得混用`})}}return b}},86265:(a,b,c)=>{c.d(b,{J:()=>j});var d=c(59339),e=c(25164),f=c(60806),g=c(6873),h=c(745),i=c(4053);function j(a){let{store:b}=a,c=a=>{let c={entities:[],groups:[]};for(let d of a)for(let a of[...d.references,...d.assertions.map(a=>a.reference)])if("decision"===a.kind&&c.entities.push({id:a.entityId,version:a.entityVersion}),"certificate"===a.kind){let d=b.certificate(a.certificateId);d&&(c.entities.push(...d.reads.entities),c.groups.push(...d.reads.groups))}return(0,h.xi)(c)},j=new Map(a.contract.sections.map(a=>[a.id,a.title]));return{prepareWriting(c){if(c.responsibilityId!==a.authority.actorId)throw Error("WRITING_RESPONSIBILITY_SCOPE_DENIED");let d=c.sectionIds.length?c.sectionIds:[];if(1!==d.length)throw Error("WRITING_SECTION_SINGLE_REQUIRED:每次正文提交只能声明一个章节;跨节内容拆成多次提交,或在正文中引用他节的表/图");let[e]=d;if(!j.has(e))throw Error(`WRITING_SECTION_UNKNOWN:${e}`);if(!a.authority.sectionIds.includes(e))throw Error(`WRITING_SECTION_SCOPE_DENIED:${e}`);let f=a.sectionContractReads?.reads(d),g={actorId:a.authority.actorId,responsibilityId:c.responsibilityId,purpose:c.purpose,sectionIds:d},h=[...new Set([...c.unitIds??[]])];if(!h.length)throw Error("WRITING_UNITS_REQUIRED");let k=[...new Set([...f?.entities.map(a=>a.id)??[],...a.authority.sectionIds,...h.map(a=>(0,i.tp)(c.responsibilityId,c.purpose,a,e))])];return b.captureReadSnapshot({entityIds:k,groupKeys:[`section-units:${e}`],context:g})},proposeWriting(g,k,l,m){let n,o=b.readSnapshot(g),p=o.context??{};if(p.actorId!==a.authority.actorId)throw Error("WRITING_SNAPSHOT_SCOPE_DENIED");if(!l?.trim())throw Error("WRITING_REASON_REQUIRED");let q=k??{},r={...q,units:Array.isArray(q.units)?q.units.map(b=>(0,d.Mf)(b??{},a.tenderResponsePlan,Array.isArray(q.sectionIds)?q.sectionIds.map(String):[])):q.units},{submission:s,issues:t}=(0,i.Dp)(r);if(!s)throw Error(`WRITING_SUBMISSION_INVALID:${t.map(a=>`${a.unitId}:${a.code}:${a.message}`).join(";")}`);s.units=s.units.map(b=>{let{carrierRevisionReason:c,...e}=b;return(0,d.Mf)({...e,...s.revision?.reason?.trim()?{carrierRevisionReason:s.revision.reason.trim()}:{}},a.tenderResponsePlan,s.sectionIds)});if(s.responsibilityId!==a.authority.actorId)throw Error("WRITING_RESPONSIBILITY_SCOPE_DENIED");if(!s.sectionIds.length)throw Error("WRITING_SECTION_REQUIRED");if(1!==s.sectionIds.length)throw Error("WRITING_SECTION_SINGLE_REQUIRED:每次正文提交只能声明一个章节;跨节内容拆成多次提交,或在正文中引用他节的表/图");for(let b of s.sectionIds){if(!j.has(b))throw Error(`WRITING_SECTION_UNKNOWN:${b}`);if(!a.authority.sectionIds.includes(b))throw Error(`WRITING_SECTION_SCOPE_DENIED:${b}`)}let u=a.sectionContractReads?.reads(s.sectionIds);for(let a of u?.entities??[])if(!o.reads.entities.some(b=>b.id===a.id&&b.version===a.version))throw Error("SECTION_CONTRACT_SNAPSHOT_MISMATCH");let v=s.units.flatMap(b=>(0,d.B$)(b,a.tenderResponsePlan,s.sectionIds));if(v.length)throw Error("WRITING_DELIVERY_INVALID:"+v.join(";"));if(s.revision){let c=b.proposalOperation(m);if(c){let b=c.changes.find(a=>"writing-revision"===a.kind)?.value?.requestHash;if(c.actorId!==a.authority.actorId||b!==(0,h.Fu)([s,l]))throw Error("DOMAIN_OPERATION_ID_CONFLICT");return c}}if(p.purpose!==s.purpose||JSON.stringify(p.sectionIds)!==JSON.stringify(s.sectionIds))throw Error("WRITING_SNAPSHOT_SCOPE_DENIED");for(let a of[...s.units.map(a=>a.id),...s.revision?.retire.map(a=>a.unitId)??[]]){let b=(0,i.tp)(s.responsibilityId,s.purpose,a,s.sectionIds[0]);if(!o.reads.entities.some(a=>a.id===b))throw Error("WRITING_SNAPSHOT_UNIT_NOT_READ")}let w=c(s.units),x=(0,h.xi)({entities:[...o.reads.entities,...w.entities],groups:[...o.reads.groups,...w.groups]}),y=(0,f.R)(b,s,s.units.map(a=>({id:(0,i.tp)(s.responsibilityId,s.purpose,a.id,s.sectionIds[0]),kind:"writing-unit",value:{...a,responsibilityId:s.responsibilityId,purpose:s.purpose,sectionIds:[s.sectionIds[0]]}})).map(a=>({id:a.id,kind:a.kind,expectedVersion:b.entity(a.id)?.version??null,value:a.value})),l);for(let a of y)x.entities.push({id:a.id,version:a.expectedVersion});let z=s.sectionIds[0],A=new Map;for(;;){let a=b.entityPage({groupKey:`section-units:${z}`,...n?{afterId:n}:{},limit:200});for(let b of a.entities)(0,i.iC)(b)&&A.set(b.id,b.version);if(!a.nextAfterId)break;n=a.nextAfterId}for(let a of y)"writing-unit"===a.kind&&(a.value?A.set(a.id,(0,h.Fu)(a.value)===(0,h.Fu)(b.entity(a.id)?.value??null)?b.entity(a.id).version:(a.expectedVersion??0)+1):A.delete(a.id));let B=(0,e.L1)({store:b,sectionId:z,responsibilityId:s.responsibilityId,phase:"drafting",snapshot:{unitVersions:[...A].map(([a,b])=>({entityId:a,version:b})),unreviewedUnitIds:[],blockingFindingIds:[],sourceReviewComplete:!1,...s.units[0]?.planHash?{structurePlanHash:s.units[0].planHash}:{},...s.units[0]?.sectionPlanHash?{sectionPlanHash:s.units[0].sectionPlanHash}:{}},trigger:"writing-committed"});return y.some(a=>(0,h.Fu)(a.value)!==(0,h.Fu)(b.entity(a.id)?.value??null))&&!B.unchanged&&(y.push(B.change),x.entities.push(B.read)),b.propose({actorId:a.authority.actorId,purpose:s.purpose,reason:l,reads:(0,h.xi)(x),changes:y},m)},evaluateWriting:c=>b.evaluate(c,"construction-writing-unit-v4",c=>{let e=[],f={responsibilityId:a.authority.actorId,purpose:"",sectionIds:[],units:c.proposal.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.value)},{issues:h}=(0,i.Dp)({responsibilityId:a.authority.actorId,purpose:"evaluation",sectionIds:[],units:f.units,...c.proposal.changes.some(a=>"writing-revision"===a.kind)?{revision:c.proposal.changes.find(a=>"writing-revision"===a.kind).value.revision}:{}});for(let b of f.units)for(let c of(0,d.B$)(b,a.tenderResponsePlan,b.sectionIds))e.push({code:c,entityId:b.id,reason:c});for(let b of f.units)for(let c of(0,g.dA)(b,a.evidenceText??(()=>void 0)))e.push({code:c.toUpperCase().replace(/-/gu,"_"),entityId:b.id,reason:"事实主张的来源锚点或正文实现不一致"});for(let a of h)e.push({code:a.code.toUpperCase().replace(/-/gu,"_"),entityId:a.unitId,reason:a.message});let j=(0,i.YK)({units:f.units,entityIdFor:b=>(0,i.tp)(a.authority.actorId,c.proposal.purpose,b.id,b.sectionIds?.[0]),currentEntityVersion:a=>b.entity(a)?.version,certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)});for(let a of j)for(let b of a.states)"current"!==b.state&&e.push({code:`REFERENCE_${b.state.toUpperCase()}`,entityId:a.entityId,reason:b.reason});let k=c.proposal.reads.entities.filter(a=>null!==a.version&&b.entity(a.id)?.version!==a.version);return{dataValidity:e.length?"invalid":"valid",relatedConstraints:k.length||j.some(a=>a.needsRecheck)?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:[...e,...k.map(a=>({code:"READ_SUPERSEDED",entityId:a.id,reason:`读集里的 v${a.version} 已被新版本替代`}))],result:{writingUnits:c.proposal.changes.map(a=>a.id),referencesChecked:j.length}}}),commit(e,f){let h=b.proposal(e);if(!h||h.actorId!==a.authority.actorId)throw Error("WRITING_PROPOSAL_SCOPE_DENIED");return b.commit(e,f,e=>{let f=e.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.value),h=(0,i.Dp)({responsibilityId:a.authority.actorId,purpose:e.purpose,units:f,...e.changes.some(a=>"writing-revision"===a.kind)?{revision:e.changes.find(a=>"writing-revision"===a.kind).value.revision}:{}});if(f.some(b=>(0,g.dA)(b,a.evidenceText??(()=>void 0)).length))throw Error("WRITING_CLAIM_INVALID");if(f.some(b=>(0,d.B$)(b,a.tenderResponsePlan,b.sectionIds).length))throw Error("WRITING_DELIVERY_BINDING_INVALID");if(h.issues.length)throw Error("WRITING_SUBMISSION_INVALID:"+h.issues.map(a=>`${a.unitId}:${a.code}:${a.message}`).join(";"));let j=c(f);if(j.entities.some(a=>!e.reads.entities.some(b=>b.id===a.id&&b.version===a.version))||j.groups.some(a=>!e.reads.groups.some(b=>b.key===a.key&&b.version===a.version)))throw Error("WRITING_REFERENCE_READ_SET_INVALID:候选未保存实际引用读集,须以原引用重新提出候选");let k=(0,i.YK)({units:f,entityIdFor:b=>(0,i.tp)(a.authority.actorId,e.purpose,b.id,b.sectionIds?.[0]),currentEntityVersion:a=>{let c=b.entity(a);return c&&!c.deleted?c.version:void 0},certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)}).flatMap(a=>a.states.filter(a=>"current"!==a.state).map(b=>`${a.unitId}: ${b.reason}`));if(k.length)throw Error("WRITING_REFERENCE_INVALID:"+k.join(";"))})},pendingRecheck(){let c,d=[];for(;;){let e=b.entityPage({groupKey:`writing:${a.authority.actorId}`,...c?{afterId:c}:{},limit:200});for(let a of e.entities){let b=(0,i.iC)(a);b&&d.push({entityId:a.id,unit:b})}if(!e.nextAfterId)break;c=e.nextAfterId}return(0,i.YK)({units:d.map(a=>a.unit),entityIdFor:(a,b)=>d[b].entityId,currentEntityVersion:a=>b.entity(a)?.version,certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)}).filter(a=>a.needsRecheck)},unitsReferencing:(a,b,c,d)=>b.filter(b=>[...b.references,...b.assertions.map(a=>a.reference)].some(b=>b.kind===a.kind&&("decision"===b.kind?b.entityId:b.certificateId)===a.id)).map(a=>(0,i.tp)(c,d,a.id,a.sectionIds?.[0])),submissionFingerprint:a=>(0,h.Fu)([a.responsibilityId,a.purpose,a.sectionIds,a.units.map(a=>a.id)])}}}};
48
+ ${b.rationale}`.includes(a.key))).map(b=>({key:b.key,fieldName:b.fieldName??null,objectName:b.objectName??null,...b.condition?{condition:b.condition}:{},status:b.status,sourceFile:b.selected.sourceFile,sourceId:b.selected.sourceId,sourceClass:b.selected.sourceClass,...b.selected.version?{version:b.selected.version}:{},...b.selected.sourceSpan?{sourceSpan:b.selected.sourceSpan}:{},snapshotId:a.planningContext.provenance.projectSnapshotId,valueChars:b.selected.value.length,quoteChars:b.selected.quote?.length??0,valuesDeferred:!0,reading:{tool:"query_project_facts",attribute:b.fieldName||b.key,...b.objectName?{objectName:b.objectName}:{}}}));return{section:{sectionId:b.sectionId,title:b.title,contentGroup:b.contentGroup,objectScope:(0,d.eq)(a.structurePlan,b.objectScope),rationale:(0,d.eq)(a.structurePlan,b.rationale),responsibilityPositions:b.responsibilityPositions,coverageItemIds:b.coverageItemIds,factKeys:b.factKeys,quantityKeys:b.quantityKeys,requiredOutputs:b.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,expectedPrimaryCarrier:(0,q.Z4)(a),expectedWritingBlockCarrier:(0,q.Z4)(a),...a.carrierSemantic?{carrierSemantic:a.carrierSemantic}:{},element:a.element,semanticRole:a.semanticRole,...a.obligationId?{obligationId:a.obligationId}:{},...a.baselineId?{baselineId:a.baselineId}:{},source:{kind:a.source.kind,...a.source.quote?{quote:a.source.quote}:{}}}))},facts:c,factsReading:"facts是完整的本节相关事实目录,原值与原文未送达;不能据此填控制值、公差或数字。已核对象边界和技术条件仍按section.objectScope、契约项与方法要求承接,不得把未送原值解释为没有该条件。小节只规划查询问题/字段/主载;写作时用每项reading的query_project_facts,再按sourceFile用read_source逐字核对,原值不作截断或摘要。",lockedSubsectionTitles:a.lockedSubsectionTitles??[]}}(a,b),coverageItems:(i=b.coverageItemIds,c.map(a=>{let b=i.indexOf(a.id);return{...a,...b>=0?{ref:`C${b+1}`}:{}}}))})].join("\n")}function S(a,b,c,d,e){return(0,k.dk)({...b?{priorReview:b,recheck:"前轮要求修订;按当前候选与实际补丁结果复核。仍需修改则保持 revise/reject,明确无需修改才 pass。"}:{},...c?{coverageSalvage:c,salvageRecheck:"程序为修复覆盖类错误做了机器回填;逐项核对被降级/补入的 coverageItemId 语义归属,若不符用 patches 修正。"}:{},...d?{structuralSalvage:d,structuralRecheck:"程序为补必出输出/写作大纲做了机器回填;逐项核对回填小节的输出、载体、责任与语义归属,若不符用 patches 修正。"}:{},...e?{businessSalvage:e,businessRecheck:"程序已删除商务/费用小节并把其契约项回填到技术小节;核对技术小节语义归属,确认没有残留报价/费用/台账类内容。"}:{},sectionPlan:a,task:"独立审查本节三级小节计划:只审拆分是否专业、粒度、对象/接口/风险/阶段、载体与重复;不写正文",rules:["你是独立节级规划审查者,不是本节计划作者;不得因为作者写了理由就接受。","检查:小节是否覆盖本节对象范围与契约项;是否遗漏对象/专业系统/工作界面/风险/阶段;是否混合不相干对象/工序,或把同一施工关系拆碎;多个区域共用同一流程合法,不按对象数判废。","检查:每个契约项是否恰好一个主载体;每个必出输出是否由正确形态的表/图小节承接;引用小节是否只引用不复述。","**已有主载体的契约项只能引用**:某契约项已由一个小节主载时,其他小节只能用 referencedCoverageItemIds 引用;发现缺失时 fix 必须要求引用或把主载整体移到更合适的小节,不得建议把它加入第二个小节的 coverageItemIds。","载体协议以系统块 carrierContract 和每项必出输出的 expectedPrimaryCarrier/expectedWritingBlockCarrier 为准。不要将 requiredOutputs.form 与 primaryCarrier 逐字比较;org_chart/diagram/chart 均由规范 figure 承接。独立核验图的专业语义(例如组织图的层级、岗位、汇报关系),实际缺少这些内容仍可阻断;规范值与别名不同本身不是专业缺陷。","检查:自选表/图是否有具体理由;标题过渡小节是否真的只作过渡;是否与已锁定节重复。","检查:每个小节的 writingOutline 是否按阅读顺序、每块一个主题、载体与内容形态匹配(并列项→list、可对照矩阵→table、流程/关系/空间/时序→figure、判断/措施/责任→paragraph);必出表/图是否有对应载体的块;`mustNotRepeat` 是否覆盖本节/跨节已承载内容。大纲不新增义务,块不按字数判断。载体按实际关系与阅读需要判断;不得按来源数、字数、表行数或写作块数量判废。仅有表达偏好时给 advisory,确有遗漏、事实冲突或无效对照时定位问题并给补丁。","第一章第一节的第一个块必须是项目基本信息表(冻结事实;缺失写“待核”),且不得排在范围/界面等实质内容之后。","检查:事实/工程量落点是否与本节声明一致;是否出现空泛模板、固定阶段/工日/机械或项目常量。",'检查:相邻自选表小节**列结构相同、行是同类可比较对象**(专业/单体/区段/阶段/输出)即属于同一对照关系,应建议合并为一张表,把拆分维度变成一列;不再要求 objectOrProcess 为同一对象或连续工序。只有字段不兼容、不同对象独立施工内容无法共用列、或合同分别点名输出时才保持分开;不能按标题相近合并段落内容。合并用 `{subsectionId:"<被并入的小节>", mergeInto:"<目标小节>", title:"合并后标题"}` 补丁。',"可修的用 patches 返回(subsectionId + 修改字段);blocking 必须定位对象并给出可核依据及修法。一般表达偏好记 advisory。结构校验通过不等于专业通过;blocking 修订后须独立复核,不能靠降低严重性消失。**只有 blocking finding 才判 revise;仅有 advisory/info 且没有 blocking 时 verdict=pass 并保留 advisory,不得把表达偏好判 revise。**","只输出 JSON。"],output:{verdict:"revise",findings:[{category:"granularity",severity:"blocking",targetSubsectionId:"sub-1",detail:"可核问题",fix:"具体修法"}],patches:[{subsectionId:"sub-1",title:"修订后标题"}]}})}function T(a){return a.map(a=>a.message)}function U(a,b){let c=(0,n.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}).filter(a=>b.coverageItemIds.includes(a.id));return{structurePlan:a.structurePlan,coverageItems:c.map(a=>({id:a.id,text:a.text,enumerated:a.enumerated})),lockedSubsectionTitles:a.lockedSubsectionTitles??[],lockedOutputDedupeKeys:a.lockedOutputDedupeKeys??[],requireStructureFrozen:!0,sourceDraftContracts:a.sourceDraftContracts,requireWritingOutline:!0}}function V(a,b,c){return(0,q.Sw)((0,q.mn)({...a,state:a.state??"draft"}),U(b,c))}function W(a,b){let c="string"==typeof b.mergeInto?b.mergeInto.trim():"";if(c&&c!==String(b.subsectionId??"")){let d=a.subsections.find(a=>a.subsectionId===String(b.subsectionId)),e=a.subsections.find(a=>a.subsectionId===c);if(!d||!e)throw Error("SECTION_MERGE_TARGET_MISSING:合并源或目标不存在");if(d.requiredOutputId||e.requiredOutputId||"transition"===d.role||"transition"===e.role||"table"!==d.primaryCarrier||"table"!==e.primaryCarrier||!d.contentContract||!e.contentContract||!d.contentContract.data.length||JSON.stringify([...d.contentContract.data].sort())!==JSON.stringify([...e.contentContract.data].sort()))throw Error("SECTION_MERGE_INCOMPATIBLE:仅允许字段兼容的自选对照表;必出输出、段落和过渡小节不得合并");let f={...e.outline};for(let a of Object.keys(f))f[a]=[...new Set([...e.outline[a],...d.outline[a]])];let g=a.subsections.filter(a=>a.subsectionId!==d.subsectionId).map(a=>a.subsectionId!==e.subsectionId?a:{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},coverageItemIds:[...new Set([...a.coverageItemIds,...d.coverageItemIds])],referencedCoverageItemIds:[...new Set([...a.referencedCoverageItemIds,...d.referencedCoverageItemIds])],factKeys:[...new Set([...a.factKeys,...d.factKeys])],quantityKeys:[...new Set([...a.quantityKeys,...d.quantityKeys])],writingOutline:(0,j.uR)([...a.writingOutline??[],...d.writingOutline??[]]),outline:f,contentContract:(0,i.Gv)({...e.contentContract,objectOrProcess:[...new Set([e.contentContract.objectOrProcess,d.contentContract.objectOrProcess])].join(";"),response:[...e.contentContract.response,...d.contentContract.response],acceptance:[...e.contentContract.acceptance,...d.contentContract.acceptance]}),...d.decisionReason||a.decisionReason?{decisionReason:[a.decisionReason,d.decisionReason].filter(Boolean).join(";")}:{}}).map((a,b)=>({...a,order:b}));return{...a,subsections:g,...O(g)}}let d=a.subsections.map(a=>{if(String(b.subsectionId??"")!==a.subsectionId)return a;let c=J(b.outline);return Array.isArray(b.controlValues)&&(c.controlValues=[...new Set(b.controlValues.map(String).map(a=>a.trim()).filter(Boolean))]),{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.referencedCoverageItemIds)?{referencedCoverageItemIds:[...new Set(b.referencedCoverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...u.includes(b.primaryCarrier)?{primaryCarrier:B(b.primaryCarrier)}:{},..."string"==typeof b.requiredOutputId&&b.requiredOutputId.trim()?{requiredOutputId:b.requiredOutputId.trim()}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...void 0!==b.outline||Array.isArray(b.controlValues)?{outline:c}:{},...void 0!==b.writingOutline?{writingOutline:(0,j.uR)(b.writingOutline)}:{},..."string"==typeof b.decisionReason&&b.decisionReason.trim()?{decisionReason:b.decisionReason.trim()}:{},...a.contentContract?{contentContract:(0,i.Gv)({...a.contentContract,carrier:u.includes(b.primaryCarrier)?B(b.primaryCarrier):a.primaryCarrier,..."string"==typeof b.objectOrProcess?{objectOrProcess:b.objectOrProcess}:{},...Array.isArray(b.response)?{response:b.response.map(String)}:{},...Array.isArray(b.data)?{data:b.data.map(String)}:{},...Array.isArray(b.acceptance)?{acceptance:b.acceptance.map(String)}:{}})}:{},..."transition"===b.role?{role:"transition"}:{}}});return{...a,subsections:d,...O(d)}}function X(a,b){let c=a=>String(a??"").replace(/\s+/gu,"").trim(),d=new Set;for(let a of b)for(let b of a.subsections)d.add(c(b.title));return a.subsections.map(a=>c(a.title)).filter((a,b,c)=>a&&(d.has(a)||c.indexOf(a)!==b)).filter((a,b,c)=>c.indexOf(a)===b)}async function Y(a){let b,c,h,s,t,u;a.sourceDraftContracts?a.sourceDraftContracts.assertSourceDraft(a.structurePlan,a.sectionId):(0,p.UW)(a.structurePlan);let v=I(a.structurePlan,a.sectionId);if(!v)throw Error(`SECTION_STRUCTURE_PLAN_INVALID:节「${a.sectionId}」不在冻结的全局结构计划里`);let y=(0,n.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}),z=function(a,b){var c,d;let e=(c=a.structurePlan,d=b.sectionId,c.chapters.find(a=>a.sections.some(a=>a.sectionId===d))),f=e?.title??"",g=new Set,h=new Set;for(let b of a.planningContext.professionalCandidates)if((0,o.ri)(b.chapterTitle)===(0,o.ri)(f))for(let a of[...b.sectionCandidates.flatMap(a=>a.required),...b.contentRequirements.flatMap(a=>a.required)]){let b=String(a).trim();b&&(g.add(b),h.add(Q(b)))}return{texts:[...g],keys:h}}(a,v),A=y.filter(a=>v.coverageItemIds.includes(a.id)||"method"===a.kind&&z.keys.has(Q(a.text))).map(a=>({id:a.id,text:a.text,kind:a.kind,...a.enumerated?{enumerated:!0}:{}})),D={diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"structuredGeneration",callKind:"section-planning",maxTokens:e.sL.y,...a.responseCache?{responseCache:a.responseCache}:{}},E=R(a,v,A,y,z,!1),F=a.revision?{subsections:L(a.revision.previousPlan.subsections)}:void 0,X=a.authorAttempts??{used:0},Y={},Z=async b=>{if(X.used>=2)throw new g.f({scope:a.sectionId,candidate:F,findings:[],reason:`节级规划已用完初稿与1次共享作者修订,保留候选与具体校验反馈,不能重新从头计费`});let c=b?.length?(0,k.dk)({task:"局部纠正:为已冻结的节规划三级小节,不重新推演全文内容",previousResponse:F,deterministicIssues:b,section:{sectionId:v.sectionId,title:v.title,contentGroup:v.contentGroup,objectScope:(0,d.eq)(a.structurePlan,v.objectScope),coverageItemIds:v.coverageItemIds,factKeys:v.factKeys,quantityKeys:v.quantityKeys,requiredOutputs:v.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element}))},lockedSubsectionTitles:a.lockedSubsectionTitles??[],rules:["只纠正具体错误,保留前候选其他有效内容,不改节身份或范围。","每项契约项恰好一个主载,每个必出输出由正确表/图载体承接,事实与工程量键只用本节给定身份。","已有主载体的契约项不得再加第二个主载:其他小节写 referencedCoverageItemIds;复合义务的子项用引用,不复制父项。","coverageItemIds 只能写 coverageItems 列表里的 ref(C1、C2…)或逐字复制其 id;不得编造哈希 id。","保留并补齐每个内容小节的 writingOutline:按阅读顺序、每块只回答一个问题、载体按内容形态选择;必出表/图必须有对应载体的块。","自选表/图小节(无 requiredOutputId)必须在 decisionReason 写明唯一对照关系与必须用表/图的理由;同一对照关系只规划一张表,不按专业/单体/区段拆成多张同构表。","不得新增来源、对象、标准、数值或原文没有的内容;返回完整纠正后的subsections。"]}):function(a,b){let c=a.structurePlan.chapters[0]?.sections[0]?.sectionId===b.sectionId;return(0,k.dk)({task:"为已冻结的节规划三级小节:每项契约项恰好一个主载小节,每个必出输出落到表/图小节,事实/工程量有落点",rules:["只规划本节内部的小节,不得新增/删除/改名节,不得写正文。","**内容组**:sectionEvidence.section.contentGroup 是本节唯一主载的内容组;小节只在本节内展开,不得把它写成跨节主载。","小节标题必须是工程名词短语,同级平行;不得出现评审/说明语言,不得以动词开头或标点结尾;本节内不得重名,不得与 lockedSubsectionTitles 语义重叠(确属不同语义角色必须写 decisionReason)。","**契约项**:section.coverageItemIds 中每一项必须恰好出现在一个小节的 coverageItemIds 中,不得遗漏或重复;只是引用别的小节主载体时填 referencedCoverageItemIds,不得同时主载与引用同一项。coverageItems[].ref 是本节契约项的短引用(C1、C2…):coverageItemIds 优先写 ref,程序会映射为真实 id;也可逐字复制 coverageItems[].id。**不得编造或改写哈希 id**:不在 coverageItems 列表里的 id 一律无效,整份计划会被退回。","**已有主载体的契约项只能引用**:某契约项已由一个小节主载时,其他小节只能用 referencedCoverageItemIds 引用,不得再写进第二个小节的 coverageItemIds;复合义务(例如“施组应覆盖供应进场、人员、质保、安全文明、机械、进度、技术措施、应急预案、工资”)的专项子项用引用/覆盖映射表达,不复制父项主载体。","**必出输出**:section.requiredOutputs 中每一项必须恰好有一个小节用 requiredOutputId 承接;表输出只能由 primaryCarrier=table 的小节承接,图/框图/组织图/横道/网络等由 primaryCarrier=figure 承接;不得用段落替代。","**载体**:同字段事实、可对照对象(≥3 行同类数据)、参数矩阵→table;清单→list(段落行表达,不设表格默认);因果、措施、论证、责任、验收→paragraph;流程、关系、空间、层次→figure。自选表/图(没有 requiredOutputId)必须写 decisionReason;**自选表成立条件**:契约项+事实键+工程量键合计至少 2 个来源,且表格有 ≥3 行可比较数据——内容很少的对照写成段落,不硬凑表格。","**同一对照关系只能有一张表**:行是同类可比较对象(专业/单体/区段/阶段/输出),列是共同字段;拆分维度必须作为一列,不得按对象拆成多张同构表。相邻小节列结构相同、行是同类对象时必须合并;只有字段不兼容、不同对象独立施工内容无法共用列,或合同分别点名输出时才分开。","**写作大纲**:每个小节必须按阅读顺序给 writingOutline;每块只回答一个问题(topic)、写清读者应得到的结论(purpose)、按内容形态选载体(paragraph/list/table/figure)。evidenceRefs 只用本小节 coverageItemIds/outputId/factKeys/quantityKeys 中已有的身份;mustNotRepeat 写本节或跨节已承载、本块只能引用不能复述的内容。大纲不新增义务,不改变覆盖账。","**一主题一块**:并列条件/步骤/岗位/检查项/验收要点→list;可对照对象/参数矩阵→table;流程/关系/层次/空间/时序→figure;判断/措施/理由/责任/接口/风险→paragraph。不要把一个块写成覆盖清单,也不要把互不统属的主题堆进同一段。列表块在提交时用段落单元、行首编号或项目符号表达。**每小节 paragraph 块 ≤2、list 块 ≤2**:同一论证链/措施链的连续主题合并成一个块写完,不按问题数拆碎;列表 ≥3 项才成立,2 项以下写进段落。",...c?["**本节是第一章第一节**:writingOutline 的第一个块必须是项目基本信息表(carrier=table),承载项目名称、项目编号、建设单位、建设地点、工程范围/规模、标段/包件、计划开工日期、合同工期、质量标准等冻结事实;缺失值在正文写“待核”。该表固定**两列:项目、内容**;不写“口径/来源/核验状态”等第三列。表后主题与顺序由你按项目资料规划,不得把承包范围/分包界面/实施条件写成跨项目固定清单,也不得把其他实质内容排在基本信息表之前。"]:[],"**事实/工程量**:section.factKeys/quantityKeys 中每个键至少落到一个小节;不得引用本节没有声明的键。","**实质内容**:每个小节至少有一个契约项、引用、输出、事实或内容提纲;空小节拒收。纯标题过渡小节用 role=transition 并写理由,且不得挂契约项/输出/事实。","**内容契约**:objectOrProcess明确同一施工对象/部位或连续工序链;response回答已有契约问题,data列成组查询字段,acceptance列有依据的验收/岗位/记录;primaryCarrier决定carrier。生成摘要不能新增项目事实、规范或合同义务。允许同小节中表与施工段分工,不按对象数拆段。","**合并**:相邻自选表小节只要**列结构相同、行是同类可比较对象**(专业/单体/区段/阶段/输出),就属于同一对照关系,必须合并为一张表,把拆分维度变成一列;不再要求 objectOrProcess 为同一对象或连续工序。只有字段不兼容、不同对象独立施工内容无法共用列、或合同分别点名输出时才保持分开;不能仅因标题相近合并段落内容。","**提交前自检(逐项,不通过就改)**:①section.coverageItemIds 每项恰好一个小节主载,且落在描述同一对象/对照关系的小节;②相邻小节不得共享同一对象/工序链/对照关系,共享就合并;③每个内容小节给独立 objectOrProcess 与 writingOutline,outline 至少填 questions/methods/sequence/acceptance 之一,禁止空 outline;④primaryCarrier 与 requiredOutputs 的规范载体一致,必出输出有对应表/图块;⑤事实/工程量键落到实际使用其数值的小节;⑥同一对照关系只规划一张表,不按专业/单体/区段拆同构表。","不得写死固定阶段/工日/机械/项目常量;对象、标准、数字只引用给定上下文。","输出 JSON;不要解释。"],output:{subsections:[{title:"工程名词短语",coverageItemIds:["C1"],referencedCoverageItemIds:[],primaryCarrier:"table",requiredOutputId:"output:…",factKeys:[],quantityKeys:[],outline:{questions:[],methods:[],sequence:[],controlValues:[],tolerances:[],acceptance:[],responsibilities:[],interfaces:[]},writingOutline:[{blockId:"blk-1",topic:"这个块回答的问题",purpose:"读者应得到的结论",carrier:"paragraph",evidenceRefs:["coverage:…"],mustNotRepeat:["已在表X/节X承载的内容"]}],decisionReason:"载体或跨节去重理由"}]}})}(a,v);Y.current=void 0,a.sourceDraftContracts?.assertSourceDraft(a.structurePlan,a.sectionId);let e=await a.caller(E,c,{...D,schema:G,onAttempt:a=>{Y.current=a}});if(!e){let a=Y.current,b=a?.validationFailure??a?.failure?.value;throw Error(`SECTION_STRUCTURE_PLAN_FAILED:节级规划未返回可校验结果${b?`(${b.slice(0,800)})`:""}`)}X.used+=1,F=e;let f=function(a,b=new Map){return(Array.isArray(a)?a:[]).map((a,c)=>{let d=a??{};return{subsectionId:`sub-${c+1}`,title:String(d.title??"").trim(),order:c,coverageItemIds:Array.isArray(d.coverageItemIds)?[...new Set(d.coverageItemIds.map(a=>K(a,b)).filter(Boolean))]:[],referencedCoverageItemIds:Array.isArray(d.referencedCoverageItemIds)?[...new Set(d.referencedCoverageItemIds.map(a=>K(a,b)).filter(Boolean))]:[],primaryCarrier:B(d.primaryCarrier),..."string"==typeof d.requiredOutputId&&d.requiredOutputId.trim()?{requiredOutputId:d.requiredOutputId.trim()}:{},factKeys:Array.isArray(d.factKeys)?[...new Set(d.factKeys.map(a=>String(a).trim()).filter(Boolean))]:[],quantityKeys:Array.isArray(d.quantityKeys)?[...new Set(d.quantityKeys.map(a=>String(a).trim()).filter(Boolean))]:[],outline:J(d.outline),writingOutline:(0,j.uR)(d.writingOutline).map(a=>({...a,evidenceRefs:a.evidenceRefs.map(a=>K(a,b))})),contentContract:(0,i.Gv)({objectOrProcess:String(d.objectOrProcess??d.title??"").trim(),response:Array.isArray(d.response)?d.response.map(String):J(d.outline).questions,data:Array.isArray(d.data)?d.data.map(String):[],carrier:B(d.primaryCarrier),acceptance:Array.isArray(d.acceptance)?d.acceptance.map(String):J(d.outline).acceptance}),..."string"==typeof d.decisionReason&&d.decisionReason.trim()?{decisionReason:d.decisionReason.trim()}:{},..."transition"===d.role?{role:"transition"}:{}}})}(e?.subsections,new Map(v.coverageItemIds.map((a,b)=>[`C${b+1}`,a])));return P({structurePlan:a.structurePlan,sectionId:a.sectionId,subsections:f})},$=b=>{let c=Y.current;c?.raw&&(0,m.archiveDocumentJsonFailure)(a.diagnostics,{...c,raw:c.raw,validationFailure:"SECTION_STRUCTURE_PLAN_INVALID:"+T(b).join(";"),outputTruncated:!1,callKind:"section-planning"})},_=async a=>{let b;for(let c=0;c<2;c+=1)try{return await Z(a)}catch(c){b=c;let a=c instanceof Error?c.message:String(c);if(!/SECTION_STRUCTURE_PLAN_FAILED|incomplete|transport|ECONN|timeout|stream/iu.test(a))throw c}throw b};try{b=await _(a.revision?[`计划修订理由:${a.revision.reason}`,`当前已读依据:${JSON.stringify(a.revision.evidence)}`]:void 0)}catch(d){let c=d instanceof Error?d.message:String(d);if(!/SECTION_STRUCTURE_PLAN_FAILED|incomplete|transport|ECONN|timeout|stream/iu.test(c)||a.revision)throw d;F={subsections:L((b=N(a,v)).subsections)}}let aa=!1,ab=!1,ac=!1,ad=[],ae=!1,af=async b=>{let d=b,e=V(d,a,v),g=new Set,i=!1,j=()=>{if(!e.length||!e.every(a=>w.has(a.code)))return!1;let b=M(d,v);return!!b&&!V(b,a,v).length&&(e=[],aa=!0,c=(d=b).sectionPlanHash,!0)},k=()=>{if(!e.length||!e.every(a=>w.has(a.code)||x.has(a.code)))return!1;let b=f.businessContentTitlePatterns,c=a=>b.some(b=>(a.title+(a.contentContract?.objectOrProcess??"")).includes(b)),g=d.subsections.filter(c),i=g.length?d.subsections.filter(a=>!c(a)).map((a,b)=>({...a,order:b})):d.subsections,j=N(a,v),k=new Set(i.map(a=>a.subsectionId)),l=new Set(i.map(a=>(0,o.ri)(a.title))),m=[...i];for(let a of v.requiredOutputs){if(m.some(b=>b.requiredOutputId===a.outputId))continue;let b=j.subsections.find(b=>b.requiredOutputId===a.outputId);if(!b)continue;let c=m.length+1;for(;k.has(`sub-${c}`);)c+=1;let d=`sub-${c}`;k.add(d);let e=b.title,f=2;for(;l.has((0,o.ri)(e));)e=`${b.title}(${f++})`;l.add((0,o.ri)(e)),m.push({...b,subsectionId:d,title:e,order:m.length})}let n=new Set,p=m.filter(a=>!a.requiredOutputId||!n.has(a.requiredOutputId)&&(n.add(a.requiredOutputId),!0)).map((a,b)=>{let c=new Set([...a.coverageItemIds,...a.referencedCoverageItemIds,...a.factKeys,...a.quantityKeys,...a.requiredOutputId?[a.requiredOutputId]:[]]),d=(a.writingOutline??[]).map(a=>({...a,evidenceRefs:a.evidenceRefs.filter(a=>!/^(?:coverage|output):/u.test(a)||c.has(a))})),e=d.length||"transition"===a.role?d:[{blockId:"blk-1",topic:a.title,purpose:a.contentContract?.objectOrProcess||a.title,carrier:a.primaryCarrier,evidenceRefs:[...a.requiredOutputId?[a.requiredOutputId]:[],...a.coverageItemIds],mustNotRepeat:[]}];return{...a,order:b,writingOutline:e}}),r=(0,q.mn)({...d,subsections:p,...O(p)}),t=v.coverageItemIds.length?M(r,v):r;return!!t&&!V(t,a,v).length&&(e=[],ab=!0,h=(d=t).sectionPlanHash,g.length&&(ac=!0,s=d.sectionPlanHash,ad=g.map(a=>a.title)),!0)};for(;e.length&&($(e),!(j()||k()));){let b=(0,l.Fu)(d);if((i=g.has(b))||X.used>=2)break;g.add(b),e=V(d=await _(T(e)),a,v),j(),e.length&&k()}if(e.length&&j(),e.length&&k(),e.length){let b=N(a,v);if(!V(b,a,v).length)return ae=!0,t=b.sectionPlanHash,b;let c=new Set(v.coverageItemIds),f=[...new Set(d.subsections.flatMap(a=>[...a.coverageItemIds,...a.referencedCoverageItemIds]))].filter(a=>!c.has(a)).map(b=>({id:b,sourceSectionId:a.structurePlan.chapters.flatMap(a=>a.sections).find(a=>a.sectionId!==v.sectionId&&a.coverageItemIds.includes(b))?.sectionId??""})).filter(a=>a.sourceSectionId);throw new r({sectionId:a.sectionId,issues:T(e),availableCoverageItems:A.map(a=>({id:a.id,text:a.text,suggestedCarrier:a.enumerated?"table":"paragraph"})),foreignCoverageItems:f,identicalRetry:i})}return d};b=await af(b);let ag=a=>({id:"section-plan:coverage-ref-recovery",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"coverage-ref-recovery",severity:"advisory",target:{},detail:"模型输出的覆盖映射不合法(重复主载体/无效引用),程序已按本节契约项清单回填或把重复主载降为引用;请核对每个契约项的语义归属",fix:"若归属不符,用 patches 调整 coverageItemIds/referencedCoverageItemIds;不要删除本节契约项"}),ah=a=>({id:"section-plan:structural-ref-recovery",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"structural-ref-recovery",severity:"advisory",target:{},detail:"模型输出的必出输出小节/写作大纲不完整,程序已按本节冻结 requiredOutputs 与契约项回填缺项;请核对每个输出小节的语义、载体与责任",fix:"若归属不符,用 patches 调整 requiredOutputId/标题/块;不要删除本节必出输出"}),ai=a=>({id:"section-plan:business-content-removal",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"business-content-removal",severity:"advisory",target:{},detail:`程序已从节计划删除商务/费用小节(${ad.join("、")||"费用类小节"}):报价构成、费用计取、台账凭证不进入技术标;其契约项已回填到技术小节,请核对语义归属并确认没有残留费用表述`,fix:"若删除后技术内容不足,用 patches 补技术小节(工艺、组织、质量、安全、进度或接口);不得恢复商务/费用内容以凑覆盖"}),aj=a=>({id:"section-plan:author-fallback",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"plan-author-fallback",severity:"advisory",target:{},detail:"节计划作者额度用尽后仍未通过确定性校验,程序已按本节冻结的契约项/必出输出/事实生成最小可写结构;请核对小节拆分、输出与事实落点是否满足本节专业要求",fix:"如结构不足,用 patches 补技术小节/输出/事实落点;不得删除本节契约项或必出输出"}),ak=[];ae&&ak.push(aj(b)),aa&&ak.push(ag(b)),ab&&ak.push(ah(b)),ac&&ak.push(ai(b));let al=(0,q.WM)(b,U(a,v)),am=al.sectionPlanHash,an=await a.caller(R(a,v,A,y,z,!0),S(al,void 0,aa?ag(al):void 0,ab?ah(al):void 0,ac?ai(al):void 0),{...D,schema:H});an||ak.push({id:"section-plan-review:unavailable",planId:al.planId,sectionPlanHash:am,category:"review-unavailable",severity:"advisory",target:{},detail:"独立节规划审查未取得;候选结构确定性校验通过,按未取得审查记录并继续",fix:"整稿终审与后续节可继续核对;不伪造专业通过"});let ao=an??{verdict:"pass",findings:[],patches:[]};for(let[a,b]of(Array.isArray(ao.findings)?ao.findings:[]).entries()){let c=b??{},d=C(c.severity),e=String(c.detail??"");ak.push({id:`section-plan-review:1:${a+1}`,planId:al.planId,sectionPlanHash:am,category:String(c.category??"structure"),severity:d,target:{..."string"==typeof c.targetSubsectionId&&c.targetSubsectionId?{subsectionId:c.targetSubsectionId}:{}},detail:e,fix:String(c.fix??"")})}let ap=(Array.isArray(ao.patches)?ao.patches:[]).map(a=>a??{}).filter(a=>String(a.subsectionId??"").trim()),aq=[],ar=[],as=al,at=(a,b)=>{let c=b instanceof Error?b.message:String(b);aq.push({subsectionId:String(a.subsectionId),status:"refused",reason:c}),ak.push({id:`section-plan-review:patch:${aq.length}`,planId:al.planId,sectionPlanHash:am,category:"patch",severity:"advisory",target:{subsectionId:String(a.subsectionId)},detail:`审查补丁被拒绝(未采用):${c}`,fix:"按当前小节身份与确定性错误修正,不得删除必出输出或契约项"})};for(let a of ap)try{if(!as.subsections.some(b=>b.subsectionId===String(a.subsectionId)))throw Error("SECTION_PATCH_TARGET_MISSING");let b=W(as,a);(0,l.Fu)(b)===(0,l.Fu)(as)?aq.push({subsectionId:String(a.subsectionId),status:"no-op",reason:"候选与当前计划一致"}):(as=b,ar.push(a))}catch(b){at(a,b)}try{al=(0,q.WM)({...as,state:"validated"},U(a,v)),aq.push(...ar.map(a=>({subsectionId:String(a.subsectionId),status:"applied"})))}catch{for(let b of ar)try{al=(0,q.WM)({...W(al,b),state:"validated"},U(a,v)),aq.push({subsectionId:String(b.subsectionId),status:"applied"})}catch(a){at(b,a)}}al=(0,q.WM)({...al,state:"validated"},U(a,v));let au=1,av=0,aw=ak,ax=ao,ay=[],az=(0,g.C)(ao,ak);for(;az&&av<3;){if(ay.push(...aw),X.used>=2){aw.push({id:"section-plan-review:revision-budget",planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:"revision-budget",severity:"advisory",target:{},detail:"节级规划作者修订额度已用尽;保留当前有效节计划,未落地意见进入整稿台账",fix:""});break}try{F={subsections:L(al.subsections)};let b=await af(await _(aw.map(b=>`${b.target.subsectionId??a.sectionId}:${b.detail};修法:${b.fix}`)));al=(0,q.WM)({...b,state:"validated"},U(a,v))}catch(a){aw.push({id:`section-plan-review:revision-recorded:${av+1}`,planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:"revision-recorded",severity:"advisory",target:{},detail:`作者修订未产出可校验候选:${a instanceof Error?a.message:String(a)};保留上一有效节计划,按未决项记录`,fix:""});break}if(av+=1,aa&&c===al.sectionPlanHash&&!aw.some(a=>"coverage-ref-recovery"===a.category)&&aw.push(ag(al)),ab&&h===al.sectionPlanHash&&!aw.some(a=>"structural-ref-recovery"===a.category)&&aw.push(ah(al)),ac&&s===al.sectionPlanHash&&!aw.some(a=>"business-content-removal"===a.category)&&aw.push(ai(al)),ae&&t===al.sectionPlanHash&&!aw.some(a=>"plan-author-fallback"===a.category)&&aw.push(aj(al)),au>=3)break;if(u&&al.sectionPlanHash===u){aw.push({id:"section-plan-review:unchanged",planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:"review-skipped-unchanged",severity:"advisory",target:{},detail:"修订未改变节计划 hash;不重复审查同一输入,按未决项记录",fix:""});break}let b=al.sectionPlanHash,d=await a.caller(R(a,v,A,y,z,!0),S(al,{verdict:ax.verdict,findings:aw,patches:aq}),{...D,schema:H});if(au+=1,!d){aw.push({id:"section-plan-review:unavailable",planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:"review-unavailable",severity:"advisory",target:{},detail:"修订后独立节规划审查未取得;保留当前有效节计划,按未取得审查记录",fix:""});break}ax=d,aw=(Array.isArray(d.findings)?d.findings:[]).map((a,b)=>({id:`section-plan-review:${au}:${b+1}`,planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:String(a.category??"structure"),severity:C(a.severity),target:"string"==typeof a.targetSubsectionId?{subsectionId:a.targetSubsectionId}:{},detail:String(a.detail??""),fix:String(a.fix??"")})),u=b,az=(0,g.C)(d,aw)}aa&&c===al.sectionPlanHash&&!aw.some(a=>"coverage-ref-recovery"===a.category)&&aw.push(ag(al)),ab&&h===al.sectionPlanHash&&!aw.some(a=>"structural-ref-recovery"===a.category)&&aw.push(ah(al)),ac&&s===al.sectionPlanHash&&!aw.some(a=>"business-content-removal"===a.category)&&aw.push(ai(al)),ae&&t===al.sectionPlanHash&&!aw.some(a=>"plan-author-fallback"===a.category)&&aw.push(aj(al)),au>1&&aw.push(...ak.filter(a=>"patch"===a.category));let aA=(0,q.vs)((0,q.vs)(al,"reviewed"),"frozen"),aB=aw.filter(a=>"blocking"===a.severity).length;return{plan:aA,review:{planId:aA.planId,sectionPlanHash:aA.sectionPlanHash,reviewer:"independent-section-plan-review",rounds:au,findings:aw,...au>1?{priorFindings:ay}:{},patches:aq,verdict:aB?"revise":"pass",advisoriesOnly:0===aB,...aB?{recorded:!0,recordedBlocking:aB}:{}},coverage:{subsections:aA.subsections.length,coverageItems:aA.coverage.length,outputs:aA.outputCoverage.length,facts:v.factKeys.length+v.quantityKeys.length}}}function Z(a){(0,q.aT)(a.original),a.contracts.assertGlobal(a.structurePlan.planHash),a.contracts.assertSourceDraft(a.originalStructure,a.sectionId),a.contracts.assertSourceDraft(a.structurePlan,a.sectionId);let b=I(a.structurePlan,a.sectionId);if(!b||"frozen"!==a.original.state)throw Error("EARLY_DRAFT_PLAN_NOT_APPROVED");return(0,q.WM)({...a.original,planId:"section-plan:"+a.structurePlan.planHash.slice(0,12)+":"+a.sectionId,structurePlanId:a.structurePlan.planId,structurePlanHash:a.structurePlan.planHash},U(a,b))}},85585:(a,b,c)=>{c.d(b,{M:()=>h});let d=[["一步瞃过","一步跨过"],["癹定与碰撞","锁定与碰撞"],["钢権条","钢檩条"],["通风菡管","通风风管"],["墙面髄体","墙面墙体"],["施工阶断","施工阶段"],["深化设计阶断","深化设计阶段"],["条件件驱动","条件驱动"],["版次控制与与","版次控制与"],["峰窝廊面","蜂窝麻面"],["偏、将料、油漆","偏、浆料、油漆"],["偏、将料","偏、浆料"]],e={権:"权",髄:"髓",亜:"亚",団:"团",実:"实",単:"单",気:"气",徳:"德",広:"广",対:"对"},f=(a,b)=>a.slice(0,b).split("\n").length,g=(a,b,c=60)=>{let d=a.lastIndexOf("\n",b)+1,e=a.indexOf("\n",b);return a.slice(d,e<0?a.length:e).trim().slice(0,c)};function h(a){let b=[],c=new Set,h=a=>{let d=a.code+":"+(a.line??"")+":"+a.message;c.has(d)||(c.add(d),b.push(a))};for(let[b,c]of d){let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(e<0)break;d=e+b.length,h({code:"typo-known-wrong-word",severity:"blocker",line:f(a,e),excerpt:g(a,e),message:`已知错词「${b}」应为「${c}」;逐处替换后再交付`})}}for(let[b,c]of Object.entries(e)){let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(e<0)break;d=e+1,h({code:"typo-variant-character",severity:"blocker",line:f(a,e),excerpt:g(a,e),message:`出现日式异体字「${b}」应为「${c}」;简体中文工程文档不得混用`})}}return b}},86265:(a,b,c)=>{c.d(b,{J:()=>j});var d=c(59339),e=c(25164),f=c(60806),g=c(6873),h=c(745),i=c(4053);function j(a){let{store:b}=a,c=a=>{let c={entities:[],groups:[]};for(let d of a)for(let a of[...d.references,...d.assertions.map(a=>a.reference)])if("decision"===a.kind&&c.entities.push({id:a.entityId,version:a.entityVersion}),"certificate"===a.kind){let d=b.certificate(a.certificateId);d&&(c.entities.push(...d.reads.entities),c.groups.push(...d.reads.groups))}return(0,h.xi)(c)},j=new Map(a.contract.sections.map(a=>[a.id,a.title]));return{prepareWriting(c){if(c.responsibilityId!==a.authority.actorId)throw Error("WRITING_RESPONSIBILITY_SCOPE_DENIED");let d=c.sectionIds.length?c.sectionIds:[];if(1!==d.length)throw Error("WRITING_SECTION_SINGLE_REQUIRED:每次正文提交只能声明一个章节;跨节内容拆成多次提交,或在正文中引用他节的表/图");let[e]=d;if(!j.has(e))throw Error(`WRITING_SECTION_UNKNOWN:${e}`);if(!a.authority.sectionIds.includes(e))throw Error(`WRITING_SECTION_SCOPE_DENIED:${e}`);let f=a.sectionContractReads?.reads(d),g={actorId:a.authority.actorId,responsibilityId:c.responsibilityId,purpose:c.purpose,sectionIds:d},h=[...new Set([...c.unitIds??[]])];if(!h.length)throw Error("WRITING_UNITS_REQUIRED");let k=[...new Set([...f?.entities.map(a=>a.id)??[],...a.authority.sectionIds,...h.map(a=>(0,i.tp)(c.responsibilityId,c.purpose,a,e))])];return b.captureReadSnapshot({entityIds:k,groupKeys:[`section-units:${e}`],context:g})},proposeWriting(g,k,l,m){let n,o=b.readSnapshot(g),p=o.context??{};if(p.actorId!==a.authority.actorId)throw Error("WRITING_SNAPSHOT_SCOPE_DENIED");if(!l?.trim())throw Error("WRITING_REASON_REQUIRED");let q=k??{},r={...q,units:Array.isArray(q.units)?q.units.map(b=>(0,d.Mf)(b??{},a.tenderResponsePlan,Array.isArray(q.sectionIds)?q.sectionIds.map(String):[])):q.units},{submission:s,issues:t}=(0,i.Dp)(r);if(!s)throw Error(`WRITING_SUBMISSION_INVALID:${t.map(a=>`${a.unitId}:${a.code}:${a.message}`).join(";")}`);s.units=s.units.map(b=>{let{carrierRevisionReason:c,...e}=b;return(0,d.Mf)({...e,...s.revision?.reason?.trim()?{carrierRevisionReason:s.revision.reason.trim()}:{}},a.tenderResponsePlan,s.sectionIds)});if(s.responsibilityId!==a.authority.actorId)throw Error("WRITING_RESPONSIBILITY_SCOPE_DENIED");if(!s.sectionIds.length)throw Error("WRITING_SECTION_REQUIRED");if(1!==s.sectionIds.length)throw Error("WRITING_SECTION_SINGLE_REQUIRED:每次正文提交只能声明一个章节;跨节内容拆成多次提交,或在正文中引用他节的表/图");for(let b of s.sectionIds){if(!j.has(b))throw Error(`WRITING_SECTION_UNKNOWN:${b}`);if(!a.authority.sectionIds.includes(b))throw Error(`WRITING_SECTION_SCOPE_DENIED:${b}`)}let u=a.sectionContractReads?.reads(s.sectionIds);for(let a of u?.entities??[])if(!o.reads.entities.some(b=>b.id===a.id&&b.version===a.version))throw Error("SECTION_CONTRACT_SNAPSHOT_MISMATCH");let v=s.units.flatMap(b=>(0,d.B$)(b,a.tenderResponsePlan,s.sectionIds));if(v.length)throw Error("WRITING_DELIVERY_INVALID:"+v.join(";"));if(s.revision){let c=b.proposalOperation(m);if(c){let b=c.changes.find(a=>"writing-revision"===a.kind)?.value?.requestHash;if(c.actorId!==a.authority.actorId||b!==(0,h.Fu)([s,l]))throw Error("DOMAIN_OPERATION_ID_CONFLICT");return c}}if(p.purpose!==s.purpose||JSON.stringify(p.sectionIds)!==JSON.stringify(s.sectionIds))throw Error("WRITING_SNAPSHOT_SCOPE_DENIED");for(let a of[...s.units.map(a=>a.id),...s.revision?.retire.map(a=>a.unitId)??[]]){let b=(0,i.tp)(s.responsibilityId,s.purpose,a,s.sectionIds[0]);if(!o.reads.entities.some(a=>a.id===b))throw Error("WRITING_SNAPSHOT_UNIT_NOT_READ")}let w=c(s.units),x=(0,h.xi)({entities:[...o.reads.entities,...w.entities],groups:[...o.reads.groups,...w.groups]}),y=(0,f.R)(b,s,s.units.map(a=>({id:(0,i.tp)(s.responsibilityId,s.purpose,a.id,s.sectionIds[0]),kind:"writing-unit",value:{...a,responsibilityId:s.responsibilityId,purpose:s.purpose,sectionIds:[s.sectionIds[0]]}})).map(a=>({id:a.id,kind:a.kind,expectedVersion:b.entity(a.id)?.version??null,value:a.value})),l);for(let a of y)x.entities.push({id:a.id,version:a.expectedVersion});let z=s.sectionIds[0],A=new Map;for(;;){let a=b.entityPage({groupKey:`section-units:${z}`,...n?{afterId:n}:{},limit:200});for(let b of a.entities)(0,i.iC)(b)&&A.set(b.id,b.version);if(!a.nextAfterId)break;n=a.nextAfterId}for(let a of y)"writing-unit"===a.kind&&(a.value?A.set(a.id,(0,h.Fu)(a.value)===(0,h.Fu)(b.entity(a.id)?.value??null)?b.entity(a.id).version:(a.expectedVersion??0)+1):A.delete(a.id));let B=(0,e.L1)({store:b,sectionId:z,responsibilityId:s.responsibilityId,phase:"drafting",snapshot:{unitVersions:[...A].map(([a,b])=>({entityId:a,version:b})),unreviewedUnitIds:[],blockingFindingIds:[],sourceReviewComplete:!1,...s.units[0]?.planHash?{structurePlanHash:s.units[0].planHash}:{},...s.units[0]?.sectionPlanHash?{sectionPlanHash:s.units[0].sectionPlanHash}:{}},trigger:"writing-committed"});return y.some(a=>(0,h.Fu)(a.value)!==(0,h.Fu)(b.entity(a.id)?.value??null))&&!B.unchanged&&(y.push(B.change),x.entities.push(B.read)),b.propose({actorId:a.authority.actorId,purpose:s.purpose,reason:l,reads:(0,h.xi)(x),changes:y},m)},evaluateWriting:c=>b.evaluate(c,"construction-writing-unit-v4",c=>{let e=[],f={responsibilityId:a.authority.actorId,purpose:"",sectionIds:[],units:c.proposal.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.value)},{issues:h}=(0,i.Dp)({responsibilityId:a.authority.actorId,purpose:"evaluation",sectionIds:[],units:f.units,...c.proposal.changes.some(a=>"writing-revision"===a.kind)?{revision:c.proposal.changes.find(a=>"writing-revision"===a.kind).value.revision}:{}});for(let b of f.units)for(let c of(0,d.B$)(b,a.tenderResponsePlan,b.sectionIds))e.push({code:c,entityId:b.id,reason:c});for(let b of f.units)for(let c of(0,g.dA)(b,a.evidenceText??(()=>void 0)))e.push({code:c.toUpperCase().replace(/-/gu,"_"),entityId:b.id,reason:"事实主张的来源锚点或正文实现不一致"});for(let a of h)e.push({code:a.code.toUpperCase().replace(/-/gu,"_"),entityId:a.unitId,reason:a.message});let j=(0,i.YK)({units:f.units,entityIdFor:b=>(0,i.tp)(a.authority.actorId,c.proposal.purpose,b.id,b.sectionIds?.[0]),currentEntityVersion:a=>b.entity(a)?.version,certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)});for(let a of j)for(let b of a.states)"current"!==b.state&&e.push({code:`REFERENCE_${b.state.toUpperCase()}`,entityId:a.entityId,reason:b.reason});let k=c.proposal.reads.entities.filter(a=>null!==a.version&&b.entity(a.id)?.version!==a.version);return{dataValidity:e.length?"invalid":"valid",relatedConstraints:k.length||j.some(a=>a.needsRecheck)?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:[...e,...k.map(a=>({code:"READ_SUPERSEDED",entityId:a.id,reason:`读集里的 v${a.version} 已被新版本替代`}))],result:{writingUnits:c.proposal.changes.map(a=>a.id),referencesChecked:j.length}}}),commit(e,f){let h=b.proposal(e);if(!h||h.actorId!==a.authority.actorId)throw Error("WRITING_PROPOSAL_SCOPE_DENIED");return b.commit(e,f,e=>{let f=e.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.value),h=(0,i.Dp)({responsibilityId:a.authority.actorId,purpose:e.purpose,units:f,...e.changes.some(a=>"writing-revision"===a.kind)?{revision:e.changes.find(a=>"writing-revision"===a.kind).value.revision}:{}});if(f.some(b=>(0,g.dA)(b,a.evidenceText??(()=>void 0)).length))throw Error("WRITING_CLAIM_INVALID");if(f.some(b=>(0,d.B$)(b,a.tenderResponsePlan,b.sectionIds).length))throw Error("WRITING_DELIVERY_BINDING_INVALID");if(h.issues.length)throw Error("WRITING_SUBMISSION_INVALID:"+h.issues.map(a=>`${a.unitId}:${a.code}:${a.message}`).join(";"));let j=c(f);if(j.entities.some(a=>!e.reads.entities.some(b=>b.id===a.id&&b.version===a.version))||j.groups.some(a=>!e.reads.groups.some(b=>b.key===a.key&&b.version===a.version)))throw Error("WRITING_REFERENCE_READ_SET_INVALID:候选未保存实际引用读集,须以原引用重新提出候选");let k=(0,i.YK)({units:f,entityIdFor:b=>(0,i.tp)(a.authority.actorId,e.purpose,b.id,b.sectionIds?.[0]),currentEntityVersion:a=>{let c=b.entity(a);return c&&!c.deleted?c.version:void 0},certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)}).flatMap(a=>a.states.filter(a=>"current"!==a.state).map(b=>`${a.unitId}: ${b.reason}`));if(k.length)throw Error("WRITING_REFERENCE_INVALID:"+k.join(";"))})},pendingRecheck(){let c,d=[];for(;;){let e=b.entityPage({groupKey:`writing:${a.authority.actorId}`,...c?{afterId:c}:{},limit:200});for(let a of e.entities){let b=(0,i.iC)(a);b&&d.push({entityId:a.id,unit:b})}if(!e.nextAfterId)break;c=e.nextAfterId}return(0,i.YK)({units:d.map(a=>a.unit),entityIdFor:(a,b)=>d[b].entityId,currentEntityVersion:a=>b.entity(a)?.version,certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)}).filter(a=>a.needsRecheck)},unitsReferencing:(a,b,c,d)=>b.filter(b=>[...b.references,...b.assertions.map(a=>a.reference)].some(b=>b.kind===a.kind&&("decision"===b.kind?b.entityId:b.certificateId)===a.id)).map(a=>(0,i.tp)(c,d,a.id,a.sectionIds?.[0])),submissionFingerprint:a=>(0,h.Fu)([a.responsibilityId,a.purpose,a.sectionIds,a.units.map(a=>a.id)])}}}};