spec-absorption · git:20260912.8688be4 · 2026-09-12 · sha256 4e60c78e7bfd1699

spec-absorption git:20260912.8688be4A

Immutable. This exact content is served forever at /api/v1/blob/4e60c78e7bfd1699.

---
name: spec-absorption
description: 规范吸纳执行 Skill — 用于检查 data 最新可吸纳项、证明通用规范价值、剔除项目独有规则、输出吸纳清单、分层决策、同步消费者和验证探针;当用户说“吸纳规范 / 最新可吸纳 / 仍需吸纳 / 检查 data 是否有规范 / 开始吸纳”时使用。
---
# Spec Absorption Skill

## 定位

本 Skill 承接“规范吸纳”的执行面。`spec-governance` 负责 RecordRouter、台账分流、`GovernanceGateRegistry` 和 SCV;本 Skill 负责把 PI / PF / GAP / ISSUE / 用户确认项变成可审查、可验证、可同步的吸纳方案。

执行原则:

- **吸纳 ≠ 写进 Skill/台账关闭**。若吸纳后仍可「只写正文、不挂消费者、不按流程执行」,该吸纳 **无效**,不得标 absorbed/closed。
- **先 source-root 存在性验证,再谈可吸纳**;禁止把台账 `open / pending absorption / active` 字面状态直接写成「可吸纳清单」。
- **每条 absorb 必须绑定执行面**:Owner Skill/prompt/runtime + 验证路线;并完成 `ProbeNecessityDecision`(必须探针 / 结构门禁 / 清单即可 / 禁止探针)。
- 先证明是通用规范价值,再决定是否吸纳;不得把业务项目独有规则包装成 DevCodex 通用规范。
- 先证明 DevCodex 当前消费者存在,再进入规范源修改;不得只因为某个项目出现过一次就改通用规范。
- 先分层归属,再写实现;不得把成组能力默认追加到通用 instructions、`CrossProjectLearnedGuards` 或 prompts 长清单。
- 先输出最终待确认清单(含探针决策与执行影响);用户确认后再实施、验证、回写台账和同步部署副本。

## 触发语义

| 用户语义 | 必做 |
|----------|------|
| “检查 data 是否有可以吸纳的” | 扫描 `.devcodex/*/data/` 全命名空间,**对每条候选先跑 `SourceExistenceVerificationGate`**,再输出候选、通用性判断、跳过理由与可关账项 |
| “列出仍需吸纳清单” | 执行遗漏过滤,排除已吸纳、已关闭、**source 已覆盖(ledger-stale)**、重复和项目独有项,只列最终仍需吸纳 |
| “开始吸纳 / 确认执行” | 执行分层决策、消费者同步、验证探针、台账回写、报告和记忆 |
| “这个也要记录 / 以后要这样” | 先交给 `spec-governance` 做 RecordRouter,再由本 Skill 判断是否进入吸纳 |
| “之前都吸纳到通用规范了,重新分层” | 叠加 `HistoricalCommonNormLayeringGate`,先建逐文件矩阵 |

## 执行流程

1. **输入归集**:读取用户消息、相关报告、运行态台账、最新记忆和源码现状。
2. **规模路由与全命名空间扫描**:先调用 `skill-gap-analysis` 的 `ProjectArtifactScaleRoutingGate` 形成 `ScaleDecisionRecord`,再执行 `WorkspaceDataAbsorptionScopeGate` 覆盖 `.devcodex/*/data/`;大语料必须分批/checkpoint,错误 glob、超时和派生产物污染结果标 invalid/discarded。
3. **SourceExistenceVerificationGate(硬前置)**:对每条表面 open 候选,在 **source-root**(通常 `devcodex`)检索同名 Gate / Skill / schema / 探针 / 测试入口;未完成存在性验证的候选不得进入「最终可吸纳清单」。
4. **Backlog Intake 真相复核**:结合存在性结果分类为 `pure-open / residual-tail / already-fixed / misclassified`,非 `pure-open` 不得原样进入吸纳范围;`already-fixed` / 等价覆盖写入 **可关账清单**。
5. **通用性证明**:对通过存在性验证且仍为缺口的项执行 `CommonNormGeneralizationGate`。
6. **消费者证明**:对通过通用性证明的项执行 `AbsorptionCandidateConsumerProofGate`。
7. **返工价值复核**:候选声称降低返工、补复审遗漏或提升首次通过率时,执行 `ReworkReductionValueGate`;文本出现次数不能替代可执行 owner 和效果证据。
8. **可执行吸纳与探针必要性**:对拟 absorb 项执行 `ExecutableAbsorptionEffectivenessGate` + `ProbeNecessityDecisionGate`;缺执行面或「该探针却无探针计划」→ 不得进入最终 absorb 清单。
9. **分层归属**:形成 `LayeredAbsorptionDecision`,判定 `global-invariant / existing-skill-subgate / new-skill-required / docs-only / case-evidence-only / project-local / already-covered`。
10. **阶段清单**:仅输出仍需吸纳项(含探针档位与影响)+ 并列 **可关账/已覆盖** 清单;confirm 等待用户,Auto 持久化当前决定后继续。
11. **实施同步**:确认后同步 commonInstruction、Skill、promptTemplate、executionConsumer、**validationProbe(按探针决策)**、publicDocs、deployCopy;禁止只改 Markdown 正文。
12. **验证回写**:执行 targeted test、`node scripts/validate.js`、必要的 `npm test` / website / release 验证;回写 PI / PF / GAP / VL / ISSUE 状态;**无探针/无消费者的不得写 absorbed**。
13. **报告记忆**:报告必须引用候选矩阵、SourceExistence、ProbeNecessity、LayeredAbsorptionDecision、验证证据、台账状态和部署副本同步。

## SourceExistenceVerificationGate

> 🔴 **防复发(2026-07-26)**:仅扫台账状态输出「可吸纳」属于控制失效。最终确认清单中每条 `commonDecision=absorb` 必须有本门禁证据;`existenceStatus=present|equivalent-covered` 时只能 `already-covered` / `already-fixed` 并进可关账清单,**禁止**再标 absorb。

每个候选在进入通用性证明 / 最终确认清单前必须填写:

| 字段 | 说明 |
|------|------|
| `candidateId` | PI / PF / GAP / ISSUE 编号 |
| `claimedCapability` | 候选声称要新增的能力名(Gate / Skill / 矩阵 / 探针) |
| `searchAnchors` | 在 source-root 检索的关键词/路径(≥1;含同名与已知近邻等价名) |
| `sourceRoot` | 规范源码根,例如 `E:/Worker/devcodex` 或仓库相对路径 |
| `existenceStatus` | `absent` / `partial` / `present` / `equivalent-covered` / `unverified` |
| `hitEvidence` | 命中文件路径与符号(可空数组,但 `present/partial/equivalent-covered` 时至少 1 条) |
| `nearNeighborCoverage` | 近邻已有能力说明;无则 `none` |
| `ledgerDisposition` | `absorb-candidate` / `residual-candidate` / `close-ledger` / `defer` |
| `verifiedBy` | 检索方式 + 可选生产入口测试命令与 exitCode |

判定规则:

- `existenceStatus=unverified` 或缺少 `searchAnchors` / `sourceRoot` → **阻断**,不得输出为可吸纳。
- `present` 或 `equivalent-covered` → `backlogClass=already-fixed`(或 `commonDecision=already-covered`),进入 **可关账清单**,禁止 absorb。
- `partial` → 最多 `residual-tail`;最终 absorb 只能是「补洞切片」,必须写清已有近邻与仍缺字段。
- `absent` 且检索覆盖 claimedCapability 与主要近邻名 → 才可继续 `CommonNormGeneralizationGate` 并竞逐 `pure-open`。
- 台账写 `pending absorption` 但 source 已实现 → 记 **ledger-stale**,归可关账,不得重复实施。

### 负向样例

| 负向样例 | 处理 |
|----------|------|
| 只根据 `状态:open` / `pending absorption` 列入可吸纳 | invalid:`ledger-status-only` |
| 未在 source-root 检索同名 Gate 即标 pure-open absorb | invalid:`existence-unverified` |
| source 已有 `EvidenceFreshnessReceiptV1` + 测试绿,台账仍 residual open 又整包吸纳 | invalid:应 `close-ledger` |
| 有近邻 TTFV 却把 ProgressReportFastPath 写成「已存在」而不写 partial/absent | invalid:须区分父门禁与特化缺口 |

## CommonNormGeneralizationGate

每个候选吸纳前必须先填写:

| 字段 | 说明 |
|------|------|
| `candidateId` | PI / PF / GAP / ISSUE / 用户确认项编号或消息锚点 |
| `sourceNamespace` | 来源命名空间,例如 `.devcodex/<project>/data` |
| `candidateScope` | 原始问题影响范围:单项目 / 多项目 / DevCodex 控制面 / 宿主通用 |
| `generalizationEvidence` | 可泛化证据:至少包含跨工作流复用、宿主无关性、DevCodex 当前消费者或同类问题重复证据之一 |
| `projectSpecificResidue` | 项目私有路径、服务名、业务名词、数据库/接口/路由局部前提、私有组织流程 |
| `negativeExamples` | 明确不吸纳的反例,防止下次误收 |
| `commonTrigger` | 抽象后的通用触发语义 |
| `targetConsumer` | DevCodex 中真实会执行该规范的 Skill / prompt / validate / report / docs |
| `decision` | `absorb / case-evidence-only / project-local / docs-only / already-covered / reject` |

判定规则:

- 只有 `generalizationEvidence` 成立且 `targetConsumer` 存在,才可进入 `absorb`。
- 存在项目私有残留时,必须先抽象成宿主/流程/消费者无关表达;抽象失败则判 `project-local`。
- 只是某个项目的目录、服务、接口、业务角色或部署习惯,不得吸纳为 DevCodex 通用规范。
- 已有同等或更强规范、Skill、prompt 和探针覆盖时,判 `already-covered`,只回写台账,不重复新增。

### 负向样例

| 负向样例 | 处理 |
|----------|------|
| `ServiceSpecRead`、`docs/services/<name>/` 服务开发读取链 | 项目或框架私有,不吸纳为 DevCodex 通用规范;可作为“先证明通用价值”的反例 |
| 单个业务项目的 service / route / model / schema 命名 | `project-local`,除非证明 DevCodex 多项目 Profile/服务规范消费者需要 |
| 单个库的 `cacheControl`、adapter 配置或返回值习惯 | `case-evidence-only` 或并入对应库本地规范 |
| 某个项目私有数据目录、导航层级、脚本名 | 不直接进入通用层;只能抽象为“消费者同步 / 产物边界 / 验证链”类规则 |

## AbsorptionCandidateConsumerProofGate

通过通用性证明后,还必须证明 DevCodex 当前消费面:

| 字段 | 说明 |
|------|------|
| `devcodexConsumerEvidence` | 当前仓库中会读取或执行该规则的文件和段落 |
| `targetOwner` | 目标 owner:existing Skill、new Skill、instruction、prompt、script、README、website、Profile、部署副本 |
| `layerChecks` | `commonInstruction / skill / promptTemplate / executionConsumer / validationProbe / publicDocs / deployCopy` |
| `validationRoute` | targeted test、validate 编号、SCV、npm test、website build、manual evidence |
| `skipReason` | 任一层 N/A 的理由 |

消费者证明失败时,不得实施为 active 规范;最多进入 PF / ISSUE,或作为 case evidence 保留。

## ExecutableAbsorptionEffectivenessGate

> 🔴 **核心不变量**:规范写进 Skill 但流程上仍可不执行 = **假吸纳**。用户确认 absorb 前,每条候选必须证明「不按流程执行时会被发现或阻断」,而不是只证明「文档里有这句话」。

### 什么叫「有效吸纳」

| 条件 | 必须满足 |
|------|----------|
| 触发面 | 有明确触发语义(意图/阶段/产物类型),命中时必须加载 Owner |
| 执行面 | 有 Skill 子门禁 / Hook / CLI / planner 之一真正执行检查 |
| 验证面 | 有 `validationRoute` 生产入口;按 `ProbeNecessityDecision` 挂探针或结构门禁 |
| 失败语义 | 违反时有 fail / block / WARN 降级之一,不能静默忽略 |
| 关闭语义 | 只有执行面+验证面绿才允许台账 `absorbed/closed` |

### 什么叫「无效吸纳」(禁止标 absorbed)

| 反模式 | 说明 |
|--------|------|
| text-only | 只改 SKILL.md / instructions 段落,无消费者路径 |
| checklist-only-as-absorb | 仅靠人工自觉勾选,无结构字段、无样例探针、无 fail 路径 |
| absorb-without-process | 宣称已吸纳,但同类任务仍可不跑门禁完成 |
| probe-theater | 有测试文件但不断言本规则的负向逃逸 |
| ledger-close-without-enforcement | 台账关了,runtime/Skill 仍不执行 |

判定:`enforcementLevel` 必须为下列之一,且与探针决策一致:

| enforcementLevel | 含义 | 可否 absorb 为 active |
|------------------|------|------------------------|
| `hard-probe` | 机器探针/schema 负向可阻断或测试红 | 是 |
| `structural-gate` | 缺字段/矩阵 blocked(planner/candidate-review/CP) | 是 |
| `conditional-probe` | 仅命中场景挂探针;未命中 N/A+skipReason | 是(须写触发条件) |
| `checklist-only` | 仅清单提醒 | **否**(active);最多 docs-only / gray + 明示无效于防复发 |
| `none` | 无执行 | **否** |

## ProbeNecessityDecisionGate

每条 `commonDecision=absorb` 必须填写 **ProbeNecessityDecision**(可嵌入矩阵 `probeNecessity` 字段):

| 字段 | 说明 |
|------|------|
| `candidateId` | 编号 |
| `probeClass` | `machine-sample` / `structural-schema` / `fixture-replay` / `extend-existing` / `checklist-only` / `probe-forbidden` |
| `necessity` | `required` / `conditional` / `not-required` / `forbidden` |
| `rationale` | 为何必须/不必/禁止探针(假绿成本、可机检性、频率) |
| `probePlan` | 新建 classifier / 扩展现有探针 / 结构 required 字段 / N/A |
| `existingProbeReuse` | 可复用的探针名;无则 `none` |
| `alwaysOnImpact` | `none` / `test-only` / `conditional-path` / `always-on-path` |
| `complexityDelta` | 维护成本:低/中/高 + 一句话 |
| `falsePositiveRisk` | 误报风险与缓解 |
| `skipProbeReason` | `necessity=not-required|forbidden` 时必填 |

### 哪些 **必须** 有探针(necessity=required 或 conditional)

同时满足越多,越应 `required`:

1. **假绿代价高**:会误导完成态、发布、关账、用户可见进度/阶段  
2. **可机检**:可用样例文本、JSON 字段、路径、exitCode 判定,不靠「是否好懂」主观分  
3. **重复发生或跨任务**:≥2 次独立上下文或明确跨项目  
4. **违反后应失败**:应用 fail/block,而不是仅建议  

| 典型必须 | 探针形态 |
|----------|----------|
| 进度/TTFV 类执行逃逸 | 扩展 `classifyTtfv*` 或专用 progress 样例 |
| 多任务阶段/sourceDelivery 误投影 | 最终回复/进度卡 sample classifier |
| closed 产物复活 | fixture 头状态 + 拟写路径 |
| 强主张/完成态假绿 | 既有 MeasuredVerification / FinalValidation 类 |
| 分类/分层字段缺失导致假完成 | structural schema required |

`conditional`:仅特定工作流命中(如 consumer-validation formal、GlobalHost CP2)时强制;其它任务 `N/A + skipReason`。

### 哪些 **没必要** 机器探针(necessity=not-required)

| 类型 | 处理 | 仍须有的执行面 |
|------|------|----------------|
| 纯文档口吻/IA 文案 | docs-only 或 checklist | document-sync / 受众检查即可 |
| 高度主观质量(「是否足够低心智」全文) | 结构矩阵字段 required,**禁止** LLM-as-judge 硬探针 | CP1 缺 `FirstSuccessfulRequest` 等字段 blocked |
| 极低频且人工确认更安全 | checklist + 用户确认 | 报告写 skipProbeReason |
| 已有更强探针完全覆盖 | already-covered / extend-existing | 复用,不新建 |

### 哪些 **禁止** 乱加探针(necessity=forbidden)

| 禁止 | 原因 |
|------|------|
| always-on 全任务扫全库 | 抬高 token/墙钟,违反 TTFV / 基座中性 |
| 无负向样例的「探针」 | probe-theater,制造假安全感 |
| 把项目私有路径写进通用探针 | 泄漏 project-local |
| 与现有 classifier 重复且更弱 | 规范税 + 漂移 |

### 添加探针的影响(实施前必须写清)

| alwaysOnImpact | 影响 | 默认允许 |
|----------------|------|----------|
| `none` | 仅文档 | 不单独作为 absorb 关闭证据 |
| `test-only` | 只进 `npm test` / targeted,不改默认对话路径 | **推荐** |
| `conditional-path` | 仅命中意图/Skill 时加载 | **推荐** |
| `always-on-path` | 每轮或每宿主默认执行 | 须 `base-changing` 或明确 base-compatible + UnaffectedIntentRegression;**单独确认** |

复杂度默认约束:

- 新建 Gate 家族 > 扩展现有 classifier > 结构字段 required(优先后者)  
- `complexityDelta=高` 且无 `replacementOrRetirementCredit` → 不得 ready  
- 探针必须至少 1 正 + 1 负样例;disabled/misconfigured 在 base-compatible 及以上必填  

### 负向样例

| 负向 | 处理 |
|------|------|
| 清单写 absorb,probeNecessity 缺失 | blocked |
| necessity=required 但 probePlan=「以后再说」 | blocked |
| checklist-only 标 active absorbed | invalid 假吸纳 |
| always-on 新探针无 UnaffectedIntentRegression | blocked |
| 只同步 Skill 正文,validationProbe 层 N/A 且无 skipReason | layer blocked |

## BaseImpactAssessmentV1 / ComplexityDeltaBudgetV1

新增或晋级规范、Skill、Prompt、流程、验证器或部署消费者时,必须把基座影响作为吸纳决策的子记录,而不是另建平行“基座治理”入口。最小字段:

`changeId / servedIntent / currentGap / absorptionDecision / baseClass(base-neutral|base-compatible|base-changing) / affectedContracts / unaffectedIntents / consumers / fanout / defaultPathDelta / fallbackBehavior / migration / rollback / positiveProbe / negativeProbe / disabledOrMisconfiguredProbe / complexityDelta / replacementOrRetirementCredit / owner / reviewAt / deprecationAndDeletionCondition`。

判定规则:

- `base-neutral`:不改变常驻路径、默认 Context、强制阶段、用户确认数、公共契约或未命中任务;仍需至少一个真实消费者和 `UnaffectedIntentRegression`。
- `base-compatible`:改变局部消费者或验证路线,但默认行为、fallback 与未受影响意图保持兼容;必须有正向、负向和 disabled/misconfigured 探针。
- `base-changing`:改变事实基座、always-on 路径、公共契约或默认强制行为;必须单独确认、写迁移/回滚和全面复审,不能由普通 auto 授权夹带通过。
- 缺真实消费者、缺回滚、缺退役/删除条件、缺 `ComplexityDeltaBudgetV1` 或没有 `replacementOrRetirementCredit` 抵消维护成本时,不得进入 active。

`UnaffectedIntentRegression` 至少覆盖一个普通 chat / 普通 dev / 低风险 fix 或其他未命中意图样本,证明新增能力不会让无关任务增加默认读取、默认确认、默认产物或默认验证成本。

## ReworkReductionValueGate

涉及“减少返工、避免复审再发现、提升一次通过率”的吸纳候选必须填写:

| 字段 | 说明 |
|------|------|
| `reworkCluster` | 可重复问题簇及 WorkUnit 边界,不得只写单个案例 |
| `currentDetectionPhase` / `targetDetectionPhase` | 当前发现阶段与希望前移到的阶段 |
| `frequencySeverityLateCost` | 频率、严重度、晚发现成本和可预防性证据 |
| `executableOwnerLayer` | 能真正执行该预防动作的 Skill / prompt / runtime / probe / checklist owner |
| `successMetric` | FirstPassYield、WorkUnitReworkRate、RepeatEscapeRate、PreventionHitRate 或等价指标 |
| `trialWindow` | 前瞻验证的可比 WorkUnit / 独立上下文、观察周期和退出条件 |
| `overheadAndFalsePositiveCost` | 新规则的执行成本、误报、重复检查和认知负担 |
| `rollbackOrSunset` | 无效、有害、长期未命中或被更强 owner 替代时的处置 |

判定规则:已有规则反复出现但只有文档表述、没有执行消费者、负向探针或前瞻验证,属于 `text-only recurrence`,不得判定已吸纳有效。候选可以先进入 gray,但 ordinary active / 宣告 closed 前必须由 `ReworkEffectivenessLoop` 给出前瞻证据;不足时保持 `insufficient-evidence`。

## 分层决策

`LayeredAbsorptionDecision` 必须包含 `candidateId / classification / targetSkill / triggerTerms / ownedArtifacts / layerChecks / validationRoute / consumerSync`。本 Skill 在 Skill 层还要写 `SkillAbsorptionDecision` 兼容字段。

当候选会新增或改变 Rule/Skill、Prompt、MCP Resource/Resource Template/Tool、Task 增强 Tool、CLI 或 Hook 能力面时,`LayeredAbsorptionDecision` 只负责判定吸纳层级,不得顺带决定能力面。实施前必须消费由 `spec-governance` 的 `CapabilitySurfaceDecisionGate` 生成且通过新鲜度校验的 `decisionRef`;只有 `spec-governance` 可写 canonical decision,目标 Skill 仅保存本域触发、Owner、消费者和 `decisionRef` 等本地元数据。缺少 decision、identity 失效或状态为 `stale/blocked` 时停止能力资产创建并回到中央判定。

| classification | 使用条件 | 处理 |
|----------------|----------|------|
| `global-invariant` | 安全底线、入口加载、全模式硬约束、优先级 | 通用 instructions 保留正文,目标 Skill 引用 |
| `existing-skill-subgate` | 有明确既有 Skill owner | 并入 Skill 子门禁,同步消费者和探针 |
| `new-skill-required` | 具备独立触发、产物、状态、模板或 3 条以上子规则 | 同批创建 Skill 或写 PF / ISSUE |
| `docs-only` | 只影响说明、历史镜像或用户文档 | 同步公开文档,不做执行门禁 |
| `case-evidence-only` | 只能作为案例证据支持已有 Gate | 写报告/台账,不进入规范正文 |
| `project-local` | 只适合来源项目 | 回写来源项目台账或 Profile,不吸纳到 DevCodex 通用 |
| `already-covered` | 现有规范同等或更强覆盖 | 回写状态和证据,不重复实现 |

## 条件通用规范的 registry 消费

候选通过 `CommonNormGeneralizationGate` 与 `AbsorptionCandidateConsumerProofGate` 后,不在本 Skill 维护版本批次或 Gate 总表。执行方必须读取 `../spec-governance/gate-registry.json`,按候选所属 `gateGroup` 获取触发条件、Owner Skill、证据要求、消费者与兼容锚点;来源仍含项目私有残留时先抽象再实施。

| 候选域 | registry 分组 | 主要承接面 |
|--------|---------------|------------|
| 配置、Profile、宿主与路由 | `profile-service`、`absorption-layering` | Profile/runtime 真相、部署副本与分层决策 |
| 行为语义、文档与示例 | `docs-semantics-examples`、`docs-audience-render` | Owner Skill、用户文档消费者与真实性探针 |
| 派生消费者、失败隔离与副通道 | `derived-consumer-runtime`、`frontend-runtime` | 运行时隔离、故障注入与 TestRoute |
| 功能清单、批次证据与返工闭环 | `feature-inventory-batch-evidence`、`rework-governance` | EvidenceLedger、进度卡与有效性验证 |

历史 A1~A10 名称只作为 registry 的 `legacyAnchors` 兼容检索入口,不再复制执行正文。新增或调整 Gate 必须先更新结构化 registry 与目标 Owner,再同步 Prompt、执行消费者、验证探针、公开文档和部署副本;若任一层不适用,记录 `skipReason`。

## 输出产物

### AbsorptionCandidateMatrixV1

当扫描结果准备进入确认清单或实施批次时,必须先形成 `AbsorptionCandidateMatrixV1`,字段以 `absorption-candidate-matrix.v1.schema.json` 为准。矩阵至少包含:

| 字段 | 说明 |
|------|------|
| `candidateId` | PI / PF / GAP / ISSUE / 用户确认项编号 |
| `sourceNamespace` | 来源 active-root 或 workspace data namespace |
| `backlogClass` | `pure-open / residual-tail / already-fixed / misclassified` |
| `commonDecision` | `absorb / case-evidence-only / project-local / docs-only / already-covered / reject / defer` |
| `sourceExistence` | `SourceExistenceVerificationGate` 记录;`commonDecision=absorb` 时必填且不得为 `present/equivalent-covered/unverified` |
| `probeNecessity` | `ProbeNecessityDecisionGate` 记录;`commonDecision=absorb` 时必填 |
| `enforcementLevel` | `hard-probe` / `structural-gate` / `conditional-probe` / `checklist-only` / `none`;absorb 不得为后两者 |
| `targetOwner` | 真实执行 owner,吸纳项缺失 owner 时阻断 |
| `layerChecks` | `commonInstruction / skill / promptTemplate / executionConsumer / validationProbe / publicDocs / deployCopy` |
| `validationRoute` | 生产验证入口,不得只写“人工复审” |
| `prevention` | 涉及防复发时记录根因、控制失效、负向样本与 rollback/sunset |

维护者可用只读 planner 生成分层计划:

```bash
node scripts/plan-absorption-candidates.js --input <matrix.json>
node scripts/plan-absorption-candidates.js --self-test
```

该 planner 只读取输入并向 stdout 输出 `AbsorptionCandidatePlanV1`;禁止写台账、修改 data、自动关闭 PI/PF 或隐式更新规范源。缺 `targetOwner`、非 `pure-open` 却试图吸纳、任一必需 layer blocked 或矩阵 schema 无效时,计划必须停在 blocked/invalid。

### LayeredAbsorptionDecisionV1

每个进入实施的候选必须产出 `LayeredAbsorptionDecisionV1`,字段以 `layered-absorption-decision.v1.schema.json` 为准。该决策用于把自由文本 finding 固定到目标层级和消费者,而不是用报告段落替代执行证据。

| status | 进入条件 | 后续 |
|--------|----------|------|
| `ready` | `backlogClass=pure-open|residual-tail`、`commonDecision=absorb`、存在性合格、**probeNecessity 齐全且 enforcementLevel 非 checklist-only/none**、owner/layer/test/docs/deploy 证据齐全 | 进入实施 |
| `blocked` | owner 缺失、layer blocked、验证路线缺失、存在性不合格、**缺探针决策/执行面无效**、或 schema 无效 | 修正矩阵或回 CP |
| `skipped` | `project-local / already-covered / docs-only / case-evidence-only / reject / defer` | 回写 skipReason,不改通用规范 |

防复发闭环只允许声明当前关闭证据;长期有效性必须进入 `repair-prevention-assessment` 的 prospective plan。禁止把本轮 planner self-test 通过写成长期 prevention 已有效。

### 候选矩阵

```markdown
| candidateId | sourceNamespace | rawSummary | backlogClass | commonDecision | targetOwner | layerChecks | validationRoute | skipReason |
|-------------|-----------------|------------|---------------|----------------|-------------|-------------|-----------------|------------|
```

### 最终确认清单

只列同时满足:`commonDecision=absorb`、SourceExistence 合格、**ExecutableAbsorption + ProbeNecessity 合格**、尚未完整吸纳:

```markdown
| ID | 待吸纳规范 | existence | enforcementLevel | probeClass / necessity | alwaysOnImpact | 目标 owner | 验证路线 |
|----|------------|-----------|------------------|------------------------|----------------|------------|----------|
```

确认清单中每条必须能回答:**若不按流程执行,谁会红/阻断?** 答不出则不得列入。

### 可关账清单(并列输出)

```markdown
| ID | 台账状态 | source 证据 | disposition |
|----|----------|-------------|------------|
```

### 实施报告字段

报告至少包含:

- `WorkspaceDataAbsorptionScopeGate` 扫描范围。
- `ProjectArtifactScaleRoutingGate` 的项目/root、六项规模指标、决策、排除策略、batch/checkpoint 与 invalid-run 证据。
- **`SourceExistenceVerificationGate` 全候选结果(含可关账)**。
- `Backlog Intake` 分类与范围缩减。
- `CommonNormGeneralizationGate` 与 `AbsorptionCandidateConsumerProofGate` 证据。
- `LayeredAbsorptionDecision` 与 `SkillAbsorptionDecision`。
- `ReworkReductionValueGate` 的问题簇、阶段前移、owner、成功指标、试运行、成本和 rollback/sunset;未触发写 `N/A + skipReason`。
- `ConceptSyncMap` 或同步消费者清单。
- targeted test / `node scripts/validate.js` / `npm test` 结果。
- 台账状态回写与 active-root 归属。

## 验证路线

规范吸纳实施完成后至少执行(**MeasuredVerificationStandard**:宣称通过须记录生产入口命令与 exitCode;隔离 harness 不得冒充 V# 成败):

1. `node scripts/test-spec-governance.js`
2. `node scripts/validate.js` 或 `npm run test:core`(含 V84 `ExpertOutputQualityGate` / expert-output-quality 同步时)
3. 高风险控制面或 Skill/部署副本变化时执行项目 `npm test`
4. 若改 README / website / changelog / Profile,执行引用扫描和 V19 资产计数校验
5. 若改用户级全局部署副本,执行 `devcodex global-adapters apply`(源码)或 `npm install -g .` / pack+tarball / `npm update -g`(按安装来源);workspace 运行态才用 bare `devcodex update`。然后再次运行 validate
6. 命中示例/文档/fixture 专家质量时叠加 `expert-output-quality` Owner 与 gate-registry `expert-output-quality`

验证失败时先修复,再更新复审清单状态;不得只在报告中写“后续处理”。