@customize-agent/server 4.61.19 → 4.61.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) 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/2292.js +1 -1
  7. package/.next/server/chunks/5037.js +1 -1
  8. package/.next/server/chunks/5763.js +1 -1
  9. package/.next/server/pages/404.html +1 -1
  10. package/.next/server/pages/500.html +1 -1
  11. package/.next/server/pages/documents.html +1 -1
  12. package/.next/server/pages/generation/[id].html +1 -1
  13. package/.next/server/pages/generation.html +1 -1
  14. package/.next/server/pages/jobs.html +1 -1
  15. package/.next/server/pages/knowledge/file-detail.html +1 -1
  16. package/.next/server/pages/knowledge/files.html +1 -1
  17. package/.next/server/pages/knowledge/manage.html +1 -1
  18. package/.next/server/pages/knowledge/source-preview.html +1 -1
  19. package/.next/server/pages/knowledge.html +1 -1
  20. package/.next/server/pages/models.html +1 -1
  21. package/.next/server/pages/settings.html +1 -1
  22. package/.next/server/pages/skills/[id]/edit.html +1 -1
  23. package/.next/server/pages/skills/[id].html +1 -1
  24. package/.next/server/pages/skills/new.html +1 -1
  25. package/.next/server/pages/skills.html +1 -1
  26. package/.next/server/pages-manifest.json +32 -32
  27. package/package.json +1 -1
  28. /package/.next/static/{0a7dcc1a55366989036803a9385f2f2bb0170d01c8eb8de1040d939533a19470 → fd1217de641078aba72de10a892465bd7ea9bd0189ade955c584eadf9cd77a18}/_buildManifest.js +0 -0
  29. /package/.next/static/{0a7dcc1a55366989036803a9385f2f2bb0170d01c8eb8de1040d939533a19470 → fd1217de641078aba72de10a892465bd7ea9bd0189ade955c584eadf9cd77a18}/_ssgManifest.js +0 -0
@@ -45,4 +45,4 @@ ${b.join("\n")}
45
45
  ${a.whyRelevant}`);return[...n].some(a=>b.includes(a))}),q=a.evidence.filter(a=>!p.includes(a)),r=a.methodRequirements.filter(a=>g.has(e(a)));return{...a,writingOutline:[...b.writingOutline??[]],writingOutlineReading:"writingOutline 是按阅读顺序排列的写作块:每块一个主题、一种载体(paragraph/list/table/figure);**一次 submit 提交本小节全部写作块**,每个块各一个单元、各带自己的 blockId(列表块用段落单元、行首编号表达),不要一个块拆一轮。不要把所有覆盖项堆进一个长段。evidenceRefs 只用本小节已有契约项/输出/事实身份。",coverageItems:f,mustAnswer:k,requirements:i,contextRequirements:j,contextQuestions:a.mustAnswer.filter(a=>!h.has(e(a))&&!j.some(b=>e(b.text)===e(a))),requiredOutputs:l,evidence:p,requiredTables:l.filter(a=>"table"===a.form).map(a=>({title:a.element,columns:a.originalForm?.fields.map(a=>a.label)??[],reason:a.originalForm?"按独立审定原表保留字段、分组和说明,空值按各字段契约核验":"当前小节点名输出,列由对象与内容决定"})),outputForms:a.outputForms.filter(a=>l.some(b=>b.form===a.form&&b.element===a.element)),methodRequirements:r,...a.methodPlan?{methodPlan:{methods:r}}:{},obligationIds:[...new Set(i.flatMap(a=>a.obligationId?[a.obligationId]:[]))],factKeys:[...b.factKeys??[]],evidenceOmitted:(a.evidenceOmitted??0)+q.length,deferred:{coverageItems:a.coverageItems.length-f.length,requirements:a.requirements.length-i.length-j.length,requiredOutputs:a.requiredOutputs.length-l.length,evidence:(a.evidenceOmitted??0)+q.length,evidenceIds:q.flatMap(a=>a.evidenceId?[a.evidenceId]:[]),sourceFiles:[...new Set(q.map(a=>a.sourceFile))],reading:"省略项仍保留在节级简报与冻结计划中,不表示没有义务或来源。其余小节按sectionPlan目录逐项承接;需原文时用search_evidence/read_source/read_object按来源身份读取。contextRequirements是尚未逐项映射的节级来源上下文,不要求在每个小节重复;bindingIssues非空须核计划身份,不能认领其它输出补位。"},bindingIssues:m,focusSubsection:{subsectionId:b.subsectionId,title:b.title,primaryCoverageItemIds:[...b.coverageItemIds],referencedCoverageItemIds:[...b.referencedCoverageItemIds??[]],...b.requiredOutputId?{requiredOutputId:b.requiredOutputId}:{},...c?{sectionPlanHash:c}:{},...b.contentContract?{contentContractHash:b.contentContract.hash}:{}}}}c.d(b,{I_:()=>d,Q9:()=>h,kC:()=>g});let e=a=>a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase();function f(a,b){let c=e(a),d=0;for(let a of b)c.includes(e(a))&&(d+=1);return d}function g(a){let b=a.contract.sections.find(b=>b.id===a.sectionId);if(!b)return;let c=a.contract.chapters.find(a=>a.id===b.chapterId),d=a.tenderResponsePlan?.sections.find(b=>b.sectionId===a.sectionId),e=d?.contentContract,g=[...new Set([...e?.questions??[],...(e?.coverageItems??[]).map(a=>a.text)])],h=(d?.requiredOutputs??[]).filter(a=>a.allowed).map(a=>({...a.originalForm?{originalForm:a.originalForm}:{},...a.applicability?.delivery.location==="technical-appendix"||a.applicability?.delivery.location==="technical-body"?{deliveryLocation:a.applicability.delivery.location}:{},outputId:a.id??"",form:a.form,element:a.basis,basis:a.source?.quote??a.basis,...a.source?{source:{kind:a.source.kind,quote:a.source.quote,...a.source.filePath?{filePath:a.source.filePath}:{},...a.source.page?{page:a.source.page}:{},...a.source.clause?{clause:a.source.clause}:{},...a.source.fileBinding?{fileBinding:{policy:a.source.fileBinding.policy,filePath:a.source.fileBinding.filePath,parsedSha256:a.source.fileBinding.parsedSha256,quoteHash:a.source.fileBinding.quoteHash}}:{}}}:{}})),i=function(a,b,c){if(!a)return{evidence:[],omitted:0};let d=function(a,b){let c=`${a.title}
46
46
  ${a.objectScope??""}
47
47
  ${b.join("\n")}`,d=new Set;for(let a of c.matchAll(/[一-龥]{2,6}/gu)){let b=a[0];b.length>=2&&d.add(b)}return[...d].slice(0,40)}(b,c),e=[];for(let b of a.sourceControls??[]){let a=(b.sourceRef?.contextSpan??b.sourceRef?.sourceSpan??b.value??"").trim();if(!a)continue;let c=f(a,d);c&&e.push({...b.factId?{evidenceId:b.factId}:{},sourceFile:b.sourceRef?.filePath??b.sourceFile,quote:a,whyRelevant:`与本节关键词命中 ${c} 个:${b.key||b.fieldName||"来源原句"}`})}if(!e.length)for(let b of a.facts){let a=`${b.fieldName??b.key}:${b.value}`.trim();a&&f(a,d)&&e.push({...b.factId?{evidenceId:b.factId}:{},sourceFile:b.sourceFile,quote:a,whyRelevant:"项目冻结事实"})}let g=[...new Map(e.map(a=>[a.sourceFile+"|"+a.quote,a])).values()].sort((a,b)=>f(b.quote,d)-f(a.quote,d)),h=0,i=0,j=[];for(let a of g){if(h+a.quote.length>2e4){i+=1;continue}j.push(a),h+=a.quote.length}return{evidence:j,omitted:i}}(a.project,{title:b.title,...e?.objectScope?{objectScope:e.objectScope}:{}},g);return{sectionId:a.sectionId,title:b.title,chapterTitle:c?.title??b.title,...e?.objectScope?{objectScope:e.objectScope}:{},...e?.rationale?{rationale:e.rationale}:{},mustAnswer:g,requirements:(d?.requirements??[]).map(a=>({text:a.text,...a.obligationId?{obligationId:a.obligationId}:{},sourceFile:a.source.filePath,quote:a.source.quote,...a.source.page?{page:a.source.page}:{},...a.source.clause?{clause:a.source.clause}:{}})),requiredOutputs:h,coverageItems:(e?.coverageItems??[]).map(a=>({id:a.id,text:a.text,enumerated:a.enumerated,kind:a.kind,...a.suggestedCarrier?{suggestedCarrier:a.suggestedCarrier}:{}})),mustNotInclude:d?.mustNotInclude??[],globalRules:a.tenderResponsePlan?.globalRules??[],methodRequirements:e?.methodRequirements??[],...e?.methodPlan?{methodPlan:e.methodPlan}:{},...e?.standardCitations?.length?{standardCitations:e.standardCitations}:{},evidenceSources:e?.evidenceSources??[],outputForms:e?.outputForms??[],obligationIds:e?.obligationIds??[],factKeys:e?.factKeys??[],responsibilityPositions:e?.responsibilityPositions??[],requiredTables:h.filter(b=>"table"===b.form&&(!a.tablesForbidden||"technical-appendix"===b.deliveryLocation)).map(a=>({title:a.element,columns:a.originalForm?.fields.map(a=>a.label)??[],reason:a.originalForm?"必须保留审定原表字段顺序、分组和说明":"招标/计划要求的表;列由作者按本节对象确定"})),evidence:i.evidence,evidenceOmitted:i.omitted,canonicalFacts:function(a,b){if(!b)return{};if(!/工期|进度|里程碑|阶段|资源|劳动|机械|材料|设备|吊装|平面/u.test(a))return{startDate:b.startDate,totalDays:b.totalDays};let c=new Map(b.phases.map(a=>[a.id,a.title]));return{startDate:b.startDate,totalDays:b.totalDays,dayZero:b.dayZero,milestones:b.milestones.map(a=>({title:a.title,day:a.day,date:a.date})),phases:b.phases.map(a=>({title:a.title,startDay:a.startDay,endDay:a.endDay,startDate:a.startDate,endDate:a.endDate})),labor:{peak:b.labor.peak,totalWorkdays:b.labor.totalWorkdays,phaseTotals:b.labor.phaseTotals},machines:b.machines.map(a=>({name:a.name,count:a.count,phase:c.get(a.phaseId)})),.../材料|进场|批次|采购|设备/u.test(a)?{materialBatches:b.materialBatches.map(a=>({name:a.name,batch:a.batch,startDay:a.startDay,endDay:a.endDay}))}:{},reading:"以上是本节可引用的投标策划基准(由工程量与施工方法计算,不是合同承诺);正文引用阶段/里程碑的名称、日期或第 N 天,不得另算另一套日期、阶段或数量,也不得把内部编号写进正文。"}}(b.title,a.executionBaseline)}}function h(a){return a.sectionIds.flatMap(b=>{let c=g({...a,sectionId:b});return c?[c]:[]})}},81146:(a,b,c)=>{function d(a){return{...a?{strategy:a}:{},metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,failureStreak:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}}}c.r(b),c.d(b,{createGenerationDiagnostics:()=>d})},85254:(a,b,c)=>{c.d(b,{Av:()=>Z,KY:()=>r,Y4:()=>Y,yW:()=>X});var d=c(29245),e=c(68515),f=c(34389),g=c(15038),h=c(69977),i=c(6873),j=c(80154),k=c(91088),l=c(745),m=c(49724),n=c(33074),o=c(23105),p=c(36690),q=c(10402);class r extends Error{constructor(a){super(`SECTION_STRUCTURE_PLAN_INVALID:${a.issues.slice(0,8).join(";")}`),this.name="SectionPlanInvalidError",this.detail=a}}let s=["paragraph","table","figure"],t={chart:"figure",diagram:"figure",org_chart:"figure",list:"paragraph"},u=[...s,...Object.keys(t)],v={version:"section-carrier-contract-v1",canonicalPrimaryCarriers:s,writingBlockCarriers:j.TE,inputAliases:t,reading:"primaryCarrier 与程序派生的 contentContract.carrier 使用 paragraph/table/figure;chart/diagram/org_chart 只是输入兼容别名,保存和送审时归一为 figure,不是缺失输出或作者未修订。list 是写作块载体;primaryCarrier 收到 list 时归一为 paragraph,列表排版仍由写作块的 list 承载。requiredOutputs.form 保留图的具体输出形式,carrierSemantic 保留专业语义;每项 expectedPrimaryCarrier/expectedWritingBlockCarrier 与确定性校验同源。组织图 form=org_chart 必须由 figure 小节及 figure 块承接,并实际规划组织层级、岗位、汇报关系;载体值合法不代表这些专业内容已满足。独审仍须核这些语义及原输出要求,不得要求把规范载体改成别名,也不得因规范映射自动放行。"},w=new Set(["coverage-item-not-in-section","coverage-item-unknown","coverage-item-duplicate","coverage-item-missing","referenced-coverage-unknown","referenced-coverage-without-primary","coverage-map-invalid","coverage-map-missing"]),x=new Set(["writing-outline-invalid","output-unallocated","output-coverage-missing","output-coverage-invalid","output-duplicate","business-content-in-technical-plan"]),y={type:"string"},z=a=>({type:"array",items:a}),A=(a,b,c=!1)=>({type:"object",properties:a,required:b,additionalProperties:c});function B(a){let b=String(a??"").toLowerCase();return"table"===b?"table":"paragraph"===b?"paragraph":"figure"===b?"figure":t[b]??"figure"}function C(a){return["blocking","critical","major"].includes(String(a??"").toLowerCase())?"blocking":"advisory"}let D=A({questions:z({...y,minLength:1}),methods:z({...y,minLength:1}),sequence:z({...y,minLength:1}),controlValues:z({...y,minLength:1}),tolerances:z({...y,minLength:1}),acceptance:z({...y,minLength:1}),responsibilities:z({...y,minLength:1}),interfaces:z({...y,minLength:1})},[],!0),E=A({blockId:y,topic:{...y,minLength:1},purpose:{...y,minLength:1},carrier:{...y,enum:j.TE},evidenceRefs:z(y),mustNotRepeat:z(y)},["topic","purpose","carrier"],!0),F=A({title:{...y,minLength:1},coverageItemIds:z({...y,minLength:1}),referencedCoverageItemIds:z({...y,minLength:1}),primaryCarrier:{...y,enum:u,description:"规范载体为 paragraph/table/figure;chart/diagram/org_chart 仅兼容输入,统一保存为 figure;list 仅兼容输入,统一保存为 paragraph,列表排版由写作块的 list 承载。具体图形形式保留在 requiredOutputs.form。"},requiredOutputId:{...y,nullable:!0},factKeys:z({...y,minLength:1}),quantityKeys:z({...y,minLength:1}),outline:D,writingOutline:z(E),objectOrProcess:{...y,minLength:1},response:z(y),data:z(y),acceptance:z(y),decisionReason:{...y,nullable:!0},role:{...y,enum:["content","transition"]}},["title"],!0),G={type:"object",additionalProperties:!1,required:["subsections"],properties:{subsections:z(F)}},H={type:"object",additionalProperties:!1,required:["verdict","findings"],properties:{verdict:{...y,enum:["pass","revise","reject","accept"]},findings:z(A({category:{...y,minLength:1},severity:{...y,enum:["blocking","advisory","critical","major","minor","moderate","warning","medium","non-blocking","info"]},targetSubsectionId:{...y,nullable:!0},detail:{...y,minLength:2},fix:{...y,minLength:2}},["category","severity","detail","fix"],!0)),patches:z(A({subsectionId:{...y,minLength:1},title:{...y,minLength:1},coverageItemIds:z({...y,minLength:1}),referencedCoverageItemIds:z({...y,minLength:1}),primaryCarrier:{...y,enum:u,description:"修改规范载体 paragraph/table/figure;chart/diagram/org_chart 别名仍归一为 figure,不是不同的可保存载体。"},objectOrProcess:y,response:z(y),data:z(y),acceptance:z(y),requiredOutputId:{...y,nullable:!0},factKeys:z({...y,minLength:1}),quantityKeys:z({...y,minLength:1}),outline:D,writingOutline:z(E),controlValues:z({...y,minLength:1}),decisionReason:{...y,nullable:!0},role:{...y,enum:["content","transition"]},mergeInto:{...y,minLength:1}},["subsectionId"],!0))}};function I(a,b){return a.chapters.flatMap(a=>a.sections).find(a=>a.sectionId===b)}function J(a){let b=a??{};return Object.fromEntries(["questions","methods","sequence","controlValues","tolerances","acceptance","responsibilities","interfaces"].map(a=>[a,Array.isArray(b[a])?[...new Set(b[a].map(a=>String(a).trim()).filter(Boolean))]:[]]))}function K(a,b){let c=String(a??"").trim();if(!c)return"";let d=b.get(c.toUpperCase());return d||(/^\d{1,3}$/u.test(c)?b.get(`C${Number(c)}`)??c:c)}function L(a){return a.map(({subsectionId:a,order:b,contentContract:c,...d})=>({...d,...c?{objectOrProcess:c.objectOrProcess,response:c.response,data:c.data,acceptance:c.acceptance}:{}}))}function M(a,b){let c=b.coverageItemIds;if(!c.length)return;let d=new Set,e=a.subsections.map(a=>({...a,coverageItemIds:[...a.coverageItemIds],referencedCoverageItemIds:[...a.referencedCoverageItemIds]}));for(let a of e){let b=[];for(let e of a.coverageItemIds){if(c.includes(e)&&!d.has(e)&&!b.includes(e)){b.push(e),d.add(e);continue}if(c.includes(e)){a.referencedCoverageItemIds.includes(e)||a.referencedCoverageItemIds.push(e);continue}let f=c.find(a=>!d.has(a)&&!b.includes(a));f&&(b.push(f),d.add(f))}a.coverageItemIds=b,a.referencedCoverageItemIds=[...new Set(a.referencedCoverageItemIds)].filter(a=>c.includes(a)&&!b.includes(a))}for(let a of c)if(!d.has(a)){let b=[...e].reverse().find(a=>"transition"!==a.role)??e[0];if(!b)return;b.coverageItemIds=[...b.coverageItemIds,a],d.add(a)}let f=e.map((a,b)=>({...a,order:b}));return(0,q.mn)({...a,subsections:f,...O(f),state:a.state})}function N(a,b){let c=()=>({questions:[],methods:[],sequence:[],controlValues:[],tolerances:[],acceptance:[],responsibilities:[],interfaces:[]}),d=new Set,e=a=>{let c=a.trim()||b.title,e=2;for(;d.has((0,o.ri)(c));)c=`${a}(${e++})`;return d.add((0,o.ri)(c)),c},f=[];for(let a of b.requiredOutputs){let b=(0,q.Z4)(a);f.push({subsectionId:`sub-${f.length+1}`,title:e(a.element),order:f.length,coverageItemIds:[],referencedCoverageItemIds:[],primaryCarrier:b,requiredOutputId:a.outputId,factKeys:[],quantityKeys:[],outline:c(),writingOutline:[{blockId:"blk-1",topic:a.element,purpose:"按冻结必出输出承接,写清对象、判据与责任",carrier:b,evidenceRefs:[a.outputId],mustNotRepeat:[]}],contentContract:(0,i.Gv)({objectOrProcess:a.element,response:["按本节冻结输出承接"],data:[],carrier:b,acceptance:[]})})}(b.coverageItemIds.length||b.factKeys.length||b.quantityKeys.length||!f.length)&&f.push({subsectionId:`sub-${f.length+1}`,title:e(b.title),order:f.length,coverageItemIds:[...b.coverageItemIds],referencedCoverageItemIds:[],primaryCarrier:"paragraph",factKeys:[...b.factKeys],quantityKeys:[...b.quantityKeys],outline:c(),writingOutline:[{blockId:"blk-1",topic:b.title,purpose:"按本节契约项写出对象、措施、控制值、岗位与验收",carrier:"paragraph",evidenceRefs:[...b.coverageItemIds,...b.factKeys,...b.quantityKeys],mustNotRepeat:[]}],contentContract:(0,i.Gv)({objectOrProcess:b.title,response:b.coverageItemIds,data:[],carrier:"paragraph",acceptance:[]})});let g=P({structurePlan:a.structurePlan,sectionId:a.sectionId,subsections:f}),h=(0,q.WM)(g,U(a,b));return(0,q.vs)((0,q.vs)(h,"reviewed"),"frozen")}function O(a){return{coverage:a.flatMap(a=>a.coverageItemIds.map(b=>({coverageItemId:b,subsectionId:a.subsectionId}))),outputCoverage:a.flatMap(a=>a.requiredOutputId?[{outputId:a.requiredOutputId,subsectionId:a.subsectionId}]:[])}}function P(a){let b={structurePlanId:a.structurePlan.planId,structurePlanHash:a.structurePlan.planHash,sectionId:a.sectionId};return{version:"section-structure-plan-v1",planId:"section-plan:"+b.structurePlanHash.slice(0,12)+":"+a.sectionId,...b,state:"draft",subsections:[...a.subsections],...O(a.subsections),sectionPlanHash:""}}function Q(a){return a.replace(/[\s\p{P}\p{S}]/gu,"").toLowerCase()}function R(a,b,c,e,f,g){var i;return[g?"你是独立的施工组织设计节级结构规划审查者,不是本计划的作者。只审小节拆分、粒度、载体与重复;只输出 JSON。":"你是施工组织设计总编与节级结构规划者。只依据冻结的全局结构、本节证据与上下文规划小节;只输出 JSON。","",(0,k.dk)({carrierContract:v,planningContext:function(a,b,c,d){let e=a.planningContext,f=new Set;for(let a of b.coverageItemIds){let b=c.find(b=>b.id===a);b?.obligationId&&f.add(b.obligationId)}return{version:e.version,documentType:e.documentType,...e.projectIdentity?{projectIdentity:e.projectIdentity}:{},tenderProfile:{projectType:e.tenderProfile.projectType,...e.tenderProfile.bidType?{bidType:e.tenderProfile.bidType}:{},...void 0!==e.tenderProfile.identityMarksForbidden?{identityMarksForbidden:e.tenderProfile.identityMarksForbidden}:{},...e.tenderProfile.bodyTablePolicy?{bodyTablePolicy:e.tenderProfile.bodyTablePolicy}:{},...e.tenderProfile.bodyFigurePolicy?{bodyFigurePolicy:e.tenderProfile.bodyFigurePolicy}:{},...e.tenderProfile.bodyDiagramPolicy?{bodyDiagramPolicy:e.tenderProfile.bodyDiagramPolicy}:{}},contractObligations:e.contractObligations.filter(a=>f.has(a.id)&&(0,h.Ln)(a)).map(a=>({id:a.id,text:a.text,...a.items?.length?{items:a.items}:{},quote:a.quote,sourceFile:a.sourceFile,applicability:a.applicability})),methodRequirements:[...d.texts]}}(a,b,e,f),sectionEvidence:function(a,b){let c=a.planningContext.factsBaseline.filter(a=>a.selected&&(b.factKeys.includes(a.key)||`${b.objectScope}
48
- ${b.rationale}`.includes(a.key))).map(b=>({key:b.key,fieldName:b.fieldName??null,objectName:b.objectName??null,...b.condition?{condition:b.condition}:{},status:b.status,sourceFile:b.selected.sourceFile,sourceId:b.selected.sourceId,sourceClass:b.selected.sourceClass,...b.selected.version?{version:b.selected.version}:{},...b.selected.sourceSpan?{sourceSpan:b.selected.sourceSpan}:{},snapshotId:a.planningContext.provenance.projectSnapshotId,valueChars:b.selected.value.length,quoteChars:b.selected.quote?.length??0,valuesDeferred:!0,reading:{tool:"query_project_facts",attribute:b.fieldName||b.key,...b.objectName?{objectName:b.objectName}:{}}}));return{section:{sectionId:b.sectionId,title:b.title,contentGroup:b.contentGroup,objectScope:(0,d.eq)(a.structurePlan,b.objectScope),rationale:(0,d.eq)(a.structurePlan,b.rationale),responsibilityPositions:b.responsibilityPositions,coverageItemIds:b.coverageItemIds,factKeys:b.factKeys,quantityKeys:b.quantityKeys,requiredOutputs:b.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,expectedPrimaryCarrier:(0,q.Z4)(a),expectedWritingBlockCarrier:(0,q.Z4)(a),...a.carrierSemantic?{carrierSemantic:a.carrierSemantic}:{},element:a.element,semanticRole:a.semanticRole,...a.obligationId?{obligationId:a.obligationId}:{},...a.baselineId?{baselineId:a.baselineId}:{},source:{kind:a.source.kind,...a.source.quote?{quote:a.source.quote}:{}}}))},facts:c,factsReading:"facts是完整的本节相关事实目录,原值与原文未送达;不能据此填控制值、公差或数字。已核对象边界和技术条件仍按section.objectScope、契约项与方法要求承接,不得把未送原值解释为没有该条件。小节只规划查询问题/字段/主载;写作时用每项reading的query_project_facts,再按sourceFile用read_source逐字核对,原值不作截断或摘要。",lockedSubsectionTitles:a.lockedSubsectionTitles??[]}}(a,b),coverageItems:(i=b.coverageItemIds,c.map(a=>{let b=i.indexOf(a.id);return{...a,...b>=0?{ref:`C${b+1}`}:{}}}))})].join("\n")}function S(a,b,c,d,e){return(0,k.dk)({...b?{priorReview:b,recheck:"前轮要求修订;按当前候选与实际补丁结果复核。仍需修改则保持 revise/reject,明确无需修改才 pass。"}:{},...c?{coverageSalvage:c,salvageRecheck:"程序为修复覆盖类错误做了机器回填;逐项核对被降级/补入的 coverageItemId 语义归属,若不符用 patches 修正。"}:{},...d?{structuralSalvage:d,structuralRecheck:"程序为补必出输出/写作大纲做了机器回填;逐项核对回填小节的输出、载体、责任与语义归属,若不符用 patches 修正。"}:{},...e?{businessSalvage:e,businessRecheck:"程序已删除商务/费用小节并把其契约项回填到技术小节;核对技术小节语义归属,确认没有残留报价/费用/台账类内容。"}:{},sectionPlan:a,task:"独立审查本节三级小节计划:只审拆分是否专业、粒度、对象/接口/风险/阶段、载体与重复;不写正文",rules:["你是独立节级规划审查者,不是本节计划作者;不得因为作者写了理由就接受。","检查:小节是否覆盖本节对象范围与契约项;是否遗漏对象/专业系统/工作界面/风险/阶段;是否混合不相干对象/工序,或把同一施工关系拆碎;多个区域共用同一流程合法,不按对象数判废。","检查:每个契约项是否恰好一个主载体;每个必出输出是否由正确形态的表/图小节承接;引用小节是否只引用不复述。","**已有主载体的契约项只能引用**:某契约项已由一个小节主载时,其他小节只能用 referencedCoverageItemIds 引用;发现缺失时 fix 必须要求引用或把主载整体移到更合适的小节,不得建议把它加入第二个小节的 coverageItemIds。","载体协议以系统块 carrierContract 和每项必出输出的 expectedPrimaryCarrier/expectedWritingBlockCarrier 为准。不要将 requiredOutputs.form 与 primaryCarrier 逐字比较;org_chart/diagram/chart 均由规范 figure 承接。独立核验图的专业语义(例如组织图的层级、岗位、汇报关系),实际缺少这些内容仍可阻断;规范值与别名不同本身不是专业缺陷。","检查:自选表/图是否有具体理由;标题过渡小节是否真的只作过渡;是否与已锁定节重复。","检查:每个小节的 writingOutline 是否按阅读顺序、每块一个主题、载体与内容形态匹配(并列项→list、可对照矩阵→table、流程/关系/空间/时序→figure、判断/措施/责任→paragraph);必出表/图是否有对应载体的块;`mustNotRepeat` 是否覆盖本节/跨节已承载内容。大纲不新增义务,块不按字数判断。载体按实际关系与阅读需要判断;不得按来源数、字数、表行数或写作块数量判废。仅有表达偏好时给 advisory,确有遗漏、事实冲突或无效对照时定位问题并给补丁。","第一章第一节的第一个块必须是项目基本信息表(冻结事实;缺失写“待核”),且不得排在范围/界面等实质内容之后。","检查:事实/工程量落点是否与本节声明一致;是否出现空泛模板、固定阶段/工日/机械或项目常量。",'检查:相邻自选表小节**列结构相同、行是同类可比较对象**(专业/单体/区段/阶段/输出)即属于同一对照关系,应建议合并为一张表,把拆分维度变成一列;不再要求 objectOrProcess 为同一对象或连续工序。只有字段不兼容、不同对象独立施工内容无法共用列、或合同分别点名输出时才保持分开;不能按标题相近合并段落内容。合并用 `{subsectionId:"<被并入的小节>", mergeInto:"<目标小节>", title:"合并后标题"}` 补丁。',"可修的用 patches 返回(subsectionId + 修改字段);blocking 必须定位对象并给出可核依据及修法。一般表达偏好记 advisory。结构校验通过不等于专业通过;blocking 修订后须独立复核,不能靠降低严重性消失。**只有 blocking finding 才判 revise;仅有 advisory/info 且没有 blocking 时 verdict=pass 并保留 advisory,不得把表达偏好判 revise。**","只输出 JSON。"],output:{verdict:"revise",findings:[{category:"granularity",severity:"blocking",targetSubsectionId:"sub-1",detail:"可核问题",fix:"具体修法"}],patches:[{subsectionId:"sub-1",title:"修订后标题"}]}})}function T(a){return a.map(a=>a.message)}function U(a,b){let c=(0,n.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}).filter(a=>b.coverageItemIds.includes(a.id));return{structurePlan:a.structurePlan,coverageItems:c.map(a=>({id:a.id,text:a.text,enumerated:a.enumerated})),lockedSubsectionTitles:a.lockedSubsectionTitles??[],lockedOutputDedupeKeys:a.lockedOutputDedupeKeys??[],requireStructureFrozen:!0,sourceDraftContracts:a.sourceDraftContracts,requireWritingOutline:!0}}function V(a,b,c){return(0,q.Sw)((0,q.mn)({...a,state:a.state??"draft"}),U(b,c))}function W(a,b){let c="string"==typeof b.mergeInto?b.mergeInto.trim():"";if(c&&c!==String(b.subsectionId??"")){let d=a.subsections.find(a=>a.subsectionId===String(b.subsectionId)),e=a.subsections.find(a=>a.subsectionId===c);if(!d||!e)throw Error("SECTION_MERGE_TARGET_MISSING:合并源或目标不存在");if(d.requiredOutputId||e.requiredOutputId||"transition"===d.role||"transition"===e.role||"table"!==d.primaryCarrier||"table"!==e.primaryCarrier||!d.contentContract||!e.contentContract||!d.contentContract.data.length||JSON.stringify([...d.contentContract.data].sort())!==JSON.stringify([...e.contentContract.data].sort()))throw Error("SECTION_MERGE_INCOMPATIBLE:仅允许字段兼容的自选对照表;必出输出、段落和过渡小节不得合并");let f={...e.outline};for(let a of Object.keys(f))f[a]=[...new Set([...e.outline[a],...d.outline[a]])];let g=a.subsections.filter(a=>a.subsectionId!==d.subsectionId).map(a=>a.subsectionId!==e.subsectionId?a:{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},coverageItemIds:[...new Set([...a.coverageItemIds,...d.coverageItemIds])],referencedCoverageItemIds:[...new Set([...a.referencedCoverageItemIds,...d.referencedCoverageItemIds])],factKeys:[...new Set([...a.factKeys,...d.factKeys])],quantityKeys:[...new Set([...a.quantityKeys,...d.quantityKeys])],writingOutline:(0,j.uR)([...a.writingOutline??[],...d.writingOutline??[]]),outline:f,contentContract:(0,i.Gv)({...e.contentContract,objectOrProcess:[...new Set([e.contentContract.objectOrProcess,d.contentContract.objectOrProcess])].join(";"),response:[...e.contentContract.response,...d.contentContract.response],acceptance:[...e.contentContract.acceptance,...d.contentContract.acceptance]}),...d.decisionReason||a.decisionReason?{decisionReason:[a.decisionReason,d.decisionReason].filter(Boolean).join(";")}:{}}).map((a,b)=>({...a,order:b}));return{...a,subsections:g,...O(g)}}let d=a.subsections.map(a=>{if(String(b.subsectionId??"")!==a.subsectionId)return a;let c=J(b.outline);return Array.isArray(b.controlValues)&&(c.controlValues=[...new Set(b.controlValues.map(String).map(a=>a.trim()).filter(Boolean))]),{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.referencedCoverageItemIds)?{referencedCoverageItemIds:[...new Set(b.referencedCoverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...u.includes(b.primaryCarrier)?{primaryCarrier:B(b.primaryCarrier)}:{},..."string"==typeof b.requiredOutputId&&b.requiredOutputId.trim()?{requiredOutputId:b.requiredOutputId.trim()}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...void 0!==b.outline||Array.isArray(b.controlValues)?{outline:c}:{},...void 0!==b.writingOutline?{writingOutline:(0,j.uR)(b.writingOutline)}:{},..."string"==typeof b.decisionReason&&b.decisionReason.trim()?{decisionReason:b.decisionReason.trim()}:{},...a.contentContract?{contentContract:(0,i.Gv)({...a.contentContract,carrier:u.includes(b.primaryCarrier)?B(b.primaryCarrier):a.primaryCarrier,..."string"==typeof b.objectOrProcess?{objectOrProcess:b.objectOrProcess}:{},...Array.isArray(b.response)?{response:b.response.map(String)}:{},...Array.isArray(b.data)?{data:b.data.map(String)}:{},...Array.isArray(b.acceptance)?{acceptance:b.acceptance.map(String)}:{}})}:{},..."transition"===b.role?{role:"transition"}:{}}});return{...a,subsections:d,...O(d)}}function X(a,b){let c=a=>String(a??"").replace(/\s+/gu,"").trim(),d=new Set;for(let a of b)for(let b of a.subsections)d.add(c(b.title));return a.subsections.map(a=>c(a.title)).filter((a,b,c)=>a&&(d.has(a)||c.indexOf(a)!==b)).filter((a,b,c)=>c.indexOf(a)===b)}async function Y(a){let b,c,h,s,t;a.sourceDraftContracts?a.sourceDraftContracts.assertSourceDraft(a.structurePlan,a.sectionId):(0,p.UW)(a.structurePlan);let u=I(a.structurePlan,a.sectionId);if(!u)throw Error(`SECTION_STRUCTURE_PLAN_INVALID:节「${a.sectionId}」不在冻结的全局结构计划里`);let v=(0,n.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}),y=function(a,b){var c,d;let e=(c=a.structurePlan,d=b.sectionId,c.chapters.find(a=>a.sections.some(a=>a.sectionId===d))),f=e?.title??"",g=new Set,h=new Set;for(let b of a.planningContext.professionalCandidates)if((0,o.ri)(b.chapterTitle)===(0,o.ri)(f))for(let a of[...b.sectionCandidates.flatMap(a=>a.required),...b.contentRequirements.flatMap(a=>a.required)]){let b=String(a).trim();b&&(g.add(b),h.add(Q(b)))}return{texts:[...g],keys:h}}(a,u),z=v.filter(a=>u.coverageItemIds.includes(a.id)||"method"===a.kind&&y.keys.has(Q(a.text))).map(a=>({id:a.id,text:a.text,kind:a.kind,...a.enumerated?{enumerated:!0}:{}})),A={diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"structuredGeneration",callKind:"section-planning",maxTokens:e.sL.y,...a.responseCache?{responseCache:a.responseCache}:{}},D=R(a,u,z,v,y,!1),E=a.revision?{subsections:L(a.revision.previousPlan.subsections)}:void 0,F=a.authorAttempts??{used:0},X={},Y=async b=>{if(F.used>=2)throw new g.f({scope:a.sectionId,candidate:E,findings:[],reason:`节级规划已用完初稿与1次共享作者修订,保留候选与具体校验反馈,不能重新从头计费`});let c=b?.length?(0,k.dk)({task:"局部纠正:为已冻结的节规划三级小节,不重新推演全文内容",previousResponse:E,deterministicIssues:b,section:{sectionId:u.sectionId,title:u.title,contentGroup:u.contentGroup,objectScope:(0,d.eq)(a.structurePlan,u.objectScope),coverageItemIds:u.coverageItemIds,factKeys:u.factKeys,quantityKeys:u.quantityKeys,requiredOutputs:u.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element}))},lockedSubsectionTitles:a.lockedSubsectionTitles??[],rules:["只纠正具体错误,保留前候选其他有效内容,不改节身份或范围。","每项契约项恰好一个主载,每个必出输出由正确表/图载体承接,事实与工程量键只用本节给定身份。","已有主载体的契约项不得再加第二个主载:其他小节写 referencedCoverageItemIds;复合义务的子项用引用,不复制父项。","coverageItemIds 只能写 coverageItems 列表里的 ref(C1、C2…)或逐字复制其 id;不得编造哈希 id。","保留并补齐每个内容小节的 writingOutline:按阅读顺序、每块只回答一个问题、载体按内容形态选择;必出表/图必须有对应载体的块。","自选表/图小节(无 requiredOutputId)必须在 decisionReason 写明唯一对照关系与必须用表/图的理由;同一对照关系只规划一张表,不按专业/单体/区段拆成多张同构表。","不得新增来源、对象、标准、数值或原文没有的内容;返回完整纠正后的subsections。"]}):function(a,b){let c=a.structurePlan.chapters[0]?.sections[0]?.sectionId===b.sectionId;return(0,k.dk)({task:"为已冻结的节规划三级小节:每项契约项恰好一个主载小节,每个必出输出落到表/图小节,事实/工程量有落点",rules:["只规划本节内部的小节,不得新增/删除/改名节,不得写正文。","**内容组**:sectionEvidence.section.contentGroup 是本节唯一主载的内容组;小节只在本节内展开,不得把它写成跨节主载。","小节标题必须是工程名词短语,同级平行;不得出现评审/说明语言,不得以动词开头或标点结尾;本节内不得重名,不得与 lockedSubsectionTitles 语义重叠(确属不同语义角色必须写 decisionReason)。","**契约项**:section.coverageItemIds 中每一项必须恰好出现在一个小节的 coverageItemIds 中,不得遗漏或重复;只是引用别的小节主载体时填 referencedCoverageItemIds,不得同时主载与引用同一项。coverageItems[].ref 是本节契约项的短引用(C1、C2…):coverageItemIds 优先写 ref,程序会映射为真实 id;也可逐字复制 coverageItems[].id。**不得编造或改写哈希 id**:不在 coverageItems 列表里的 id 一律无效,整份计划会被退回。","**已有主载体的契约项只能引用**:某契约项已由一个小节主载时,其他小节只能用 referencedCoverageItemIds 引用,不得再写进第二个小节的 coverageItemIds;复合义务(例如“施组应覆盖供应进场、人员、质保、安全文明、机械、进度、技术措施、应急预案、工资”)的专项子项用引用/覆盖映射表达,不复制父项主载体。","**必出输出**:section.requiredOutputs 中每一项必须恰好有一个小节用 requiredOutputId 承接;表输出只能由 primaryCarrier=table 的小节承接,图/框图/组织图/横道/网络等由 primaryCarrier=figure 承接;不得用段落替代。","**载体**:同字段事实、可对照对象(≥3 行同类数据)、参数矩阵→table;清单→list(段落行表达,不设表格默认);因果、措施、论证、责任、验收→paragraph;流程、关系、空间、层次→figure。自选表/图(没有 requiredOutputId)必须写 decisionReason;**自选表成立条件**:契约项+事实键+工程量键合计至少 2 个来源,且表格有 ≥3 行可比较数据——内容很少的对照写成段落,不硬凑表格。","**同一对照关系只能有一张表**:行是同类可比较对象(专业/单体/区段/阶段/输出),列是共同字段;拆分维度必须作为一列,不得按对象拆成多张同构表。相邻小节列结构相同、行是同类对象时必须合并;只有字段不兼容、不同对象独立施工内容无法共用列,或合同分别点名输出时才分开。","**写作大纲**:每个小节必须按阅读顺序给 writingOutline;每块只回答一个问题(topic)、写清读者应得到的结论(purpose)、按内容形态选载体(paragraph/list/table/figure)。evidenceRefs 只用本小节 coverageItemIds/outputId/factKeys/quantityKeys 中已有的身份;mustNotRepeat 写本节或跨节已承载、本块只能引用不能复述的内容。大纲不新增义务,不改变覆盖账。","**一主题一块**:并列条件/步骤/岗位/检查项/验收要点→list;可对照对象/参数矩阵→table;流程/关系/层次/空间/时序→figure;判断/措施/理由/责任/接口/风险→paragraph。不要把一个块写成覆盖清单,也不要把互不统属的主题堆进同一段。列表块在提交时用段落单元、行首编号或项目符号表达。**每小节 paragraph 块 ≤2、list 块 ≤2**:同一论证链/措施链的连续主题合并成一个块写完,不按问题数拆碎;列表 ≥3 项才成立,2 项以下写进段落。",...c?["**本节是第一章第一节**:writingOutline 的第一个块必须是项目基本信息表(carrier=table),承载项目名称、项目编号、建设单位、建设地点、工程范围/规模、标段/包件、计划开工日期、合同工期、质量标准等冻结事实;缺失值在正文写“待核”。该表固定**两列:项目、内容**;不写“口径/来源/核验状态”等第三列。表后主题与顺序由你按项目资料规划,不得把承包范围/分包界面/实施条件写成跨项目固定清单,也不得把其他实质内容排在基本信息表之前。"]:[],"**事实/工程量**:section.factKeys/quantityKeys 中每个键至少落到一个小节;不得引用本节没有声明的键。","**实质内容**:每个小节至少有一个契约项、引用、输出、事实或内容提纲;空小节拒收。纯标题过渡小节用 role=transition 并写理由,且不得挂契约项/输出/事实。","**内容契约**:objectOrProcess明确同一施工对象/部位或连续工序链;response回答已有契约问题,data列成组查询字段,acceptance列有依据的验收/岗位/记录;primaryCarrier决定carrier。生成摘要不能新增项目事实、规范或合同义务。允许同小节中表与施工段分工,不按对象数拆段。","**合并**:相邻自选表小节只要**列结构相同、行是同类可比较对象**(专业/单体/区段/阶段/输出),就属于同一对照关系,必须合并为一张表,把拆分维度变成一列;不再要求 objectOrProcess 为同一对象或连续工序。只有字段不兼容、不同对象独立施工内容无法共用列、或合同分别点名输出时才保持分开;不能仅因标题相近合并段落内容。","**提交前自检(逐项,不通过就改)**:①section.coverageItemIds 每项恰好一个小节主载,且落在描述同一对象/对照关系的小节;②相邻小节不得共享同一对象/工序链/对照关系,共享就合并;③每个内容小节给独立 objectOrProcess 与 writingOutline,outline 至少填 questions/methods/sequence/acceptance 之一,禁止空 outline;④primaryCarrier 与 requiredOutputs 的规范载体一致,必出输出有对应表/图块;⑤事实/工程量键落到实际使用其数值的小节;⑥同一对照关系只规划一张表,不按专业/单体/区段拆同构表。","不得写死固定阶段/工日/机械/项目常量;对象、标准、数字只引用给定上下文。","输出 JSON;不要解释。"],output:{subsections:[{title:"工程名词短语",coverageItemIds:["C1"],referencedCoverageItemIds:[],primaryCarrier:"table",requiredOutputId:"output:…",factKeys:[],quantityKeys:[],outline:{questions:[],methods:[],sequence:[],controlValues:[],tolerances:[],acceptance:[],responsibilities:[],interfaces:[]},writingOutline:[{blockId:"blk-1",topic:"这个块回答的问题",purpose:"读者应得到的结论",carrier:"paragraph",evidenceRefs:["coverage:…"],mustNotRepeat:["已在表X/节X承载的内容"]}],decisionReason:"载体或跨节去重理由"}]}})}(a,u);X.current=void 0,a.sourceDraftContracts?.assertSourceDraft(a.structurePlan,a.sectionId);let e=await a.caller(D,c,{...A,schema:G,onAttempt:a=>{X.current=a}});if(!e){let a=X.current,b=a?.validationFailure??a?.failure?.value;throw Error(`SECTION_STRUCTURE_PLAN_FAILED:节级规划未返回可校验结果${b?`(${b.slice(0,800)})`:""}`)}F.used+=1,E=e;let f=function(a,b=new Map){return(Array.isArray(a)?a:[]).map((a,c)=>{let d=a??{};return{subsectionId:`sub-${c+1}`,title:String(d.title??"").trim(),order:c,coverageItemIds:Array.isArray(d.coverageItemIds)?[...new Set(d.coverageItemIds.map(a=>K(a,b)).filter(Boolean))]:[],referencedCoverageItemIds:Array.isArray(d.referencedCoverageItemIds)?[...new Set(d.referencedCoverageItemIds.map(a=>K(a,b)).filter(Boolean))]:[],primaryCarrier:B(d.primaryCarrier),..."string"==typeof d.requiredOutputId&&d.requiredOutputId.trim()?{requiredOutputId:d.requiredOutputId.trim()}:{},factKeys:Array.isArray(d.factKeys)?[...new Set(d.factKeys.map(a=>String(a).trim()).filter(Boolean))]:[],quantityKeys:Array.isArray(d.quantityKeys)?[...new Set(d.quantityKeys.map(a=>String(a).trim()).filter(Boolean))]:[],outline:J(d.outline),writingOutline:(0,j.uR)(d.writingOutline).map(a=>({...a,evidenceRefs:a.evidenceRefs.map(a=>K(a,b))})),contentContract:(0,i.Gv)({objectOrProcess:String(d.objectOrProcess??d.title??"").trim(),response:Array.isArray(d.response)?d.response.map(String):J(d.outline).questions,data:Array.isArray(d.data)?d.data.map(String):[],carrier:B(d.primaryCarrier),acceptance:Array.isArray(d.acceptance)?d.acceptance.map(String):J(d.outline).acceptance}),..."string"==typeof d.decisionReason&&d.decisionReason.trim()?{decisionReason:d.decisionReason.trim()}:{},..."transition"===d.role?{role:"transition"}:{}}})}(e?.subsections,new Map(u.coverageItemIds.map((a,b)=>[`C${b+1}`,a])));return P({structurePlan:a.structurePlan,sectionId:a.sectionId,subsections:f})},Z=b=>{let c=X.current;c?.raw&&(0,m.archiveDocumentJsonFailure)(a.diagnostics,{...c,raw:c.raw,validationFailure:"SECTION_STRUCTURE_PLAN_INVALID:"+T(b).join(";"),outputTruncated:!1,callKind:"section-planning"})},$=async a=>{let b;for(let c=0;c<2;c+=1)try{return await Y(a)}catch(c){b=c;let a=c instanceof Error?c.message:String(c);if(!/SECTION_STRUCTURE_PLAN_FAILED|incomplete|transport|ECONN|timeout|stream/iu.test(a))throw c}throw b};try{b=await $(a.revision?[`计划修订理由:${a.revision.reason}`,`当前已读依据:${JSON.stringify(a.revision.evidence)}`]:void 0)}catch(d){let c=d instanceof Error?d.message:String(d);if(!/SECTION_STRUCTURE_PLAN_FAILED|incomplete|transport|ECONN|timeout|stream/iu.test(c)||a.revision)throw d;E={subsections:L((b=N(a,u)).subsections)}}let _=!1,aa=!1,ab=!1,ac=[],ad=async b=>{let d=b,e=V(d,a,u),g=new Set,i=!1,j=()=>{if(!e.length||!e.every(a=>w.has(a.code)))return!1;let b=M(d,u);return!!b&&!V(b,a,u).length&&(e=[],_=!0,c=(d=b).sectionPlanHash,!0)},k=()=>{if(!e.length||!e.every(a=>w.has(a.code)||x.has(a.code)))return!1;let b=f.businessContentTitlePatterns,c=a=>b.some(b=>(a.title+(a.contentContract?.objectOrProcess??"")).includes(b)),g=d.subsections.filter(c),i=g.length?d.subsections.filter(a=>!c(a)).map((a,b)=>({...a,order:b})):d.subsections,j=N(a,u),k=new Set(i.map(a=>a.subsectionId)),l=new Set(i.map(a=>(0,o.ri)(a.title))),m=[...i];for(let a of u.requiredOutputs){if(m.some(b=>b.requiredOutputId===a.outputId))continue;let b=j.subsections.find(b=>b.requiredOutputId===a.outputId);if(!b)continue;let c=m.length+1;for(;k.has(`sub-${c}`);)c+=1;let d=`sub-${c}`;k.add(d);let e=b.title,f=2;for(;l.has((0,o.ri)(e));)e=`${b.title}(${f++})`;l.add((0,o.ri)(e)),m.push({...b,subsectionId:d,title:e,order:m.length})}let n=new Set,p=m.filter(a=>!a.requiredOutputId||!n.has(a.requiredOutputId)&&(n.add(a.requiredOutputId),!0)).map((a,b)=>{let c=new Set([...a.coverageItemIds,...a.referencedCoverageItemIds,...a.factKeys,...a.quantityKeys,...a.requiredOutputId?[a.requiredOutputId]:[]]),d=(a.writingOutline??[]).map(a=>({...a,evidenceRefs:a.evidenceRefs.filter(a=>!/^(?:coverage|output):/u.test(a)||c.has(a))})),e=d.length||"transition"===a.role?d:[{blockId:"blk-1",topic:a.title,purpose:a.contentContract?.objectOrProcess||a.title,carrier:a.primaryCarrier,evidenceRefs:[...a.requiredOutputId?[a.requiredOutputId]:[],...a.coverageItemIds],mustNotRepeat:[]}];return{...a,order:b,writingOutline:e}}),r=(0,q.mn)({...d,subsections:p,...O(p)}),t=u.coverageItemIds.length?M(r,u):r;return!!t&&!V(t,a,u).length&&(e=[],aa=!0,h=(d=t).sectionPlanHash,g.length&&(ab=!0,s=d.sectionPlanHash,ac=g.map(a=>a.title)),!0)};for(;e.length&&(Z(e),!(j()||k()));){let b=(0,l.Fu)(d);if((i=g.has(b))||F.used>=2)break;g.add(b),e=V(d=await $(T(e)),a,u),j(),e.length&&k()}if(e.length&&j(),e.length&&k(),e.length){let b=new Set(u.coverageItemIds),c=[...new Set(d.subsections.flatMap(a=>[...a.coverageItemIds,...a.referencedCoverageItemIds]))].filter(a=>!b.has(a)).map(b=>({id:b,sourceSectionId:a.structurePlan.chapters.flatMap(a=>a.sections).find(a=>a.sectionId!==u.sectionId&&a.coverageItemIds.includes(b))?.sectionId??""})).filter(a=>a.sourceSectionId);throw new r({sectionId:a.sectionId,issues:T(e),availableCoverageItems:z.map(a=>({id:a.id,text:a.text,suggestedCarrier:a.enumerated?"table":"paragraph"})),foreignCoverageItems:c,identicalRetry:i})}return d};b=await ad(b);let ae=a=>({id:"section-plan:coverage-ref-recovery",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"coverage-ref-recovery",severity:"advisory",target:{},detail:"模型输出的覆盖映射不合法(重复主载体/无效引用),程序已按本节契约项清单回填或把重复主载降为引用;请核对每个契约项的语义归属",fix:"若归属不符,用 patches 调整 coverageItemIds/referencedCoverageItemIds;不要删除本节契约项"}),af=a=>({id:"section-plan:structural-ref-recovery",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"structural-ref-recovery",severity:"advisory",target:{},detail:"模型输出的必出输出小节/写作大纲不完整,程序已按本节冻结 requiredOutputs 与契约项回填缺项;请核对每个输出小节的语义、载体与责任",fix:"若归属不符,用 patches 调整 requiredOutputId/标题/块;不要删除本节必出输出"}),ag=a=>({id:"section-plan:business-content-removal",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"business-content-removal",severity:"advisory",target:{},detail:`程序已从节计划删除商务/费用小节(${ac.join("、")||"费用类小节"}):报价构成、费用计取、台账凭证不进入技术标;其契约项已回填到技术小节,请核对语义归属并确认没有残留费用表述`,fix:"若删除后技术内容不足,用 patches 补技术小节(工艺、组织、质量、安全、进度或接口);不得恢复商务/费用内容以凑覆盖"}),ah=[];_&&ah.push(ae(b)),aa&&ah.push(af(b)),ab&&ah.push(ag(b));let ai=(0,q.WM)(b,U(a,u)),aj=ai.sectionPlanHash,ak=await a.caller(R(a,u,z,v,y,!0),S(ai,void 0,_?ae(ai):void 0,aa?af(ai):void 0,ab?ag(ai):void 0),{...A,schema:H});ak||ah.push({id:"section-plan-review:unavailable",planId:ai.planId,sectionPlanHash:aj,category:"review-unavailable",severity:"advisory",target:{},detail:"独立节规划审查未取得;候选结构确定性校验通过,按未取得审查记录并继续",fix:"整稿终审与后续节可继续核对;不伪造专业通过"});let al=ak??{verdict:"pass",findings:[],patches:[]};for(let[a,b]of(Array.isArray(al.findings)?al.findings:[]).entries()){let c=b??{},d=C(c.severity),e=String(c.detail??"");ah.push({id:`section-plan-review:1:${a+1}`,planId:ai.planId,sectionPlanHash:aj,category:String(c.category??"structure"),severity:d,target:{..."string"==typeof c.targetSubsectionId&&c.targetSubsectionId?{subsectionId:c.targetSubsectionId}:{}},detail:e,fix:String(c.fix??"")})}let am=(Array.isArray(al.patches)?al.patches:[]).map(a=>a??{}).filter(a=>String(a.subsectionId??"").trim()),an=[],ao=[],ap=ai,aq=(a,b)=>{let c=b instanceof Error?b.message:String(b);an.push({subsectionId:String(a.subsectionId),status:"refused",reason:c}),ah.push({id:`section-plan-review:patch:${an.length}`,planId:ai.planId,sectionPlanHash:aj,category:"patch",severity:"advisory",target:{subsectionId:String(a.subsectionId)},detail:`审查补丁被拒绝(未采用):${c}`,fix:"按当前小节身份与确定性错误修正,不得删除必出输出或契约项"})};for(let a of am)try{if(!ap.subsections.some(b=>b.subsectionId===String(a.subsectionId)))throw Error("SECTION_PATCH_TARGET_MISSING");let b=W(ap,a);(0,l.Fu)(b)===(0,l.Fu)(ap)?an.push({subsectionId:String(a.subsectionId),status:"no-op",reason:"候选与当前计划一致"}):(ap=b,ao.push(a))}catch(b){aq(a,b)}try{ai=(0,q.WM)({...ap,state:"validated"},U(a,u)),an.push(...ao.map(a=>({subsectionId:String(a.subsectionId),status:"applied"})))}catch{for(let b of ao)try{ai=(0,q.WM)({...W(ai,b),state:"validated"},U(a,u)),an.push({subsectionId:String(b.subsectionId),status:"applied"})}catch(a){aq(b,a)}}ai=(0,q.WM)({...ai,state:"validated"},U(a,u));let ar=1,as=0,at=ah,au=al,av=[],aw=(0,g.C)(al,ah);for(;aw&&as<3;){if(av.push(...at),F.used>=2){at.push({id:"section-plan-review:revision-budget",planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:"revision-budget",severity:"advisory",target:{},detail:"节级规划作者修订额度已用尽;保留当前有效节计划,未落地意见进入整稿台账",fix:""});break}try{E={subsections:L(ai.subsections)};let b=await ad(await $(at.map(b=>`${b.target.subsectionId??a.sectionId}:${b.detail};修法:${b.fix}`)));ai=(0,q.WM)({...b,state:"validated"},U(a,u))}catch(a){at.push({id:`section-plan-review:revision-recorded:${as+1}`,planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:"revision-recorded",severity:"advisory",target:{},detail:`作者修订未产出可校验候选:${a instanceof Error?a.message:String(a)};保留上一有效节计划,按未决项记录`,fix:""});break}if(as+=1,_&&c===ai.sectionPlanHash&&!at.some(a=>"coverage-ref-recovery"===a.category)&&at.push(ae(ai)),aa&&h===ai.sectionPlanHash&&!at.some(a=>"structural-ref-recovery"===a.category)&&at.push(af(ai)),ab&&s===ai.sectionPlanHash&&!at.some(a=>"business-content-removal"===a.category)&&at.push(ag(ai)),ar>=3)break;if(t&&ai.sectionPlanHash===t){at.push({id:"section-plan-review:unchanged",planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:"review-skipped-unchanged",severity:"advisory",target:{},detail:"修订未改变节计划 hash;不重复审查同一输入,按未决项记录",fix:""});break}let b=ai.sectionPlanHash,d=await a.caller(R(a,u,z,v,y,!0),S(ai,{verdict:au.verdict,findings:at,patches:an}),{...A,schema:H});if(ar+=1,!d){at.push({id:"section-plan-review:unavailable",planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:"review-unavailable",severity:"advisory",target:{},detail:"修订后独立节规划审查未取得;保留当前有效节计划,按未取得审查记录",fix:""});break}au=d,at=(Array.isArray(d.findings)?d.findings:[]).map((a,b)=>({id:`section-plan-review:${ar}:${b+1}`,planId:ai.planId,sectionPlanHash:ai.sectionPlanHash,category:String(a.category??"structure"),severity:C(a.severity),target:"string"==typeof a.targetSubsectionId?{subsectionId:a.targetSubsectionId}:{},detail:String(a.detail??""),fix:String(a.fix??"")})),t=b,aw=(0,g.C)(d,at)}_&&c===ai.sectionPlanHash&&!at.some(a=>"coverage-ref-recovery"===a.category)&&at.push(ae(ai)),aa&&h===ai.sectionPlanHash&&!at.some(a=>"structural-ref-recovery"===a.category)&&at.push(af(ai)),ab&&s===ai.sectionPlanHash&&!at.some(a=>"business-content-removal"===a.category)&&at.push(ag(ai)),ar>1&&at.push(...ah.filter(a=>"patch"===a.category));let ax=(0,q.vs)((0,q.vs)(ai,"reviewed"),"frozen"),ay=at.filter(a=>"blocking"===a.severity).length;return{plan:ax,review:{planId:ax.planId,sectionPlanHash:ax.sectionPlanHash,reviewer:"independent-section-plan-review",rounds:ar,findings:at,...ar>1?{priorFindings:av}:{},patches:an,verdict:ay?"revise":"pass",advisoriesOnly:0===ay,...ay?{recorded:!0,recordedBlocking:ay}:{}},coverage:{subsections:ax.subsections.length,coverageItems:ax.coverage.length,outputs:ax.outputCoverage.length,facts:u.factKeys.length+u.quantityKeys.length}}}function Z(a){(0,q.aT)(a.original),a.contracts.assertGlobal(a.structurePlan.planHash),a.contracts.assertSourceDraft(a.originalStructure,a.sectionId),a.contracts.assertSourceDraft(a.structurePlan,a.sectionId);let b=I(a.structurePlan,a.sectionId);if(!b||"frozen"!==a.original.state)throw Error("EARLY_DRAFT_PLAN_NOT_APPROVED");return(0,q.WM)({...a.original,planId:"section-plan:"+a.structurePlan.planHash.slice(0,12)+":"+a.sectionId,structurePlanId:a.structurePlan.planId,structurePlanHash:a.structurePlan.planHash},U(a,b))}},85585:(a,b,c)=>{c.d(b,{M:()=>h});let d=[["一步瞃过","一步跨过"],["癹定与碰撞","锁定与碰撞"],["钢権条","钢檩条"],["通风菡管","通风风管"],["墙面髄体","墙面墙体"],["施工阶断","施工阶段"],["深化设计阶断","深化设计阶段"],["条件件驱动","条件驱动"],["版次控制与与","版次控制与"],["峰窝廊面","蜂窝麻面"],["偏、将料、油漆","偏、浆料、油漆"],["偏、将料","偏、浆料"]],e={権:"权",髄:"髓",亜:"亚",団:"团",実:"实",単:"单",気:"气",徳:"德",広:"广",対:"对"},f=(a,b)=>a.slice(0,b).split("\n").length,g=(a,b,c=60)=>{let d=a.lastIndexOf("\n",b)+1,e=a.indexOf("\n",b);return a.slice(d,e<0?a.length:e).trim().slice(0,c)};function h(a){let b=[],c=new Set,h=a=>{let d=a.code+":"+(a.line??"")+":"+a.message;c.has(d)||(c.add(d),b.push(a))};for(let[b,c]of d){let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(e<0)break;d=e+b.length,h({code:"typo-known-wrong-word",severity:"blocker",line:f(a,e),excerpt:g(a,e),message:`已知错词「${b}」应为「${c}」;逐处替换后再交付`})}}for(let[b,c]of Object.entries(e)){let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(e<0)break;d=e+1,h({code:"typo-variant-character",severity:"blocker",line:f(a,e),excerpt:g(a,e),message:`出现日式异体字「${b}」应为「${c}」;简体中文工程文档不得混用`})}}return b}},86265:(a,b,c)=>{c.d(b,{J:()=>j});var d=c(59339),e=c(25164),f=c(60806),g=c(6873),h=c(745),i=c(4053);function j(a){let{store:b}=a,c=a=>{let c={entities:[],groups:[]};for(let d of a)for(let a of[...d.references,...d.assertions.map(a=>a.reference)])if("decision"===a.kind&&c.entities.push({id:a.entityId,version:a.entityVersion}),"certificate"===a.kind){let d=b.certificate(a.certificateId);d&&(c.entities.push(...d.reads.entities),c.groups.push(...d.reads.groups))}return(0,h.xi)(c)},j=new Map(a.contract.sections.map(a=>[a.id,a.title]));return{prepareWriting(c){if(c.responsibilityId!==a.authority.actorId)throw Error("WRITING_RESPONSIBILITY_SCOPE_DENIED");let d=c.sectionIds.length?c.sectionIds:[];if(1!==d.length)throw Error("WRITING_SECTION_SINGLE_REQUIRED:每次正文提交只能声明一个章节;跨节内容拆成多次提交,或在正文中引用他节的表/图");let[e]=d;if(!j.has(e))throw Error(`WRITING_SECTION_UNKNOWN:${e}`);if(!a.authority.sectionIds.includes(e))throw Error(`WRITING_SECTION_SCOPE_DENIED:${e}`);let f=a.sectionContractReads?.reads(d),g={actorId:a.authority.actorId,responsibilityId:c.responsibilityId,purpose:c.purpose,sectionIds:d},h=[...new Set([...c.unitIds??[]])];if(!h.length)throw Error("WRITING_UNITS_REQUIRED");let k=[...new Set([...f?.entities.map(a=>a.id)??[],...a.authority.sectionIds,...h.map(a=>(0,i.tp)(c.responsibilityId,c.purpose,a,e))])];return b.captureReadSnapshot({entityIds:k,groupKeys:[`section-units:${e}`],context:g})},proposeWriting(g,k,l,m){let n,o=b.readSnapshot(g),p=o.context??{};if(p.actorId!==a.authority.actorId)throw Error("WRITING_SNAPSHOT_SCOPE_DENIED");if(!l?.trim())throw Error("WRITING_REASON_REQUIRED");let q=k??{},r={...q,units:Array.isArray(q.units)?q.units.map(b=>(0,d.Mf)(b??{},a.tenderResponsePlan,Array.isArray(q.sectionIds)?q.sectionIds.map(String):[])):q.units},{submission:s,issues:t}=(0,i.Dp)(r);if(!s)throw Error(`WRITING_SUBMISSION_INVALID:${t.map(a=>`${a.unitId}:${a.code}:${a.message}`).join(";")}`);s.units=s.units.map(b=>{let{carrierRevisionReason:c,...e}=b;return(0,d.Mf)({...e,...s.revision?.reason?.trim()?{carrierRevisionReason:s.revision.reason.trim()}:{}},a.tenderResponsePlan,s.sectionIds)});if(s.responsibilityId!==a.authority.actorId)throw Error("WRITING_RESPONSIBILITY_SCOPE_DENIED");if(!s.sectionIds.length)throw Error("WRITING_SECTION_REQUIRED");if(1!==s.sectionIds.length)throw Error("WRITING_SECTION_SINGLE_REQUIRED:每次正文提交只能声明一个章节;跨节内容拆成多次提交,或在正文中引用他节的表/图");for(let b of s.sectionIds){if(!j.has(b))throw Error(`WRITING_SECTION_UNKNOWN:${b}`);if(!a.authority.sectionIds.includes(b))throw Error(`WRITING_SECTION_SCOPE_DENIED:${b}`)}let u=a.sectionContractReads?.reads(s.sectionIds);for(let a of u?.entities??[])if(!o.reads.entities.some(b=>b.id===a.id&&b.version===a.version))throw Error("SECTION_CONTRACT_SNAPSHOT_MISMATCH");let v=s.units.flatMap(b=>(0,d.B$)(b,a.tenderResponsePlan,s.sectionIds));if(v.length)throw Error("WRITING_DELIVERY_INVALID:"+v.join(";"));if(s.revision){let c=b.proposalOperation(m);if(c){let b=c.changes.find(a=>"writing-revision"===a.kind)?.value?.requestHash;if(c.actorId!==a.authority.actorId||b!==(0,h.Fu)([s,l]))throw Error("DOMAIN_OPERATION_ID_CONFLICT");return c}}if(p.purpose!==s.purpose||JSON.stringify(p.sectionIds)!==JSON.stringify(s.sectionIds))throw Error("WRITING_SNAPSHOT_SCOPE_DENIED");for(let a of[...s.units.map(a=>a.id),...s.revision?.retire.map(a=>a.unitId)??[]]){let b=(0,i.tp)(s.responsibilityId,s.purpose,a,s.sectionIds[0]);if(!o.reads.entities.some(a=>a.id===b))throw Error("WRITING_SNAPSHOT_UNIT_NOT_READ")}let w=c(s.units),x=(0,h.xi)({entities:[...o.reads.entities,...w.entities],groups:[...o.reads.groups,...w.groups]}),y=(0,f.R)(b,s,s.units.map(a=>({id:(0,i.tp)(s.responsibilityId,s.purpose,a.id,s.sectionIds[0]),kind:"writing-unit",value:{...a,responsibilityId:s.responsibilityId,purpose:s.purpose,sectionIds:[s.sectionIds[0]]}})).map(a=>({id:a.id,kind:a.kind,expectedVersion:b.entity(a.id)?.version??null,value:a.value})),l);for(let a of y)x.entities.push({id:a.id,version:a.expectedVersion});let z=s.sectionIds[0],A=new Map;for(;;){let a=b.entityPage({groupKey:`section-units:${z}`,...n?{afterId:n}:{},limit:200});for(let b of a.entities)(0,i.iC)(b)&&A.set(b.id,b.version);if(!a.nextAfterId)break;n=a.nextAfterId}for(let a of y)"writing-unit"===a.kind&&(a.value?A.set(a.id,(0,h.Fu)(a.value)===(0,h.Fu)(b.entity(a.id)?.value??null)?b.entity(a.id).version:(a.expectedVersion??0)+1):A.delete(a.id));let B=(0,e.L1)({store:b,sectionId:z,responsibilityId:s.responsibilityId,phase:"drafting",snapshot:{unitVersions:[...A].map(([a,b])=>({entityId:a,version:b})),unreviewedUnitIds:[],blockingFindingIds:[],sourceReviewComplete:!1,...s.units[0]?.planHash?{structurePlanHash:s.units[0].planHash}:{},...s.units[0]?.sectionPlanHash?{sectionPlanHash:s.units[0].sectionPlanHash}:{}},trigger:"writing-committed"});return y.some(a=>(0,h.Fu)(a.value)!==(0,h.Fu)(b.entity(a.id)?.value??null))&&!B.unchanged&&(y.push(B.change),x.entities.push(B.read)),b.propose({actorId:a.authority.actorId,purpose:s.purpose,reason:l,reads:(0,h.xi)(x),changes:y},m)},evaluateWriting:c=>b.evaluate(c,"construction-writing-unit-v4",c=>{let e=[],f={responsibilityId:a.authority.actorId,purpose:"",sectionIds:[],units:c.proposal.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.value)},{issues:h}=(0,i.Dp)({responsibilityId:a.authority.actorId,purpose:"evaluation",sectionIds:[],units:f.units,...c.proposal.changes.some(a=>"writing-revision"===a.kind)?{revision:c.proposal.changes.find(a=>"writing-revision"===a.kind).value.revision}:{}});for(let b of f.units)for(let c of(0,d.B$)(b,a.tenderResponsePlan,b.sectionIds))e.push({code:c,entityId:b.id,reason:c});for(let b of f.units)for(let c of(0,g.dA)(b,a.evidenceText??(()=>void 0)))e.push({code:c.toUpperCase().replace(/-/gu,"_"),entityId:b.id,reason:"事实主张的来源锚点或正文实现不一致"});for(let a of h)e.push({code:a.code.toUpperCase().replace(/-/gu,"_"),entityId:a.unitId,reason:a.message});let j=(0,i.YK)({units:f.units,entityIdFor:b=>(0,i.tp)(a.authority.actorId,c.proposal.purpose,b.id,b.sectionIds?.[0]),currentEntityVersion:a=>b.entity(a)?.version,certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)});for(let a of j)for(let b of a.states)"current"!==b.state&&e.push({code:`REFERENCE_${b.state.toUpperCase()}`,entityId:a.entityId,reason:b.reason});let k=c.proposal.reads.entities.filter(a=>null!==a.version&&b.entity(a.id)?.version!==a.version);return{dataValidity:e.length?"invalid":"valid",relatedConstraints:k.length||j.some(a=>a.needsRecheck)?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:[...e,...k.map(a=>({code:"READ_SUPERSEDED",entityId:a.id,reason:`读集里的 v${a.version} 已被新版本替代`}))],result:{writingUnits:c.proposal.changes.map(a=>a.id),referencesChecked:j.length}}}),commit(e,f){let h=b.proposal(e);if(!h||h.actorId!==a.authority.actorId)throw Error("WRITING_PROPOSAL_SCOPE_DENIED");return b.commit(e,f,e=>{let f=e.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.value),h=(0,i.Dp)({responsibilityId:a.authority.actorId,purpose:e.purpose,units:f,...e.changes.some(a=>"writing-revision"===a.kind)?{revision:e.changes.find(a=>"writing-revision"===a.kind).value.revision}:{}});if(f.some(b=>(0,g.dA)(b,a.evidenceText??(()=>void 0)).length))throw Error("WRITING_CLAIM_INVALID");if(f.some(b=>(0,d.B$)(b,a.tenderResponsePlan,b.sectionIds).length))throw Error("WRITING_DELIVERY_BINDING_INVALID");if(h.issues.length)throw Error("WRITING_SUBMISSION_INVALID:"+h.issues.map(a=>`${a.unitId}:${a.code}:${a.message}`).join(";"));let j=c(f);if(j.entities.some(a=>!e.reads.entities.some(b=>b.id===a.id&&b.version===a.version))||j.groups.some(a=>!e.reads.groups.some(b=>b.key===a.key&&b.version===a.version)))throw Error("WRITING_REFERENCE_READ_SET_INVALID:候选未保存实际引用读集,须以原引用重新提出候选");let k=(0,i.YK)({units:f,entityIdFor:b=>(0,i.tp)(a.authority.actorId,e.purpose,b.id,b.sectionIds?.[0]),currentEntityVersion:a=>{let c=b.entity(a);return c&&!c.deleted?c.version:void 0},certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)}).flatMap(a=>a.states.filter(a=>"current"!==a.state).map(b=>`${a.unitId}: ${b.reason}`));if(k.length)throw Error("WRITING_REFERENCE_INVALID:"+k.join(";"))})},pendingRecheck(){let c,d=[];for(;;){let e=b.entityPage({groupKey:`writing:${a.authority.actorId}`,...c?{afterId:c}:{},limit:200});for(let a of e.entities){let b=(0,i.iC)(a);b&&d.push({entityId:a.id,unit:b})}if(!e.nextAfterId)break;c=e.nextAfterId}return(0,i.YK)({units:d.map(a=>a.unit),entityIdFor:(a,b)=>d[b].entityId,currentEntityVersion:a=>b.entity(a)?.version,certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)}).filter(a=>a.needsRecheck)},unitsReferencing:(a,b,c,d)=>b.filter(b=>[...b.references,...b.assertions.map(a=>a.reference)].some(b=>b.kind===a.kind&&("decision"===b.kind?b.entityId:b.certificateId)===a.id)).map(a=>(0,i.tp)(c,d,a.id,a.sectionIds?.[0])),submissionFingerprint:a=>(0,h.Fu)([a.responsibilityId,a.purpose,a.sectionIds,a.units.map(a=>a.id)])}}}};
48
+ ${b.rationale}`.includes(a.key))).map(b=>({key:b.key,fieldName:b.fieldName??null,objectName:b.objectName??null,...b.condition?{condition:b.condition}:{},status:b.status,sourceFile:b.selected.sourceFile,sourceId:b.selected.sourceId,sourceClass:b.selected.sourceClass,...b.selected.version?{version:b.selected.version}:{},...b.selected.sourceSpan?{sourceSpan:b.selected.sourceSpan}:{},snapshotId:a.planningContext.provenance.projectSnapshotId,valueChars:b.selected.value.length,quoteChars:b.selected.quote?.length??0,valuesDeferred:!0,reading:{tool:"query_project_facts",attribute:b.fieldName||b.key,...b.objectName?{objectName:b.objectName}:{}}}));return{section:{sectionId:b.sectionId,title:b.title,contentGroup:b.contentGroup,objectScope:(0,d.eq)(a.structurePlan,b.objectScope),rationale:(0,d.eq)(a.structurePlan,b.rationale),responsibilityPositions:b.responsibilityPositions,coverageItemIds:b.coverageItemIds,factKeys:b.factKeys,quantityKeys:b.quantityKeys,requiredOutputs:b.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,expectedPrimaryCarrier:(0,q.Z4)(a),expectedWritingBlockCarrier:(0,q.Z4)(a),...a.carrierSemantic?{carrierSemantic:a.carrierSemantic}:{},element:a.element,semanticRole:a.semanticRole,...a.obligationId?{obligationId:a.obligationId}:{},...a.baselineId?{baselineId:a.baselineId}:{},source:{kind:a.source.kind,...a.source.quote?{quote:a.source.quote}:{}}}))},facts:c,factsReading:"facts是完整的本节相关事实目录,原值与原文未送达;不能据此填控制值、公差或数字。已核对象边界和技术条件仍按section.objectScope、契约项与方法要求承接,不得把未送原值解释为没有该条件。小节只规划查询问题/字段/主载;写作时用每项reading的query_project_facts,再按sourceFile用read_source逐字核对,原值不作截断或摘要。",lockedSubsectionTitles:a.lockedSubsectionTitles??[]}}(a,b),coverageItems:(i=b.coverageItemIds,c.map(a=>{let b=i.indexOf(a.id);return{...a,...b>=0?{ref:`C${b+1}`}:{}}}))})].join("\n")}function S(a,b,c,d,e){return(0,k.dk)({...b?{priorReview:b,recheck:"前轮要求修订;按当前候选与实际补丁结果复核。仍需修改则保持 revise/reject,明确无需修改才 pass。"}:{},...c?{coverageSalvage:c,salvageRecheck:"程序为修复覆盖类错误做了机器回填;逐项核对被降级/补入的 coverageItemId 语义归属,若不符用 patches 修正。"}:{},...d?{structuralSalvage:d,structuralRecheck:"程序为补必出输出/写作大纲做了机器回填;逐项核对回填小节的输出、载体、责任与语义归属,若不符用 patches 修正。"}:{},...e?{businessSalvage:e,businessRecheck:"程序已删除商务/费用小节并把其契约项回填到技术小节;核对技术小节语义归属,确认没有残留报价/费用/台账类内容。"}:{},sectionPlan:a,task:"独立审查本节三级小节计划:只审拆分是否专业、粒度、对象/接口/风险/阶段、载体与重复;不写正文",rules:["你是独立节级规划审查者,不是本节计划作者;不得因为作者写了理由就接受。","检查:小节是否覆盖本节对象范围与契约项;是否遗漏对象/专业系统/工作界面/风险/阶段;是否混合不相干对象/工序,或把同一施工关系拆碎;多个区域共用同一流程合法,不按对象数判废。","检查:每个契约项是否恰好一个主载体;每个必出输出是否由正确形态的表/图小节承接;引用小节是否只引用不复述。","**已有主载体的契约项只能引用**:某契约项已由一个小节主载时,其他小节只能用 referencedCoverageItemIds 引用;发现缺失时 fix 必须要求引用或把主载整体移到更合适的小节,不得建议把它加入第二个小节的 coverageItemIds。","载体协议以系统块 carrierContract 和每项必出输出的 expectedPrimaryCarrier/expectedWritingBlockCarrier 为准。不要将 requiredOutputs.form 与 primaryCarrier 逐字比较;org_chart/diagram/chart 均由规范 figure 承接。独立核验图的专业语义(例如组织图的层级、岗位、汇报关系),实际缺少这些内容仍可阻断;规范值与别名不同本身不是专业缺陷。","检查:自选表/图是否有具体理由;标题过渡小节是否真的只作过渡;是否与已锁定节重复。","检查:每个小节的 writingOutline 是否按阅读顺序、每块一个主题、载体与内容形态匹配(并列项→list、可对照矩阵→table、流程/关系/空间/时序→figure、判断/措施/责任→paragraph);必出表/图是否有对应载体的块;`mustNotRepeat` 是否覆盖本节/跨节已承载内容。大纲不新增义务,块不按字数判断。载体按实际关系与阅读需要判断;不得按来源数、字数、表行数或写作块数量判废。仅有表达偏好时给 advisory,确有遗漏、事实冲突或无效对照时定位问题并给补丁。","第一章第一节的第一个块必须是项目基本信息表(冻结事实;缺失写“待核”),且不得排在范围/界面等实质内容之后。","检查:事实/工程量落点是否与本节声明一致;是否出现空泛模板、固定阶段/工日/机械或项目常量。",'检查:相邻自选表小节**列结构相同、行是同类可比较对象**(专业/单体/区段/阶段/输出)即属于同一对照关系,应建议合并为一张表,把拆分维度变成一列;不再要求 objectOrProcess 为同一对象或连续工序。只有字段不兼容、不同对象独立施工内容无法共用列、或合同分别点名输出时才保持分开;不能按标题相近合并段落内容。合并用 `{subsectionId:"<被并入的小节>", mergeInto:"<目标小节>", title:"合并后标题"}` 补丁。',"可修的用 patches 返回(subsectionId + 修改字段);blocking 必须定位对象并给出可核依据及修法。一般表达偏好记 advisory。结构校验通过不等于专业通过;blocking 修订后须独立复核,不能靠降低严重性消失。**只有 blocking finding 才判 revise;仅有 advisory/info 且没有 blocking 时 verdict=pass 并保留 advisory,不得把表达偏好判 revise。**","只输出 JSON。"],output:{verdict:"revise",findings:[{category:"granularity",severity:"blocking",targetSubsectionId:"sub-1",detail:"可核问题",fix:"具体修法"}],patches:[{subsectionId:"sub-1",title:"修订后标题"}]}})}function T(a){return a.map(a=>a.message)}function U(a,b){let c=(0,n.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}).filter(a=>b.coverageItemIds.includes(a.id));return{structurePlan:a.structurePlan,coverageItems:c.map(a=>({id:a.id,text:a.text,enumerated:a.enumerated})),lockedSubsectionTitles:a.lockedSubsectionTitles??[],lockedOutputDedupeKeys:a.lockedOutputDedupeKeys??[],requireStructureFrozen:!0,sourceDraftContracts:a.sourceDraftContracts,requireWritingOutline:!0}}function V(a,b,c){return(0,q.Sw)((0,q.mn)({...a,state:a.state??"draft"}),U(b,c))}function W(a,b){let c="string"==typeof b.mergeInto?b.mergeInto.trim():"";if(c&&c!==String(b.subsectionId??"")){let d=a.subsections.find(a=>a.subsectionId===String(b.subsectionId)),e=a.subsections.find(a=>a.subsectionId===c);if(!d||!e)throw Error("SECTION_MERGE_TARGET_MISSING:合并源或目标不存在");if(d.requiredOutputId||e.requiredOutputId||"transition"===d.role||"transition"===e.role||"table"!==d.primaryCarrier||"table"!==e.primaryCarrier||!d.contentContract||!e.contentContract||!d.contentContract.data.length||JSON.stringify([...d.contentContract.data].sort())!==JSON.stringify([...e.contentContract.data].sort()))throw Error("SECTION_MERGE_INCOMPATIBLE:仅允许字段兼容的自选对照表;必出输出、段落和过渡小节不得合并");let f={...e.outline};for(let a of Object.keys(f))f[a]=[...new Set([...e.outline[a],...d.outline[a]])];let g=a.subsections.filter(a=>a.subsectionId!==d.subsectionId).map(a=>a.subsectionId!==e.subsectionId?a:{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},coverageItemIds:[...new Set([...a.coverageItemIds,...d.coverageItemIds])],referencedCoverageItemIds:[...new Set([...a.referencedCoverageItemIds,...d.referencedCoverageItemIds])],factKeys:[...new Set([...a.factKeys,...d.factKeys])],quantityKeys:[...new Set([...a.quantityKeys,...d.quantityKeys])],writingOutline:(0,j.uR)([...a.writingOutline??[],...d.writingOutline??[]]),outline:f,contentContract:(0,i.Gv)({...e.contentContract,objectOrProcess:[...new Set([e.contentContract.objectOrProcess,d.contentContract.objectOrProcess])].join(";"),response:[...e.contentContract.response,...d.contentContract.response],acceptance:[...e.contentContract.acceptance,...d.contentContract.acceptance]}),...d.decisionReason||a.decisionReason?{decisionReason:[a.decisionReason,d.decisionReason].filter(Boolean).join(";")}:{}}).map((a,b)=>({...a,order:b}));return{...a,subsections:g,...O(g)}}let d=a.subsections.map(a=>{if(String(b.subsectionId??"")!==a.subsectionId)return a;let c=J(b.outline);return Array.isArray(b.controlValues)&&(c.controlValues=[...new Set(b.controlValues.map(String).map(a=>a.trim()).filter(Boolean))]),{...a,..."string"==typeof b.title&&b.title.trim()?{title:b.title.trim()}:{},...Array.isArray(b.coverageItemIds)?{coverageItemIds:[...new Set(b.coverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.referencedCoverageItemIds)?{referencedCoverageItemIds:[...new Set(b.referencedCoverageItemIds.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...u.includes(b.primaryCarrier)?{primaryCarrier:B(b.primaryCarrier)}:{},..."string"==typeof b.requiredOutputId&&b.requiredOutputId.trim()?{requiredOutputId:b.requiredOutputId.trim()}:{},...Array.isArray(b.factKeys)?{factKeys:[...new Set(b.factKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...Array.isArray(b.quantityKeys)?{quantityKeys:[...new Set(b.quantityKeys.map(String).map(a=>a.trim()).filter(Boolean))]}:{},...void 0!==b.outline||Array.isArray(b.controlValues)?{outline:c}:{},...void 0!==b.writingOutline?{writingOutline:(0,j.uR)(b.writingOutline)}:{},..."string"==typeof b.decisionReason&&b.decisionReason.trim()?{decisionReason:b.decisionReason.trim()}:{},...a.contentContract?{contentContract:(0,i.Gv)({...a.contentContract,carrier:u.includes(b.primaryCarrier)?B(b.primaryCarrier):a.primaryCarrier,..."string"==typeof b.objectOrProcess?{objectOrProcess:b.objectOrProcess}:{},...Array.isArray(b.response)?{response:b.response.map(String)}:{},...Array.isArray(b.data)?{data:b.data.map(String)}:{},...Array.isArray(b.acceptance)?{acceptance:b.acceptance.map(String)}:{}})}:{},..."transition"===b.role?{role:"transition"}:{}}});return{...a,subsections:d,...O(d)}}function X(a,b){let c=a=>String(a??"").replace(/\s+/gu,"").trim(),d=new Set;for(let a of b)for(let b of a.subsections)d.add(c(b.title));return a.subsections.map(a=>c(a.title)).filter((a,b,c)=>a&&(d.has(a)||c.indexOf(a)!==b)).filter((a,b,c)=>c.indexOf(a)===b)}async function Y(a){let b,c,h,s,t,u;a.sourceDraftContracts?a.sourceDraftContracts.assertSourceDraft(a.structurePlan,a.sectionId):(0,p.UW)(a.structurePlan);let v=I(a.structurePlan,a.sectionId);if(!v)throw Error(`SECTION_STRUCTURE_PLAN_INVALID:节「${a.sectionId}」不在冻结的全局结构计划里`);let y=(0,n.buildStructureCoverageCatalog)({confirmed:a.confirmed,planningContext:a.planningContext}),z=function(a,b){var c,d;let e=(c=a.structurePlan,d=b.sectionId,c.chapters.find(a=>a.sections.some(a=>a.sectionId===d))),f=e?.title??"",g=new Set,h=new Set;for(let b of a.planningContext.professionalCandidates)if((0,o.ri)(b.chapterTitle)===(0,o.ri)(f))for(let a of[...b.sectionCandidates.flatMap(a=>a.required),...b.contentRequirements.flatMap(a=>a.required)]){let b=String(a).trim();b&&(g.add(b),h.add(Q(b)))}return{texts:[...g],keys:h}}(a,v),A=y.filter(a=>v.coverageItemIds.includes(a.id)||"method"===a.kind&&z.keys.has(Q(a.text))).map(a=>({id:a.id,text:a.text,kind:a.kind,...a.enumerated?{enumerated:!0}:{}})),D={diagnostics:a.diagnostics,signal:a.signal,temperature:0,taskKind:"structuredGeneration",callKind:"section-planning",maxTokens:e.sL.y,...a.responseCache?{responseCache:a.responseCache}:{}},E=R(a,v,A,y,z,!1),F=a.revision?{subsections:L(a.revision.previousPlan.subsections)}:void 0,X=a.authorAttempts??{used:0},Y={},Z=async b=>{if(X.used>=2)throw new g.f({scope:a.sectionId,candidate:F,findings:[],reason:`节级规划已用完初稿与1次共享作者修订,保留候选与具体校验反馈,不能重新从头计费`});let c=b?.length?(0,k.dk)({task:"局部纠正:为已冻结的节规划三级小节,不重新推演全文内容",previousResponse:F,deterministicIssues:b,section:{sectionId:v.sectionId,title:v.title,contentGroup:v.contentGroup,objectScope:(0,d.eq)(a.structurePlan,v.objectScope),coverageItemIds:v.coverageItemIds,factKeys:v.factKeys,quantityKeys:v.quantityKeys,requiredOutputs:v.requiredOutputs.map(a=>({outputId:a.outputId,form:a.form,element:a.element}))},lockedSubsectionTitles:a.lockedSubsectionTitles??[],rules:["只纠正具体错误,保留前候选其他有效内容,不改节身份或范围。","每项契约项恰好一个主载,每个必出输出由正确表/图载体承接,事实与工程量键只用本节给定身份。","已有主载体的契约项不得再加第二个主载:其他小节写 referencedCoverageItemIds;复合义务的子项用引用,不复制父项。","coverageItemIds 只能写 coverageItems 列表里的 ref(C1、C2…)或逐字复制其 id;不得编造哈希 id。","保留并补齐每个内容小节的 writingOutline:按阅读顺序、每块只回答一个问题、载体按内容形态选择;必出表/图必须有对应载体的块。","自选表/图小节(无 requiredOutputId)必须在 decisionReason 写明唯一对照关系与必须用表/图的理由;同一对照关系只规划一张表,不按专业/单体/区段拆成多张同构表。","不得新增来源、对象、标准、数值或原文没有的内容;返回完整纠正后的subsections。"]}):function(a,b){let c=a.structurePlan.chapters[0]?.sections[0]?.sectionId===b.sectionId;return(0,k.dk)({task:"为已冻结的节规划三级小节:每项契约项恰好一个主载小节,每个必出输出落到表/图小节,事实/工程量有落点",rules:["只规划本节内部的小节,不得新增/删除/改名节,不得写正文。","**内容组**:sectionEvidence.section.contentGroup 是本节唯一主载的内容组;小节只在本节内展开,不得把它写成跨节主载。","小节标题必须是工程名词短语,同级平行;不得出现评审/说明语言,不得以动词开头或标点结尾;本节内不得重名,不得与 lockedSubsectionTitles 语义重叠(确属不同语义角色必须写 decisionReason)。","**契约项**:section.coverageItemIds 中每一项必须恰好出现在一个小节的 coverageItemIds 中,不得遗漏或重复;只是引用别的小节主载体时填 referencedCoverageItemIds,不得同时主载与引用同一项。coverageItems[].ref 是本节契约项的短引用(C1、C2…):coverageItemIds 优先写 ref,程序会映射为真实 id;也可逐字复制 coverageItems[].id。**不得编造或改写哈希 id**:不在 coverageItems 列表里的 id 一律无效,整份计划会被退回。","**已有主载体的契约项只能引用**:某契约项已由一个小节主载时,其他小节只能用 referencedCoverageItemIds 引用,不得再写进第二个小节的 coverageItemIds;复合义务(例如“施组应覆盖供应进场、人员、质保、安全文明、机械、进度、技术措施、应急预案、工资”)的专项子项用引用/覆盖映射表达,不复制父项主载体。","**必出输出**:section.requiredOutputs 中每一项必须恰好有一个小节用 requiredOutputId 承接;表输出只能由 primaryCarrier=table 的小节承接,图/框图/组织图/横道/网络等由 primaryCarrier=figure 承接;不得用段落替代。","**载体**:同字段事实、可对照对象(≥3 行同类数据)、参数矩阵→table;清单→list(段落行表达,不设表格默认);因果、措施、论证、责任、验收→paragraph;流程、关系、空间、层次→figure。自选表/图(没有 requiredOutputId)必须写 decisionReason;**自选表成立条件**:契约项+事实键+工程量键合计至少 2 个来源,且表格有 ≥3 行可比较数据——内容很少的对照写成段落,不硬凑表格。","**同一对照关系只能有一张表**:行是同类可比较对象(专业/单体/区段/阶段/输出),列是共同字段;拆分维度必须作为一列,不得按对象拆成多张同构表。相邻小节列结构相同、行是同类对象时必须合并;只有字段不兼容、不同对象独立施工内容无法共用列,或合同分别点名输出时才分开。","**写作大纲**:每个小节必须按阅读顺序给 writingOutline;每块只回答一个问题(topic)、写清读者应得到的结论(purpose)、按内容形态选载体(paragraph/list/table/figure)。evidenceRefs 只用本小节 coverageItemIds/outputId/factKeys/quantityKeys 中已有的身份;mustNotRepeat 写本节或跨节已承载、本块只能引用不能复述的内容。大纲不新增义务,不改变覆盖账。","**一主题一块**:并列条件/步骤/岗位/检查项/验收要点→list;可对照对象/参数矩阵→table;流程/关系/层次/空间/时序→figure;判断/措施/理由/责任/接口/风险→paragraph。不要把一个块写成覆盖清单,也不要把互不统属的主题堆进同一段。列表块在提交时用段落单元、行首编号或项目符号表达。**每小节 paragraph 块 ≤2、list 块 ≤2**:同一论证链/措施链的连续主题合并成一个块写完,不按问题数拆碎;列表 ≥3 项才成立,2 项以下写进段落。",...c?["**本节是第一章第一节**:writingOutline 的第一个块必须是项目基本信息表(carrier=table),承载项目名称、项目编号、建设单位、建设地点、工程范围/规模、标段/包件、计划开工日期、合同工期、质量标准等冻结事实;缺失值在正文写“待核”。该表固定**两列:项目、内容**;不写“口径/来源/核验状态”等第三列。表后主题与顺序由你按项目资料规划,不得把承包范围/分包界面/实施条件写成跨项目固定清单,也不得把其他实质内容排在基本信息表之前。"]:[],"**事实/工程量**:section.factKeys/quantityKeys 中每个键至少落到一个小节;不得引用本节没有声明的键。","**实质内容**:每个小节至少有一个契约项、引用、输出、事实或内容提纲;空小节拒收。纯标题过渡小节用 role=transition 并写理由,且不得挂契约项/输出/事实。","**内容契约**:objectOrProcess明确同一施工对象/部位或连续工序链;response回答已有契约问题,data列成组查询字段,acceptance列有依据的验收/岗位/记录;primaryCarrier决定carrier。生成摘要不能新增项目事实、规范或合同义务。允许同小节中表与施工段分工,不按对象数拆段。","**合并**:相邻自选表小节只要**列结构相同、行是同类可比较对象**(专业/单体/区段/阶段/输出),就属于同一对照关系,必须合并为一张表,把拆分维度变成一列;不再要求 objectOrProcess 为同一对象或连续工序。只有字段不兼容、不同对象独立施工内容无法共用列、或合同分别点名输出时才保持分开;不能仅因标题相近合并段落内容。","**提交前自检(逐项,不通过就改)**:①section.coverageItemIds 每项恰好一个小节主载,且落在描述同一对象/对照关系的小节;②相邻小节不得共享同一对象/工序链/对照关系,共享就合并;③每个内容小节给独立 objectOrProcess 与 writingOutline,outline 至少填 questions/methods/sequence/acceptance 之一,禁止空 outline;④primaryCarrier 与 requiredOutputs 的规范载体一致,必出输出有对应表/图块;⑤事实/工程量键落到实际使用其数值的小节;⑥同一对照关系只规划一张表,不按专业/单体/区段拆同构表。","不得写死固定阶段/工日/机械/项目常量;对象、标准、数字只引用给定上下文。","输出 JSON;不要解释。"],output:{subsections:[{title:"工程名词短语",coverageItemIds:["C1"],referencedCoverageItemIds:[],primaryCarrier:"table",requiredOutputId:"output:…",factKeys:[],quantityKeys:[],outline:{questions:[],methods:[],sequence:[],controlValues:[],tolerances:[],acceptance:[],responsibilities:[],interfaces:[]},writingOutline:[{blockId:"blk-1",topic:"这个块回答的问题",purpose:"读者应得到的结论",carrier:"paragraph",evidenceRefs:["coverage:…"],mustNotRepeat:["已在表X/节X承载的内容"]}],decisionReason:"载体或跨节去重理由"}]}})}(a,v);Y.current=void 0,a.sourceDraftContracts?.assertSourceDraft(a.structurePlan,a.sectionId);let e=await a.caller(E,c,{...D,schema:G,onAttempt:a=>{Y.current=a}});if(!e){let a=Y.current,b=a?.validationFailure??a?.failure?.value;throw Error(`SECTION_STRUCTURE_PLAN_FAILED:节级规划未返回可校验结果${b?`(${b.slice(0,800)})`:""}`)}X.used+=1,F=e;let f=function(a,b=new Map){return(Array.isArray(a)?a:[]).map((a,c)=>{let d=a??{};return{subsectionId:`sub-${c+1}`,title:String(d.title??"").trim(),order:c,coverageItemIds:Array.isArray(d.coverageItemIds)?[...new Set(d.coverageItemIds.map(a=>K(a,b)).filter(Boolean))]:[],referencedCoverageItemIds:Array.isArray(d.referencedCoverageItemIds)?[...new Set(d.referencedCoverageItemIds.map(a=>K(a,b)).filter(Boolean))]:[],primaryCarrier:B(d.primaryCarrier),..."string"==typeof d.requiredOutputId&&d.requiredOutputId.trim()?{requiredOutputId:d.requiredOutputId.trim()}:{},factKeys:Array.isArray(d.factKeys)?[...new Set(d.factKeys.map(a=>String(a).trim()).filter(Boolean))]:[],quantityKeys:Array.isArray(d.quantityKeys)?[...new Set(d.quantityKeys.map(a=>String(a).trim()).filter(Boolean))]:[],outline:J(d.outline),writingOutline:(0,j.uR)(d.writingOutline).map(a=>({...a,evidenceRefs:a.evidenceRefs.map(a=>K(a,b))})),contentContract:(0,i.Gv)({objectOrProcess:String(d.objectOrProcess??d.title??"").trim(),response:Array.isArray(d.response)?d.response.map(String):J(d.outline).questions,data:Array.isArray(d.data)?d.data.map(String):[],carrier:B(d.primaryCarrier),acceptance:Array.isArray(d.acceptance)?d.acceptance.map(String):J(d.outline).acceptance}),..."string"==typeof d.decisionReason&&d.decisionReason.trim()?{decisionReason:d.decisionReason.trim()}:{},..."transition"===d.role?{role:"transition"}:{}}})}(e?.subsections,new Map(v.coverageItemIds.map((a,b)=>[`C${b+1}`,a])));return P({structurePlan:a.structurePlan,sectionId:a.sectionId,subsections:f})},$=b=>{let c=Y.current;c?.raw&&(0,m.archiveDocumentJsonFailure)(a.diagnostics,{...c,raw:c.raw,validationFailure:"SECTION_STRUCTURE_PLAN_INVALID:"+T(b).join(";"),outputTruncated:!1,callKind:"section-planning"})},_=async a=>{let b;for(let c=0;c<2;c+=1)try{return await Z(a)}catch(c){b=c;let a=c instanceof Error?c.message:String(c);if(!/SECTION_STRUCTURE_PLAN_FAILED|incomplete|transport|ECONN|timeout|stream/iu.test(a))throw c}throw b};try{b=await _(a.revision?[`计划修订理由:${a.revision.reason}`,`当前已读依据:${JSON.stringify(a.revision.evidence)}`]:void 0)}catch(d){let c=d instanceof Error?d.message:String(d);if(!/SECTION_STRUCTURE_PLAN_FAILED|incomplete|transport|ECONN|timeout|stream/iu.test(c)||a.revision)throw d;F={subsections:L((b=N(a,v)).subsections)}}let aa=!1,ab=!1,ac=!1,ad=[],ae=!1,af=async b=>{let d=b,e=V(d,a,v),g=new Set,i=!1,j=()=>{if(!e.length||!e.every(a=>w.has(a.code)))return!1;let b=M(d,v);return!!b&&!V(b,a,v).length&&(e=[],aa=!0,c=(d=b).sectionPlanHash,!0)},k=()=>{if(!e.length||!e.every(a=>w.has(a.code)||x.has(a.code)))return!1;let b=f.businessContentTitlePatterns,c=a=>b.some(b=>(a.title+(a.contentContract?.objectOrProcess??"")).includes(b)),g=d.subsections.filter(c),i=g.length?d.subsections.filter(a=>!c(a)).map((a,b)=>({...a,order:b})):d.subsections,j=N(a,v),k=new Set(i.map(a=>a.subsectionId)),l=new Set(i.map(a=>(0,o.ri)(a.title))),m=[...i];for(let a of v.requiredOutputs){if(m.some(b=>b.requiredOutputId===a.outputId))continue;let b=j.subsections.find(b=>b.requiredOutputId===a.outputId);if(!b)continue;let c=m.length+1;for(;k.has(`sub-${c}`);)c+=1;let d=`sub-${c}`;k.add(d);let e=b.title,f=2;for(;l.has((0,o.ri)(e));)e=`${b.title}(${f++})`;l.add((0,o.ri)(e)),m.push({...b,subsectionId:d,title:e,order:m.length})}let n=new Set,p=m.filter(a=>!a.requiredOutputId||!n.has(a.requiredOutputId)&&(n.add(a.requiredOutputId),!0)).map((a,b)=>{let c=new Set([...a.coverageItemIds,...a.referencedCoverageItemIds,...a.factKeys,...a.quantityKeys,...a.requiredOutputId?[a.requiredOutputId]:[]]),d=(a.writingOutline??[]).map(a=>({...a,evidenceRefs:a.evidenceRefs.filter(a=>!/^(?:coverage|output):/u.test(a)||c.has(a))})),e=d.length||"transition"===a.role?d:[{blockId:"blk-1",topic:a.title,purpose:a.contentContract?.objectOrProcess||a.title,carrier:a.primaryCarrier,evidenceRefs:[...a.requiredOutputId?[a.requiredOutputId]:[],...a.coverageItemIds],mustNotRepeat:[]}];return{...a,order:b,writingOutline:e}}),r=(0,q.mn)({...d,subsections:p,...O(p)}),t=v.coverageItemIds.length?M(r,v):r;return!!t&&!V(t,a,v).length&&(e=[],ab=!0,h=(d=t).sectionPlanHash,g.length&&(ac=!0,s=d.sectionPlanHash,ad=g.map(a=>a.title)),!0)};for(;e.length&&($(e),!(j()||k()));){let b=(0,l.Fu)(d);if((i=g.has(b))||X.used>=2)break;g.add(b),e=V(d=await _(T(e)),a,v),j(),e.length&&k()}if(e.length&&j(),e.length&&k(),e.length){let b=N(a,v);if(!V(b,a,v).length)return ae=!0,t=b.sectionPlanHash,b;let c=new Set(v.coverageItemIds),f=[...new Set(d.subsections.flatMap(a=>[...a.coverageItemIds,...a.referencedCoverageItemIds]))].filter(a=>!c.has(a)).map(b=>({id:b,sourceSectionId:a.structurePlan.chapters.flatMap(a=>a.sections).find(a=>a.sectionId!==v.sectionId&&a.coverageItemIds.includes(b))?.sectionId??""})).filter(a=>a.sourceSectionId);throw new r({sectionId:a.sectionId,issues:T(e),availableCoverageItems:A.map(a=>({id:a.id,text:a.text,suggestedCarrier:a.enumerated?"table":"paragraph"})),foreignCoverageItems:f,identicalRetry:i})}return d};b=await af(b);let ag=a=>({id:"section-plan:coverage-ref-recovery",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"coverage-ref-recovery",severity:"advisory",target:{},detail:"模型输出的覆盖映射不合法(重复主载体/无效引用),程序已按本节契约项清单回填或把重复主载降为引用;请核对每个契约项的语义归属",fix:"若归属不符,用 patches 调整 coverageItemIds/referencedCoverageItemIds;不要删除本节契约项"}),ah=a=>({id:"section-plan:structural-ref-recovery",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"structural-ref-recovery",severity:"advisory",target:{},detail:"模型输出的必出输出小节/写作大纲不完整,程序已按本节冻结 requiredOutputs 与契约项回填缺项;请核对每个输出小节的语义、载体与责任",fix:"若归属不符,用 patches 调整 requiredOutputId/标题/块;不要删除本节必出输出"}),ai=a=>({id:"section-plan:business-content-removal",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"business-content-removal",severity:"advisory",target:{},detail:`程序已从节计划删除商务/费用小节(${ad.join("、")||"费用类小节"}):报价构成、费用计取、台账凭证不进入技术标;其契约项已回填到技术小节,请核对语义归属并确认没有残留费用表述`,fix:"若删除后技术内容不足,用 patches 补技术小节(工艺、组织、质量、安全、进度或接口);不得恢复商务/费用内容以凑覆盖"}),aj=a=>({id:"section-plan:author-fallback",planId:a.planId,sectionPlanHash:a.sectionPlanHash,category:"plan-author-fallback",severity:"advisory",target:{},detail:"节计划作者额度用尽后仍未通过确定性校验,程序已按本节冻结的契约项/必出输出/事实生成最小可写结构;请核对小节拆分、输出与事实落点是否满足本节专业要求",fix:"如结构不足,用 patches 补技术小节/输出/事实落点;不得删除本节契约项或必出输出"}),ak=[];ae&&ak.push(aj(b)),aa&&ak.push(ag(b)),ab&&ak.push(ah(b)),ac&&ak.push(ai(b));let al=(0,q.WM)(b,U(a,v)),am=al.sectionPlanHash,an=await a.caller(R(a,v,A,y,z,!0),S(al,void 0,aa?ag(al):void 0,ab?ah(al):void 0,ac?ai(al):void 0),{...D,schema:H});an||ak.push({id:"section-plan-review:unavailable",planId:al.planId,sectionPlanHash:am,category:"review-unavailable",severity:"advisory",target:{},detail:"独立节规划审查未取得;候选结构确定性校验通过,按未取得审查记录并继续",fix:"整稿终审与后续节可继续核对;不伪造专业通过"});let ao=an??{verdict:"pass",findings:[],patches:[]};for(let[a,b]of(Array.isArray(ao.findings)?ao.findings:[]).entries()){let c=b??{},d=C(c.severity),e=String(c.detail??"");ak.push({id:`section-plan-review:1:${a+1}`,planId:al.planId,sectionPlanHash:am,category:String(c.category??"structure"),severity:d,target:{..."string"==typeof c.targetSubsectionId&&c.targetSubsectionId?{subsectionId:c.targetSubsectionId}:{}},detail:e,fix:String(c.fix??"")})}let ap=(Array.isArray(ao.patches)?ao.patches:[]).map(a=>a??{}).filter(a=>String(a.subsectionId??"").trim()),aq=[],ar=[],as=al,at=(a,b)=>{let c=b instanceof Error?b.message:String(b);aq.push({subsectionId:String(a.subsectionId),status:"refused",reason:c}),ak.push({id:`section-plan-review:patch:${aq.length}`,planId:al.planId,sectionPlanHash:am,category:"patch",severity:"advisory",target:{subsectionId:String(a.subsectionId)},detail:`审查补丁被拒绝(未采用):${c}`,fix:"按当前小节身份与确定性错误修正,不得删除必出输出或契约项"})};for(let a of ap)try{if(!as.subsections.some(b=>b.subsectionId===String(a.subsectionId)))throw Error("SECTION_PATCH_TARGET_MISSING");let b=W(as,a);(0,l.Fu)(b)===(0,l.Fu)(as)?aq.push({subsectionId:String(a.subsectionId),status:"no-op",reason:"候选与当前计划一致"}):(as=b,ar.push(a))}catch(b){at(a,b)}try{al=(0,q.WM)({...as,state:"validated"},U(a,v)),aq.push(...ar.map(a=>({subsectionId:String(a.subsectionId),status:"applied"})))}catch{for(let b of ar)try{al=(0,q.WM)({...W(al,b),state:"validated"},U(a,v)),aq.push({subsectionId:String(b.subsectionId),status:"applied"})}catch(a){at(b,a)}}al=(0,q.WM)({...al,state:"validated"},U(a,v));let au=1,av=0,aw=ak,ax=ao,ay=[],az=(0,g.C)(ao,ak);for(;az&&av<3;){if(ay.push(...aw),X.used>=2){aw.push({id:"section-plan-review:revision-budget",planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:"revision-budget",severity:"advisory",target:{},detail:"节级规划作者修订额度已用尽;保留当前有效节计划,未落地意见进入整稿台账",fix:""});break}try{F={subsections:L(al.subsections)};let b=await af(await _(aw.map(b=>`${b.target.subsectionId??a.sectionId}:${b.detail};修法:${b.fix}`)));al=(0,q.WM)({...b,state:"validated"},U(a,v))}catch(a){aw.push({id:`section-plan-review:revision-recorded:${av+1}`,planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:"revision-recorded",severity:"advisory",target:{},detail:`作者修订未产出可校验候选:${a instanceof Error?a.message:String(a)};保留上一有效节计划,按未决项记录`,fix:""});break}if(av+=1,aa&&c===al.sectionPlanHash&&!aw.some(a=>"coverage-ref-recovery"===a.category)&&aw.push(ag(al)),ab&&h===al.sectionPlanHash&&!aw.some(a=>"structural-ref-recovery"===a.category)&&aw.push(ah(al)),ac&&s===al.sectionPlanHash&&!aw.some(a=>"business-content-removal"===a.category)&&aw.push(ai(al)),ae&&t===al.sectionPlanHash&&!aw.some(a=>"plan-author-fallback"===a.category)&&aw.push(aj(al)),au>=3)break;if(u&&al.sectionPlanHash===u){aw.push({id:"section-plan-review:unchanged",planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:"review-skipped-unchanged",severity:"advisory",target:{},detail:"修订未改变节计划 hash;不重复审查同一输入,按未决项记录",fix:""});break}let b=al.sectionPlanHash,d=await a.caller(R(a,v,A,y,z,!0),S(al,{verdict:ax.verdict,findings:aw,patches:aq}),{...D,schema:H});if(au+=1,!d){aw.push({id:"section-plan-review:unavailable",planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:"review-unavailable",severity:"advisory",target:{},detail:"修订后独立节规划审查未取得;保留当前有效节计划,按未取得审查记录",fix:""});break}ax=d,aw=(Array.isArray(d.findings)?d.findings:[]).map((a,b)=>({id:`section-plan-review:${au}:${b+1}`,planId:al.planId,sectionPlanHash:al.sectionPlanHash,category:String(a.category??"structure"),severity:C(a.severity),target:"string"==typeof a.targetSubsectionId?{subsectionId:a.targetSubsectionId}:{},detail:String(a.detail??""),fix:String(a.fix??"")})),u=b,az=(0,g.C)(d,aw)}aa&&c===al.sectionPlanHash&&!aw.some(a=>"coverage-ref-recovery"===a.category)&&aw.push(ag(al)),ab&&h===al.sectionPlanHash&&!aw.some(a=>"structural-ref-recovery"===a.category)&&aw.push(ah(al)),ac&&s===al.sectionPlanHash&&!aw.some(a=>"business-content-removal"===a.category)&&aw.push(ai(al)),ae&&t===al.sectionPlanHash&&!aw.some(a=>"plan-author-fallback"===a.category)&&aw.push(aj(al)),au>1&&aw.push(...ak.filter(a=>"patch"===a.category));let aA=(0,q.vs)((0,q.vs)(al,"reviewed"),"frozen"),aB=aw.filter(a=>"blocking"===a.severity).length;return{plan:aA,review:{planId:aA.planId,sectionPlanHash:aA.sectionPlanHash,reviewer:"independent-section-plan-review",rounds:au,findings:aw,...au>1?{priorFindings:ay}:{},patches:aq,verdict:aB?"revise":"pass",advisoriesOnly:0===aB,...aB?{recorded:!0,recordedBlocking:aB}:{}},coverage:{subsections:aA.subsections.length,coverageItems:aA.coverage.length,outputs:aA.outputCoverage.length,facts:v.factKeys.length+v.quantityKeys.length}}}function Z(a){(0,q.aT)(a.original),a.contracts.assertGlobal(a.structurePlan.planHash),a.contracts.assertSourceDraft(a.originalStructure,a.sectionId),a.contracts.assertSourceDraft(a.structurePlan,a.sectionId);let b=I(a.structurePlan,a.sectionId);if(!b||"frozen"!==a.original.state)throw Error("EARLY_DRAFT_PLAN_NOT_APPROVED");return(0,q.WM)({...a.original,planId:"section-plan:"+a.structurePlan.planHash.slice(0,12)+":"+a.sectionId,structurePlanId:a.structurePlan.planId,structurePlanHash:a.structurePlan.planHash},U(a,b))}},85585:(a,b,c)=>{c.d(b,{M:()=>h});let d=[["一步瞃过","一步跨过"],["癹定与碰撞","锁定与碰撞"],["钢権条","钢檩条"],["通风菡管","通风风管"],["墙面髄体","墙面墙体"],["施工阶断","施工阶段"],["深化设计阶断","深化设计阶段"],["条件件驱动","条件驱动"],["版次控制与与","版次控制与"],["峰窝廊面","蜂窝麻面"],["偏、将料、油漆","偏、浆料、油漆"],["偏、将料","偏、浆料"]],e={権:"权",髄:"髓",亜:"亚",団:"团",実:"实",単:"单",気:"气",徳:"德",広:"广",対:"对"},f=(a,b)=>a.slice(0,b).split("\n").length,g=(a,b,c=60)=>{let d=a.lastIndexOf("\n",b)+1,e=a.indexOf("\n",b);return a.slice(d,e<0?a.length:e).trim().slice(0,c)};function h(a){let b=[],c=new Set,h=a=>{let d=a.code+":"+(a.line??"")+":"+a.message;c.has(d)||(c.add(d),b.push(a))};for(let[b,c]of d){let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(e<0)break;d=e+b.length,h({code:"typo-known-wrong-word",severity:"blocker",line:f(a,e),excerpt:g(a,e),message:`已知错词「${b}」应为「${c}」;逐处替换后再交付`})}}for(let[b,c]of Object.entries(e)){let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(e<0)break;d=e+1,h({code:"typo-variant-character",severity:"blocker",line:f(a,e),excerpt:g(a,e),message:`出现日式异体字「${b}」应为「${c}」;简体中文工程文档不得混用`})}}return b}},86265:(a,b,c)=>{c.d(b,{J:()=>j});var d=c(59339),e=c(25164),f=c(60806),g=c(6873),h=c(745),i=c(4053);function j(a){let{store:b}=a,c=a=>{let c={entities:[],groups:[]};for(let d of a)for(let a of[...d.references,...d.assertions.map(a=>a.reference)])if("decision"===a.kind&&c.entities.push({id:a.entityId,version:a.entityVersion}),"certificate"===a.kind){let d=b.certificate(a.certificateId);d&&(c.entities.push(...d.reads.entities),c.groups.push(...d.reads.groups))}return(0,h.xi)(c)},j=new Map(a.contract.sections.map(a=>[a.id,a.title]));return{prepareWriting(c){if(c.responsibilityId!==a.authority.actorId)throw Error("WRITING_RESPONSIBILITY_SCOPE_DENIED");let d=c.sectionIds.length?c.sectionIds:[];if(1!==d.length)throw Error("WRITING_SECTION_SINGLE_REQUIRED:每次正文提交只能声明一个章节;跨节内容拆成多次提交,或在正文中引用他节的表/图");let[e]=d;if(!j.has(e))throw Error(`WRITING_SECTION_UNKNOWN:${e}`);if(!a.authority.sectionIds.includes(e))throw Error(`WRITING_SECTION_SCOPE_DENIED:${e}`);let f=a.sectionContractReads?.reads(d),g={actorId:a.authority.actorId,responsibilityId:c.responsibilityId,purpose:c.purpose,sectionIds:d},h=[...new Set([...c.unitIds??[]])];if(!h.length)throw Error("WRITING_UNITS_REQUIRED");let k=[...new Set([...f?.entities.map(a=>a.id)??[],...a.authority.sectionIds,...h.map(a=>(0,i.tp)(c.responsibilityId,c.purpose,a,e))])];return b.captureReadSnapshot({entityIds:k,groupKeys:[`section-units:${e}`],context:g})},proposeWriting(g,k,l,m){let n,o=b.readSnapshot(g),p=o.context??{};if(p.actorId!==a.authority.actorId)throw Error("WRITING_SNAPSHOT_SCOPE_DENIED");if(!l?.trim())throw Error("WRITING_REASON_REQUIRED");let q=k??{},r={...q,units:Array.isArray(q.units)?q.units.map(b=>(0,d.Mf)(b??{},a.tenderResponsePlan,Array.isArray(q.sectionIds)?q.sectionIds.map(String):[])):q.units},{submission:s,issues:t}=(0,i.Dp)(r);if(!s)throw Error(`WRITING_SUBMISSION_INVALID:${t.map(a=>`${a.unitId}:${a.code}:${a.message}`).join(";")}`);s.units=s.units.map(b=>{let{carrierRevisionReason:c,...e}=b;return(0,d.Mf)({...e,...s.revision?.reason?.trim()?{carrierRevisionReason:s.revision.reason.trim()}:{}},a.tenderResponsePlan,s.sectionIds)});if(s.responsibilityId!==a.authority.actorId)throw Error("WRITING_RESPONSIBILITY_SCOPE_DENIED");if(!s.sectionIds.length)throw Error("WRITING_SECTION_REQUIRED");if(1!==s.sectionIds.length)throw Error("WRITING_SECTION_SINGLE_REQUIRED:每次正文提交只能声明一个章节;跨节内容拆成多次提交,或在正文中引用他节的表/图");for(let b of s.sectionIds){if(!j.has(b))throw Error(`WRITING_SECTION_UNKNOWN:${b}`);if(!a.authority.sectionIds.includes(b))throw Error(`WRITING_SECTION_SCOPE_DENIED:${b}`)}let u=a.sectionContractReads?.reads(s.sectionIds);for(let a of u?.entities??[])if(!o.reads.entities.some(b=>b.id===a.id&&b.version===a.version))throw Error("SECTION_CONTRACT_SNAPSHOT_MISMATCH");let v=s.units.flatMap(b=>(0,d.B$)(b,a.tenderResponsePlan,s.sectionIds));if(v.length)throw Error("WRITING_DELIVERY_INVALID:"+v.join(";"));if(s.revision){let c=b.proposalOperation(m);if(c){let b=c.changes.find(a=>"writing-revision"===a.kind)?.value?.requestHash;if(c.actorId!==a.authority.actorId||b!==(0,h.Fu)([s,l]))throw Error("DOMAIN_OPERATION_ID_CONFLICT");return c}}if(p.purpose!==s.purpose||JSON.stringify(p.sectionIds)!==JSON.stringify(s.sectionIds))throw Error("WRITING_SNAPSHOT_SCOPE_DENIED");for(let a of[...s.units.map(a=>a.id),...s.revision?.retire.map(a=>a.unitId)??[]]){let b=(0,i.tp)(s.responsibilityId,s.purpose,a,s.sectionIds[0]);if(!o.reads.entities.some(a=>a.id===b))throw Error("WRITING_SNAPSHOT_UNIT_NOT_READ")}let w=c(s.units),x=(0,h.xi)({entities:[...o.reads.entities,...w.entities],groups:[...o.reads.groups,...w.groups]}),y=(0,f.R)(b,s,s.units.map(a=>({id:(0,i.tp)(s.responsibilityId,s.purpose,a.id,s.sectionIds[0]),kind:"writing-unit",value:{...a,responsibilityId:s.responsibilityId,purpose:s.purpose,sectionIds:[s.sectionIds[0]]}})).map(a=>({id:a.id,kind:a.kind,expectedVersion:b.entity(a.id)?.version??null,value:a.value})),l);for(let a of y)x.entities.push({id:a.id,version:a.expectedVersion});let z=s.sectionIds[0],A=new Map;for(;;){let a=b.entityPage({groupKey:`section-units:${z}`,...n?{afterId:n}:{},limit:200});for(let b of a.entities)(0,i.iC)(b)&&A.set(b.id,b.version);if(!a.nextAfterId)break;n=a.nextAfterId}for(let a of y)"writing-unit"===a.kind&&(a.value?A.set(a.id,(0,h.Fu)(a.value)===(0,h.Fu)(b.entity(a.id)?.value??null)?b.entity(a.id).version:(a.expectedVersion??0)+1):A.delete(a.id));let B=(0,e.L1)({store:b,sectionId:z,responsibilityId:s.responsibilityId,phase:"drafting",snapshot:{unitVersions:[...A].map(([a,b])=>({entityId:a,version:b})),unreviewedUnitIds:[],blockingFindingIds:[],sourceReviewComplete:!1,...s.units[0]?.planHash?{structurePlanHash:s.units[0].planHash}:{},...s.units[0]?.sectionPlanHash?{sectionPlanHash:s.units[0].sectionPlanHash}:{}},trigger:"writing-committed"});return y.some(a=>(0,h.Fu)(a.value)!==(0,h.Fu)(b.entity(a.id)?.value??null))&&!B.unchanged&&(y.push(B.change),x.entities.push(B.read)),b.propose({actorId:a.authority.actorId,purpose:s.purpose,reason:l,reads:(0,h.xi)(x),changes:y},m)},evaluateWriting:c=>b.evaluate(c,"construction-writing-unit-v4",c=>{let e=[],f={responsibilityId:a.authority.actorId,purpose:"",sectionIds:[],units:c.proposal.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.value)},{issues:h}=(0,i.Dp)({responsibilityId:a.authority.actorId,purpose:"evaluation",sectionIds:[],units:f.units,...c.proposal.changes.some(a=>"writing-revision"===a.kind)?{revision:c.proposal.changes.find(a=>"writing-revision"===a.kind).value.revision}:{}});for(let b of f.units)for(let c of(0,d.B$)(b,a.tenderResponsePlan,b.sectionIds))e.push({code:c,entityId:b.id,reason:c});for(let b of f.units)for(let c of(0,g.dA)(b,a.evidenceText??(()=>void 0)))e.push({code:c.toUpperCase().replace(/-/gu,"_"),entityId:b.id,reason:"事实主张的来源锚点或正文实现不一致"});for(let a of h)e.push({code:a.code.toUpperCase().replace(/-/gu,"_"),entityId:a.unitId,reason:a.message});let j=(0,i.YK)({units:f.units,entityIdFor:b=>(0,i.tp)(a.authority.actorId,c.proposal.purpose,b.id,b.sectionIds?.[0]),currentEntityVersion:a=>b.entity(a)?.version,certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)});for(let a of j)for(let b of a.states)"current"!==b.state&&e.push({code:`REFERENCE_${b.state.toUpperCase()}`,entityId:a.entityId,reason:b.reason});let k=c.proposal.reads.entities.filter(a=>null!==a.version&&b.entity(a.id)?.version!==a.version);return{dataValidity:e.length?"invalid":"valid",relatedConstraints:k.length||j.some(a=>a.needsRecheck)?"invalid":"valid",schedule:{scope:"local",state:"not-evaluated"},issues:[...e,...k.map(a=>({code:"READ_SUPERSEDED",entityId:a.id,reason:`读集里的 v${a.version} 已被新版本替代`}))],result:{writingUnits:c.proposal.changes.map(a=>a.id),referencesChecked:j.length}}}),commit(e,f){let h=b.proposal(e);if(!h||h.actorId!==a.authority.actorId)throw Error("WRITING_PROPOSAL_SCOPE_DENIED");return b.commit(e,f,e=>{let f=e.changes.filter(a=>"writing-unit"===a.kind&&a.value).map(a=>a.value),h=(0,i.Dp)({responsibilityId:a.authority.actorId,purpose:e.purpose,units:f,...e.changes.some(a=>"writing-revision"===a.kind)?{revision:e.changes.find(a=>"writing-revision"===a.kind).value.revision}:{}});if(f.some(b=>(0,g.dA)(b,a.evidenceText??(()=>void 0)).length))throw Error("WRITING_CLAIM_INVALID");if(f.some(b=>(0,d.B$)(b,a.tenderResponsePlan,b.sectionIds).length))throw Error("WRITING_DELIVERY_BINDING_INVALID");if(h.issues.length)throw Error("WRITING_SUBMISSION_INVALID:"+h.issues.map(a=>`${a.unitId}:${a.code}:${a.message}`).join(";"));let j=c(f);if(j.entities.some(a=>!e.reads.entities.some(b=>b.id===a.id&&b.version===a.version))||j.groups.some(a=>!e.reads.groups.some(b=>b.key===a.key&&b.version===a.version)))throw Error("WRITING_REFERENCE_READ_SET_INVALID:候选未保存实际引用读集,须以原引用重新提出候选");let k=(0,i.YK)({units:f,entityIdFor:b=>(0,i.tp)(a.authority.actorId,e.purpose,b.id,b.sectionIds?.[0]),currentEntityVersion:a=>{let c=b.entity(a);return c&&!c.deleted?c.version:void 0},certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)}).flatMap(a=>a.states.filter(a=>"current"!==a.state).map(b=>`${a.unitId}: ${b.reason}`));if(k.length)throw Error("WRITING_REFERENCE_INVALID:"+k.join(";"))})},pendingRecheck(){let c,d=[];for(;;){let e=b.entityPage({groupKey:`writing:${a.authority.actorId}`,...c?{afterId:c}:{},limit:200});for(let a of e.entities){let b=(0,i.iC)(a);b&&d.push({entityId:a.id,unit:b})}if(!e.nextAfterId)break;c=e.nextAfterId}return(0,i.YK)({units:d.map(a=>a.unit),entityIdFor:(a,b)=>d[b].entityId,currentEntityVersion:a=>b.entity(a)?.version,certificateValid:a=>b.certificate(a)?.valid,evidenceExists:a.evidenceExists??(()=>!1)}).filter(a=>a.needsRecheck)},unitsReferencing:(a,b,c,d)=>b.filter(b=>[...b.references,...b.assertions.map(a=>a.reference)].some(b=>b.kind===a.kind&&("decision"===b.kind?b.entityId:b.certificateId)===a.id)).map(a=>(0,i.tp)(c,d,a.id,a.sectionIds?.[0])),submissionFingerprint:a=>(0,h.Fu)([a.responsibilityId,a.purpose,a.sectionIds,a.units.map(a=>a.id)])}}}};