@customize-agent/server 4.61.2 → 4.61.3
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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +1 -1
- package/.next/server/chunks/5037.js +1 -1
- package/.next/server/chunks/5763.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/generation/[id].html +1 -1
- package/.next/server/pages/generation.html +1 -1
- package/.next/server/pages/jobs.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/source-preview.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/skills/[id]/edit.html +1 -1
- package/.next/server/pages/skills/[id].html +1 -1
- package/.next/server/pages/skills/new.html +1 -1
- package/.next/server/pages/skills.html +1 -1
- package/.next/server/pages-manifest.json +30 -30
- package/package.json +1 -1
- /package/.next/static/{8ade507e5ee9f8f655bf6314ea2c6e477cfc88dc43bfbd49919dbcbc00ed3909 → 48b428e5fdde11a1e14ab78da7ce1f9e5c0063b8be53347cafe6a18432240a68}/_buildManifest.js +0 -0
- /package/.next/static/{8ade507e5ee9f8f655bf6314ea2c6e477cfc88dc43bfbd49919dbcbc00ed3909 → 48b428e5fdde11a1e14ab78da7ce1f9e5c0063b8be53347cafe6a18432240a68}/_ssgManifest.js +0 -0
|
@@ -39,7 +39,7 @@ writingOutline 是小节写作大纲:逐块核单元是否按块主题/载体
|
|
|
39
39
|
])${b}[。;;!?!?
|
|
40
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:!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}
|
|
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:()=>ak});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"]}};function ae(a){let b=[];if(!Array.isArray(a.units))return{payload:a,paths:b};let c=a.units.map((a,c)=>{let d={...a??{}};for(let a of["requiredOutputId","outputID","output_id"])void 0!==d[a]&&((void 0===d.outputId||""===String(d.outputId).trim())&&String(d[a]??"").trim()&&(d.outputId=d[a]),delete d[a],b.push(`$.units[${c}].${a}`));return Array.isArray(d.claims)&&(d.claims=d.claims.map((a,d)=>{let e={...a??{}};if("string"!=typeof e.unit||e.unit.trim()||(delete e.unit,b.push(`$.units[${c}].claims[${d}].unit`)),e.source&&"object"==typeof e.source&&!Array.isArray(e.source)){let a={...e.source},f=new Set(["evidenceId","entityId","entityVersion","certificateId","sourceHash","quote"]);for(let e of Object.keys(a))f.has(e)||(delete a[e],b.push(`$.units[${c}].claims[${d}].source.${e}`));e.source=a}return e})),d});return{payload:{...a,units:c},paths:b}}let af=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:{},ag={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"},ah={paragraph:"paragraph",text:"paragraph",prose:"paragraph",table:"table",grid:"table",figure:"figure",diagram:"figure",chart:"figure",image:"figure"},ai=(a,b)=>{let c={...af(a)};void 0===c.kind&&"string"==typeof c.type&&(c.kind=c.type);let d=String(c.kind??"").trim().toLowerCase().replace(/[\s_]+/gu,"-"),e=ag[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(af(a)).join("、")||"空"})。`);return void 0!==c.entityVersion&&"string"==typeof c.entityVersion&&/^\d+$/u.test(c.entityVersion)&&(c.entityVersion=Number(c.entityVersion)),c},aj=(a,b,c,d)=>{if("writing-unit"!==a){let c={...b},e=af(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=af(c.draft),b=af(a.production),d=af(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={...af(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=ah[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=>ai(a,c)),b.assertions=b.assertions.map(a=>{let b={...af(a)};return void 0!==b.reference&&(b.reference=ai(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={...af(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={...af(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 ak(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=af(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},normalizeArgs:a=>{if("writing-unit"!==a.action||!a.payload||"object"!=typeof a.payload||Array.isArray(a.payload))return{args:a,paths:[]};let b=ae(a.payload);return{args:{...a,payload:b.payload},paths:b.paths.map(a=>`$.payload.${a.slice(2)}`)}},invoke:async(b,c)=>{let d,f,k,l,o,q=p(b.action),r=String(b.reason??"").trim();if(!r)throw Error("CONSTRUCTION_SUBMIT_REASON_REQUIRED:每次提交必须写明业务理由");if("string"==typeof b.previewId&&b.previewId.trim()){let d=a.store.proposal(b.previewId.trim());if(!d||d.actorId!==n)throw Error("CONSTRUCTION_PREVIEW_SCOPE_DENIED");if(d.changes.some(a=>!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=aj(q,af(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(af(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 af(d.revision).reason){let a=String(af(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=aj(e,af(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"]})}},normalizeArgs:a=>{let b=ae(a);return{args:b.payload,paths:b.paths}},invoke:async(b,c)=>{let d=String(b.sectionId),e=String(b.subsectionId);if(!a.authority.sectionIds.includes(d))throw Error("WRITING_SECTION_SCOPE_DENIED");let f=a.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}
|