@customize-agent/server 4.61.1 → 4.61.2

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 (28) 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/5037.js +2 -2
  7. package/.next/server/chunks/5763.js +1 -1
  8. package/.next/server/pages/404.html +1 -1
  9. package/.next/server/pages/500.html +1 -1
  10. package/.next/server/pages/documents.html +1 -1
  11. package/.next/server/pages/generation/[id].html +1 -1
  12. package/.next/server/pages/generation.html +1 -1
  13. package/.next/server/pages/jobs.html +1 -1
  14. package/.next/server/pages/knowledge/file-detail.html +1 -1
  15. package/.next/server/pages/knowledge/files.html +1 -1
  16. package/.next/server/pages/knowledge/manage.html +1 -1
  17. package/.next/server/pages/knowledge/source-preview.html +1 -1
  18. package/.next/server/pages/knowledge.html +1 -1
  19. package/.next/server/pages/models.html +1 -1
  20. package/.next/server/pages/settings.html +1 -1
  21. package/.next/server/pages/skills/[id]/edit.html +1 -1
  22. package/.next/server/pages/skills/[id].html +1 -1
  23. package/.next/server/pages/skills/new.html +1 -1
  24. package/.next/server/pages/skills.html +1 -1
  25. package/.next/server/pages-manifest.json +29 -29
  26. package/package.json +1 -1
  27. /package/.next/static/{fb4ae3a45c6d6f93d85a6f0f6dc89ef1dcc27026a7eb125076398e1848890ead → 8ade507e5ee9f8f655bf6314ea2c6e477cfc88dc43bfbd49919dbcbc00ed3909}/_buildManifest.js +0 -0
  28. /package/.next/static/{fb4ae3a45c6d6f93d85a6f0f6dc89ef1dcc27026a7eb125076398e1848890ead → 8ade507e5ee9f8f655bf6314ea2c6e477cfc88dc43bfbd49919dbcbc00ed3909}/_ssgManifest.js +0 -0
@@ -37,9 +37,9 @@ writingOutline 是小节写作大纲:逐块核单元是否按块主题/载体
37
37
  必须调用 submit_review_result 提交结果;自由文本不算审查结果。
38
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||!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(不复述清单全表、不单独写编制依据/规范目录、不出现系统内部词、不写通用空话、不跨节重复);重点难点须具备对象/约束或风险/后果/控制值/责任岗位/依据。":"")});Y.length&&(aA.sourceApplicationContext=G({scope:"document",contractId:a.contract.id,sections:a.contract.sections,structure:a.structurePlan?.chapters.map(a=>({title:a.title,sections:a.sections.map(a=>({sectionId:a.sectionId,title:a.title,objectScope:a.objectScope,coverageItemIds:a.coverageItemIds,requiredOutputs:a.requiredOutputs.map(a=>({outputId:a.outputId,element:a.element}))}))}))??[],tenderResponse:(0,y.tenderResponseProjection)(an,a.contract.sections.map(a=>a.id)),reading:"本节不适用不等于全文不适用;对照所有对象/专业/义务。摘录不是完整文件;无法排除相关性时查原文,不得据首段缺失给 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,aA.instruction=O);let aB={policyVersion:o.pO,scopeHash:v,reviewed:Y,documentScope:Y.length?aA.sourceApplicationContext:null},aC=(0,r.xi)(k),aD=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||!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;if(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-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(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,!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,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){let c=a=>String(a??"").replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase(),d=b.filter(a=>a.unitId&&a.observed&&a.expected&&("project-basic-source-invalid"===a.rule||"sentence-duplicate"===a.rule));if(!d.length)return null;let e=a.map(a=>{let b=d.filter(b=>b.unitId===a.id);if(!b.length)return{unit:a,changed:!1};let e=JSON.parse(JSON.stringify(a)),f=!1;for(let d of b)if("project-basic-source-invalid"===d.rule&&"table"===a.kind)for(let a of e.rows??[])for(let b of Object.keys(a.cells??{})){let e=a.cells?.[b];"string"==typeof e&&c(e)===c(String(d.observed))&&(a.cells[b]=String(d.expected),f=!0)}else if("sentence-duplicate"===d.rule&&"paragraph"===a.kind&&"string"==typeof e.text){let a=String(d.observed).trim();if(!a)continue;let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),c=e.text.replace(RegExp(`(^|[。;;!?!?
39
39
  ])${b}[。;;!?!?
40
- ]*`,"u"),"$1");c!==e.text&&c.replace(/\s/gu,"").length>0&&(e.text=c.replace(/\n{3,}/gu,"\n\n").trim(),f=!0)}return{unit:f?e:a,changed:f}}),f=e.filter(a=>a.changed).length;return f?{fixed:e.map(a=>a.unit),count:f}: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;if(!(a.get(d)??[]).length){g.push(H("advisory","carrier-reference-without-primary",`单元「${c.id}」引用的契约项「${l.get(d).text}」在本节还没有主载体`,"先给该契约项指定一个主载体(表/图/段落),再在正文引用",{unitId:c.id}));continue}let f=b.get(d);"paragraph"===c.kind&&f&&"paragraph"!==f&&!F.test(c.text??"")&&e.push(H("blocking","carrier-reference-missing",`段落「${c.id}」引用了由${"table"===f?"表":"图"}承载的契约项「${l.get(d).text}」,但没有写真实表号/图号`,"用“见表X/见图X”或稳定的内部标记 `{{table:<表单元id>}}` / `{{figure:<图单元id>}}` 引用主载体;正文只写判断/因果/接口,不复述表内数值",{unitId:c.id}))}}let N=(0,q.u6)(M);if(e.push(...N.blocking.map(a=>H("blocking",a.code,a.message,"正文只保留判断/因果/接口,并用 `{{table:<表单元id>}}` 或真实表号引用;删除与表重复的数值/行项",{unitId:a.unitId}))),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"]},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())),"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(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,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");c!==e.text&&c.replace(/\s/gu,"").length>0&&(e.text=c.replace(/\n{3,}/gu,"\n\n").trim(),f=!0)}return{unit:f?e:a,changed:f}}),f=e.filter(a=>a.changed).length;return f?{fixed:e.map(a=>a.unit),count:f}: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;if(!(a.get(d)??[]).length){g.push(H("advisory","carrier-reference-without-primary",`单元「${c.id}」引用的契约项「${l.get(d).text}」在本节还没有主载体`,"先给该契约项指定一个主载体(表/图/段落),再在正文引用",{unitId:c.id}));continue}let f=b.get(d);"paragraph"===c.kind&&f&&"paragraph"!==f&&!F.test(c.text??"")&&e.push(H("blocking","carrier-reference-missing",`段落「${c.id}」引用了由${"table"===f?"表":"图"}承载的契约项「${l.get(d).text}」,但没有写真实表号/图号`,"用“见表X/见图X”或稳定的内部标记 `{{table:<表单元id>}}` / `{{figure:<图单元id>}}` 引用主载体;正文只写判断/因果/接口,不复述表内数值",{unitId:c.id}))}}let N=(0,q.u6)(M);if(e.push(...N.blocking.map(a=>H("blocking",a.code,a.message,"正文只保留判断/因果/接口,并用 `{{table:<表单元id>}}` 或真实表号引用;删除与表重复的数值/行项",{unitId:a.unitId}))),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"]},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(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,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
41
  ${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")};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:(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}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: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(g.reason),expectedOutcome:i.expectedOutcome,basis:m.basis},h,k);return{data:r,progressLedger:{effective:[(0,e.Fu)(["delegation",m.actorId,r])]}}}}]}}}},65970:(a,b,c)=>{c.d(b,{$p:()=>Q,Li:()=>R,Pw:()=>aj});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=["work-package","source-allocation","production-operation","shared-definition","writing-unit","project-feature"],R={"work-package":"work-package","source-allocation":"source-allocation","production-operation":"production","shared-definition":"shared-definition","writing-unit":"writing","project-feature":"professional-decision"},S={"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"]},T={type:"string",minLength:1},U={type:"integer",minimum:0},V={type:"integer",minimum:1},W=a=>({type:"array",items:a}),X=(a,b=Object.keys(a))=>({type:"object",properties:a,required:b,additionalProperties:!1}),Y=X({memberIndices:W({...U,description:"全局 memberIndices(见 read_scope 的 members 视图)"}),memberIds:W({...T,description:"冻结清单成员 id(query_work_packages/read_scope 的成员 id);程序解析为 memberIndices"}),groupIndices:W({...U,description:"来源分组序号(见 read_scope 的 members 视图 sourceGroup 字段)"}),sourceFiles:W({...T,description:"来源文件在资料范围内的相对路径"}),sourceGroupIds:W({...T,description:"冻结来源分组身份(query_work_packages 返回的 source-group:…);程序解析为 memberIndices"})},[]),Z=X({ratePerCrewShift:X({value:T,unit:T,basis:T}),plannedCrews:V,productiveCrews:V,parallelismBasis:T,hoursPerShift:{type:"number",minimum:0,maximum:24}}),$=W(X({resourcePoolId:T,demand:V,mode:{...T,enum:["work","retained"]},holdAfterTicks:U,basis:T},["resourcePoolId","demand","mode","basis"])),_=W(X({operationId:T,from:{...T,enum:["start","finish"]},lag:{type:"integer"},basis:T})),aa={title:T,method:T,workfront:T,execution:{...T,enum:["sequential"]},continuityBasis:T,production:Z,requirements:$,predecessors:_,rounding:X({quantumTicks:V,basis:T}),release:U,latestFinish:U},ab={type:"number",minimum:0,maximum:1},ac=X({coordinateSystem:{...T,enum:["relative-schematic"]},placements:W(X({nodeId:T,x:ab,y:ab,width:ab,height:ab})),routes:W(X({edgeIndex:U,points:W(X({x:ab,y:ab}))}))}),ad={"work-package":{type:"object",additionalProperties:!1,properties:{selection:Y,sectionIds:{...W(T),description:"本包实际支撑的全部合同小节。后续委派的 sectionIds 必须包含在所选包的 sectionIds 并集中;先确定职责节组,再声明覆盖,不只列代表小节。"},workPackageId:{...T,description:"**只用于修订已提交的工作包**;新建时不要传"},title:T,objectScope:T,workfront:T},required:["selection","sectionIds","title","objectScope","workfront"]},"source-allocation":{type:"object",additionalProperties:!1,properties:{workPackageId:T,operation:T,selection:Y,numerator:T,denominator:T},required:["workPackageId","operation","selection","numerator","denominator"]},"production-operation":{type:"object",additionalProperties:!1,properties:{workPackageId:T,operation:T,selection:Y,calendarId:T,resourcePoolIds:W(T),predecessorIds:W(T),operationId:{...T,description:"修订既有作业时填实际实体 id;新建时不要传"},draft:X(aa,Object.keys(aa).filter(a=>!["release","latestFinish"].includes(a))),intent:X(aa,[])},required:["workPackageId","operation","selection","calendarId","resourcePoolIds","predecessorIds"]},"shared-definition":{type:"object",additionalProperties:!1,properties:{kind:{...T,enum:["resource-pool","work-calendar"]},id:T,definition:X({title:T,unit:{...T,description:"resource-pool 必填:计量单位(人/台/套等);work-calendar 不填"},capacityBasis:{...T,description:"resource-pool 必填:容量依据,按实际资源能力声明,不能从需求峰值反推"},basis:{...T,description:"必填:该日历/资源池的工程来源与依据"},availability:W(X({start:U,end:V,capacity:U})),windows:W(X({start:U,end:V}))},["title","basis"])},required:["kind","id","definition"]},"writing-unit":{type:"object",additionalProperties:!1,properties:{purpose:T,sectionIds:W(T),revision:X({reason:T,retire:W(X({unitId:T,version:{type:"integer",minimum:1}},["unitId","version"])),replacements:W(X({fromUnitId:T,toUnitIds:W(T)},["fromUnitId","toUnitIds"])),redirects:W(X({fromUnitId:T,toUnitId:T},["fromUnitId","toUnitId"]))},["retire","replacements","redirects"]),units:W(X({id:T,kind:{...T,enum:["paragraph","table","figure"]},subsectionId:{...T,description:"冻结的节计划小节 id(plan_section 返回的 subsections[].subsectionId);新流程必填,旧归档可缺省"},planHash:{...T,description:"plan_section 返回的全局计划 hash;单元写作时必须与冻结计划一致"},sectionPlanHash:{...T,description:"plan_section 返回的 sectionPlanHash;单元写作时必须与冻结节计划一致"},blockId:{...T,description:"当前小节的写作块 id(sectionPlan.subsections[].writingOutline[].blockId):一次提交本小节全部写作块,每个块各一个单元、各带自己的 blockId,一主题一块"},contentContractHash:{...T,description:"当前小节contentContract.hash;与当前内容安排使用同一身份"},claims:W(X({id:T,subject:T,attribute:T,value:T,unit:T,condition:T,support:{...T,enum:["literal","requires-review"]},nature:{...T,enum:["project-fact","proposed-decision","calculation","technical-basis"]},source:X({evidenceId:T,entityId:T,entityVersion:{type:"integer",minimum:1},certificateId:T,sourceHash:T,quote:T},[]),location:X({quote:T,rowId:T,columnKey:T},[]),verification:{...T,enum:["unverified"]}},["id","subject","attribute","value","condition","nature","source","location"])),implementations:W(X({obligationId:T,role:{...T,enum:["method","data","acceptance","reference"]},claimId:T,location:X({quote:T,rowId:T,columnKey:T},[])},["obligationId","role","location"])),heading:{...T,description:"只写标题文字,不含 1.1/3.4/一、等章节编号;新流程必须与计划小节标题逐字一致"},title:{...T,description:"heading 的同义字段;同样只写标题文字,不含章节编号"},criterionIds:W(T),coverageItemIds:{...W(T),description:"本单元作为**主载体**承接的契约项 id(sectionBriefs[].coverageItems[].id):同一契约项在本节只能由一个主载体认领;实质性单元必须至少认领或引用一项"},referencedCoverageItemIds:{...W(T),description:"本单元只是引用、主载体在别处(如表/图)的契约项 id;引用单元只写判断/接口并用真实表号/图号引用,不复述主载体内容"},decisionReason:{...T,description:"作者自选表(没有 outputId)必须说明为什么必须用表、承载哪组唯一内容;纯摘要表会被拒收"},standardCitations:W(X({name:T,code:T,version:T,scope:T,verification:{...T,enum:["verified","unverified"]}},["name","code","version","scope","verification"])),outputId:{...T,description:"对应 tenderResponse.requiredOutputs[].id:本表/图承接哪个点名输出;一张载体只填一个"},text:T,caption:T,notes:W(T),formFieldBindings:W(X({fieldId:T,columnKey:T},["fieldId","columnKey"])),tableRowGroups:W(X({id:T,label:T},["id","label"])),columns:W(X({key:T,title:T,unit:T,headerPath:W(T)},["key","title"])),rows:W(X({id:T,cells:{type:"object",additionalProperties:!0,description:"键为同单元 `columns[].key` 声明的列名;不得留空或占位"},groupId:T},["id"])),nodes:W(X({id:T,label:T,group:{...T,description:"非计算图:节点所属阶段/分组,用于泳道列(部署图如 准备/主体/安装/收尾;危大管控图用 识别/对策/责任/验证)"},lane:{...T,description:"非计算图:节点所属区段/工作面,用于行对齐"}},["id","label"])),edges:W(X({from:T,to:T,label:T},["from","to"])),graphLayout:{...T,enum:["grid","tree"],description:"仅非计算图:tree=按父子边排层级(组织机构/汇报关系);grid=一般关系图"},figureSemantics:{...T,enum:["org","deployment","risk-control","process","generic"],description:"仅非计算图:图例语义;org=组织层级,deployment=区段/阶段/顺序/移交,risk-control=识别→对策→责任→验证,process=工序流转"},planChart:X({view:{...T,enum:["schedule","network"],description:"由执行基准直接渲染的日历轴计划图:总进度横道图/里程碑网络图;不填证书,日期/里程碑取自唯一执行基准"}}),layout:{...ac,description:"仅图件:明确拟定的相对示意区域与逐关系线路,图题须标示意;不补造现场尺寸或北向"},references:W(X({kind:T,type:T,evidenceId:T,quote:T,entityId:T,entityVersion:U,certificateId:T,ref:T,refId:T,id:T,sourceId:T,note:T},[])),assertions:W(X({subject:T,purpose:T,condition:T,reference:X({kind:T,type:T,evidenceId:T,quote:T,entityId:T,entityVersion:U,certificateId:T,ref:T,refId:T,id:T,sourceId:T,note:T},[])},["subject","purpose","reference"]))},["id","kind"]))},required:["purpose","sectionIds","units"]},"project-feature":{type:"object",additionalProperties:!1,properties:{workPackageId:T,key:T,value:T,dimension:T,evidence:{type:"array",minItems:1,items:X({observationIndex:U,sourceEvidenceId:T,quote:T,sourceSelection:{...T,enum:["full-excerpt"]}},["observationIndex","sourceEvidenceId"])}},required:["workPackageId","key","value","dimension","evidence"]}},ae=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},af={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"},ag={paragraph:"paragraph",text:"paragraph",prose:"paragraph",table:"table",grid:"table",figure:"figure",diagram:"figure",chart:"figure",image:"figure"},ah=(a,b)=>{let c={...ae(a)};void 0===c.kind&&"string"==typeof c.type&&(c.kind=c.type);let d=String(c.kind??"").trim().toLowerCase().replace(/[\s_]+/gu,"-"),e=af[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(ae(a)).join("、")||"空"})。`);return void 0!==c.entityVersion&&"string"==typeof c.entityVersion&&/^\d+$/u.test(c.entityVersion)&&(c.entityVersion=Number(c.entityVersion)),c},ai=(a,b,c,d)=>{if("writing-unit"!==a){let c={...b},e=ae(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=ae(c.draft),b=ae(a.production),d=ae(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={...ae(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=ag[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=>ah(a,c)),b.assertions=b.assertions.map(a=>{let b={...ae(a)};return void 0!==b.reference&&(b.reference=ah(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={...ae(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={...ae(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 aj(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:Q.filter(b=>a.permissions.includes(R[b]))),p=b=>{let c=String(b);if(!Q.includes(c))throw Error(`CONSTRUCTION_SUBMIT_ACTION_UNKNOWN:action「${String(b)}」不在允许集合:${Q.join("/")}`);if(!o.has(c))throw Error(`CONSTRUCTION_SUBMIT_ACTION_UNAVAILABLE:action「${c}」不在本职责当前目的的工具面(可用:${[...o].join("/")||"无"});请按实际职责另立目的或请求协调。`);let d=R[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:[]}}),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]))}}}},U=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=ae(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},V={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},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=>!S[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=ai(q,ae(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,ad[q]),...f.issues.map(a=>`${a.unitId}:${a.code}:${a.message}`),...U(e)];g.length?t.push({unitId:String(ae(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,ad[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 ae(d.revision).reason){let a=String(ae(d.revision).reason).trim();a&&(d={...d,units:d.units.map(b=>({...b,carrierRevisionReason:a}))})}if("writing-unit"===q){let a=U(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);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])),e=new Map(o.map(a=>[a.unit.id,a]));for(let a of n)c.set(a.id,{unit:a,sectionIds:h}),e.set(a.id,{unit:a,sectionIds:h});let g=(0,A.ly)({contract:a.contract,sectionIds:h,submitted:n,...a.sourceDraftOnly?{sourceDraftContracts:a.sectionContracts}:{},sectionUnits:[...c.values()],carrierUnits:[...e.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(g.passed&&!g.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)});u.push(...j),w.push(...C(j)),l=g}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());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,...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,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 Q=(()=>{if("writing-unit"!==q)return{};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,...Q,reading:"该提交与当前版本一致,没有产生新版本。不要原样重提:继续写下一段/下一个单元,或声明完成。"}};let R=o;if("committed"===R.state)return I(q,R,c,a.store.proposalEvaluation(R.id));if(R.changes.every(b=>(0,m.V5)(b.value)===(0,m.V5)(a.store.entity(b.id)?.value??null)))return{data:{action:q,proposalId:R.id,unchanged:!0,submitted:!1,effective:!1,entities:R.changes.map(b=>({entityId:b.id,version:a.store.entity(b.id)?.version??null})),...Q,reading:"提交内容与当前生效版本完全一致,没有产生新版本。不要原样重提;继续写下一个单元/下一节,或声明完成。"}};let T=await B(q,R.id),V="writing-unit"===q?void 0:E(q,T,H(R));if(V?.repeated)return F(q,R,T,V);if("valid"!==T.value.dataValidity||"valid"!==T.value.relatedConstraints)return{data:{submitted:!1,stage:"evaluation-rejected",...C(R.id,T,q),...V?{evaluationOutcomeKey:V.key,evaluationOutcomeAttempts:V.attempts}:{}},feedbackRequired:!0,progressLedger:V?{effective:[V.key]}:{evidence:[(0,m.Fu)(["actual-evaluation",T.id,T.inputHash])]}};let W=I(q,R,c,T,V?.key);x=!!(f&&k&&f.subsections.filter(a=>"transition"!==a.role).every(b=>(0,L.rz)(a.store,k).some(a=>a.subsectionId===b.subsectionId)));let X=!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}:{},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,Y=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=X&&!X.locked&&(X.openFindings>0||X.unreviewedUnitIds.length>0||!1===X.reviewOk||(X.gaps?.length??0)>0),h={...s.length?{normalizedBindings:s}:{},...l?.advisory.length?{writeCheck:{passed:!0,advisory:l.advisory}}:{},...y.length?{sectionIssues:y}:{},...X?{autoClosure:X}:{},...X&&k?{invocationBoundary:{sectionId:k,state:(0,N.Pp)(a.store,k)?.phase??(X.locked?"locked":"reviewing"),reason:X.locked?"本节已锁定,交还调度选择下一节":"当前审查结果已保存,交还调度处理修订或依赖",key:(0,N.Pp)(a.store,k)?.boundaryKey??(0,m.Fu)([k,X])}}:{},...X?.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 才补。`}:{}};return Object.keys(h).length?{...b,...e.length?{feedbackRequired:!0}:{},data:{...b.data,...h}}:b};return Y(t.length?{...W,feedbackRequired:!0,progressLedger:{evidence:[],effective:[]},data:{...W.data,partial:!0,rejectedUnits:t,requiredBindings:w,message:`已生效 ${d.units?.length??0} 个单元;${t.length} 个单元未通过校验:${t.map(a=>a.unitId).join("、")}。按每个 unitId 的 issues 与 requiredBindings 单独修正后重提;不要原样重复整批。`}}:W)}},X={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=ai(e,ae(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,ad[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}:{}}}},Y=ad["writing-unit"].properties.units.items,Z={...Y.properties};for(let a of["planHash","sectionPlanHash","contentContractHash","subsectionId"])delete Z[a];let $={name:"write_subsection",description:"按当前冻结小节提交正文;作者决定内容、引用和写作块,程序绑定单元身份、计划哈希与输出。优先使用本工具。每个计划块提供一个 units 项;多个块时须给 blockId。复用既有块的单元身份;提交仍须经过全部写前校验与独立审查。",parameters:{type:"object",additionalProperties:!1,required:["sectionId","subsectionId","units","reason"],properties:{sectionId:T,subsectionId:T,reason:T,expectedSectionPlanHash:{...T,description:"可选的并发前置条件;若已读计划过期则拒绝本次写入"},units:W({...Y,properties:Z,required:["kind"]})}},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.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.id)).size!==i.length)throw Error("WRITING_DUPLICATE_BLOCK:每个写作块只提交一个单元");return V.invoke({action:"writing-unit",reason:b.reason,payload:{purpose:"writing",sectionIds:[d],units:i}},c)}};return[...o.has("writing-unit")&&a.structurePlan?[$]:[],V,X]}},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}
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")};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:(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}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(g.reason),expectedOutcome:i.expectedOutcome,basis:m.basis},h,k);return{data:r,progressLedger:{effective:[(0,e.Fu)(["delegation",m.actorId,r])]}}}}]}}}},65970:(a,b,c)=>{c.d(b,{$p:()=>Q,Li:()=>R,Pw:()=>aj});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=["work-package","source-allocation","production-operation","shared-definition","writing-unit","project-feature"],R={"work-package":"work-package","source-allocation":"source-allocation","production-operation":"production","shared-definition":"shared-definition","writing-unit":"writing","project-feature":"professional-decision"},S={"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"]},T={type:"string",minLength:1},U={type:"integer",minimum:0},V={type:"integer",minimum:1},W=a=>({type:"array",items:a}),X=(a,b=Object.keys(a))=>({type:"object",properties:a,required:b,additionalProperties:!1}),Y=X({memberIndices:W({...U,description:"全局 memberIndices(见 read_scope 的 members 视图)"}),memberIds:W({...T,description:"冻结清单成员 id(query_work_packages/read_scope 的成员 id);程序解析为 memberIndices"}),groupIndices:W({...U,description:"来源分组序号(见 read_scope 的 members 视图 sourceGroup 字段)"}),sourceFiles:W({...T,description:"来源文件在资料范围内的相对路径"}),sourceGroupIds:W({...T,description:"冻结来源分组身份(query_work_packages 返回的 source-group:…);程序解析为 memberIndices"})},[]),Z=X({ratePerCrewShift:X({value:T,unit:T,basis:T}),plannedCrews:V,productiveCrews:V,parallelismBasis:T,hoursPerShift:{type:"number",minimum:0,maximum:24}}),$=W(X({resourcePoolId:T,demand:V,mode:{...T,enum:["work","retained"]},holdAfterTicks:U,basis:T},["resourcePoolId","demand","mode","basis"])),_=W(X({operationId:T,from:{...T,enum:["start","finish"]},lag:{type:"integer"},basis:T})),aa={title:T,method:T,workfront:T,execution:{...T,enum:["sequential"]},continuityBasis:T,production:Z,requirements:$,predecessors:_,rounding:X({quantumTicks:V,basis:T}),release:U,latestFinish:U},ab={type:"number",minimum:0,maximum:1},ac=X({coordinateSystem:{...T,enum:["relative-schematic"]},placements:W(X({nodeId:T,x:ab,y:ab,width:ab,height:ab})),routes:W(X({edgeIndex:U,points:W(X({x:ab,y:ab}))}))}),ad={"work-package":{type:"object",additionalProperties:!1,properties:{selection:Y,sectionIds:{...W(T),description:"本包实际支撑的全部合同小节。后续委派的 sectionIds 必须包含在所选包的 sectionIds 并集中;先确定职责节组,再声明覆盖,不只列代表小节。"},workPackageId:{...T,description:"**只用于修订已提交的工作包**;新建时不要传"},title:T,objectScope:T,workfront:T},required:["selection","sectionIds","title","objectScope","workfront"]},"source-allocation":{type:"object",additionalProperties:!1,properties:{workPackageId:T,operation:T,selection:Y,numerator:T,denominator:T},required:["workPackageId","operation","selection","numerator","denominator"]},"production-operation":{type:"object",additionalProperties:!1,properties:{workPackageId:T,operation:T,selection:Y,calendarId:T,resourcePoolIds:W(T),predecessorIds:W(T),operationId:{...T,description:"修订既有作业时填实际实体 id;新建时不要传"},draft:X(aa,Object.keys(aa).filter(a=>!["release","latestFinish"].includes(a))),intent:X(aa,[])},required:["workPackageId","operation","selection","calendarId","resourcePoolIds","predecessorIds"]},"shared-definition":{type:"object",additionalProperties:!1,properties:{kind:{...T,enum:["resource-pool","work-calendar"]},id:T,definition:X({title:T,unit:{...T,description:"resource-pool 必填:计量单位(人/台/套等);work-calendar 不填"},capacityBasis:{...T,description:"resource-pool 必填:容量依据,按实际资源能力声明,不能从需求峰值反推"},basis:{...T,description:"必填:该日历/资源池的工程来源与依据"},availability:W(X({start:U,end:V,capacity:U})),windows:W(X({start:U,end:V}))},["title","basis"])},required:["kind","id","definition"]},"writing-unit":{type:"object",additionalProperties:!1,properties:{purpose:T,sectionIds:W(T),revision:X({reason:T,retire:W(X({unitId:T,version:{type:"integer",minimum:1}},["unitId","version"])),replacements:W(X({fromUnitId:T,toUnitIds:W(T)},["fromUnitId","toUnitIds"])),redirects:W(X({fromUnitId:T,toUnitId:T},["fromUnitId","toUnitId"]))},["retire","replacements","redirects"]),units:W(X({id:T,kind:{...T,enum:["paragraph","table","figure"]},subsectionId:{...T,description:"冻结的节计划小节 id(plan_section 返回的 subsections[].subsectionId);新流程必填,旧归档可缺省"},planHash:{...T,description:"plan_section 返回的全局计划 hash;单元写作时必须与冻结计划一致"},sectionPlanHash:{...T,description:"plan_section 返回的 sectionPlanHash;单元写作时必须与冻结节计划一致"},blockId:{...T,description:"当前小节的写作块 id(sectionPlan.subsections[].writingOutline[].blockId):一次提交本小节全部写作块,每个块各一个单元、各带自己的 blockId,一主题一块"},contentContractHash:{...T,description:"当前小节contentContract.hash;与当前内容安排使用同一身份"},claims:W(X({id:T,subject:T,attribute:T,value:T,unit:T,condition:T,support:{...T,enum:["literal","requires-review"]},nature:{...T,enum:["project-fact","proposed-decision","calculation","technical-basis"]},source:X({evidenceId:T,entityId:T,entityVersion:{type:"integer",minimum:1},certificateId:T,sourceHash:T,quote:T},[]),location:X({quote:T,rowId:T,columnKey:T},[]),verification:{...T,enum:["unverified"]}},["id","subject","attribute","value","condition","nature","source","location"])),implementations:W(X({obligationId:T,role:{...T,enum:["method","data","acceptance","reference"]},claimId:T,location:X({quote:T,rowId:T,columnKey:T},[])},["obligationId","role","location"])),heading:{...T,description:"只写标题文字,不含 1.1/3.4/一、等章节编号;新流程必须与计划小节标题逐字一致"},title:{...T,description:"heading 的同义字段;同样只写标题文字,不含章节编号"},criterionIds:W(T),coverageItemIds:{...W(T),description:"本单元作为**主载体**承接的契约项 id(sectionBriefs[].coverageItems[].id):同一契约项在本节只能由一个主载体认领;实质性单元必须至少认领或引用一项"},referencedCoverageItemIds:{...W(T),description:"本单元只是引用、主载体在别处(如表/图)的契约项 id;引用单元只写判断/接口并用真实表号/图号引用,不复述主载体内容"},decisionReason:{...T,description:"作者自选表(没有 outputId)必须说明为什么必须用表、承载哪组唯一内容;纯摘要表会被拒收"},standardCitations:W(X({name:T,code:T,version:T,scope:T,verification:{...T,enum:["verified","unverified"]}},["name","code","version","scope","verification"])),outputId:{...T,description:"对应 tenderResponse.requiredOutputs[].id:本表/图承接哪个点名输出;一张载体只填一个"},text:T,caption:T,notes:W(T),formFieldBindings:W(X({fieldId:T,columnKey:T},["fieldId","columnKey"])),tableRowGroups:W(X({id:T,label:T},["id","label"])),columns:W(X({key:T,title:T,unit:T,headerPath:W(T)},["key","title"])),rows:W(X({id:T,cells:{type:"object",additionalProperties:!0,description:"键为同单元 `columns[].key` 声明的列名;不得留空或占位"},groupId:T},["id"])),nodes:W(X({id:T,label:T,group:{...T,description:"非计算图:节点所属阶段/分组,用于泳道列(部署图如 准备/主体/安装/收尾;危大管控图用 识别/对策/责任/验证)"},lane:{...T,description:"非计算图:节点所属区段/工作面,用于行对齐"}},["id","label"])),edges:W(X({from:T,to:T,label:T},["from","to"])),graphLayout:{...T,enum:["grid","tree"],description:"仅非计算图:tree=按父子边排层级(组织机构/汇报关系);grid=一般关系图"},figureSemantics:{...T,enum:["org","deployment","risk-control","process","generic"],description:"仅非计算图:图例语义;org=组织层级,deployment=区段/阶段/顺序/移交,risk-control=识别→对策→责任→验证,process=工序流转"},planChart:X({view:{...T,enum:["schedule","network"],description:"由执行基准直接渲染的日历轴计划图:总进度横道图/里程碑网络图;不填证书,日期/里程碑取自唯一执行基准"}}),layout:{...ac,description:"仅图件:明确拟定的相对示意区域与逐关系线路,图题须标示意;不补造现场尺寸或北向"},references:W(X({kind:T,type:T,evidenceId:T,quote:T,entityId:T,entityVersion:U,certificateId:T,ref:T,refId:T,id:T,sourceId:T,note:T},[])),assertions:W(X({subject:T,purpose:T,condition:T,reference:X({kind:T,type:T,evidenceId:T,quote:T,entityId:T,entityVersion:U,certificateId:T,ref:T,refId:T,id:T,sourceId:T,note:T},[])},["subject","purpose","reference"]))},["id","kind"]))},required:["purpose","sectionIds","units"]},"project-feature":{type:"object",additionalProperties:!1,properties:{workPackageId:T,key:T,value:T,dimension:T,evidence:{type:"array",minItems:1,items:X({observationIndex:U,sourceEvidenceId:T,quote:T,sourceSelection:{...T,enum:["full-excerpt"]}},["observationIndex","sourceEvidenceId"])}},required:["workPackageId","key","value","dimension","evidence"]}},ae=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},af={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"},ag={paragraph:"paragraph",text:"paragraph",prose:"paragraph",table:"table",grid:"table",figure:"figure",diagram:"figure",chart:"figure",image:"figure"},ah=(a,b)=>{let c={...ae(a)};void 0===c.kind&&"string"==typeof c.type&&(c.kind=c.type);let d=String(c.kind??"").trim().toLowerCase().replace(/[\s_]+/gu,"-"),e=af[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(ae(a)).join("、")||"空"})。`);return void 0!==c.entityVersion&&"string"==typeof c.entityVersion&&/^\d+$/u.test(c.entityVersion)&&(c.entityVersion=Number(c.entityVersion)),c},ai=(a,b,c,d)=>{if("writing-unit"!==a){let c={...b},e=ae(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=ae(c.draft),b=ae(a.production),d=ae(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={...ae(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=ag[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=>ah(a,c)),b.assertions=b.assertions.map(a=>{let b={...ae(a)};return void 0!==b.reference&&(b.reference=ah(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={...ae(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={...ae(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 aj(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:Q.filter(b=>a.permissions.includes(R[b]))),p=b=>{let c=String(b);if(!Q.includes(c))throw Error(`CONSTRUCTION_SUBMIT_ACTION_UNKNOWN:action「${String(b)}」不在允许集合:${Q.join("/")}`);if(!o.has(c))throw Error(`CONSTRUCTION_SUBMIT_ACTION_UNAVAILABLE:action「${c}」不在本职责当前目的的工具面(可用:${[...o].join("/")||"无"});请按实际职责另立目的或请求协调。`);let d=R[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:[]}}),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]))}}}},U=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=ae(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},V={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},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=>!S[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=ai(q,ae(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,ad[q]),...f.issues.map(a=>`${a.unitId}:${a.code}:${a.message}`),...U(e)];g.length?t.push({unitId:String(ae(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,ad[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 ae(d.revision).reason){let a=String(ae(d.revision).reason).trim();a&&(d={...d,units:d.units.map(b=>({...b,carrierRevisionReason:a}))})}if("writing-unit"===q){let a=U(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);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])),e=new Map(o.map(a=>[a.unit.id,a]));for(let a of n)c.set(a.id,{unit:a,sectionIds:h}),e.set(a.id,{unit:a,sectionIds:h});let g=(0,A.ly)({contract:a.contract,sectionIds:h,submitted:n,...a.sourceDraftOnly?{sourceDraftContracts:a.sectionContracts}:{},sectionUnits:[...c.values()],carrierUnits:[...e.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(g.passed&&!g.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)});u.push(...j),w.push(...C(j)),l=g}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());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,...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,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 Q=(()=>{if("writing-unit"!==q)return{};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,...Q,reading:"该提交与当前版本一致,没有产生新版本。不要原样重提:继续写下一段/下一个单元,或声明完成。"}};let R=o;if("committed"===R.state)return I(q,R,c,a.store.proposalEvaluation(R.id));if(R.changes.every(b=>(0,m.V5)(b.value)===(0,m.V5)(a.store.entity(b.id)?.value??null)))return{data:{action:q,proposalId:R.id,unchanged:!0,submitted:!1,effective:!1,entities:R.changes.map(b=>({entityId:b.id,version:a.store.entity(b.id)?.version??null})),...Q,reading:"提交内容与当前生效版本完全一致,没有产生新版本。不要原样重提;继续写下一个单元/下一节,或声明完成。"}};let T=await B(q,R.id),V="writing-unit"===q?void 0:E(q,T,H(R));if(V?.repeated)return F(q,R,T,V);if("valid"!==T.value.dataValidity||"valid"!==T.value.relatedConstraints)return{data:{submitted:!1,stage:"evaluation-rejected",...C(R.id,T,q),...V?{evaluationOutcomeKey:V.key,evaluationOutcomeAttempts:V.attempts}:{}},feedbackRequired:!0,progressLedger:V?{effective:[V.key]}:{evidence:[(0,m.Fu)(["actual-evaluation",T.id,T.inputHash])]}};let W=I(q,R,c,T,V?.key);x=!!(f&&k&&f.subsections.filter(a=>"transition"!==a.role).every(b=>(0,L.rz)(a.store,k).some(a=>a.subsectionId===b.subsectionId)));let X=!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}:{},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,Y=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=X&&!X.locked&&(X.openFindings>0||X.unreviewedUnitIds.length>0||!1===X.reviewOk||(X.gaps?.length??0)>0),h={...s.length?{normalizedBindings:s}:{},...l?.advisory.length?{writeCheck:{passed:!0,advisory:l.advisory}}:{},...y.length?{sectionIssues:y}:{},...X?{autoClosure:X}:{},...X&&k?{invocationBoundary:{sectionId:k,state:(0,N.Pp)(a.store,k)?.phase??(X.locked?"locked":"reviewing"),reason:X.locked?"本节已锁定,交还调度选择下一节":"当前审查结果已保存,交还调度处理修订或依赖",key:(0,N.Pp)(a.store,k)?.boundaryKey??(0,m.Fu)([k,X])}}:{},...X?.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 才补。`}:{}};return Object.keys(h).length?{...b,...e.length?{feedbackRequired:!0}:{},data:{...b.data,...h}}:b};return Y(t.length?{...W,feedbackRequired:!0,progressLedger:{evidence:[],effective:[]},data:{...W.data,partial:!0,rejectedUnits:t,requiredBindings:w,message:`已生效 ${d.units?.length??0} 个单元;${t.length} 个单元未通过校验:${t.map(a=>a.unitId).join("、")}。按每个 unitId 的 issues 与 requiredBindings 单独修正后重提;不要原样重复整批。`}}:W)}},X={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=ai(e,ae(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,ad[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}:{}}}},Y=ad["writing-unit"].properties.units.items,Z={...Y.properties};for(let a of["planHash","sectionPlanHash","contentContractHash","subsectionId"])delete Z[a];let $={name:"write_subsection",description:"按当前冻结小节提交正文;作者决定内容、引用和写作块,程序绑定单元身份、计划哈希与输出。优先使用本工具。每个计划块提供一个 units 项;多个块时须给 blockId。复用既有块的单元身份;提交仍须经过全部写前校验与独立审查。",parameters:{type:"object",additionalProperties:!1,required:["sectionId","subsectionId","units","reason"],properties:{sectionId:T,subsectionId:T,reason:T,expectedSectionPlanHash:{...T,description:"可选的并发前置条件;若已读计划过期则拒绝本次写入"},units:W({...Y,properties:Z,required:["kind"]})}},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.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.id)).size!==i.length)throw Error("WRITING_DUPLICATE_BLOCK:每个写作块只提交一个单元");return V.invoke({action:"writing-unit",reason:b.reason,payload:{purpose:"writing",sectionIds:[d],units:i}},c)}};return[...o.has("writing-unit")&&a.structurePlan?[$]:[],V,X]}},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
43
  ${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
44
  ${a.objectScope??""}
45
45
  ${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:()=>V,KY:()=>q,Y4:()=>U,yW:()=>T});var d=c(29245),e=c(68515),f=c(15038),g=c(69977),h=c(6873),i=c(80154),j=c(91088),k=c(745),l=c(49724),m=c(33074),n=c(23105),o=c(36690),p=c(10402);class q extends Error{constructor(a){super(`SECTION_STRUCTURE_PLAN_INVALID:${a.issues.slice(0,8).join(";")}`),this.name="SectionPlanInvalidError",this.detail=a}}let r=["paragraph","table","figure"],s={chart:"figure",diagram:"figure",org_chart:"figure",list:"paragraph"},t=[...r,...Object.keys(s)],u={version:"section-carrier-contract-v1",canonicalPrimaryCarriers:r,writingBlockCarriers:i.TE,inputAliases:s,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 块承接,并实际规划组织层级、岗位、汇报关系;载体值合法不代表这些专业内容已满足。独审仍须核这些语义及原输出要求,不得要求把规范载体改成别名,也不得因规范映射自动放行。"},v=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"]),w={type:"string"},x=a=>({type:"array",items:a}),y=(a,b,c=!1)=>({type:"object",properties:a,required:b,additionalProperties:c});function z(a){let b=String(a??"").toLowerCase();return"table"===b?"table":"paragraph"===b?"paragraph":"figure"===b?"figure":s[b]??"figure"}function A(a){return["blocking","critical","major"].includes(String(a??"").toLowerCase())?"blocking":"advisory"}let B=y({questions:x({...w,minLength:1}),methods:x({...w,minLength:1}),sequence:x({...w,minLength:1}),controlValues:x({...w,minLength:1}),tolerances:x({...w,minLength:1}),acceptance:x({...w,minLength:1}),responsibilities:x({...w,minLength:1}),interfaces:x({...w,minLength:1})},[],!0),C=y({blockId:w,topic:{...w,minLength:1},purpose:{...w,minLength:1},carrier:{...w,enum:i.TE},evidenceRefs:x(w),mustNotRepeat:x(w)},["topic","purpose","carrier"],!0),D=y({title:{...w,minLength:1},coverageItemIds:x({...w,minLength:1}),referencedCoverageItemIds:x({...w,minLength:1}),primaryCarrier:{...w,enum:t,description:"规范载体为 paragraph/table/figure;chart/diagram/org_chart 仅兼容输入,统一保存为 figure;list 仅兼容输入,统一保存为 paragraph,列表排版由写作块的 list 承载。具体图形形式保留在 requiredOutputs.form。"},requiredOutputId:{...w,nullable:!0},factKeys:x({...w,minLength:1}),quantityKeys:x({...w,minLength:1}),outline:B,writingOutline:x(C),objectOrProcess:{...w,minLength:1},response:x(w),data:x(w),acceptance:x(w),decisionReason:{...w,nullable:!0},role:{...w,enum:["content","transition"]}},["title"],!0),E={type:"object",additionalProperties:!1,required:["subsections"],properties:{subsections:x(D)}},F={type:"object",additionalProperties:!1,required:["verdict","findings"],properties:{verdict:{...w,enum:["pass","revise","reject","accept"]},findings:x(y({category:{...w,minLength:1},severity:{...w,enum:["blocking","advisory","critical","major","minor","moderate","warning","medium","non-blocking","info"]},targetSubsectionId:{...w,nullable:!0},detail:{...w,minLength:2},fix:{...w,minLength:2}},["category","severity","detail","fix"],!0)),patches:x(y({subsectionId:{...w,minLength:1},title:{...w,minLength:1},coverageItemIds:x({...w,minLength:1}),referencedCoverageItemIds:x({...w,minLength:1}),primaryCarrier:{...w,enum:t,description:"修改规范载体 paragraph/table/figure;chart/diagram/org_chart 别名仍归一为 figure,不是不同的可保存载体。"},objectOrProcess:w,response:x(w),data:x(w),acceptance:x(w),requiredOutputId:{...w,nullable:!0},factKeys:x({...w,minLength:1}),quantityKeys:x({...w,minLength:1}),outline:B,writingOutline:x(C),controlValues:x({...w,minLength:1}),decisionReason:{...w,nullable:!0},role:{...w,enum:["content","transition"]},mergeInto:{...w,minLength:1}},["subsectionId"],!0))}};function G(a,b){return a.chapters.flatMap(a=>a.sections).find(a=>a.sectionId===b)}function H(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 I(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 J(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 K(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 L(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],...K(a.subsections),sectionPlanHash:""}}function M(a){return a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()}function N(a,b,c,e,f,h){var i;return[h?"你是独立的施工组织设计节级结构规划审查者,不是本计划的作者。只审小节拆分、粒度、载体与重复;只输出 JSON。":"你是施工组织设计总编与节级结构规划者。只依据冻结的全局结构、本节证据与上下文规划小节;只输出 JSON。","",(0,j.dk)({carrierContract:u,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,g.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}