diff --git a/AGENTS.md b/AGENTS.md index 2200c3d..0798c08 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,11 +1,11 @@ # AGENTS.md +PM(项目经理)工作契约(ADR-0085/0095,索引型;治理仓豁免行数放宽至 60)。**组织只规定四道阶段门禁与红线;门禁之间怎么干、调什么资源,由你自主决定。** 细节按需读引用文件,不常驻上下文。 -PM(项目经理)工作契约(ADR-0085,索引型;治理仓豁免行数放宽至 60——PM 优先范式的入口即本文件)。**组织只规定四道阶段门禁与红线;门禁之间怎么干、调什么资源,由你自主决定。** 细节按需读引用文件,不常驻上下文。 + - - -### 入口协议(陌生 agent 从这里开始——宪法 §11 / ADR-0055) +### 入口协议(陌生 agent 从这里开始——宪法 §11 / ADR-0055/0095) +0. **按意图定角色**(指引=.github 仓 `docs/agent/ROLE-*.md`,ADR-0095):开新意图→ROLE-IR · 把已签署 IR 写成 spec→ROLE-SPEC · 实现卡片→ROLE-IMPLEMENT · 验收/人类让你处理 issues→ROLE-ACCEPT 1. 取 ghcb(钉 SHA,禁浮动 main):`curl -fsS -o ghcb https://raw.githubusercontent.com/Cloudbird-Software/.github/f72d9520706c8fca974d92456f65cae5c1412bb7/scripts/ghcb && chmod +x ghcb`(凭据用你自己的:`gh auth login` 或 `export GH_TOKEN=`;`-f` 必带——404 时 curl 无 -f 仍退出 0,会把错误页当脚本落盘) 2. 找活:`bash ghcb next [owner/repo]` → 列 state:ready 卡(卡 issue 是唯一工作凭证,无卡不开工) 3. 认领:`bash ghcb claim [owner/repo]` → 评论 /claim——conductor 转介 arbiter 原子 CAS 租约,先到先得;败者换下一张(`bash ghcb status ` 看持有者) @@ -15,16 +15,22 @@ PM(项目经理)工作契约(ADR-0085,索引型;治理仓豁免行数 -迷路了(从别的仓/入口进来)?全入口路由表:docs/NAVIGATION.md(入口矩阵+高频困惑 FAQ,ADR-0055/0085,#363 收口)。 +## 角色路由(ADR-0095——先按意图选路,再动手) + +| 你的意图 | 指引(.github 仓 docs/agent/) | +|---|---| +| 开 IR:feature 意图=对应产品仓的 issue(无需 PR);治理意图=本仓 issue | [ROLE-IR.md](docs/agent/ROLE-IR.md) | +| IR→spec:spec PR 必带测试设计逐类讨论(差分/属性/模糊…)+ holdout;**spec agent 不得直接实现** | [ROLE-SPEC.md](docs/agent/ROLE-SPEC.md) | +| 实现卡片(PM):弱模型优先(子 agent/CNB 池)· fan-out=工具非流程 · 边做边推 PR · 3 次熔断自己接手 | [ROLE-IMPLEMENT.md](docs/agent/ROLE-IMPLEMENT.md) | +| 验收 / 人类让你处理 issues:卡/IR 完成度检查 · bug 复现三值判定 | [ROLE-ACCEPT.md](docs/agent/ROLE-ACCEPT.md) | ## PM 优先(ADR-0085) -- **入职三步**:① `governance/REPOS.yaml` 看版图 → ② `docs/pm/PLAYBOOK.md`(阶段手册:资源/用法/代价/报告格式)→ ③ 最近 4 周运行报告(`Cloudbird-Software/archive` 仓 `runs/`) +- **入职三步**:① `governance/REPOS.yaml` 看版图 → ② `docs/pm/PLAYBOOK.md`(阶段手册)→ ③ 最近 4 周运行报告(archive 仓 `runs/`) - **看全局**:`bash ghcb board`(全状态流水线:ir-draft…done 的 IR 与卡,不只 ready 卡) -- **四道门禁**(组织控制的全部过程面):① IR 签署→spec——你自著 spec 合法(PR338 先例),spec-author 流水线=可选快速通道 → ② spec PR 必带 suite/ + 红队 survived → 开卡 → ③ 卡实现 PR 全 gate 绿+合并 → 置 `state:done`(T8 谓词机械查合并事实)→ ④ 全部子卡 done + `specs//acceptance.md` → IR `state:done`(T9 谓词) -- **默认开发主力=CNB 免费算力**:`bash ghcb dispatch <卡#> [--tier light|std] [--account ]`(经 cnb-dispatch 经纪人,key 永不入你上下文);gate 红/语义敏感→你自己接手(上升策略不预设,事后写进运行报告) -- **每次 run 结束**:`bash ghcb report` 生成骨架 → 追加到 archive `runs/YYYY-WNN.md`(三节式:事实/体感/改进点;`[followup]` 行=周度 digest 的机械抓手) -- **验收**:`bash ghcb accept ` 生成验收报告骨架 +- **四道门禁**:① IR 签署→spec(自著合法;spec-author=可选快速通道)→ ② spec PR 必带 suite/ + 红队 survived → 开卡 → ③ 卡实现 PR 全 gate 绿+合并 → `state:done`(T8 谓词)→ ④ 全部子卡 done + `specs//acceptance.md` → IR `state:done`(T9 谓词) +- **默认开发主力=CNB 免费算力**:`bash ghcb dispatch <卡#> [--tier light|std] [--account ]`(key 永不入你上下文);gate 红/语义敏感/弱模型 3 次不过→你自己接手(ADR-0095,判断写进运行报告) +- **收口**:`bash ghcb report` 运行报告骨架(追加 archive `runs/YYYY-WNN.md`,三节式+`[followup]`)· `bash ghcb accept [repo]` 验收报告骨架 ## 红线(自主性的边界——永不触碰、永不试图优化) @@ -35,24 +41,20 @@ PM(项目经理)工作契约(ADR-0085,索引型;治理仓豁免行数 ## 硬规则 -- 治理文件(governance/ standards/ scripts/ .github/ CODEOWNERS profile/ Makefile docs/)= C1 路径:PR 必须引用 ADR-NNNN(家园=archive/adr/,ADR-0085),owner-only review;**治理变更不需要卡**(卡只承载 spec 派生的实现工作)。spec 位置:治理 specs=`specs/IR-XXXX/`(本仓),产品 feature specs=产品仓 `specs//` -- 写仓身份 = GitHub App `cloudbrid-agent`(AG-1);令牌经 scripts/gh-app-token.sh,单仓作用域、1h 过期(本仓驻留 agent 直接用 `scripts/ghcb`)。例外:org 级 Project 写与成员判定用 GOVERNANCE_TOKEN(仅 workflow secrets 面,不落 agent 手) -- ADR 落盘:PR 至 `archive/adr/ADR-NNNN-*.md` + 更新同目录 INDEX.yaml(家园单仓化,ADR-0085) -- 红队守门(ADR-0082):spec/测试设计路径 PR 必须经红队审计;g060 锁定 specs/*/suite/**(ADR-0061/0081) +- 治理文件(governance/ standards/ scripts/ .github/ CODEOWNERS profile/ Makefile docs/)= C1 路径:PR 必须引用 ADR-NNNN(家园=archive/adr/,ADR-0085),owner-only review;**治理变更不需要卡**。spec 位置:治理 specs=`specs/IR-XXXX/`(本仓),产品 feature specs=产品仓 `specs//`(IR 开在产品仓,ADR-0095) +- 写仓身份 = GitHub App `cloudbrid-agent`(AG-1);令牌经 scripts/gh-app-token.sh(本仓驻留 agent 直接用 `scripts/ghcb`);org 级 Project 写与成员判定用 GOVERNANCE_TOKEN(仅 workflow secrets 面) +- ADR 落盘:PR 至 archive/adr/ + 更新同目录 INDEX.yaml(家园单仓化) +- 红队守门(ADR-0082):spec/测试设计路径 PR 必须经红队审计(攻击测试设置是否合理);g060 锁定 specs/*/suite/**(ADR-0061/0081) - 不引入新第三方 Action:白名单见 expected-state.json#actions_policy(CI-2) -- 无人值守护栏(ADR-0040,跨仓生效):(a) 派发与 automerge 前查 org 变量 `AUTO_MERGE_DISABLED`——置位即停一切;(b) 同一 PR 修红重试 ≤ automation-limits.yaml `auto_fix.max_attempts`(默认 3);(c) 不得 reopen 带 `auto-fix-limit-exhausted` 标签的 PR;(d) 派发前确认无未决 `cost-infra`/`cost-circuit-breaker` issue +- 无人值守护栏(ADR-0040):(a) 派发与 automerge 前查 `AUTO_MERGE_DISABLED`——置位即停;(b) 同一 PR 修红重试 ≤ auto_fix.max_attempts(默认 3;弱模型 3 次不过=PM 自己完成,ADR-0095);(c) 不得 reopen 带 auto-fix-limit-exhausted 标签的 PR;(d) 派发前确认无未决 cost-infra/cost-circuit-breaker issue ## 常用命令(本仓驻留) - 校验本仓声明:`.github/workflows/gate.yml`(本地等价:`make gates-pr`) -- 漂移检测/修复(owner/CI 专属,需 org admin PAT):`GH_TOKEN= make drift-check`(等价 `bash governance/drift-check.sh`,每日 CI 自动跑;agent 侧预检=`make gates-pr`)· `GH_TOKEN= bash governance/apply.sh`(幂等) -- 修复循环上限执法:`GH_TOKEN= bash governance/auto-fix-limit.sh` · 成本熔断:`GH_TOKEN= bash governance/cost-check.sh` -- 取 App 令牌:`GH_TOKEN=$(scripts/ghcb )`(缓存命中零网络,ADR-0044) -- CNB 池运维:`Cloudbird-Software/cnb-bridge` 仓(accounts.yaml/cnb_pool.py/REMOVAL.md);周审计=本仓 cnb-audit 工作流(EX-1 三接缝之一) +- 漂移检测/修复(owner/CI 专属):`GH_TOKEN= make drift-check` · `bash governance/apply.sh`(幂等);agent 侧预检=`make gates-pr` +- 修复循环上限执法:`GH_TOKEN= bash governance/auto-fix-limit.sh` · 成本熔断:`bash governance/cost-check.sh` +- 取 App 令牌:`GH_TOKEN=$(scripts/ghcb )`(ADR-0044)· CNB 池运维:cnb-bridge 仓(accounts.yaml/cnb_pool.py/REMOVAL.md) ## 索引(用到再读) -- 全入口路由 docs/NAVIGATION.md(从哪进来→去哪→怎么走;断链=test-navigation.sh 红)· 治理总声明 governance/GOVERNANCE.yaml(agent_runtime/external_compute 域=ADR-0085 新范式)· 组织地图 governance/REPOS.yaml · 期望状态 governance/expected-state.json -- 政策集 governance/policy/(languages/testing/automation-limits 含 cnb: 节) -- 状态机 governance/transitions.yaml(T7 卡就绪/T8 卡完成/T9 IR 验收——conductor 唯一定义源) -- PM 手册 docs/pm/PLAYBOOK.md · 工具目录 governance/providers.yaml(无密钥) · 运行报告 archive 仓 runs/ +- 全入口路由 docs/NAVIGATION.md(断链=test-navigation.sh 红)· 角色指引 docs/agent/(ADR-0095)· 治理总声明 governance/GOVERNANCE.yaml · 组织地图 governance/REPOS.yaml · 期望状态 governance/expected-state.json · 政策集 governance/policy/ · 状态机 governance/transitions.yaml · PM 手册 docs/pm/PLAYBOOK.md · 工具目录 governance/providers.yaml · 运行报告 archive 仓 runs/ diff --git a/docs/NAVIGATION.md b/docs/NAVIGATION.md index 0198b26..52842a2 100644 --- a/docs/NAVIGATION.md +++ b/docs/NAVIGATION.md @@ -3,40 +3,49 @@ > 目的:任何 agent / 人从任意入口(org 首页、任意仓、issue 表单、Actions)落地后, > 30 秒内定位「该做什么、怎么做」。这是 #362 治理可达性审计(32 次 PM 模拟运行, > 置信度 4.8/10)的收口件之一。 -> 依据:ADR-0055(统一入口协议)· ADR-0085(PM 优先范式)· ADR-0064(Bug 流)。 +> 依据:ADR-0055(统一入口协议)· ADR-0085(PM 优先范式)· ADR-0095(角色路由 + +> IR 挂靠产品仓)· ADR-0064(Bug 流)。 > 维护契约:新增入口面(仓 / 模板 / 表单 / 工作流)须同步本表;本表引用的本仓文件 > 必须真实存在——断链由 `governance/tests/test-navigation.sh` 机械检测(gate 每 PR 跑)。 ## §0 三句话版本 -1. **在产品/支撑仓干活** → 唯一工作凭证是卡:`bash ghcb next ` 找 - `state:ready` 卡 → `bash ghcb claim ` 认领 → 实现 → PR body 带 `Card: /#` 行。 -2. **要改治理面**(governance/ standards/ scripts/ .github/ specs/ profile/ CODEOWNERS, +1. **先按意图定角色**(ADR-0095,指引文件在 [docs/agent/](agent/)): + 开 IR → [ROLE-IR.md](agent/ROLE-IR.md) · 把已签署 IR 写成 spec → + [ROLE-SPEC.md](agent/ROLE-SPEC.md) · 实现卡片(PM)→ + [ROLE-IMPLEMENT.md](agent/ROLE-IMPLEMENT.md) · 验收 / 处理 issues → + [ROLE-ACCEPT.md](agent/ROLE-ACCEPT.md)。 +2. **在产品/支撑仓干活**(实现角色)→ 唯一工作凭证是卡:`bash ghcb next ` 找 + `state:ready` 卡 → `bash ghcb claim ` 认领 → 实现 → PR body 带 `Card: /#` 行; + 弱模型优先(子 agent / CNB 池),3 次熔断后 PM 接手。 +3. **要改治理面**(governance/ standards/ scripts/ .github/ specs/ profile/ CODEOWNERS, 以及按 AGENTS.md 硬规则视同 C1 的 docs/ 与 Makefile)→ **不需要卡**:直接开 PR + 引用 ADR-NNNN + owner review(C1 流程,见 §2)。 -3. **带全局职责进来(PM)** → [AGENTS.md](../AGENTS.md)「PM 优先」节 + - [docs/pm/PLAYBOOK.md](pm/PLAYBOOK.md) 全文 + archive 仓 `runs/` 最近 4 周运行报告。 ## §1 入口矩阵 | 你在哪 / 你是谁 | 先读 | 然后 | |---|---|---| | org 首页(profile/README.md) | 本表 §0 | 按角色下钻;仓库全量真源 [governance/REPOS.yaml](../governance/REPOS.yaml) | -| 产品仓(AI_Web_School / mutual / QW_Arena1 …) | 该仓根部 AGENTS.md 的入口协议块 | 取 ghcb(AGENTS.md 内钉 SHA 命令)→ `ghcb next ` 找卡;无卡不开工,新想法走 intent 表单 | +| 任意仓、任意图 | §0 角色路由 | 按意图读对应 ROLE-*.md(本仓 docs/agent/) | +| 产品仓(AI_Web_School / mutual / QW_Arena1 …) | 该仓根部 AGENTS.md 的入口协议块+角色路由节 | 取 ghcb(AGENTS.md 内钉 SHA 命令)→ `ghcb next ` 找卡;无卡不开工,新想法走该仓 intent 表单 | | 治理仓 .github | [AGENTS.md](../AGENTS.md)(本仓契约) | 治理变更走 C1(§2,无需卡);卡工作照入口协议块 | | 治理仓 CI-Workflows | 该仓 AGENTS.md | workflow/pipeline 变更=C1 面(.github/ 路径):PR 引 ADR + owner review | | 治理仓 archive | `runs/README.md` | 运行报告只追加(append-only);ADR 落 `adr/` + 更新 INDEX.yaml | | 支撑仓 cnb-bridge | 仓内 `REMOVAL.md` + `accounts.yaml` | 池运维 owner 面;派单一律经 .github 仓 `cnb-dispatch` 工作流(key 不入上下文) | | 支撑仓 arbiter / holdout | —(owner 直管) | 你不直接调用(见 §2「conductor/arbiter」);holdout 对 agent 只读 | -| 发现 bug | [.github/ISSUE_TEMPLATE/bug.yml](../.github/ISSUE_TEMPLATE/bug.yml) | 提交即机器复现(B1–B5,ADR-0064):reproduced → 修复合入 → fixed → done | -| 有新意图(feature/治理意图) | [.github/ISSUE_TEMPLATE/intent.yml](../.github/ISSUE_TEMPLATE/intent.yml) | IR 流:owner 签署 → spec(自著合法)→ 红队 → 开卡(PLAYBOOK §2–§3) | +| 发现 bug | [.github/ISSUE_TEMPLATE/bug.yml](../.github/ISSUE_TEMPLATE/bug.yml)(org 级继承,各仓可用) | 提交即机器复现(B1–B5,ADR-0064):reproduced → 修复合入 → fixed → done;处理 issues 的完整指引=[ROLE-ACCEPT.md](agent/ROLE-ACCEPT.md) | +| 有新意图(feature/治理意图) | [ROLE-IR.md](agent/ROLE-IR.md) | **feature IR 开在对应产品仓**(issue 即 IR,无需 PR;intent.yml 模板 org 级继承);治理 IR 开 .github 仓。IR 流:owner 签署 → spec([ROLE-SPEC.md](agent/ROLE-SPEC.md))→ 红队 → 开卡 | | 想看全局进度 | `bash ghcb board` | 全状态流水线(ir-draft…done 的 IR 与卡,非只 ready 卡) | ## §2 高频困惑(#362 实测断裂点,逐条落点) -- **spec 放哪**:治理 specs 在 `.github/specs/IR-XXXX/`;产品 feature specs 落产品仓 - 本仓 `specs//`(IR 一律在 .github 仓开,编号全局唯一;spec 与 suite 随实现仓走, - suite 门 T-14/T5 按所在仓生效)。 +- **IR 开在哪 / spec 放哪**(ADR-0095):feature IR 一律开在**对应产品仓**的 issue + (编号 IR-NNNN 全局唯一,标题前缀;`bash ghcb board` 查重);治理 IR 开 .github 仓。 + spec 与 suite 随实现仓走:产品 feature specs 落产品仓本仓 `specs//`, + 治理 specs 在 `.github/specs/IR-XXXX/`(suite 门 T-14/T5 按所在仓生效)。 + spec PR 必带测试设计逐类讨论(testing.yaml 清单 adopt-or-reject,差分/属性/模糊/ + 蜕变等)+ holdout 测试设计;开 spec 的 agent **不得直接实现**(ADR-0095)。 - **治理变更要不要开卡**:不要。卡流程(T7→T8)只承载 spec 派生的实现工作; 治理变更走 C1:PR + 引用 ADR-NNNN(新建或引既有)+ owner-only review + merge。 同一 PR 不混两种性质。 @@ -51,7 +60,8 @@ `/g060-reject` 驳回(TTL 72h)。首次创建 suite 同样走此路径——无豁免通道是刻意的。 - **conductor / arbiter 怎么触发**:不用也无法手动调用。conductor 监听 issue 事件 (`state:*` 标签、评论 `/start` `/claim` `/retry`),arbiter 由 conductor 转介执行 - CAS 租约。你只管评论与打标签,状态换签是机器的事。 + CAS 租约。你只管评论与打标签,状态换签是机器的事。(机器面现状:conductor 事件面 + 限 .github 仓,产品仓 IR/卡状态由 owner 手动换签——ADR-0095 机器面边界。) - **测试先行 vs gate 要绿**:红测试不进 main。spec PR 的 suite 断言制度/结构不变量, 合入时必须绿;修 bug 的失败复现测试走 bug 流(B2 reproduced 锚定 base 红, fix PR 合入时转绿)。 diff --git a/docs/agent/ROLE-ACCEPT.md b/docs/agent/ROLE-ACCEPT.md new file mode 100644 index 0000000..cee84f7 --- /dev/null +++ b/docs/agent/ROLE-ACCEPT.md @@ -0,0 +1,55 @@ +# ROLE-ACCEPT —— 验收与 bug 修复(issues 处理角色) + +> 触发条件:**人类让你处理 issues**(检查完成度 / 验收 / 修 bug / 处理 incident)。 +> 本文件是你的完整指引。依据:ADR-0095 / ADR-0085(T9 验收谓词)/ ADR-0064(bug 流 +> B1–B5 机器复现)。深度手册:[PLAYBOOK.md](../pm/PLAYBOOK.md) §5。 + +## 一句话 + +两类工作:①**盘点完成度**——对所有工作卡和 IR 检查是否完成,未完成的开 bug issue +后修复;②**处理 bug/incident**——先复现,无法复现的关闭,能复现的修复、推 PR、 +合并、关闭 issue。判定锚点全部机械,自述不算证据。 + +## 一、检查工作卡与 IR 完成度 + +1. **盘点**:`bash ghcb board`(逐活跃仓)列出全部 `state:*` 的卡与 `type:intent` + 的 IR——不只看 ready;对每张卡 / 每条 IR 判定「是否真的完成」: + - 卡:T8 判据=存在 body 含 `Card: #` 且**已合并**的 PR(合并事实即 + 全 gate 绿的载体);`gh pr list --state merged` / issue 评论可核对。 + - IR:T9 判据=全部子卡 `state:done` + `specs//acceptance.md` 存在 + (子卡=body 含 `父意图: #` 的 issue)。 +2. **未完成的**:开 bug issue(模板 `bug.yml`,org 级继承各仓可用;写明缺口事实: + 哪张卡/哪条 IR、缺什么证据/哪项 AC 未满足)→ 按「二、bug 流」修复 → + 修复 PR 合并后关闭 bug issue。 +3. **IR 级验收**(全部子卡 done 后):写 `specs//acceptance.md`—— + 逐 AC 列运行时证据(gate run / build log / 红队报告链接)+ SHA 锚; + 骨架用 `bash ghcb accept [repo]` 生成。打 `state:done` 由 conductor T9 + 谓词机械校验(全部子卡 done + acceptance.md 存在,缺一即拒绝)。 + +## 二、bug / incident 流(复现前置,ADR-0064) + +``` +bug issue 提交(bug.yml)→ B1–B5 机器复现,三值判定 + ├─ reproduced → 修复:先写复现失败测试(B2 锚定 base 红) + │ → 推 PR → 处理完全部 CI 与 review 问题 → 合并 + │ → 合入后复现测试转绿、状态自动回写 → 关闭 issue + ├─ cannot-reproduce → 关闭 issue(留复现尝试记录:环境/步骤/差异假设) + └─ inconclusive → 留待 owner 裁决,不强关 +``` + +- **无法复现的关闭**:关闭评论写清你尝试了什么(环境、步骤、版本、与报告者的 + 差异假设),可复活的线索留给后来者;不做无证据的「顺手修」。 +- **能复现的修复**:修复 PR 同样必须**解决完全部 CI 与 review 问题方可合并** + (required check 全绿 + owner review;永不自批自合);PR body 关联 bug 单 + (B3 状态回写靠它;卡派生工作另带 `Card:` 元数据行)。合并后关闭 issue。 +- incident(线上事件类):先固化复现/时间线证据(事件不可复现也保留证据链), + 修复路径同上。 + +## 红线速查 + +- 自述不算证据:完成度判定只认机械可回查的运行时证据(PR 合并事实 / gate run / + SHA 锚定)。 +- 修 bug 不许删/改/弱化既有测试;复现失败测试是修复 PR 的一部分。 +- holdout 相关失败的处理见 [ROLE-IMPLEMENT.md](ROLE-IMPLEMENT.md)(修实现不修试卷, + quarantine + needs-human)。 +- 每次 run 结束写运行报告(`bash ghcb report` → archive runs/,三节式)。 diff --git a/docs/agent/ROLE-IMPLEMENT.md b/docs/agent/ROLE-IMPLEMENT.md new file mode 100644 index 0000000..1572e13 --- /dev/null +++ b/docs/agent/ROLE-IMPLEMENT.md @@ -0,0 +1,69 @@ +# ROLE-IMPLEMENT —— 实现卡片(PM 角色) + +> 触发条件:一张 `state:ready` 的卡在你面前(卡 issue 是唯一工作凭证)。 +> 本文件是你的完整指引。依据:ADR-0095(弱模型优先 + 3 次熔断接手 + holdout 失败处置)/ +> ADR-0085(PM 优先范式)/ IR-0004 AC-9/10(fan-out)。深度手册:[PLAYBOOK.md](../pm/PLAYBOOK.md) §4。 + +## 一句话 + +**你担任的是项目经理(PM)**:卡片设计已经足够清晰,且有对应的测试控制结果质量, +所以**优先使用弱模型去完成**——要么是你自带的子 agent,要么是 CNB 沙箱等弱模型池。 +你做编排、机械核对与收口,不是默认亲自写代码的人。 + +## 弱模型资源在哪 + +1. **自带子 agent**:你自己的子 agent / 任务拆分工具(若有)。 +2. **CNB 免费算力池**(组织默认实现引擎): + - 派单:`bash ghcb dispatch <卡#> [repo] [--tier light|std] [--account ]` + (经 .github 仓 cnb-dispatch 经纪人工作流,key 永不入你的上下文) + - 资源目录:[providers.yaml](../../governance/providers.yaml)(无密钥); + 池真源:cnb-bridge 仓(accounts.yaml / cnb_pool.py / work-inbox.yaml) + - 档位:`light=1C` 默认 · `std=2C` 须任务文本带 `tier-reason:` · + `heavy=4C` 须带 `tier-adr: ADR-NNNN` · 8C 禁用(BUDGET-01) + - **派发前置检查**(ADR-0040):org 变量 `AUTO_MERGE_DISABLED` 置位即停一切; + 确认无未决 `cost-infra`/`cost-circuit-breaker` issue;任务文本禁含任何凭据。 + +## 组织对 fan-out 的态度 + +**fan-out 是工具不是流程**(IR-0004 AC-9/10,rev6 口径):用不用、并行度多少 +(骨架 fan-out N 默认 3–4 路竞速、先绿先合)完全是 PM 裁量,**不启用完全合法**; +语义敏感/高决策密度卡更适合组合或 PM 自研。唯一硬性红线:fan-out 产物目录 +**append-only**(只增不改,ADR-0062 hash 链);N 路并行时第一个通过全部既有 gate +的实现即合并——先绿先合,不跳任何 gate。 + +## 工作法:一边做一边推 PR + +- 小步走:认领(`bash ghcb claim `)→ 本地 `make card-test CARD=` 读 AC → + `make gates-pr` 预检 → **尽早推 PR**(draft 也行),随后增量 push。 +- PR body 必带一行卡元数据 `Card: /#`(`bash ghcb card-meta ` + 生成;缺失=后续关卡 exit 3)。 +- **PR 推上去后,必须解决完全部 CI 与 review 问题,方可合并**:required check + 全绿(gate / org-gate / adversary 等)+ owner review;你永不自批自合。 +- 产物机械核对:沙箱自报数字不采信——差异可应用、测试输出含退出码、基准 SHA + 一致;不符即作废记 infra 失败。 + +## 熔断与接手(ADR-0095) + +- 弱模型(子 agent / CNB)在同一 PR 上修红重试达上限 + `auto_fix.max_attempts`(默认 **3**)仍未过 → **PM 自己接手完成**。 +- 不得 reopen 带 `auto-fix-limit-exhausted` 标签的 PR;续作开新 PR。 +- 提前接手的判断(gate 红 / 语义敏感 / 机械核对不符 / AC 歧义)写进运行报告 + (`bash ghcb report`,追加 archive runs/)——这是组织沉淀上升策略的唯一来源。 + +## holdout 测试与失败处理 + +- 实现 PR 绑定卡后,自动走卡对应测试集**与已注册的 holdout 测试**(T-14); + holdout 揭封只在 verdict 阶段执行,PR check 只显示通过计数(防泄题)。 +- **holdout 失败 = verdict 不过**,处理路径(ADR-0095): + 1. **修实现,永不修试卷**——holdout 条目经 sealed_sha256 封存,`specs/*/suite/**` + 在 g060 锁定集内;改测试/改 holdout 让它通过 = 红线违约。 + 2. 走 quarantine 路径:推 quarantine 分支 + 卡置 needs-human,等 owner `/retry` + 或重打 `state:ready` 触发重判(BEH-07)。 + 3. 若怀疑是试卷本身错了(条目缺陷):开 issue 报 owner,由 owner 直管处置 + (holdout 仓 owner 直管,勘误走新条目)。 + +## 收卡 + +PR 合并后在卡 issue 评论,`state:done` 由 conductor T8 谓词机械查证 +(存在绑定本卡且已合并的 PR,读 `Card:` 元数据)——不是你说了算。 +随后 IR 级收口见 [ROLE-ACCEPT.md](ROLE-ACCEPT.md)。 diff --git a/docs/agent/ROLE-IR.md b/docs/agent/ROLE-IR.md new file mode 100644 index 0000000..931a707 --- /dev/null +++ b/docs/agent/ROLE-IR.md @@ -0,0 +1,48 @@ +# ROLE-IR —— 开 IR(意图受理角色) + +> 你带着一个新意图落地(想加 feature / 改产品行为),本文件是你的完整指引。 +> 依据:ADR-0095(IR 挂靠产品仓)/ ADR-0085(PM 优先四道门禁)/ IFACE-01(IR schema)。 +> 全流程总览见 [NAVIGATION.md](../NAVIGATION.md);PM 深度手册见 [PLAYBOOK.md](../pm/PLAYBOOK.md)。 + +## 一句话 + +**IR 只是一个 issue**:开在对应的产品仓上,填全字段,等 owner 签署。不需要任何 PR。 + +## 开在哪 + +- **产品/feature 意图** → 开在**对应的产品仓**(如 `Cloudbird-Software/<产品仓>`)。 + issue 模板 `intent.yml` 经 org 级 `.github/ISSUE_TEMPLATE` 自动被 org 内全部仓继承—— + 在产品仓 New issue 即可选用;若模板/`type:intent` 标签在本仓缺失,属治理漂移, + 报 owner(apply.sh §7 同步治理标签),不要手工绕过。 +- **治理意图**(改治理面:governance/ 政策、门禁、流程本身)→ 开在 `.github` 治理仓。 +- 历史先例:`Viral_Radar#1`(产品仓 IR)。废止的旧规定「IR 一律在 .github 仓开」 + 已由 ADR-0095 移除——不要把 feature IR 开到治理仓。 + +## 怎么开(九字段全必填,IFACE-01) + +1. **编号**:标题以 `IR-NNNN` 前缀开头,编号全局唯一——开立前用 + `bash ghcb board`(各活跃仓轮查)核对已用编号,避免撞号。机器侧(conductor / + ghcb)从标题提取编号;无前缀时会退化为 issue 号兜底,勿依赖兜底。 +2. **字段**:intent.yml 模板九项全部必填——job / 触发场景 / 痛点证据 / + 期望可观察变化 / 非目标 / 约束 / 验收证据 / 可逆性偏好 / 质量速度旋钮。 + 「期望可观察变化」是将来验收(ROLE-ACCEPT)的对账基准,写成可观察、可回查的 + 事实,不写实现方案。 +3. **标签**:`type:intent`(模板自动带)。 + +## 签署(不是你的动作) + +- owner 评论 `/start` 或打 `state:ir-signed` ——**只有 owner 能签,你不代签**。 +- 机器面现状(ADR-0095 诚实申报):conductor 状态机事件面当前仅覆盖 .github 仓, + 产品仓 IR 的签署标签由 owner 手动打;跨仓事件面扩展是已登记的后续工作。 + +## 开完之后 + +- IR 是 append-only 意图账本:签署后只追加评论/erratum,**不编辑正文**。 +- 签署后的下一步是 **spec**——指引换到 [ROLE-SPEC.md](ROLE-SPEC.md)。 +- **开 IR 的 agent 不得直接实现**:从意图到代码必须经 spec PR + 红队 + 开卡 + 四道门禁(ADR-0085);跳门直做=违约。 + +## 红线速查 + +- 不代签、不撞号、不改别人 IR 正文、不开 PR(IR 阶段无 PR 面)。 +- 治理意图 IR 若涉及决策变更,后续 spec PR 需引用 ADR(见 ROLE-SPEC.md)。 diff --git a/docs/agent/ROLE-SPEC.md b/docs/agent/ROLE-SPEC.md new file mode 100644 index 0000000..7c7d074 --- /dev/null +++ b/docs/agent/ROLE-SPEC.md @@ -0,0 +1,71 @@ +# ROLE-SPEC —— 把已签署的 IR 写成 spec(spec 撰写角色) + +> 触发条件:一条 `state:ir-signed` 的 IR 在你手上。本文件是你的完整指引。 +> 依据:ADR-0095(测试设计逐类讨论 + holdout 必备)/ ADR-0085 / ADR-0082(红队守门)/ +> ADR-0083(suite 门)/ ADR-0061/0081(g060 测试锁定)/ ADR-0056/0080(holdout)。 +> 阶段深度手册:[PLAYBOOK.md](../pm/PLAYBOOK.md) §2–§3。 + +## 一句话 + +从 IR 到 spec **必须走 spec PR 流程**:spec 文档 + 测试设计(逐类讨论,含 holdout) ++ 红队审计,全部过了才能开卡。**你(spec agent)不得直接实现**——实现是 +[ROLE-IMPLEMENT.md](ROLE-IMPLEMENT.md) 的职责,spec PR 合并不等于开工许可。 + +## spec 放哪 + +- **产品 feature**:产品仓本仓 `specs//`(IR 也开在该仓,ADR-0095)。 +- **治理意图**:`.github` 仓 `specs/IR-XXXX/`。 +- 模板:CI-Workflows `pipeline/spec-template.md`(正文条款结构 / AC given-when-then / + INV-BEH-IFACE 分节)。可选快速通道:spec-author 流水线生成骨架你再修 + (与自著制度等价,ADR-0085 决策 5)。 + +## spec PR 必带(缺一即红) + +1. **spec 正文**:AC 从 IR「期望的可观察变化」逐条派生,given-when-then。 +2. **suite/ 目录**:至少一个非空、可解析、含有效断言的测试文件 + (T-14 / T5 谓词现场重查)。注意 `specs/*/suite/**` 在 g060 锁定集内——你的 + suite 变更会被 g060 拦下(exit 2)并自动开裁决 issue,owner 以 + `/g060-adopt <证据>` 采纳(TTL 72h)。**这不是故障,是设计**;首次创建 suite + 同样走此路径,无豁免通道。 +3. **测试设计逐类讨论(ADR-0095,spec 的一等公民)**:spec 必须含「测试设计」节, + 对 [testing.yaml](../../governance/policy/testing.yaml) 的清单**逐类过一遍**, + 每类明确 adopt 或 reject 并给一句理由(讨论留痕,供红队攻击): + - **active_now**:T-01 属性(unit_property_golden)/ T-02 race / T-03 泄漏 / + T-04 模糊(fuzz)/ T-05 文档示例 / T-08 flaky / **T-09 差分**(重写项目=gate + 必选)/ T-10 变异 / T-12 diff 覆盖 / T-13 测试完整性 / T-14 卡绑定+suite 门 / T-15 意图回探 + - **条件激活族**:LLM 产品族 L-01..L-06(eval / semantic golden / **L-03 蜕变** / + 对抗语料 / 成本时延 / 换模型差分);重写项目族 R-01..R-06(升级/回滚/迁移幂等/ + 抓 golden);触发式族 G-01..G-08(契约漂移/真实依赖集成/bench/DAST…) + - **rejected 清单**(X-01..X-06,如全局覆盖率门槛)不许私自启用——要启用先走治理变更(ADR) + - 判断口径:每个测试必须映射三类风险之一(customer_upgrade_failure / + llm_behavior_drift / fake_tests);「不需要」也要写明为什么不需要。 +4. **holdout 测试设计(必备,ADR-0095)**:spec 必须包含 holdout 测试设计—— + 封存验收场景条目,经验证者 APP 注册到 holdout 仓(注册入口 + `scripts/holdout-register.sh`,由 verifier-app 令牌调用;**cloudbrid-agent 严禁 + 挂载 holdout**,DECISION-02 隔离不变量)。spec/卡/PR 对 holdout 只能引用 + `id@sha8`(如 `HO-0001@a1b2c3d4`),**禁止引用 payload 内容**(=提前泄题)。 +5. **红队审计**:spec/测试设计路径 PR 必须经红队(ADR-0082)——required check + `adversary`,`verdict=survived` 才绿,漏配/摘除/跳过即红。**红队会攻击你的 + 测试设置是否合理**:恶意合规(写一套故意弱的 AC 套件骗过全部测试)、模板句 + 复用(then 两两 4-gram 查重)、given/when 深度不足、测试种类该开没开 + (差分/属性/模糊/蜕变缺位即 insufficient)。红队判 insufficient = 阻断, + 修测试设计后重审计。 +6. **C1 面**:spec PR 引用 ADR-NNNN(新决策=新写 ADR 至 archive,先合并; + 执行性变更=引既有 ADR),owner-only review。 + +## 流程位置 + +``` +IR(state:ir-signed,开在产品仓) + └─ spec PR(本文档:正文 + suite + 测试设计逐类讨论 + holdout 设计) + └─ 红队 survived(adversary check + adversary:survived 标签 → T6) + └─ 开卡(AC 逐条派生,type:card + state:ready) + └─ 交给 ROLE-IMPLEMENT.md(你到此为止) +``` + +## 边界(再次强调) + +- **不得直接实现**:spec PR 合并 ≠ 开工许可。开卡后实现由实现角色(PM)承担—— + 通常先派弱模型(子 agent / CNB 池),见 ROLE-IMPLEMENT.md。 +- 你可以同时是下一角色的 PM(同一 agent 换角色),但必须**显式换帽子**:先收口 + spec 门禁,再按实现角色指引开工。 diff --git a/docs/pm/PLAYBOOK.md b/docs/pm/PLAYBOOK.md index 61132df..340bf1f 100644 --- a/docs/pm/PLAYBOOK.md +++ b/docs/pm/PLAYBOOK.md @@ -36,20 +36,27 @@ GOVERNANCE_TOKEN / org secret 凭据面(§7)、判定语义(红线 1)。 3. **读最近 4 周运行报告**:`archive/runs/`(格式见 `archive/runs/README.md`)+ .github 仓 `pm-digest` 标签的 digest issue——前人踩过的坑不用再踩(ADR-0085 决策 8)。 -worker 视角的认领/开工协议(AGENTS.md entry-protocol v1 块)对 PM 同样适用——PM 也是执行者之一。 +worker 视角的认领/开工协议(AGENTS.md entry-protocol v2 块)对 PM 同样适用——PM 也是执行者之一; +按意图选路的角色指引见 [docs/agent/](../agent/)(ADR-0095)。 ## §2 阶段一:IR→spec 把意图变成可红队审计的 spec + suite。门禁=签署(T1/T2)+ spec PR 过 suite 门与红队。 +角色指引(ADR-0095):开 IR → [docs/agent/ROLE-IR.md](../agent/ROLE-IR.md); +写 spec → [docs/agent/ROLE-SPEC.md](../agent/ROLE-SPEC.md)——**开 spec 的 agent 不得直接实现**。 -- **开 IR**:用 .github 仓 issue 模板 `intent.yml`(打 `type:intent` 标签)。字段全必填(IFACE-01,IR-0001)。 +- **开 IR**(ADR-0095):**feature IR 开在对应产品仓**的 issue(issue 即 IR,无需 + PR;`intent.yml` 模板经 org 级 `.github/ISSUE_TEMPLATE` 继承,打 `type:intent` + 标签);治理 IR 开 .github 仓。字段全必填(IFACE-01,IR-0001);编号 IR-NNNN + 全局唯一(标题前缀,开立前 `bash ghcb board` 查重)。 - **签署**:owner 评论 `/start`(T2)或打 `state:ir-signed` 标签(T1)——只有 owner 能签,你不代签。 + (机器面现状:conductor 事件面限 .github 仓,产品仓 IR 签署由 owner 手动换签——ADR-0095 机器面边界。) - **spec 谁写**:两条制度等价路径(ADR-0085 决策 5,PR338 先例追认): - 你自己写——完全合法,且是深度理解 IR 的最好方式; - spec-author 快速通道:CI-Workflows `spec-author.yml` 流水线生成骨架你再修。 模板:CI-Workflows `pipeline/spec-template.md`(正文条款结构 / AC given-when-then / INV-BEH-IFACE 分节)。 -- **spec 放哪**(#363 落点):治理 specs 在 `.github/specs/IR-XXXX/`; - 产品 feature specs 落产品仓本仓 `specs//`——IR 一律在 .github 仓开 +- **spec 放哪**(#363 落点 + ADR-0095):治理 specs 在 `.github/specs/IR-XXXX/`; + 产品 feature specs 落产品仓本仓 `specs//`——**IR 开在对应产品仓** (编号全局唯一),spec 与 suite 随实现仓走(suite 门 T-14/T5 按所在仓生效)。 - **g060 会拦你的 suite**(不是故障,是设计):`specs/*/suite/**` 被锁定 (ADR-0061/0081),授权身份仅 owner 与 verifier-app;你的 spec PR 含 suite 变更 @@ -59,6 +66,14 @@ worker 视角的认领/开工协议(AGENTS.md entry-protocol v1 块)对 PM - `suite/` 目录(ADR-0083 suite 门;至少一个非空可解析测试文件——T5 `suite_ready_required` 谓词会现场重查,T-14 亦要求);注意 `specs/*/suite/**` 在 g060 锁定集内 (`g060-guard.yml` + `scripts/g060-lock.sh`,非授权身份 exit 2 开裁决 issue,ADR-0061/0081)。 + - **测试设计逐类讨论**(ADR-0095):spec 含「测试设计」节,对 `governance/policy/testing.yaml` + 清单逐类 adopt-or-reject 留痕——差分(T-09,重写项目=gate 必选)/属性(T-01)/ + 模糊(T-04)/变异(T-10)/蜕变(L-03)/LLM 产品族/重写族/触发族……「不需要」 + 也要写明理由;rejected 清单(X-01..)不许私自启用。红队会攻击你的测试设置 + 是否合理(恶意合规/模板句/该开没开即 insufficient,ADR-0082)。 + - **holdout 测试设计**(ADR-0095,必备):封存验收场景条目经验证者 APP 注册到 + holdout 仓(`scripts/holdout-register.sh`,verifier-app 令牌调用;cloudbrid-agent + 严禁挂载 holdout,DECISION-02);spec/卡/PR 引用仅 `id@sha8`,禁引 payload。 - 红队 required check `adversary`(`adversary-gate.yml`,ADR-0082):survived 才绿, fail-closed——漏配/摘除/跳过即红。 - spec PR 是治理 C1 路径:引用 ADR-NNNN、owner-only review(AGENTS.md 硬规则)。 @@ -78,6 +93,9 @@ worker 视角的认领/开工协议(AGENTS.md entry-protocol v1 块)对 PM ## §4 阶段三:实现 默认派 CNB 免费算力,你做编排与机械核对。门禁=卡完成 + 全 gate 绿(T8)。 +角色指引(ADR-0095):[docs/agent/ROLE-IMPLEMENT.md](../agent/ROLE-IMPLEMENT.md)—— +弱模型优先(自带子 agent 或 CNB 池)、边做边推 PR、**弱模型 3 次不过=PM 自己接手完成**、 +holdout 失败=修实现不修试卷(quarantine + needs-human)。 - **派单**(默认路径,IR-0004 低决策密度分支执行者=CNB): - `bash ghcb dispatch`(ADR-0085 决策 4 子命令),或 @@ -102,6 +120,8 @@ worker 视角的认领/开工协议(AGENTS.md entry-protocol v1 块)对 PM ## §5 阶段四:验收 IR 级收口,证据可机械回查。门禁=T9 谓词(ADR-0085 决策 5)。 +角色指引(ADR-0095):[docs/agent/ROLE-ACCEPT.md](../agent/ROLE-ACCEPT.md)—— +人类让你处理 issues(验收 / 完成度盘点 / bug 修复)时按该文件走。 - 全部子卡 `state:done` 后,写 `specs/IR-XXXX/acceptance.md`:**逐 AC** 列运行时证据 (gate run / build log / 红队报告链接)+ SHA 锚(证据所属 commit/产物基准)。 diff --git a/governance/REPOS.yaml b/governance/REPOS.yaml index 7ee7496..2d20df7 100644 --- a/governance/REPOS.yaml +++ b/governance/REPOS.yaml @@ -32,6 +32,7 @@ repos: status: active role: 可复用工作流仓——全部项目仓 gate 的唯一实现,业务仓引用 @v1 key_paths: [.github/workflows/, pipeline/] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: agent-registry layer: L1 @@ -46,6 +47,7 @@ repos: role: 记忆层——ADR 家园(正本+INDEX 索引同仓,ADR-0085 单仓化)+退役快照 retired/ +PM 运行报告 runs/([followup] 周度 digest 消费)+规划回归集+事件 JSONL+红队报告落位 key_paths: [adr/, runs/, retired/, scripts/verify_migration.py] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: template-service layer: L2 @@ -73,6 +75,7 @@ repos: role: 仲裁内核——确定性裁决/CAS 租约/防重放台账(宪法 §1);无 LLM、默认拒绝、 自带测试与误放行台账(ADR-0054) key_paths: [arbiter/, capabilities.yaml, tests/] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: Shorts_Director layer: L2 @@ -80,6 +83,7 @@ repos: status: active role: 产品仓——短视频导演工具(ADR-0021:线上存在但未申报=GM-4 漂移,补申报;治理面 随首个正式 PR 落地 AGENTS.md/CODEOWNERS 接入) + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: Script_Writer layer: L2 @@ -87,6 +91,7 @@ repos: status: active role: 产品仓——剧本创作工具(ADR-0021:建仓未申报=GM-4 漂移,补申报;治理面随首个 正式 PR 落地 AGENTS.md/CODEOWNERS 接入,路径同 Shorts_Director) + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: Use-up-Plan layer: L2 @@ -95,6 +100,7 @@ repos: role: 产品仓——AI 多 plan 额度管理与路由调度工具(额度审计/规则标准化描述/最优 分配求解/实时切换;立项意图见仓内 Intent.md,ADR-0024 申报入图+bootstrap 直推 豁免;README 待首个正式 PR 脱离模板文案) + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: AI_Web_School layer: L2 @@ -103,6 +109,7 @@ repos: role: 产品仓——小学语数英个性化练习平台(Python/FastAPI 存量栈,语言准入按 ADR-0023 存量豁免,仅面向新服务选型);治理面已接入:gate(CI-Workflows@v1 聚合)/automerge/ scorecard/CODEOWNERS/dependabot + App 挂载(AG-4)+ production environment(RL-1) + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: mutual layer: L2 @@ -113,6 +120,7 @@ repos: Python 基线为一次性存量导入豁免——仅作重写参照与 golden fixtures 来源,重写合并后 语言面收敛为 Go+BAML) key_paths: [src/mutual/, spec/, tests/golden/] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: QW_Arena1 layer: L2 @@ -123,6 +131,7 @@ repos: 外部契约优先/比赛沙箱部署/有限生命周期三条件,豁免仅语言规范面、治理基线不豁免);建仓 bootstrap 直推豁免空仓变体(ADR-0084);2026-08-31 赛后按 ADR-0084 退役条款处置 key_paths: [src/, tests/, quality/, docs/] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: Viral_Radar layer: L2 @@ -135,6 +144,7 @@ repos: 复用优先,豁免仅语言规范面、治理基线不豁免);建仓 bootstrap 直推 (b) 类豁免 登记(ADR-0092);README 待首个正式 PR 脱离模板文案 key_paths: [src/, tests/, quality/, docs/] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: Media-Monitor layer: L2 @@ -147,6 +157,8 @@ repos: AGENTS.md 入口协议块/CODEOWNERS/dependabot;登记依据 flows.new_repo step 4, 引用 ADR-0024 申报+bootstrap 先例与 ADR-0092;bootstrap 走 PR 路径) key_paths: [cmd/, internal/, adapt/, docs/, .github/workflows/] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) + - name: holdout layer: L1 visibility: public @@ -155,6 +167,7 @@ repos: ADR-0056/ADR-0080);owner 直管;cloudbrid-agent 严禁挂载,验证者 APP 可挂载并 仅用于测试/验证路径写权(DECISION-02 隔离不变量,drift-check §18 断言) key_paths: [entries/, schema/, canary/] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) - name: cnb-bridge layer: L2 @@ -164,6 +177,8 @@ repos: accounts.yaml(无明文 token)+派单协议 cnb_pool.py+work-inbox PM 自起协议+ REMOVAL.md 单页删除清单;判定永不外置(INV-02) key_paths: [accounts.yaml, cnb_pool.py, work-inbox.yaml, REMOVAL.md] + entry_protocol: true # ADR-0095:协议块 v2 全仓下发(drift §17 逐字节对账) + # 上游依赖(ADR-0085:openjiuwen 双上游随编排框架退役停止消费;未来引入新上游时 # 恢复本节声明——部署渲染 pin tag 的治理方式不变) diff --git a/profile/README.md b/profile/README.md index 85d27ed..7f7c958 100644 --- a/profile/README.md +++ b/profile/README.md @@ -31,5 +31,5 @@ ## 意图→交付链路 -- **Feature 流(签署前置)**:[intent 表单](https://github.com/Cloudbird-Software/.github/issues/new?template=intent.yml)提交 IR → owner 签署 → spec(PM 自著或 spec-author 快速通道)→ 红队审计 → 开卡 → 实现(CNB 默认)→ 验收。规格与波次计划见 [`specs/`](https://github.com/Cloudbird-Software/.github/tree/main/specs)。 -- **Bug 流(复现前置,签署点后移——ADR-0064)**:[bug 表单](https://github.com/Cloudbird-Software/.github/issues/new?template=bug.yml)提交即机器复现,三值判定(reproduced / cannot-reproduce / inconclusive),reproduced 后修复合入自动回写状态。 +- **Feature 流(签署前置)**:feature IR 开在**对应产品仓**的 issue([intent 表单](https://github.com/Cloudbird-Software/.github/issues/new?template=intent.yml)经 org 级继承,各仓可用;ADR-0095)→ owner 签署 → spec(PM 自著或 spec-author 快速通道;spec PR 必带测试设计逐类讨论+holdout,红队审计,开 spec 的 agent 不得直接实现)→ 开卡 → 实现(弱模型优先:子 agent / CNB 池默认,3 次熔断 PM 接手)→ 验收。治理意图 IR 开 [.github 仓](https://github.com/Cloudbird-Software/.github/issues/new?template=intent.yml)。规格与波次计划见 [`specs/`](https://github.com/Cloudbird-Software/.github/tree/main/specs);按角色选路的指引见 [docs/agent/](https://github.com/Cloudbird-Software/.github/tree/main/docs/agent)(ADR-0095)。 +- **Bug 流(复现前置,签署点后移——ADR-0064)**:[bug 表单](https://github.com/Cloudbird-Software/.github/issues/new?template=bug.yml)(org 级继承,各仓可用)提交即机器复现,三值判定(reproduced / cannot-reproduce / inconclusive),reproduced 后修复合入自动回写状态;处理 issues 的角色指引见 [ROLE-ACCEPT.md](https://github.com/Cloudbird-Software/.github/blob/main/docs/agent/ROLE-ACCEPT.md)。 diff --git a/scripts/ghcb b/scripts/ghcb index deb8be0..e40e92b 100644 --- a/scripts/ghcb +++ b/scripts/ghcb @@ -15,7 +15,8 @@ # ghcb dispatch [repo] [--tier light|std] [--account ] # # 派 CNB:触发 .github 仓 cnb-dispatch 工作流(EX-1 经纪人, # # key 永不入 PM 上下文);=卡 issue 号 -# ghcb accept # 生成 IR 验收报告骨架(specs/IR-XXXX/acceptance.md)到 stdout +# ghcb accept [repo] # 生成 IR 验收报告骨架(specs/IR-XXXX/acceptance.md)到 stdout +# # (ADR-0095:feature IR 开在产品仓,repo=IR 所在仓,缺省 .github) # ghcb report [周号] # 生成运行报告骨架(archive/runs/YYYY-WNN.md 追加段)到 stdout # # next/claim/release 用调用方自己的 gh 凭据(gh auth login);认领合法性单一真源=conductor guard @@ -123,19 +124,22 @@ case "$CMD" in ;; accept) # IR 验收报告骨架(T9 谓词消费 specs//acceptance.md)——PM 填证据后 PR 入仓 - N="${2:?用法: ghcb accept }" - IRID=$(gh issue view "$N" -R "$ORG/.github" --json title --jq .title 2>/dev/null | grep -oE 'IR-[0-9]+' | head -1) + # ADR-0095:feature IR 开在对应产品仓——[repo] 指定 IR 所在仓;缺省 .github(治理 IR 兼容) + N="${2:?用法: ghcb accept [repo]}" + REPO_ARG="${3:-$ORG/.github}" + IR_REPO="$(norm_repo "$REPO_ARG")" + IRID=$(gh issue view "$N" -R "$IR_REPO" --json title --jq .title 2>/dev/null | grep -oE 'IR-[0-9]+' | head -1) [[ -n "$IRID" ]] || IRID="IR-$(printf '%04d' "$N")" cat < 验收日期: $(date -u +%F) - 判据: IR 正文的"期望的可观察变化"逐条 + 运行时证据链接(SHA 锚定) ## 子卡清单(曾存在性自证;全部须 state:done) - #<卡号> <标题> → PR <链接> - + ## 逐条证据 | # | 期望变化 | 证据(链接+SHA) | 结论 |