Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion docs/harness/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

| 场景 | 路径 |
|------|------|
| 写 task / **下一棒双 Prompt** | `TEMPLATE-requirements`(**A:22** + **B:30**,人择一) |
| 写 task / **下一棒双 Prompt** | `TEMPLATE-requirements`(**A:22** + **B:30**,人择一) · **高复杂度** 预置 R0–R5 见 [`hats/10-requirements.md`](prompts/hats/10-requirements.md) §思考轮 |
| 任务审核 22 | [`reviews/README.md`](reviews/README.md) → `TEMPLATE-task-audit` |
| 执行 + 自检 | `TEMPLATE-execute` → `TEMPLATE-self-check` |
| **三方复检** | `TEMPLATE-independent-reinspect` → [`../tasks/reinspect_results/`](../tasks/reinspect_results/README.md) |
Expand Down Expand Up @@ -145,3 +145,4 @@ rsync -a docs/harness/prompts/templates/TEMPLATE-independent-reinspect-invoke.md
| 2026-05-25 | v6:§2.1 taxonomy;**不**建 `domains/` |
| 2026-05-25 | v7:**git mv** 完成(prompts 子目录 + invokes/reviews `by-task/`) |
| 2026-06-08 | v8:§1 日常读序改 **链式常模** 为默认;`HANDOFF_SEMI_AUTO` 标考古 |
| 2026-06-11 | v9:§1 链 **10/22 思考轮** R0–R5 · 22 退回 10 |
38 changes: 38 additions & 0 deletions docs/harness/prompts/hats/10-requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,43 @@
- 验收与失败路径已 **可操作化**,或已输出 **阻塞清单**(缺哪些字段就无法开工)。
- 达到约定篇幅上限时输出 **摘要 + 待续项**。

## 思考轮模板(10 帽 · 高复杂度 task)

> **适用**:`orchestration` 含 Agent rethink、跨模块/跨仓、或 **`audit_profile: full` / `human_only`** 的 task。
> **OSS fork 阶段 C**:工作区 PILOT §5.2 · cyning-harness `TASK_TEMPLATE_upstream_pr_v1.md`(**R0+R1–R5 硬预置**)。
> **Ink 前后端**:复制 [`docs/tasks/templates/TASK_TEMPLATE.md`](../../../tasks/templates/TASK_TEMPLATE.md) **§思考轮次** 或本节结构进 task §4。

### 10 帽必须做什么

- task §4 **预置 R0(读 task)+ R1–R5 五个思考槽**(标题 + 回填区),**不得**折叠为「可选 R4/R5」或仅写 R1–R3。
- 同步填 **`思考轮控制`** 表:`actual_last_round` · `early_stop` · `early_stop_reason` · `residual_risks`。
- invoke `PROMPT_*_rethink_*` 轮数 **对齐** task §4 槽位。

### Agent 可裁量 · 须留痕

| 行为 | 要求 |
|------|------|
| **提前停止**(如 R3 已收敛) | `early_stop=yes` · **必填** reason · **必填** `residual_risks`(无则 `none`)· `actual_last_round` 指向最后完成轮 |
| **增加轮次**(R6+) | §4 末尾追加 `### R6 · …` + **`扩展理由`** |
| **未执行轮** | 回填区写 `(跳过 · 见思考轮控制)`;**禁止**留 `(待填)` 却宣称思考完成 |

### 默认轮语义

| 轮 | 主题 |
|----|------|
| **R0** | 读 task / SPEC / 非范围 / 依赖 |
| **R1** | 代码事实(路径 · 行为 · 复现) |
| **R2** | 方案对比(≥2 方案 · 推荐 · 弃选理由) |
| **R3** | 边界 / 测试 / 回归面 |
| **R4** | 测试命令 · PR/关账策略 |
| **R5** | 图谱/契约增量 · 与验收对齐 |

### 与 22 / 30 分界

- **10 不签发** `HG-AUDIT-R1`;思考落盘后交 **22 R1** 审查是否充分。
- **22 不通过** → **「退回 10 帽」** + 回填清单 → **10 补思考** → **22 R+1**(此阶段 **禁止** 附 30 Prompt)。
- **22 通过 + 维护者签** `HG-AUDIT-R1` → 30 方可开工(与 §下一棒 A/B 并存;**思考未闭合时推荐路径 A**)。

## 交接物

- 可粘贴进子仓 `task_*.md` 或 harness `docs/harness/tasks/active/` 的正文块;并注明建议 `test_strategy` 取值(`required` / `recommended` / `not_applicable` + `test_strategy_note`)。
Expand Down Expand Up @@ -94,6 +131,7 @@
| 2026-05-13 | v1.1:承接任务审核帽 `reviews` 回填与交接说明 |
| 2026-05-14 | v1.2:链 [`templates/TEMPLATE-requirements-invoke.md`](templates/TEMPLATE-requirements-invoke.md);占位符未替换则 Agent 须追问 |
| 2026-05-22 | v1.3:§下一棒 A/B — `(推荐)` 标题、推荐规则表、冲突优先级;链 §3.4 状态栏 |
| 2026-06-11 | v1.4:§思考轮模板 R0+R1–R5 · 提前停/增轮留痕 · 22 退回 10 |

---

Expand Down
8 changes: 7 additions & 1 deletion docs/harness/prompts/hats/22-task-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
- **无阻塞** 时:使用「零阻塞」模板,写明 **已核对项** 与 **结论:可进入执行帽** 或 **维持 pending**。
- **有阻塞** 时:写 **阻塞项**、**建议回填位置**(task 小节标题)、**交给任务帽的清单**(逐条可勾选)。
- 若本轮有阻塞且已由 **任务帽** 完成回填:在 **新一轮** 审查文档中对比 **diff / 更新后的 task 片段**,写 **R2/R3…** 结论。
- **思考轮审查**(task §4 含 R0–R5 或 **思考轮控制** 时 **必做**):
- 核对 `actual_last_round` 与各轮回填是否闭合(含 `(跳过 · 见思考轮控制)` 的合法性)。
- **`early_stop=yes`**:审查 reason 是否充分;`residual_risks` 为 `none` 或已逐条落入 task §失败路径 / §验收标准。
- **不通过** → 审查文单列 **「退回 10 帽」**(补哪几轮 · 缺什么事实/方案 · 未收敛风险);下一棒 **必须** 为 [`templates/TEMPLATE-requirements-invoke`](templates/TEMPLATE-requirements-invoke.md) + 本帽 **R+1**;**禁止**附 30 Prompt。
- **通过** → 可写「思考轮审查:通过」;**仍不**代改 `HG-AUDIT-R1`(维护者签 task 表)。
- 在 **最终通过** 的审查文档中撰写 **「签收 / 关闭」** 节:声明 **本 task 可结束** 或 **须继续的条件**;此为 **任务正式结束点**(与 task 头部 `done` 对齐)。
- 按 **「交接物」**:**有下一棒** 时在对话与审查 md 输出 **「下一棒可复制 Prompt」**;**终轮签收、无下一棒** 时改输出 **「执行路线与 Commit 回溯」**(见 [`handoff/HANDOFF_CLOSE_TRACE.md`](handoff/HANDOFF_CLOSE_TRACE.md)),**省略** Prompt 小节。

Expand Down Expand Up @@ -101,7 +106,7 @@
## 输出形状

1. **文件**:`task_<slug>_audit_R<轮次>_YYYYMMDD.md`;相对路径为 **`docs/harness/reviews/`**(轮次规则见 [`../reviews/README.md`](../reviews/README.md))。
2. **文内结构**(建议):**元信息** → **审查结论摘要** → **阻塞 / 非阻塞** → **需任务帽回填清单**(若有)→ **是否建议执行帽开工** → **签收 / 关闭** → **二选一收尾**:**「下一棒可复制 Prompt」**(`text` 围栏,有下一棒时)或 **「执行路线与 Commit 回溯」**(终轮无下一棒时,见 [`handoff/HANDOFF_CLOSE_TRACE.md`](handoff/HANDOFF_CLOSE_TRACE.md));与对话逐字/语义一致。
2. **文内结构**(建议):**元信息** → **审查结论摘要** → **思考轮审查**(有 §4 时)→ **阻塞 / 非阻塞** → **需任务帽回填清单**或 **退回 10 帽清单**(若有)→ **是否建议执行帽开工** → **签收 / 关闭** → **二选一收尾**:**「下一棒可复制 Prompt」**(`text` 围栏,有下一棒时)或 **「执行路线与 Commit 回溯」**(终轮无下一棒时,见 [`handoff/HANDOFF_CLOSE_TRACE.md`](handoff/HANDOFF_CLOSE_TRACE.md));与对话逐字/语义一致。

## 停止条件

Expand Down Expand Up @@ -129,6 +134,7 @@
| 2026-05-17 | v1.6:交接物链 [`handoff/HANDOFF_AUTO_COMMIT.md`](handoff/HANDOFF_AUTO_COMMIT.md) |
| 2026-05-17 | v1.7:终轮无下一棒 → [`handoff/HANDOFF_CLOSE_TRACE.md`](handoff/HANDOFF_CLOSE_TRACE.md) 执行路线与 commit 回溯 |
| 2026-05-30 | v1.8:OpenSpec×TDD 勾选项表(Loop R2 · SPEC §4.2 · 链 validate CLI) |
| 2026-06-11 | v1.9:思考轮审查 · 不通过退回 10 帽 · R+1 复审 |

---

Expand Down
2 changes: 1 addition & 1 deletion docs/tasks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
**编码规范排期(§1.5)**:

- **P3+P4(当前棒)**:[`active/task_standards_backend_p3_p4_l3_ruff_v1.md`](active/task_standards_backend_p3_p4_l3_ruff_v1.md)
- **Tech-debt Epic(模块拆分)**:[`active/task_standards_backend_api_modularization_manifest_v1.md`](active/task_standards_backend_api_modularization_manifest_v1.md) · **禁止** 单 task 改全 Python 服务目录
- **Tech-debt Epic(模块拆分)**:[`done/task_standards_backend_api_modularization_manifest_v1.md`](done/task_standards_backend_api_modularization_manifest_v1.md) · **Epic CLOSE**(W1~W8 done · 2026-06-09)

**Wiki 排期导航(L2 · 防孤岛)**:[`../coding_wiki/concepts/task-schedule-ink-backend.md`](../coding_wiki/concepts/task-schedule-ink-backend.md) — pointer 至 RECENT,**不**替代排期真值。

Expand Down
5 changes: 3 additions & 2 deletions docs/tasks/RECENT_TASK_SCHEDULE.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,12 +154,13 @@
|------|------|------|------|
| **P2 · L2** | [`done/task_standards_backend_l2_draft_v1.md`](done/task_standards_backend_l2_draft_v1.md) | **done** | R1 签收 · L2 active |
| **P3+P4** | [`done/task_standards_backend_p3_p4_l3_ruff_v1.md`](done/task_standards_backend_p3_p4_l3_ruff_v1.md) | **done** | PR [#145](https://github.com/Cyning12/ai-ink-brain-api-python/pull/145) · `.mdc` + Ruff CI |
| **Tech-debt Epic** | [`active/task_standards_backend_api_modularization_manifest_v1.md`](active/task_standards_backend_api_modularization_manifest_v1.md) | **in_progress** | W1~W7 **done** · **当前棒 W8**(Intent 栈拆分) |
| **Tech-debt Epic** | [`done/task_standards_backend_api_modularization_manifest_v1.md`](done/task_standards_backend_api_modularization_manifest_v1.md) | **done** | **Epic CLOSE** · W1~W8 **done**(2026-06-09) |
| **W1** | [`done/task_api_env_rag_env_consolidation_w1.md`](done/task_api_env_rag_env_consolidation_w1.md) | **done** | `rag_env` env 收敛 · index 零 `os.getenv` |
| **W6** | [`done/task_api_agent_loop_split_w6.md`](done/task_api_agent_loop_split_w6.md) | **done** | PR [#153](https://github.com/Cyning12/ai-ink-brain-api-python/pull/153) · agent tool runner + persist |
| **W7** | [`done/task_api_tools_registry_split_w7.md`](done/task_api_tools_registry_split_w7.md) | **done** | PR [#155](https://github.com/Cyning12/ai-ink-brain-api-python/pull/155) · tools RAG/Text2SQL 子模块 |
| **W8** | [`done/task_api_intent_stack_split_w8.md`](done/task_api_intent_stack_split_w8.md) | **done** | PR [#157](https://github.com/Cyning12/ai-ink-brain-api-python/pull/157) · intent rules + LLM 子模块 |

**执行顺序**:P3+P4 **done** → W1 **done** → W2~W7 **done** → **W8**(Intent 栈)
**执行顺序**:P3+P4 **done** → W1~W8 **done** · **Epic CLOSE**

### 1.3 semi_auto 退场双轨(**A+B done** · Epic CLOSE · 2026-06-08)

Expand Down
2 changes: 2 additions & 0 deletions docs/tasks/_views/done.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,5 +139,7 @@
- `../done/task_api_env_rag_env_consolidation_w1.md`(2026-06-09 验收通过:Epic T1 W1 · `index.py` env 收敛至 `rag_env` · PR #146 · 50 `task_api_env_rag_env_consolidation_w1_reinspect_2026-06-09.md` · `CODING_BACKEND_L2@2026-06-09`)
- `../done/task_api_agent_loop_split_w6.md`(2026-06-09 验收通过:Epic W6 · agent tool runner + persist 子模块 · PR #153 · `CODING_BACKEND_L2@2026-06-09`)
- `../done/task_api_tools_registry_split_w7.md`(2026-06-09 验收通过:Epic W7 · tools RAG/Text2SQL 子模块 · PR #155 · `CODING_BACKEND_L2@2026-06-09`)
- `../done/task_api_intent_stack_split_w8.md`(2026-06-09 验收通过:Epic W8 · intent rules + LLM 子模块 · PR #157 · `CODING_BACKEND_L2@2026-06-09`)
- `../done/task_standards_backend_api_modularization_manifest_v1.md`(2026-06-09 Epic CLOSE:W1~W8 全 done · `CODING_BACKEND_L2@2026-06-09`)
- `../done/task_standards_backend_p3_p4_l3_ruff_v1.md`(2026-06-09 验收通过:P3+P4 L3 `.mdc` + Ruff CI · PR #145 · `CODING_BACKEND_L2@2026-06-09`)

Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

# W8 · Intent 栈拆分

> **状态**: active
> **状态**: done(PR [#157](https://github.com/Cyning12/ai-ink-brain-api-python/pull/157) · 2026-06-09)
> **slug**: `api-intent-stack-split`
> **git_branch**: `task/api-intent-w8`
> **风险**: Medium
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# MANIFEST · 后端 Python 服务模块化 Tech-Debt Epic

> **状态**:active(Epic 母单 · **MANIFEST** · W1~W6 **done** · W7 当前棒
> **状态**:`done` — **Epic CLOSE**(W1~W8 均 done · 2026-06-09
> **schedule_ref**:编码规范 Epic · §1.5 Tech-debt
> **epic**:`standards-engineering` · 子主题 **`api-modularization`**
> **前置**:L2 [`CODING_BACKEND_L2_v1_zh.md`](../../standards/CODING_BACKEND_L2_v1_zh.md) **active**(P-01 路由薄层 · B-01)
Expand Down Expand Up @@ -31,10 +31,10 @@ L2 **P-01** 要求路由 **薄**(handler ~80 行软上限)、领域逻辑下

**完成态(Epic CLOSE 条件)**:

- [ ] 下表 **W1~W8** 子 task 均 **done**(或显式 **defer** 行 + 人签理由)
- [ ] 无子 task 在「非范围」外触及未列模块
- [ ] `_tech_graph` / `_manifest` 与拆分后 import 路径一致
- [ ] RECENT §1.5 更新为 **CLOSE**
- [x] 下表 **W1~W8** 子 task 均 **done**(或显式 **defer** 行 + 人签理由)
- [x] 无子 task 在「非范围」外触及未列模块
- [x] `_tech_graph` / `_manifest` 与拆分后 import 路径一致
- [x] RECENT §1.5 更新为 **CLOSE**

---

Expand All @@ -58,13 +58,13 @@ L2 **P-01** 要求路由 **薄**(handler ~80 行软上限)、领域逻辑下
| ID | 主题 | 现状行数 | 目标(摘要) | 建议 slug | 分支建议 | 风险 |
|----|------|----------|--------------|-----------|----------|------|
| **W1** | `rag_env` 收敛 | `rag_env` 234 · `index` 顶散落 env | 新代码零散落 `os.getenv`;`index` 顶层常量迁入 `rag_env` helper | `api-env-rag-env-consolidation` | `task/api-env-rag-env-w1` | Low · **done** PR [#146](https://github.com/Cyning12/ai-ink-brain-api-python/pull/146) |
| **W2** | Legacy chat 路由下沉 | `index` 内 chat/retrieve 大块 | 抽 `api/routes/legacy_chat.py`(或 `api/legacy_chat/`);`index` 仅 register | `api-routes-legacy-chat-split` | `task/api-routes-legacy-w2` | Medium |
| **W3** | Admin ingest 路由下沉 | `index` admin/sync 段 | 抽 `api/routes/admin_ingest.py`;ingest 仍调 `ingest_pipeline` | `api-routes-admin-ingest-split` | `task/api-routes-admin-w3` | Medium |
| **W4** | Unified JSON 路径 | `unified_chat` JSON handler 段 | 抽 `api/unified/json_handler.py`(名可调整) | `api-unified-json-split` | `task/api-unified-json-w4` | High |
| **W5** | Unified SSE 路径 | `unified_chat` stream 段 | 抽 `api/unified/sse_handler.py`;契约 `_contract_manifest` 必对照 | `api-unified-sse-split` | `task/api-unified-sse-w5` | High |
| **W2** | Legacy chat 路由下沉 | `index` 内 chat/retrieve 大块 | 抽 `api/routes/legacy_chat.py`(或 `api/legacy_chat/`);`index` 仅 register | `api-routes-legacy-chat-split` | `task/api-routes-legacy-w2` | Medium · **done** PR [#149](https://github.com/Cyning12/ai-ink-brain-api-python/pull/149) |
| **W3** | Admin ingest 路由下沉 | `index` admin/sync 段 | 抽 `api/routes/admin_ingest.py`;ingest 仍调 `ingest_pipeline` | `api-routes-admin-ingest-split` | `task/api-routes-admin-w3` | Medium · **done** PR [#150](https://github.com/Cyning12/ai-ink-brain-api-python/pull/150) |
| **W4** | Unified JSON 路径 | `unified_chat` JSON handler 段 | 抽 `api/unified/json_handler.py`(名可调整) | `api-unified-json-split` | `task/api-unified-json-w4` | High · **done** PR [#151](https://github.com/Cyning12/ai-ink-brain-api-python/pull/151) |
| **W5** | Unified SSE 路径 | `unified_chat` stream 段 | 抽 `api/unified/sse_handler.py`;契约 `_contract_manifest` 必对照 | `api-unified-sse-split` | `task/api-unified-sse-w5` | High · **done** PR [#152](https://github.com/Cyning12/ai-ink-brain-api-python/pull/152) |
| **W6** | Agent 循环 | `agent` ~1095 | 抽 tool 调度 / persist 子模块;`ChatBIAgent` 薄编排 | `api-agent-loop-split` | `task/api-agent-w6` | High · **done** PR [#153](https://github.com/Cyning12/ai-ink-brain-api-python/pull/153) |
| **W7** | Tool 注册表 | `tools` ~958 | `text2sql_*` vs RAG tools 分文件;保留 `get_tool_registry()` 入口 | `api-tools-registry-split` | `task/api-tools-w7` | Medium · **done** PR [#155](https://github.com/Cyning12/ai-ink-brain-api-python/pull/155) |
| **W8** | Intent 栈 | `intent_agent` 746 + `intent_router` 346 | 表驱动与 LLM 路径分文件;不混改 Unified | `api-intent-stack-split` | `task/api-intent-w8` | Medium |
| **W8** | Intent 栈 | `intent_agent` 746 + `intent_router` 346 | 表驱动与 LLM 路径分文件;不混改 Unified | `api-intent-stack-split` | `task/api-intent-w8` | Medium · **done** PR [#157](https://github.com/Cyning12/ai-ink-brain-api-python/pull/157) |

### 显式 defer(Epic 外 · 需单独立项)

Expand Down Expand Up @@ -112,10 +112,10 @@ L2 **P-01** 要求路由 **薄**(handler ~80 行软上限)、领域逻辑下

## Epic 验收标准

- [ ] W1~W8 均有对应 `task_*` 且状态 **done** 或 **defer(人签)**
- [ ] `index.py` 降至 **<400 行**(软上限 · 或 documented 例外)
- [ ] `unified_chat.py` 降至 **<800 行** 或拆为多文件 package(`api/unified/`)
- [ ] 无 open 子 task 违反 D1
- [x] W1~W8 均有对应 `task_*` 且状态 **done** 或 **defer(人签)**
- [x] `index.py` 降至 **<400 行**(软上限 · 或 documented 例外)— **349 行**
- [x] `unified_chat.py` 降至 **<800 行** 或拆为多文件 package(`api/unified/`)— **477 行**
- [x] 无 open 子 task 违反 D1
- [ ] Coding Wiki 可选 synthesis:`api-modularization-ink-backend`(关账后)

---
Expand All @@ -124,4 +124,5 @@ L2 **P-01** 要求路由 **薄**(handler ~80 行软上限)、领域逻辑下

| 日期 | 说明 |
|------|------|
| 2026-06-09 | Epic **CLOSE** · W8 done PR #157 · W1~W8 全绿 |
| 2026-06-09 | v1:Epic MANIFEST 初稿 · W1~W8 批次 |
44 changes: 43 additions & 1 deletion docs/tasks/templates/TASK_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,52 @@
| F1 | `fp-db-disconnect` | <例:Supabase 不可用> | `500 DATABASE_DISCONNECT` | 是 | 服务暂不可用提示 | `tests/test_*.py::test_*` |
| F2 | `fp-invalid-json` | <例:参数非法> | `422` + 结构化 `detail` | 否 | 字段级错误说明 | — |

> **L2 Phase C(设计)**:`Scenario ID` / `F#` 与 `_test_manifest.json` `entries[].id` 对齐规则见 [`SPEC-Governance-L2-Anchor-Test-Manifest-v1.md`](../spec/governance/SPEC-Governance-L2-Anchor-Test-Manifest-v1.md) **§4.4**(实现期双向校验 **另 task**)。
> **思考未闭合**:§4 仍有 `(待填)` 且无合法 **思考轮控制** → 22 **退回 10** · 30 **拒开工**(见 [`hats/10-requirements.md`](../harness/prompts/hats/10-requirements.md) §思考轮)。

---

## 思考轮次(高复杂度 / orchestration 含 rethink 时 · 10 帽预置)

> **何时启用**:`audit_profile: full`、触 `api/` 契约、跨仓、或 Agent rethink 链。简单 task **可删本节**。
> **真值**:[`docs/harness/prompts/hats/10-requirements.md`](../harness/prompts/hats/10-requirements.md) §思考轮 · [`22-task-audit.md`](../harness/prompts/hats/22-task-audit.md)(22 可 **退回 10**)。

### 思考轮控制(Agent 填 · 22 审)

| 字段 | 值 |
|------|-----|
| **actual_last_round** | `R5` / `R3` / … |
| **early_stop** | `no` / `yes` |
| **early_stop_reason** | (`early_stop=yes` **必填**) |
| **residual_risks** | `none` 或逐条(**必填**) |

### R0 · 读 task / SPEC / 非范围

**回填区:** `(待填)`

### R1 · 代码事实

**回填区:** `(待填)`

### R2 · 方案对比

**回填区:** `(待填)`

### R3 · 边界 / 测试 / failure_paths

**回填区:** `(待填)`

### R4 · pytest / PR 策略

**回填区:** `(待填)`

### R5 · 图谱/契约增量 + 关账判断

**回填区:** `(待填)`

---

> **L2 Phase C(设计)**:`Scenario ID` / `F#` 与 `_test_manifest.json` `entries[].id` 对齐规则见 [`SPEC-Governance-L2-Anchor-Test-Manifest-v1.md`](../spec/governance/SPEC-Governance-L2-Anchor-Test-Manifest-v1.md) **§4.4**(实现期双向校验 **另 task**)。

## 验收标准

- [ ] <验收项 1>
Expand Down