docs(governance): 计划谱系单指针 上级: 立约(§10.8)+ docs-gate 七检加 G7 + plan-tree 查询视图 + 存量断链回填

新建 plan/设计档 frontmatter 必带一行 上级:(仓根相对路径),沿链 6 跳内达 canonical SoT;
全链/树/当前位置都是查询结果(plan-tree.py)而非维护对象,_index 在飞板保持线级、不加逐叶登记。
G7 拦三种腐坏:缺字段 / 上级死链 / 链断(中途档既非 canonical 又无上级),成环与超跳同挡(均已植坏档实测命中)。
存量修复:统一执行计划基建线补认领配置控制面设计(治真断链、含 07-01 SCA 选型反转口径),
配置控制面设计与阶段〇/一① plan 补 上级:;AGENTS.md/.agents README/feature-design-doc 模板同步七检口径。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
lili 2026-07-02 11:45:32 -07:00
parent 10aeed3cc2
commit 8e2d5d9e50
10 changed files with 168 additions and 6 deletions

View File

@ -75,7 +75,8 @@
| 文件 | 一句话说明 |
|---|---|
| `docs-gate.py` / `docs-gate.sh` | 文档治理机器门(engineering-conventions §10.7):六检——品牌不变量 / canonical 唯一 / 死链 / 入口卫生 / 留痕隔离 / 设计档申报 |
| `docs-gate.py` / `docs-gate.sh` | 文档治理机器门(engineering-conventions §10.7):七检——品牌不变量 / canonical 唯一 / 死链 / 入口卫生 / 留痕隔离 / 设计档申报 / 计划谱系(`上级:` 单指针) |
| `plan-tree.py` | 计划谱系树查询视图(engineering-conventions §10.8):沿 frontmatter `上级:` 拼树打印,回答「某计划在上线计划的哪个位置 / 某线推进到哪」 |
| `doc-organizer.{sh,-analyze.mjs}` + `doc-organizer-state.json` | doc-organizer 底层:检测(scan/health/stale/ledger)+ 可逆归档 + 记时 + 三轴分析 Workflow + 增量窗口锚点 |
---

View File

@ -302,7 +302,7 @@ subject: 动词开头,简明描述(中英文均可)
> 由来:2026-06-20 文档治理复盘发现,§10.1–10.6 规则写得相当全,却全靠无状态 agent"自觉执行"——于是规则都在、品牌名却半新半旧、同一主题散多份、AGENTS.md 自己挂着旧名。2026-07-02 全量普查再次实证(索引给已删档打 ACTIVE 标、28 处死链、四门零脚本)。解药 = 把规则编译成机器门 + 给整体一致性立一个有状态的主人。**门已落地为可执行脚本**:[`../tools/docs-gate.py`](../tools/docs-gate.py)(`bash .agents/tools/docs-gate.sh` 即跑,<5s)。
**六检(查什么 → 红线 → 白名单)**:
**七检(查什么 → 红线 → 白名单)**:
- **G1 品牌不变量** — 活层扫**退役品牌根**(旧名字面量只存在于门脚本 `BRAND_RETIRED` 常量;散文一律写"退役品牌名",不再写出字面量,规则文件因此无需豁免)。红线:活层命中即挡。白名单:`docs/ip/`(申报材料须与提交一致)、`_archive/`、`_recall/`、文件名以日期开头的留痕档、行内 `brand-ok` 标记(极少数合法引用手动豁免)。
- **G2 canonical 唯一性 + 注册表对账** — frontmatter `canonical: true` 的 `topic` 全仓唯一,且与 [`docs/architecture/README.md`](../../docs/architecture/README.md) §2 注册表双向一致(表里每行有对应文件、每个 canonical 文件在表里);`_archive/` 内不得标 canonical。红线:同 topic 第二份即挡(杀 doc-sprawl / 影子 SoT)。
@ -310,6 +310,7 @@ subject: 动词开头,简明描述(中英文均可)
- **G4 入口卫生** — AGENTS.md 只放项目事实,禁仓库克隆命令/全局安装/个人绝对路径/localhost 端点。
- **G5 留痕隔离** — 策展层(AGENTS.md、`docs/architecture/` 非归档、`.agents/`)不得 md 链接非 canonical 的留痕档(`docs/plans/`、`docs/brainstorms/`、agent-specs 带日期档);豁免:指向 `_index.md`(在飞板)与 canonical 目标(如 canonical 的执行计划)。`docs/mvp/` 活账不在源集合(账本引证据是其性质),其死链由 G3 兜底、主叙事堆历史链接由 doc-organizer 巡检看住。
- **G6 设计档申报(输入侧门)** — `docs/agent-specs/*-设计.md` 必带 frontmatter `topic` + `status` + `sot-impact`(新建 topic / 修订某 topic / 纯留痕)——强制"开工前查注册表",治"新设计漏读既有设计"的根因;配套流程见 [`feature-design-doc`](../skills/feature-design-doc.md)。
- **G7 计划谱系(单指针 `上级:`)** — 2026-07-03 起新建的 `docs/plans/*-plan.md` 与 `docs/agent-specs/*-设计.md` 必带 frontmatter `上级:`(仓根相对路径),且沿链 6 跳内到达某份 `canonical: true` 的 SoT;上级死链、链断(中途某档既非 canonical 又无 `上级:`)、成环、超跳数任一即挡。存量档不强制回填,带了就验。约定本体与设计理由见 §10.8。
**门③(doc↔code 兑现门,规格保留、随生成主线 harness 落地)**:keystone 设计声明的关键产物约束必须有机器可验断言且收口真跑。首批断言:生成产物 = `src/` 多文件工程(玩法逻辑落真实源码文件,禁"逻辑只以 JSON 字符串存在 / 运行时动态求值内嵌代码串"——终态定调见 [`agentic运行时架构图说`](../../docs/architecture/架构/生成引擎/agentic运行时架构图说.md))。红线:断言失败 = 实现未兑现设计,挡收口。
@ -318,3 +319,13 @@ subject: 动词开头,简明描述(中英文均可)
**AGENTS.md 自检(根不设防最危险)**:改名/子系统增删/核心决策推翻时,同一 commit 重审 AGENTS.md(品牌、死链、canonical 对账、入口卫生——docs-gate 固定扫)。实证教训:改名十天后入口标题仍挂旧名,正因为"没人想到去审根"。
**整体一致性归属**:机器门兜不住的灰色判断(哪份过期、两份冲突信哪份、补丁还是架构信号),显式归**创始人 + 6c6g 文档/设计线**(有状态主体),不再压在无状态主 agent 头上。
### 10.8 计划/设计档谱系:单指针 `上级:`(2026-07-02 立)
> 由来:配置控制面阶段一② plan 起草后,创始人问"这份计划在整个上线计划的哪个位置",答案要靠考古拼装——plan frontmatter 只指到直接设计档,执行序列 SoT 又没认领配置控制面这条线(中间实断),"阶段"一词还有三套坐标系撞车。此前个别 plan 自发写过 `slice:`/`origin:`/`关联设计:` 等自由字段,各写各的、无人验证。根因:谱系信息一旦散落多处、靠手抄维护,必然腐烂。解药 = 谱系只写一条不重复的最小事实,其余全部推导。
- **约定**:2026-07-03 起,新建 `docs/plans/*-plan.md` 与 `docs/agent-specs/*-设计.md` 的 frontmatter 必带一行 **`上级: <仓根相对路径>`**,指向它的直接上级文档(plan 的上级通常是设计档,设计档的上级通常是它所属执行线的计划/SoT);沿链 6 跳内必须到达某份 `canonical: true` 的 SoT(计划线顶端 = 16 周上线主计划 / 统一执行计划)。存量档不强制回填,带了就验(docs-gate G7)。
- **为什么是单指针**:全链、树、"这条线推进到哪"都应是**查询结果而非维护对象**。上级改名、改阶段划分,下游零回填;不设人读面包屑字段(那是缓存,缓存必腐);不给 `_index.md` 加逐叶登记义务(在飞板保持线级手工策展,索引永不因叶子计划膨胀)。
- **开工前的定位动作,不是事后标签**:写新 plan 的第一步是给 `上级:` 填一个真实存在的家。**填不出来 = 上级还没认领这条线**,先回写上级(如统一执行计划的相应切片/线)再开工——G7 把这个动作从自觉变成强制。
- **查询视图**:`python3 .agents/tools/plan-tree.py` 打印全谱系树(带各档 status,`--orphans` 列未挂谱系的存量档),回答"某档在哪 / 某线推进到哪"。
- **消歧红利**:链上每级的名字来自上级文档本身,引用"阶段/切片"时自然带上坐标系(是 16 周主计划的阶段、还是某设计档的阶段),不再靠散文约定。

View File

@ -60,6 +60,7 @@
---
date / topic / status(草稿 | 评审中 | 已批准 | 已实现)
sot-impact: 新建 topic X | 修订 topic Y | 纯留痕 # G6 申报(第 0 步的产出)
上级: <仓根相对路径> # G7 谱系单指针:本档的直接上级(通常是所属执行线的计划/SoT);填不出来 = 上级还没认领这条线,先回写上级再开工(§10.8)
关联: <代码 / 契约路径 + commit hash> # 防漂移门
图清单: [图1 概览, 图2 边界, ...]
---

View File

@ -2,13 +2,14 @@
# -*- coding: utf-8 -*-
"""文档治理门(engineering-conventions §10.7 的可执行实现 · 2026-07-02 立)
六检,任一失败退出码非零;每检打印通过/命中明细:
七检,任一失败退出码非零;每检打印通过/命中明细:
G1 品牌不变量 活层禁退役品牌根(白名单:docs/ip、_archive、_recall、日期留痕档、行内 brand-ok 标)
G2 canonical `canonical: true` 的 topic 全仓唯一,且与 docs/architecture/README.md 注册表双向对账
G3 死链 活层 md 的 []() 相对链接与反引号内 docs/·.agents/ 仓内路径必须存在(git show 定位放行)
G4 入口卫生 AGENTS.md 禁 git clone / 全局安装 / 个人绝对路径 / localhost
G5 留痕隔离 策展层(AGENTS.md、docs/architecture、.agents)不得链接非 canonical 的留痕档(plans/brainstorms/dated specs;_index.md 与 canonical 目标豁免)
G6 设计档申报 docs/agent-specs/*-设计.md 必带 frontmatter topic/status/sot-impact
G7 计划谱系 新建 plan/设计档必带 frontmatter `上级:`(仓根相对路径单指针),沿链 6 跳内达 canonical SoT;死链/断链/成环即挡(engineering-conventions §10.8)
用法:python3 .agents/tools/docs-gate.py [仓库根,缺省=脚本上两级]
挂载:.githooks/pre-commit(git config core.hooksPath .githooks)、.gitea/workflows/docs-gate.yml、wave-close 第 8 步。
@ -228,8 +229,58 @@ def g6():
check("G6 设计档申报(topic/status/sot-impact)", problems)
# ---------- G7 计划谱系(单指针 上级:) ----------
G7_CUTOFF = "2026-07-03" # 生效日:文件名日期 >= 此日的新档必带 上级:;存量自愿(带了就验)
G7_MAX_HOPS = 6 # 谱系链跳数上限(计划树实际 3-4 级,6 留余量)
def g7():
"""计划/设计档谱系门:每档一行 `上级:`(仓根相对路径),沿链必达 canonical SoT。
只验证「单指针 + 链可达」这条最小事实(engineering-conventions §10.8);
全链/树/当前位置都是查询视图(.agents/tools/plan-tree.py),不在门内维护。
"""
problems = []
holders = [] # 所有带 上级: 的档(存量自愿带了也验)
for base, suffix in (("docs/plans", "-plan.md"), ("docs/agent-specs", "-设计.md")):
d = os.path.join(ROOT, base)
if not os.path.isdir(d):
continue
for fn in sorted(os.listdir(d)):
if not fn.endswith(suffix) or not DATED.match(fn):
continue
fp = os.path.join(d, fn)
fm = frontmatter(fp)
if fn[:10] >= G7_CUTOFF and not fm.get("上级"):
problems.append(f"{rel(fp)} 缺 frontmatter `上级:`(新档必须单指针挂进计划谱系,§10.8)")
elif fm.get("上级"):
holders.append(fp)
for fp in holders:
cur, seen = fp, set()
for _ in range(G7_MAX_HOPS + 1):
fm = frontmatter(cur)
if fm.get("canonical") == "true" and cur != fp:
break # 达 canonical SoT,链成立
parent = fm.get("上级")
if not parent:
problems.append(f"{rel(fp)} 谱系断链:{rel(cur)} 既非 canonical 也无 `上级:`(上级需先认领这条线)")
break
tgt = os.path.normpath(os.path.join(ROOT, parent))
if not os.path.isfile(tgt):
problems.append(f"{rel(fp)} 上级死链:{rel(cur)} -> {parent}")
break
if tgt in seen or tgt == cur:
problems.append(f"{rel(fp)} 谱系成环:{parent}")
break
seen.add(cur)
cur = tgt
else:
problems.append(f"{rel(fp)} 谱系超 {G7_MAX_HOPS} 跳未达 canonical SoT")
check("G7 计划谱系(`上级:` 单指针沿链达 canonical)", problems)
if __name__ == "__main__":
for fn in (g1, g2, g3, g4, g5, g6):
for fn in (g1, g2, g3, g4, g5, g6, g7):
fn()
if FAILS:
print(f"--- docs-gate 未过:{len(FAILS)} 检失败({'、'.join(FAILS)}) ---")

View File

@ -0,0 +1,94 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""计划谱系树(engineering-conventions §10.8 的查询视图 · 2026-07-02 立)
沿 frontmatter `上级:` 单指针把 plan/设计档拼成树打印,回答两个问题:
「这份计划在整个上线计划的哪个位置」「某条线当前推进到哪份文档」。
谱系的唯一事实 = 每档一行 `上级:`(docs-gate G7 验证);本工具只是查询视图,不维护任何状态。
用法:python3 .agents/tools/plan-tree.py [仓库根,缺省=脚本上两级]
"""
import os
import re
import sys
ROOT = os.path.abspath(sys.argv[1]) if len(sys.argv) > 1 else os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", ".."))
DATED = re.compile(r"^\d{4}-\d{2}-\d{2}-")
def frontmatter(fp):
"""浅解析 frontmatter(与 docs-gate.py 同口径,只认顶层 `key: value` 行)。"""
try:
with open(fp, encoding="utf-8", errors="ignore") as f:
lines = f.read().splitlines()
except OSError:
return {}
if not lines or lines[0].strip() != "---":
return {}
fm = {}
for line in lines[1:60]:
if line.strip() == "---":
break
m = re.match(r"^([A-Za-z一-鿿][\w\-一-鿿]*):\s*(.*)$", line)
if m:
fm[m.group(1)] = m.group(2).split("#")[0].strip()
return fm
def main():
# 节点 = 全部 plan/设计档 + 被 `上级:` 指到的任何 md(如 docs/mvp 主计划)
nodes = {} # 仓根相对路径 -> frontmatter
for base, suffix in (("docs/plans", "-plan.md"), ("docs/agent-specs", "-设计.md")):
d = os.path.join(ROOT, base)
if not os.path.isdir(d):
continue
for fn in sorted(os.listdir(d)):
if fn.endswith(suffix) and DATED.match(fn):
nodes[f"{base}/{fn}"] = frontmatter(os.path.join(d, fn))
children, orphans = {}, [] # 上级 -> [子];无上级且无人引用的存量档
for p, fm in sorted(nodes.items()):
parent = fm.get("上级")
if parent and os.path.isfile(os.path.join(ROOT, parent)):
children.setdefault(parent, []).append(p)
elif not parent:
orphans.append(p)
# 根 = 被引用为上级、但自身不在(或不再向上指)的档;补读其 frontmatter 取状态
referenced = set(children)
for p in sorted(referenced):
if p not in nodes:
nodes[p] = frontmatter(os.path.join(ROOT, p))
roots = [p for p in sorted(referenced) if not nodes[p].get("上级") or nodes[p].get("上级") not in referenced.union(nodes)]
def label(p):
fm = nodes.get(p, {})
tags = []
if fm.get("canonical") == "true":
tags.append("canonical")
status = (fm.get("status") or fm.get("topic") or "").strip()
if status:
tags.append(status[:44] + ("…" if len(status) > 44 else ""))
return f"{p}" + (f" 〔{' · '.join(tags)}〕" if tags else "")
def show(p, prefix=""):
kids = children.get(p, [])
for i, k in enumerate(kids):
last = i == len(kids) - 1
print(prefix + ("└─ " if last else "├─ ") + label(k))
show(k, prefix + (" " if last else "│ "))
if not roots:
print("(还没有任何档挂谱系:给 plan/设计档 frontmatter 加 `上级:` 后再跑)")
for r in roots:
print(label(r))
show(r)
# 未挂谱系的存量留痕档只报数,不刷屏(§10.8:存量不强制回填)
if orphans:
print(f"\n未挂谱系的存量档 {len(orphans)} 份(留痕层,按需回填 `上级:`;明细加 --orphans 查看)")
if "--orphans" in sys.argv:
for p in orphans:
print(f" {p}")
if __name__ == "__main__":
main()

View File

@ -109,7 +109,7 @@ games-development-ai/
7. **不留孤儿设计**:新功能/数据结构/API/领域模型,连同入口、使用路径、失败模式、验收标准一并交付。
8. **plan 文档双评审门**(2026-06-18,创始人):新建 brainstorm/plan/设计文档,收口前必须过 Codex + Opus 双评审(Codex 不可用则 Opus 单评);把设计前提喂进去,文内修掉发现项。
9. **内网阶段:决策与密钥进项目文档,不进 env var**(2026-06-18,创始人):密钥 → [`docs/内网凭据与端点.md`](docs/内网凭据与端点.md)(single source of truth,需要 key 读它、不要再问);决策 → 相应活档,永不只留在聊天里。
10. **文档治理机器门**(2026-06-20 立,2026-07-02 落地脚本):规则必须编译成机器门,否则等于没有。门 = [`.agents/tools/docs-gate.sh`](.agents/tools/docs-gate.sh) 六检——G1 品牌不变量(活层禁退役品牌名;唯一字面量存于门脚本)/ G2 canonical 唯一性 + 注册表对账 / G3 死链 / G4 入口卫生(本文件禁机器 setup、个人路径、硬编码端口)/ G5 留痕隔离(策展层不链非 canonical 留痕)/ G6 设计档申报(topic/status/sot-impact)。挂载:pre-commit + Gitea Actions + wave-close 第 8 步;细则与白名单见 [engineering-conventions §10.7](.agents/rules/engineering-conventions.md)。门③(doc↔code 兑现断言)规格同见 §10.7,随生成主线 harness 落地。
10. **文档治理机器门**(2026-06-20 立,2026-07-02 落地脚本):规则必须编译成机器门,否则等于没有。门 = [`.agents/tools/docs-gate.sh`](.agents/tools/docs-gate.sh) 七检——G1 品牌不变量(活层禁退役品牌名;唯一字面量存于门脚本)/ G2 canonical 唯一性 + 注册表对账 / G3 死链 / G4 入口卫生(本文件禁机器 setup、个人路径、硬编码端口)/ G5 留痕隔离(策展层不链非 canonical 留痕)/ G6 设计档申报(topic/status/sot-impact)/ G7 计划谱系(新建 plan/设计档必带 frontmatter `上级:` 单指针,沿链可达 canonical SoT;谱系树用 `.agents/tools/plan-tree.py` 查询)。挂载:pre-commit + Gitea Actions + wave-close 第 8 步;细则与白名单见 [engineering-conventions §10.7](.agents/rules/engineering-conventions.md)。门③(doc↔code 兑现断言)规格同见 §10.7,随生成主线 harness 落地。
11. **横切一致性主人 + AGENTS.md 自审**(2026-06-20,创始人):跨文档/跨时间的一致性(SoT 收敛、品牌统一、设计↔代码兑现、本文件新鲜度)显式归**创始人 + 6c6g 文档/设计线**(有状态主体),负责机器门做不出的灰色判断。任何改名/子系统增删/核心决策推翻,**同一 commit 必须重审本文件**(品牌、死链、canonical 对账、入口卫生——docs-gate 固定扫)。
12. **落档文档 = 资深工程师写的散文**(2026-06-21,创始人):流畅人读中文、逻辑连续、必要处配直白图表。**禁三样**:元叙述("本文讲什么/下面介绍/前面讲过")、AI 造词与黑话堆砌(项目既有术语可用,首次出现讲清)、套话空强调("至关重要/本质上/值得注意的是")。派子代理写文档,必须把本标准连同正反例一起传下去(只传"写散文"不够,输出会退回 AI 味)。

View File

@ -3,6 +3,7 @@ date: 2026-06-30
topic: 配置控制面
status: 草稿 · 生态原生架构重写(经多轮源码核查)· Opus 复评已过(承重墙 W1/W2/W3 + 第3处 SoT 偏离 + 次要 S1-S6 已在文内修掉)· 生产基建 build-vs-buy 尽调采纳(§3.7:Nacos/RocketMQ/Sentinel,AGENTS.md §3.1 同步反转)· 待创始人评审 → writing-plans
sot-impact: 修订 生成引擎运行时(SoT §5.2/§5.8/ADR-4 按本设计修正,收口时回写)
上级: docs/plans/2026-06-25-生成引擎统一执行计划-AgentScope三档-plan.md
关联:
- agentscope==2.0.2:app/_service/_chat.py(每 POST 从存储现装配 agent+model=per-POST 热重载)· app/_router/_agent.py(/agent CRUD:name/system_prompt/ContextConfig/ReActConfig)· app/_router/_session.py(/session:ChatModelConfig=model/type/credential/parameters)· agent/_agent.py(reply 循环 :595-620 finish 点)· types/_hook.py + middleware(reply/reasoning/acting/model-call 钩点,可 intercept+modify)· observability/studio_sink.py(Studio 桥)
- tier2/gen-worker/service/control_plane.py(现有外层 resume,将改为 middleware)· worker/middleware.py(CircuitBreakerMiddleware 软/硬预算)· worker/run.py:811(run_gates 纯函数,将包 MCP)· worker/store.py(自建 MySQL+MinIO 成品归档,保留)· worker/toolkit.py(九工具)

View File

@ -5,6 +5,7 @@ topic: 生成引擎执行计划
date: 2026-06-25
updated: 2026-06-26
canonical: true
上级: docs/mvp/可行性方案16周-波次映射.md
supersedes:
- 自身 2026-06-25 横切 WU 主轴版(本次换轴为纵切执行序列;WU-A..F 全部内容保留为 §7 设计面对账,git 留演进痕)
- docs/plans/2026-06-18-001-feat-gen-lifecycle-and-tier1-breadth-plan.md(SAA 主线骨架退役;有效项入切片一与基建线)
@ -182,7 +183,7 @@ WU-A..F 是六个关注面,不是六个时间阶段。把它们当执行序列
**生长纪律**:这条线不预先全铺,按切片二 / 三的可观测、可调试、可治理需要长出来。硬约束两条:别在裂的地基(prompt 构建期快照这个反模式)上盖更大的注册表,先补一致性 CI 再推广;只有 Phaser 一个真实现时不抽能力面五件套通用接口,等第二引擎落地有两个实现再抽(rule-of-three)。
**现状**:D12 治理门已落(默认关、SAA Java 后端);tier2 侧 OTel 全落真跑;prompt 构建期快照是待治的反模式。
**现状**:D12 治理门已落(默认关、SAA Java 后端);tier2 侧 OTel 全落真跑;prompt 构建期快照是待治的反模式。**2026-06-30 起,本线的控制面主体由[配置控制面设计](../agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md)细化认领**(生产基建 SCA 三件套 → 生成归并 Service + 护城河 middleware → 配置中心 yudao⊕Nacos → 配置编辑 UI → 观测,五阶段串行;2026-07-01 反转采 Nacos/RocketMQ/Sentinel 生产现货,取代本节早先"配置热取自建注册表"的口径):阶段〇与阶段一①已落地 push,阶段一②(cheap 归并 Service)在飞。
**跨设计面**:WU-C 5.2 / 5.5(仅 skill·tool·mcp 注册到 A13 子项;能力面主体在切片二)/ 5.7 / 5.8 · WU-E phase-1 · WU-D 第一批(ADR-3 trace、ADR-4 配置热取);设计 SoT §5.2 / 5.5 / 5.7 / 5.8。

View File

@ -3,6 +3,7 @@ date: 2026-07-01
topic: 配置控制面-spike与阶段〇
status: 已执行完成(SDD 8 任务全绿 + 最终整分支 review With fixes 已修,分支 merge-ready,2026-07-01)· ⚠️ 勘误(C3 review 纠正):本 plan 正文多处「并发权威=consumeThreadMax」framing 有误 —— consumeThreadMax/consumeThreadNumber=15 只 cap dispatch 投递速率;真「在跑生成并发≤15」=有界 worker 池(follow-up);现行口径 + 执行留痕见 `.superpowers/sdd/progress.md` · 原:§6.8 评审已过 → 执行
关联设计: docs/agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md(§3.4 续修 middleware / §3.7 基建选型 / §4 阶段〇)
上级: docs/agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md
---
# 配置控制面 · 续修 spike 与阶段〇生产基建 · 实施计划

View File

@ -3,6 +3,7 @@ date: 2026-07-02
topic: 配置控制面-阶段一①
status: §6.8 双评审已过(Opus+Codex 双线独立收敛,2 Critical + 7 Important + 3 Minor 已文内修;Codex 另发现 I-2 异常穿透已修)· 3 材料级判断创始人已拍(续修时延接受慢重标定 / 预算耗尽至少修一次 / 尽力产物只 on-disk)· 待创始人终评审 → SDD 执行
关联设计: docs/agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md(§3.4 护城河 middleware / §4 阶段一)
上级: docs/agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md
前置: docs/plans/2026-07-01-配置控制面-spike与阶段〇生产基建-plan.md(A1 续修 spike 已坐实、机制回归绿)
范围: 创始人 2026-07-02 拍板三项——① 阶段一拆两个 plan,本 plan = 阶段一①「护城河 middleware 线」(tier2 路先行、端到端验证);cheap-worker 归并 Service = 阶段一②(本 plan SDD 执行完再写)。② 九门 MCP 化 defer(run_gates 现为 FunctionTool、agent 自查已够,放行权威在 middleware 独立重跑,不在本 plan)。③ 软预算改软停交尽力产物(不再 fail-closed 断链)。
---