# Live Tree 一次性产物归档清扫 Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** 把三类「已完成的一次性产物」从 AI 高频读取的 live tree 归档进 `docs/_archive/`，摘掉/降级全部入站指针，使它们不再继续提供指令（INFRA-F96 已定性病类）。收益口径 = **减少 AI 误读面，不是省字节**。

**Architecture:** 三类候选 × 统一四步流水：**执行时重扫入站引用 → 改指针（删行 or 降级为含 `_archive/` 路径的溯源引用）→ `git mv` → 三闸全绿 → commit**。借力已有 `audit:plan-lifecycle` 闸的两个机制：① 归档件不算入站引用来源（`isArchivePath`），② 路径 token 含 `_archive/` 的引用 = 溯源引用、不算活指针（`isProvenanceMention`，`scripts/audit-plan-lifecycle.mjs:285`）——所以「把 live 叙述里的路径改写成归档后真实路径」同时满足闸判据 + 链接不死。

**Tech Stack:** `git mv` / `grep` / Edit 工具（逐处改指针，不盲 sed）/ `pnpm run audit:plan-lifecycle` + `pnpm run audit:stale-anchors` + `pnpm lint-skills` 三闸。无新依赖、无运行时代码改动（仅 docs、两处 Quick Reference 指针、少量脚本/JSON 里的注释性路径改写）。

## 判据真源（owner 裁定记录 · 2026-08-12）

- **病（INFRA-F96 已定性）**：已完成的一次性产物留在 live tree 会继续提供指令。收益 = 减少 AI 误读面。**⛔ 禁止用字节数当收益指标** —— INFRA-F95 实测「清 docs/」只能省 0.4%，字节口径已被证伪（backlog [[INFRA-F95]] 是该结论唯一真源）。
- **三类候选**（下面各 task 一类；本计划列的只是 **2026-08-12 的快照**，执行时以当场重扫为准）：
  1. `docs/internal/asset-inventory.md` —— 4097 行、全仓最大 md，2026-04-24 一次性生成的资产清单快照，正文写死 `/Users/nancy/...` 本机绝对路径，无 AUTO-GENERATED 头标，坐在 AI 高频读取的 `docs/internal/`。
  2. `docs/superpowers/plans/` 与 `docs/internal/_plans/` 里已 100% 执行完的 plan/pickup。判据器械 = `pnpm run audit:plan-lifecycle`（S2 可达性 + `GRACE_DAYS = 1`；MANAGED_DIRS 四目录，本轮只动其中 plans + `_plans` 两个）。
  3. `docs/internal/figma-sync-report-*.md` —— **2026-08-12 实测 10 份**（brief 曾写 8 份，快照已 drift，正好印证「执行时重扫」纪律）。**已实测定性：是活输出落点的「旧日期尾巴」，不是活文件** —— `figma-sync/sync-diff-report.mjs:311` 每次 sync 按日期**新建**文件（`figma-sync-report-${date}.md`），不重写固定文件名；`.husky/pre-commit:31-37` 的 figma-data 写入放行信号只看**当天**那份（`figma-sync-report-${TODAY}.md`）。→ 旧日期文件可归档，落点目录与生成脚本不动。
- **Out-of-scope（明确不动）**：
  - 记录型目录：`retrospection/`、`_reports/`、`_spikes/`、`handoffs/.conformance/` —— plan-lifecycle 闸**刻意**不收（判据是「发不发指令」，不是「有没有人引用」，见 `scripts/audit-plan-lifecycle.mjs:17-18` 头注释）。
  - `docs/internal/_prompts/` 与 `docs/internal/_handoffs/` —— 虽在 MANAGED_DIRS 里，但不是本轮候选类；**例外**：若三闸中 plan-lifecycle 因迭代收敛点名其中文件（本轮归档让它掉到 0 ref），按闸 FAIL 文案二选一处置（确已完成→顺带归档；在飞→补指针），这属于「闸红修复」不算范围膨胀。
  - STATUS-CHANGELOG 分片（INFRA-F95 已登记的独立小项）。
  - `docs/_archive/` 本身及其中既有内容（**不编辑归档件**）。
  - `docs/internal/` 平层其它同期一次性产物嫌疑（`api-diff.md` / `component-mapping-scan.md` / `runtime-additions.md` 等）—— 本轮不扩面，Task 6 只留一行观察给 owner。
- **今天的闸基线（2026-08-12 实跑 `pnpm run audit:plan-lifecycle`，PASS）**：

  ```
  superpowers plans    live  12 份 / 533 KB   已归档 24 份
  prompts              live   4 份 / 31 KB    已归档 2 份
  session pickups      live  10 份 / 99 KB    已归档 9 份
  handoffs             live   2 份 / 63 KB    已归档 0 份   （归档落点未建）
  入站引用     : 28/28 份有引用（其中 3 份在 1 天 grace 期内）
  ```

  注意：**28/28 全有引用 = 闸不会替本轮点名候选**。本轮做的是闸做不了的那半：对「引用只剩历史叙述」的已完成件做人工完成度判定 + 解引用 + 归档；闸负责兜底验证（归档后不许出现新孤儿）。

## Global Constraints

- **执行时重扫，不信本计划的候选清单**（entry 转述是二手源）：每个候选归档前当场跑 `grep -rn` 全仓入站引用扫描 + `pnpm run audit:plan-lifecycle`，以当场输出为准；本计划列的只是「今天的快照」。快照与当场输出冲突 → 以当场为准并在 commit message 里记一句偏差。
- **归档动作一律 `git mv`**（保历史，`git log --follow` 可查）；移动后跑 `pnpm run audit:stale-anchors` + `pnpm lint-skills` + `pnpm run audit:plan-lifecycle` **三闸全绿才 commit**（三条预期都 exit 0；plan-lifecycle 的 PASS 行 = `✓ audit:plan-lifecycle PASS：四个受管目录里每份一次性产物都有人指向。`）。pre-commit 还会条件触发更多闸，以它为最终裁判。
- **有入站指针的文件：先改指针再 mv**。两种改法逐处判断：① 指针本身已无存在价值（如 Quick Reference 指向过期快照）→ **删行**；② 指针是历史叙述/溯源（STATUS-CHANGELOG、spec、retrospection、脚本注释）→ **把路径改写成归档后真实路径**（token 含 `_archive/` 即被 `isProvenanceMention` 放行，且链接不死）。**同批要归档的文件互相之间的引用不用改**——双方都进 `_archive/` 后自动不算。
- **⛔ 绝不归档清单**（执行全程置顶）：
  - `docs/internal/_plans/next-session-pickup-2026-08-11-designing-with-tvu-method-and-public-surface.md` —— **当前 pickup**。SessionStart hook（`.claude/hooks/onboarding-checklist.sh:13`）用 `ls -t "$CLAUDE_PROJECT_DIR/docs/internal/_plans"/next-session-pickup-*.md | head -1` 取 mtime 最新一份当 L-core#3 当前 sprint 手册。
  - `docs/internal/_plans/next-session-pickup-2026-07-08-full-lifecycle-optimization.md` —— `docs/STATUS.md:131` **固定指针**逐字声明「当前活跃优化程序」= 在飞。
  - `docs/internal/_plans/README.md` —— 常青约定文件 + `tests/audit-plan-lifecycle.test.ts:420-423` 真仓库钉。
  - `docs/internal/_plans/new-session-prompt-consumer-product-verification.md` —— `tests/audit-plan-lifecycle.test.ts:227-230` 真仓库钉 fixture + `scripts/audit-plan-lifecycle.mjs:129` 头注释实证举例，归档要连改闸的测试与注释，超出本轮授权。
  - `docs/superpowers/plans/2026-08-12-onboarding-page-rewrite.md` —— 在飞（STATUS §一.0，卡 owner 视觉批准）。
  - `docs/superpowers/plans/2026-08-11-infra-f110-consumer-skill-directory-symlink.md` —— 日期在 grace 内、完成度未核，**本轮不动**（宁漏勿错，闸下轮会再看）。
  - 本计划文件自身 —— 直到 Task 6 收尾自归档。
- **提交纪律**：`git commit -F <msg文件> -- <显式路径>`（`-F` 在 `--` 之前）+ 提交后立即 `git reset -- <同一批路径>`（并行 session 共享 index，不带 pathspec 会卷进别人 staged 的文件，提交后不 reset 会留幻影 staged）。`git mv` 的 commit pathspec **必须同时列旧路径和新路径**。pre-commit 可能 >2min 后台跑，别中断；遇 `index.lock` = 并行 session 在提交，等它完成再试。commit message 正文用 `MSG=$(mktemp)` 落文件再 `-F "$MSG"`（完整可执行模式见 Task 2.6，后续 commit 全部套用）。
- **工作区有并行 session 的未提交文件**（执行日 `git status` 可能见 `playground/public/onboarding.html`、`DocsShell.vue` 等等 owner 视觉批准的改动）—— **绝不碰、绝不裹进 commit**（显式 pathspec 已防，仍要在 commit 前 `git status` 目检一遍 staged 列表）。
- **纯 docs 移动不写 changeset**。
- **禁止顺手删除任何文件**（本计划只归档不删除；删行只发生在指针文本，不发生在文件）。
- **疑不决 → 本轮跳过**：任何一份候选的完成度证据不干净（STATUS Active 区还有它的在飞声明、有未落地残留），跳过并在 Task 6 记一行，不强判。闸每轮都在跑，漏归档无代价；错归档在飞件有代价。
- grep 快查只是辅助，`audit:plan-lifecycle` 的输出才是权威判定。**注意排除本计划文件自身的命中**——它逐字列着候选名单，归档前的 grep 会命中它（Task 6 归档本计划后消失）。

---

## Task 1：起手前置 —— 基线三闸 + 本计划可达性 + 执行日重扫定案

**产出**：本轮归档定案清单（以执行日证据为准），后续 task 只执行定案清单。

- [ ] 1.1 跑三闸取基线，全绿才继续（有红先停，报 owner——基线红说明有并行改动，不是本计划的起点状态）：

  ```bash
  pnpm run audit:stale-anchors && pnpm lint-skills && pnpm run audit:plan-lifecycle
  ```

  预期：三条 exit 0；plan-lifecycle S5 段与本计划「今天的闸基线」对比，**份数不同就以当场为准**。

- [ ] 1.2 确认本计划自己有入站指针（它也是 MANAGED_DIRS 里带日期的 .md，`GRACE_DAYS = 1`，落库次日就要求可达）：

  ```bash
  grep -rn "2026-08-12-live-tree-derivative-archive" docs/STATUS.md docs/internal/backlog.md
  ```

  预期 ≥1 命中（通常 = STATUS Active 区一行）。0 命中 → 先在 STATUS §一 加一行执行指针再继续。

- [ ] 1.3 逐候选重扫入站引用（当场版引用图）：

  ```bash
  # 候选一
  grep -rn "asset-inventory" --include="*.md" docs/ AGENTS.md README.md CHANGELOG.md | grep -v "^docs/_archive"
  grep -rn "asset-inventory" scripts/ tests/ package.json .husky/ 2>/dev/null; echo "exit=$?"
  # 候选三
  ls docs/internal/figma-sync-report-*.md
  grep -rn "figma-sync-report" scripts/ figma-sync/ .husky/ package.json
  # 候选二：逐文件引用来源（用闸自己的引用计算器，输出 <file> ← [来源列表]）
  node -e "
  import('./scripts/audit-plan-lifecycle.mjs').then(m => {
    const fs = require('fs');
    const managed = [];
    for (const d of m.MANAGED_DIRS) {
      if (!fs.existsSync(d.dir)) continue;
      for (const n of fs.readdirSync(d.dir).filter(x => x.endsWith('.md'))) managed.push({dir: d.dir, name: n});
    }
    for (const [k, v] of m.computeInboundRefs(managed)) console.log(k, '←', JSON.stringify(v));
  })"
  ```

  2026-08-12 基线备查：asset-inventory 的 live 指针恰两处（`docs/PROJECT_GOAL.md:171` + `AGENTS.md:618`，**brief 只提了前者，后者是本次盘点新发现**）；scripts/tests 面 0 命中（exit=1）；sync report 10 份、消费者只有 `sync-diff-report.mjs`（写入方）与 pre-commit（只看当天）。

- [ ] 1.4 对候选二逐文件做完成度判定，产出**定案清单**（拿今天的快照表当起点，逐行核）。每份「归档」判定需同时满足：
  - `docs/STATUS.md` Active 区（§一/§二）无它的在飞声明。一次跑完全部候选的核查命令（命中 Last updated 历史叙述不算在飞，逐条人判）：

    ```bash
    for n in docs/internal/_plans/*.md docs/superpowers/plans/*.md; do
      echo "== $n"; grep -n "$(basename "$n")" docs/STATUS.md
    done
    ```

  - 当场引用来源全部属于历史叙述面（STATUS-CHANGELOG / backlog 已✅段 / spec·retrospection 举例 / 脚本注释 / 同批归档件）；
  - backlog 相应 entry 明文已 ship/已闭合（如有 entry）。
  任一不满足 → 移出定案清单，Task 6 记一行理由。

**2026-08-12 快照 · 候选二预判**（执行时逐行重核，⛔ 行绝不动）：

| `docs/internal/_plans/` | 预判 | 今天的证据 |
|---|---|---|
| `next-session-pickup-2026-06-08-infra-f41-task5-continue.md` | 归档 | 6 月旧 pickup，引用只剩 STATUS-CHANGELOG |
| `next-session-pickup-2026-08-03-doc-volume-single-source.md` | 归档 | STATUS §一.13：F95 三条待做均已闭合 |
| `next-session-pickup-2026-08-07-render-gate-field-level-excuse.md` | 归档 | F104 已于 2026-08-07 ship 并从 STATUS 删档（STATUS:110） |
| `2026-07-24-p0-systematic-gap-fixes.md` | 归档 | 引用 = STATUS-CHANGELOG + 07-27 件（同批） |
| `2026-07-27-p2-rubric-batch-retest.md` | 归档 | 引用只剩 F96 两份 spec 的历史举例 |
| `2026-07-28-INFRA-F71-gitea-self-hosted-publish-ci.md` | 归档 | F71 publish CI 已 live，v1.1.1/v1.2.0 均走它发出并核验 |
| `README.md` | ⛔ 不动 | 常青 + 测试真仓库钉 |
| `new-session-prompt-consumer-product-verification.md` | ⛔ 不动 | 测试 fixture + 闸头注释实证举例承重 |
| `next-session-pickup-2026-07-08-full-lifecycle-optimization.md` | ⛔ 不动 | STATUS:131 固定指针声明在飞 |
| `next-session-pickup-2026-08-11-designing-with-tvu-method-and-public-surface.md` | ⛔⛔ 不动 | **当前 pickup**（hook L-core#3） |

| `docs/superpowers/plans/` | 预判 | 今天的证据 |
|---|---|---|
| `2026-07-14-single-source-demos.md` | 归档 | 引用只剩 STATUS-CHANGELOG 历史叙述 |
| `2026-07-21-form-validation-engine.md` | 归档 | 同上 |
| `2026-07-22-table-data-grid-spec.md` | 归档 | backlog:384「[✅ shipped 2026-07-22] APID-01」 |
| `2026-07-23-ds-merge-two-systems.md` | 归档 | DS 合并已 ship；指针面最广（5 处，含 `.design-sync/NOTES.md`、`_prompts`、handoff），逐处降级 |
| `2026-07-29-f73-publish-and-mainline-scheduling.md` | 归档 | STATUS:110 已删其 stale 指路句；1.1.1/1.2.0 均已发 |
| `2026-07-30-sync-b-retirement-consolidate-into-sync-a.md` | 归档 | Sync B 已退役；⚠️ 有一处 JSON 引用（见 Task 4.3） |
| `2026-07-30-v1x-next-batch-ai-consumable-page-layer.md` | 归档 | STATUS:110「10 个 Task 已全部执行完」；⚠️ 一处脚本注释引用（Task 4.3） |
| `2026-08-03-f58-sot-dedup-and-inventory-gate.md` | 归档 | rule-inventory 闸已 live（backlog:308 引用是实现叙述） |
| `2026-08-03-infra-f95-doc-shape-gate.md` | 归档 | doc-shape 闸已 live（STATUS §一.13） |
| `2026-08-05-infra-f96-lifecycle-scan-face-extension.md` | 归档 | backlog:343「5 task 已全部执行完」 |
| `2026-08-11-infra-f110-consumer-skill-directory-symlink.md` | ⛔ 本轮不动 | grace 内、完成度未核 |
| `2026-08-12-onboarding-page-rewrite.md` | ⛔ 不动 | 在飞，卡 owner 视觉批准（STATUS §一.0） |

---

## Task 2：候选一 —— `asset-inventory.md` 归档 + 摘两处 Quick Reference 指针

- [ ] 2.1 重扫（Task 1.3 已跑；若与下述两处指针有出入，以当场为准补处理）。
- [ ] 2.2 改指针一 `docs/PROJECT_GOAL.md:171` —— **建议改法：整行删除**。逐字旧行：

  ```markdown
  | 资产清单 | [`docs/internal/asset-inventory.md`](./internal/asset-inventory.md) |
  ```

  理由：把「资产清单」指到一份 2026-04-24 的过期快照（正文还写死本机绝对路径）本身就是「继续提供指令」的病；活答案（数据来源/项目组成/生成链）已由同表上一行的 `PROJECT_MAP.md` 覆盖。**owner 可推翻的备选**：不删行、改成归档路径并标注快照日期：

  ```markdown
  | 资产清单（2026-04-24 快照 · 已归档） | [`docs/_archive/_reports/asset-inventory.md`](./_archive/_reports/asset-inventory.md) |
  ```

- [ ] 2.3 改指针二 `AGENTS.md:618` —— 与 2.2 同一判断、同一改法（删行，或备选改归档路径）。逐字旧行：

  ```markdown
  | 资产清单 | `docs/internal/asset-inventory.md` |
  ```

  两处必须**同向**处理（都删或都改），不许一删一留。

- [ ] 2.4 归档（落点 `docs/_archive/_reports/` 已存在，收的正是同类一次性快照报告，如 `f25-phase-a-baseline-2026-05-09.md`）：

  ```bash
  git mv docs/internal/asset-inventory.md docs/_archive/_reports/asset-inventory.md
  ```

- [ ] 2.5 验证：

  ```bash
  grep -rn "asset-inventory" --include="*.md" docs/ AGENTS.md README.md CHANGELOG.md | grep -v "^docs/_archive" | grep -v "2026-08-12-live-tree-derivative-archive"
  ```

  预期 0 行（排除归档区与本计划自身后，live tree 无残留指针）。然后三闸全绿（命令见 Global Constraints）。

- [ ] 2.6 commit（先 `git status` 目检 staged 不含并行 session 文件；**本模式适用于后续所有 commit**——`mktemp` 落 message、`PATHS` 变量保证 commit 与 reset 的 pathspec 逐字一致）：

  ```bash
  MSG=$(mktemp)
  printf '%s\n' "docs(archive): 归档 asset-inventory（2026-04-24 一次性快照）+ 摘 PROJECT_GOAL/AGENTS 两处 Quick Reference 指针（INFRA-F96 病类清扫）" > "$MSG"
  PATHS="docs/PROJECT_GOAL.md AGENTS.md docs/internal/asset-inventory.md docs/_archive/_reports/asset-inventory.md"
  git commit -F "$MSG" -- $PATHS
  git reset -- $PATHS
  ```

---

## Task 3：候选二 a —— `docs/internal/_plans/` 批归档（6 份，以 Task 1.4 定案为准）

先做 `_plans/` 再做 `superpowers/plans/`（Task 4）——`next-session-pickup-2026-08-03-doc-volume-single-source.md` 引用着 f95 plan，先把它归档掉，Task 4 就少一处要改写的指针（归档件的引用不算数）。

- [ ] 3.1 逐份改写留在 live tree 的指针（来源以 Task 1.3 当场引用图为准；同批互引跳过）。改法 = 把路径 token 改写成含 `_archive/` 的归档后真实路径。今天的快照下需要动的面：
  - `docs/internal/STATUS-CHANGELOG.md`：4 份的历史叙述提及（06-08 pickup / 08-03 pickup / 08-07 pickup / 07-24 p0）。同目录相对路径写法 `_plans/<name>` → `../_archive/_plans/<name>`；裸文件名或 `docs/internal/_plans/<name>` 写法 → `docs/_archive/_plans/<name>`。
  - `docs/superpowers/specs/2026-08-03-infra-f96-plan-spec-lifecycle-design.md` 与 `docs/superpowers/specs/2026-08-05-infra-f96-lifecycle-scan-face-extension-design.md`：07-27 与 07-28 两份作为历史举例被引用 → 同法改写（spec 无限期保留，改写路径提及不算改判据）。
  - 每处用 Edit 逐个改，不盲 sed —— 提及嵌在散文里，相对前缀因文件位置而异。
- [ ] 3.2 归档：

  ```bash
  git mv docs/internal/_plans/next-session-pickup-2026-06-08-infra-f41-task5-continue.md \
         docs/internal/_plans/next-session-pickup-2026-08-03-doc-volume-single-source.md \
         docs/internal/_plans/next-session-pickup-2026-08-07-render-gate-field-level-excuse.md \
         docs/internal/_plans/2026-07-24-p0-systematic-gap-fixes.md \
         docs/internal/_plans/2026-07-27-p2-rubric-batch-retest.md \
         docs/internal/_plans/2026-07-28-INFRA-F71-gitea-self-hosted-publish-ci.md \
         docs/_archive/_plans/
  ```

- [ ] 3.3 **hook 亲验**（当前 pickup 绝不能漂移）：

  ```bash
  ls -t docs/internal/_plans/next-session-pickup-*.md | head -1
  ```

  预期逐字输出 `docs/internal/_plans/next-session-pickup-2026-08-11-designing-with-tvu-method-and-public-surface.md`。不是它 → **立即 `git mv` 回滚本批、停下排查**。

- [ ] 3.4 三闸全绿。plan-lifecycle 预期 `session pickups` live −6 / 已归档 +6（快照日预判剩 4 份：README + new-session-prompt + 07-08 pickup + 08-11 pickup；验差值不验绝对数）；若点名新孤儿（迭代收敛），按 Out-of-scope 例外条款处置。
- [ ] 3.5 commit（PATHS 若与 Task 1.4 定案有出入，按定案增删；引号包住的 glob 交给 git 自己展开，旧路径 mv 后磁盘上已不存在、shell glob 展不开）：

  ```bash
  MSG=$(mktemp)
  printf '%s\n' "docs(archive): _plans 已完成 pickup/plan 6 份归档 + live 指针降级为溯源引用（INFRA-F96）" > "$MSG"
  git commit -F "$MSG" -- \
    'docs/internal/_plans/next-session-pickup-2026-06-08-*.md' 'docs/internal/_plans/next-session-pickup-2026-08-03-*.md' \
    'docs/internal/_plans/next-session-pickup-2026-08-07-*.md' 'docs/internal/_plans/2026-07-2[478]-*.md' \
    'docs/_archive/_plans/next-session-pickup-2026-0[68]-*.md' 'docs/_archive/_plans/2026-07-2[478]-*.md' \
    docs/internal/STATUS-CHANGELOG.md \
    docs/superpowers/specs/2026-08-03-infra-f96-plan-spec-lifecycle-design.md \
    docs/superpowers/specs/2026-08-05-infra-f96-lifecycle-scan-face-extension-design.md
  git reset -- \
    'docs/internal/_plans/next-session-pickup-2026-06-08-*.md' 'docs/internal/_plans/next-session-pickup-2026-08-03-*.md' \
    'docs/internal/_plans/next-session-pickup-2026-08-07-*.md' 'docs/internal/_plans/2026-07-2[478]-*.md' \
    'docs/_archive/_plans/next-session-pickup-2026-0[68]-*.md' 'docs/_archive/_plans/2026-07-2[478]-*.md' \
    docs/internal/STATUS-CHANGELOG.md \
    docs/superpowers/specs/2026-08-03-infra-f96-plan-spec-lifecycle-design.md \
    docs/superpowers/specs/2026-08-05-infra-f96-lifecycle-scan-face-extension-design.md
  ```

  ⚠️ reset 的 pathspec 与 commit **逐字相同**（不许换成目录级——并行 session 共享 index，目录级 reset 会打掉别人 staged 的文件）；glob 一律带引号交给 git 展开（本机 zsh 对未匹配 glob 直接报错，且旧路径 mv 后磁盘上已不存在）。

---

## Task 4：候选二 b —— `docs/superpowers/plans/` 批归档（10 份，以 Task 1.4 定案为准）

- [ ] 4.1 逐份改写 live 指针（当场引用图为准）。今天的快照下的 md 面：
  - `docs/internal/STATUS-CHANGELOG.md`：8 份有提及（07-14 / 07-21 / 07-22 / 07-23 / 07-29 / 07-30-v1x / 08-03-f58 / 08-03-f95）。
  - `docs/internal/backlog.md`：07-22（:384）、08-03-f58（:308）、08-03-f95（:333）、08-05-f96（:343）。已核实的一处逐字改法示例（backlog:343）：
    - 旧：`[plan](../superpowers/plans/2026-08-05-infra-f96-lifecycle-scan-face-extension.md)`
    - 新：`[plan](../_archive/superpowers/plans/2026-08-05-infra-f96-lifecycle-scan-face-extension.md)`
  - spec / retrospection 的历史提及（如 `specs/2026-07-30-dg1-layout-primitives-design.md` → v1x plan；`retrospection/2026-07-30-page-recipes-*.md` → v1x plan；`retrospection/2026-08-03-entry-self-description-*.md` → f58 plan）→ 同法改写。
  - `.design-sync/NOTES.md`：07-23 与 07-30-sync-b 两份的提及 → 同法改写。
  - `docs/internal/_prompts/2026-07-23-ds-merge-phase2-foundation-cards.prompt.md` 与 `docs/internal/_handoffs/` 两份 handoff 里对 07-23 / 07-30-sync-b 的提及（这三个文件自己留在 live tree）→ 同法改写。
- [ ] 4.2 非 md 引用两处（今天已核实性质，执行时再核一遍）：
  - `docs/internal/claude-design-reference-registry.json:13` 的 `scopeNote` 散文字符串里提到 sync-b plan 路径 —— 消费者 `scripts/audit-claude-design-reference-numbers.mjs` 只拿 registry 当编号占用数据，scopeNote 是叙述 → 改写路径安全。改后跑 `node scripts/audit-claude-design-reference-numbers.mjs`（预期 exit 0）确认 JSON 仍合法、闸仍绿。
  - `scripts/check-dist-wc-freshness.mjs` 注释里提到 v1x-next-batch plan 路径 —— 纯注释 → 改写为 `docs/_archive/superpowers/plans/...`。改后 `node scripts/check-dist-wc-freshness.mjs` 或至少 `node --check scripts/check-dist-wc-freshness.mjs` 确认无语法损伤。
  - 任一处执行时发现引用**承重**（不是叙述而是被程序拿去读文件）→ 该 plan 移出本批、Task 6 记一行，不强改。
- [ ] 4.3 归档：

  ```bash
  git mv docs/superpowers/plans/2026-07-14-single-source-demos.md \
         docs/superpowers/plans/2026-07-21-form-validation-engine.md \
         docs/superpowers/plans/2026-07-22-table-data-grid-spec.md \
         docs/superpowers/plans/2026-07-23-ds-merge-two-systems.md \
         docs/superpowers/plans/2026-07-29-f73-publish-and-mainline-scheduling.md \
         docs/superpowers/plans/2026-07-30-sync-b-retirement-consolidate-into-sync-a.md \
         docs/superpowers/plans/2026-07-30-v1x-next-batch-ai-consumable-page-layer.md \
         docs/superpowers/plans/2026-08-03-f58-sot-dedup-and-inventory-gate.md \
         docs/superpowers/plans/2026-08-03-infra-f95-doc-shape-gate.md \
         docs/superpowers/plans/2026-08-05-infra-f96-lifecycle-scan-face-extension.md \
         docs/_archive/superpowers/plans/
  ```

- [ ] 4.4 三闸全绿。plan-lifecycle 预期 `superpowers plans` 的 live 数 = 当场基线 − 10、`已归档` = 当场基线 + 10（**别拿绝对数当验收**：快照日预判剩 F110 + onboarding + 本计划 3 份，但 2026-08-12 15:14 实测并行 session 当天又落了 4 份新 plan——live 总数随时在涨，只验差值）。**迭代收敛预判点**：`_prompts/upstream-gate-codex.prompt.md` 失去 f96-plan 这条引用后仍有 spec + test 两条 → 不应被点名；被点名 = 当场引用图与预判不符，按闸文案处置。
- [ ] 4.5 commit（PATHS 按 Task 1.4 定案与 4.1/4.2 实际改动面增删；⚠️ glob `plans/2026-07-*.md` `plans/2026-08-0[35]-*.md` 刻意不覆盖 08-11 / 08-12 两份 ⛔ 件）：

  ```bash
  MSG=$(mktemp)
  printf '%s\n' "docs(archive): superpowers/plans 已执行完 plan 10 份归档 + live 指针降级为溯源引用（INFRA-F96）" > "$MSG"
  git commit -F "$MSG" -- \
    'docs/superpowers/plans/2026-07-*.md' 'docs/superpowers/plans/2026-08-0[35]-*.md' \
    'docs/_archive/superpowers/plans/2026-07-*.md' 'docs/_archive/superpowers/plans/2026-08-0[35]-*.md' \
    docs/internal/STATUS-CHANGELOG.md docs/internal/backlog.md .design-sync/NOTES.md \
    docs/internal/claude-design-reference-registry.json scripts/check-dist-wc-freshness.mjs \
    'docs/superpowers/specs/2026-07-30-dg1-*.md' 'docs/internal/retrospection/2026-07-30-page-recipes-*.md' \
    'docs/internal/retrospection/2026-08-03-entry-self-description-*.md' \
    'docs/internal/_prompts/2026-07-23-ds-merge-phase2-*.md' 'docs/internal/_handoffs/*.md'
  git reset -- \
    'docs/superpowers/plans/2026-07-*.md' 'docs/superpowers/plans/2026-08-0[35]-*.md' \
    'docs/_archive/superpowers/plans/2026-07-*.md' 'docs/_archive/superpowers/plans/2026-08-0[35]-*.md' \
    docs/internal/STATUS-CHANGELOG.md docs/internal/backlog.md .design-sync/NOTES.md \
    docs/internal/claude-design-reference-registry.json scripts/check-dist-wc-freshness.mjs \
    'docs/superpowers/specs/2026-07-30-dg1-*.md' 'docs/internal/retrospection/2026-07-30-page-recipes-*.md' \
    'docs/internal/retrospection/2026-08-03-entry-self-description-*.md' \
    'docs/internal/_prompts/2026-07-23-ds-merge-phase2-*.md' 'docs/internal/_handoffs/*.md'
  ```

  reset pathspec 与 commit 逐字相同（理由同 Task 3.5）。提交前 `git status` 目检：staged 列表只含上述面，**不含**并行 session 的 `playground/**`、`DocsShell.vue` 等。

---

## Task 5：候选三 —— `figma-sync-report-*.md` 旧日期报告归档

- [ ] 5.1 执行日 guard：

  ```bash
  TODAY=$(date +%F); ls docs/internal/figma-sync-report-${TODAY}.md 2>/dev/null; echo "exit=$?"
  ```

  exit=0（今天跑过 sync）→ **当天那份不归档**（它是 pre-commit figma-data 写入闸的放行信号），只动更早日期的。exit=1 → 全部归档。

- [ ] 5.2 建落点并归档（落点选 `docs/_archive/_reports/figma-sync/` 子目录：10 份起步、未来 sync 还会持续产新报告并周期性归档，独立子目录让后续清扫机械化、不淹没 `_reports/` 平层。owner 可推翻为平铺 `_reports/`）：

  ```bash
  mkdir -p docs/_archive/_reports/figma-sync
  git mv docs/internal/figma-sync-report-*.md docs/_archive/_reports/figma-sync/   # 若 5.1 命中今天，逐份列举、排除今天那份
  ```

- [ ] 5.3 验证生成链与放行闸未被波及：

  ```bash
  grep -n "figma-sync-report" figma-sync/sync-diff-report.mjs   # 预期 :17 :311 :313 输出路径仍是 docs/internal/
  grep -n "figma-sync-report" .husky/pre-commit                 # 预期正则仍锚 docs/internal/ 前缀，归档路径不命中
  git diff --cached --name-only --diff-filter=AM | grep -c "docs/internal/figma-sync-report"   # 预期 0（镜像 pre-commit 自己的过滤条件：改名旧路径是 D/R 不是 AM，触不了放行闸；非 0 就停下排查）
  ```

  然后三闸全绿。

- [ ] 5.4 commit：

  ```bash
  MSG=$(mktemp)
  printf '%s\n' "docs(archive): figma-sync 旧日期报告 10 份归档到 _reports/figma-sync/（生成链与 pre-commit 信号面不动）" > "$MSG"
  git commit -F "$MSG" -- 'docs/internal/figma-sync-report-*.md' 'docs/_archive/_reports/figma-sync/figma-sync-report-*.md'
  git reset -- 'docs/internal/figma-sync-report-*.md' 'docs/_archive/_reports/figma-sync/figma-sync-report-*.md'
  ```

  份数与 message 里的数字以 5.1/5.2 实际移动为准（若当天报告在场则是 N-1 份，改 message 数字）。

---

## Task 6：收尾 —— 终态验证 + STATUS 摘要 + 本计划自归档 + backlog 判断

- [ ] 6.1 复跑 `pnpm run audit:plan-lifecycle`，记录终态 S5（预期差值：superpowers plans live −10、session pickups live −6、`docs/internal/` 平层 sync report 归零或仅剩今天；**验差值不验绝对数**——并行 session 持续在落新 plan，以当场输出为准）。有新孤儿点名 → 按闸文案处置完再继续。
- [ ] 6.2 **backlog 判断（本计划预判：不立新 entry，只在 STATUS 摘要留一行）**。理由：① 这是一次性清扫，后续同类堆积已有器械在管（`audit:plan-lifecycle` L4 pre-commit + L5 prepublishOnly），登记一条「以后要清扫」的待办 = 再造一份发指令的一次性产物；② 病类与器械已分别登记在 backlog [[INFRA-F96]] / [[INFRA-F95]]，重复登记正是 F95 治的体量病；③ 可追溯性由 git 历史 + STATUS-CHANGELOG 下沉承担。**owner 可推翻点**：若认为 `docs/internal/` 平层其余一次性产物嫌疑（`api-diff.md` / `component-mapping-scan.md` / `runtime-additions.md`，与 asset-inventory 同期同类）需要系统清查，那是独立立项（扩闸扫描面或另一次 sweep），不挂本计划——把这句观察原样带给 owner 即可。
- [ ] 6.3 更新 `docs/STATUS.md`：Last updated 提到今天 + 摘要一行（含 Task 1.4 被跳过/移出定案的候选及理由，如有）。改完跑 `pnpm run audit:doc-shape`（STATUS 有形态闸 S1/S2/S3）+ `pnpm run audit:status-consistency`，预期 exit 0。
- [ ] 6.4 **本计划自归档**（治的病不能自己复现——执行完的 sweep plan 不留在 live tree）：把 STATUS/backlog 里指向本计划的路径改写成 `docs/_archive/superpowers/plans/2026-08-12-live-tree-derivative-archive.md`，然后：

  ```bash
  git mv docs/superpowers/plans/2026-08-12-live-tree-derivative-archive.md docs/_archive/superpowers/plans/
  ```

- [ ] 6.5 三闸全绿 → commit：

  ```bash
  MSG=$(mktemp)
  printf '%s\n' "docs(status): live-tree 一次性产物归档清扫收尾 —— 三类候选落 _archive，本计划自归档（INFRA-F96）" > "$MSG"
  git commit -F "$MSG" -- docs/STATUS.md docs/internal/backlog.md \
    'docs/superpowers/plans/2026-08-12-live-tree-*.md' 'docs/_archive/superpowers/plans/2026-08-12-live-tree-*.md'
  git reset -- docs/STATUS.md docs/internal/backlog.md \
    'docs/superpowers/plans/2026-08-12-live-tree-*.md' 'docs/_archive/superpowers/plans/2026-08-12-live-tree-*.md'
  ```
- [ ] 6.6 按仓库 Wrap-up 协议收尾（STATUS Wrap-up 段自查 + work-log）。
