diff --git a/.agents/README.md b/.agents/README.md index ea0485b3..7eaf6c86 100644 --- a/.agents/README.md +++ b/.agents/README.md @@ -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 + 增量窗口锚点 | --- diff --git a/.agents/rules/engineering-conventions.md b/.agents/rules/engineering-conventions.md index c9257ea8..39189801 100644 --- a/.agents/rules/engineering-conventions.md +++ b/.agents/rules/engineering-conventions.md @@ -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 周主计划的阶段、还是某设计档的阶段),不再靠散文约定。 diff --git a/.agents/skills/feature-design-doc.md b/.agents/skills/feature-design-doc.md index 0319600b..d74bbb93 100644 --- a/.agents/skills/feature-design-doc.md +++ b/.agents/skills/feature-design-doc.md @@ -60,6 +60,7 @@ --- date / topic / status(草稿 | 评审中 | 已批准 | 已实现) sot-impact: 新建 topic X | 修订 topic Y | 纯留痕 # G6 申报(第 0 步的产出) +上级: <仓根相对路径> # G7 谱系单指针:本档的直接上级(通常是所属执行线的计划/SoT);填不出来 = 上级还没认领这条线,先回写上级再开工(§10.8) 关联: <代码 / 契约路径 + commit hash> # 防漂移门 图清单: [图1 概览, 图2 边界, ...] --- diff --git a/.agents/tools/docs-gate.py b/.agents/tools/docs-gate.py index 463d0da8..695ae76e 100644 --- a/.agents/tools/docs-gate.py +++ b/.agents/tools/docs-gate.py @@ -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)}) ---") diff --git a/.agents/tools/plan-tree.py b/.agents/tools/plan-tree.py new file mode 100644 index 00000000..83121777 --- /dev/null +++ b/.agents/tools/plan-tree.py @@ -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() diff --git a/AGENTS.md b/AGENTS.md index 348bc582..55da7b4b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 味)。 diff --git a/docs/agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md b/docs/agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md index f0d448da..6c34dbd7 100644 --- a/docs/agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md +++ b/docs/agent-specs/2026-06-30-配置控制面一次性按序实现-设计.md @@ -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(九工具) diff --git a/docs/plans/2026-06-25-生成引擎统一执行计划-AgentScope三档-plan.md b/docs/plans/2026-06-25-生成引擎统一执行计划-AgentScope三档-plan.md index ba6bade2..549ad119 100644 --- a/docs/plans/2026-06-25-生成引擎统一执行计划-AgentScope三档-plan.md +++ b/docs/plans/2026-06-25-生成引擎统一执行计划-AgentScope三档-plan.md @@ -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。 diff --git a/docs/plans/2026-07-01-配置控制面-spike与阶段〇生产基建-plan.md b/docs/plans/2026-07-01-配置控制面-spike与阶段〇生产基建-plan.md index 180d4cff..ca4265f9 100644 --- a/docs/plans/2026-07-01-配置控制面-spike与阶段〇生产基建-plan.md +++ b/docs/plans/2026-07-01-配置控制面-spike与阶段〇生产基建-plan.md @@ -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 与阶段〇生产基建 · 实施计划 diff --git a/docs/plans/2026-07-02-配置控制面阶段一-护城河middleware-plan.md b/docs/plans/2026-07-02-配置控制面阶段一-护城河middleware-plan.md index 83743fd3..a7f6bc70 100644 --- a/docs/plans/2026-07-02-配置控制面阶段一-护城河middleware-plan.md +++ b/docs/plans/2026-07-02-配置控制面阶段一-护城河middleware-plan.md @@ -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 断链)。 ---