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
48 changes: 25 additions & 23 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# AGENTS.md
PM(项目经理)工作契约(ADR-0085/0095,索引型;治理仓豁免行数放宽至 60)。**组织只规定四道阶段门禁与红线;门禁之间怎么干、调什么资源,由你自主决定。** 细节按需读引用文件,不常驻上下文。

PM(项目经理)工作契约(ADR-0085,索引型;治理仓豁免行数放宽至 60——PM 优先范式的入口即本文件)。**组织只规定四道阶段门禁与红线;门禁之间怎么干、调什么资源,由你自主决定。** 细节按需读引用文件,不常驻上下文。
<!-- entry-protocol v2 -->

<!-- entry-protocol v1 -->

### 入口协议(陌生 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=<PAT>`;`-f` 必带——404 时 curl 无 -f 仍退出 0,会把错误页当脚本落盘)
2. 找活:`bash ghcb next [owner/repo]` → 列 state:ready 卡(卡 issue 是唯一工作凭证,无卡不开工)
3. 认领:`bash ghcb claim <n> [owner/repo]` → 评论 /claim——conductor 转介 arbiter 原子 CAS 租约,先到先得;败者换下一张(`bash ghcb status <n>` 看持有者)
Expand All @@ -15,16 +15,22 @@ PM(项目经理)工作契约(ADR-0085,索引型;治理仓豁免行数

<!-- /entry-protocol -->

迷路了(从别的仓/入口进来)?全入口路由表: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/<IR>/acceptance.md` → IR `state:done`(T9 谓词)
- **默认开发主力=CNB 免费算力**:`bash ghcb dispatch <卡#> [--tier light|std] [--account <alias>]`(经 cnb-dispatch 经纪人,key 永不入你上下文);gate 红/语义敏感→你自己接手(上升策略不预设,事后写进运行报告)
- **每次 run 结束**:`bash ghcb report` 生成骨架 → 追加到 archive `runs/YYYY-WNN.md`(三节式:事实/体感/改进点;`[followup]` 行=周度 digest 的机械抓手)
- **验收**:`bash ghcb accept <IR#>` 生成验收报告骨架
- **四道门禁**:① IR 签署→spec(自著合法;spec-author=可选快速通道)→ ② spec PR 必带 suite/ + 红队 survived → 开卡 → ③ 卡实现 PR 全 gate 绿+合并 → `state:done`(T8 谓词)→ ④ 全部子卡 done + `specs/<IR>/acceptance.md` → IR `state:done`(T9 谓词)
- **默认开发主力=CNB 免费算力**:`bash ghcb dispatch <卡#> [--tier light|std] [--account <alias>]`(key 永不入你上下文);gate 红/语义敏感/弱模型 3 次不过→你自己接手(ADR-0095,判断写进运行报告)
- **收口**:`bash ghcb report` 运行报告骨架(追加 archive `runs/YYYY-WNN.md`,三节式+`[followup]`)· `bash ghcb accept <IR#> [repo]` 验收报告骨架

## 红线(自主性的边界——永不触碰、永不试图优化)

Expand All @@ -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/<IR-NNNN>/`
- 写仓身份 = 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-NNNN>/`(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=<org admin> make drift-check`(等价 `bash governance/drift-check.sh`,每日 CI 自动跑;agent 侧预检=`make gates-pr`)· `GH_TOKEN=<org admin> bash governance/apply.sh`(幂等)
- 修复循环上限执法:`GH_TOKEN=<org admin> bash governance/auto-fix-limit.sh` · 成本熔断:`GH_TOKEN=<org admin> bash governance/cost-check.sh`
- 取 App 令牌:`GH_TOKEN=$(scripts/ghcb <repo>)`(缓存命中零网络,ADR-0044)
- CNB 池运维:`Cloudbird-Software/cnb-bridge` 仓(accounts.yaml/cnb_pool.py/REMOVAL.md);周审计=本仓 cnb-audit 工作流(EX-1 三接缝之一)
- 漂移检测/修复(owner/CI 专属):`GH_TOKEN=<org admin> make drift-check` · `bash governance/apply.sh`(幂等);agent 侧预检=`make gates-pr`
- 修复循环上限执法:`GH_TOKEN=<org admin> bash governance/auto-fix-limit.sh` · 成本熔断:`bash governance/cost-check.sh`
- 取 App 令牌:`GH_TOKEN=$(scripts/ghcb <repo>)`(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/
36 changes: 23 additions & 13 deletions docs/NAVIGATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <owner/repo>` 找
`state:ready` 卡 → `bash ghcb claim <n>` 认领 → 实现 → PR body 带 `Card: <owner>/<repo>#<n>` 行。
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 <owner/repo>` 找
`state:ready` 卡 → `bash ghcb claim <n>` 认领 → 实现 → PR body 带 `Card: <owner>/<repo>#<n>` 行;
弱模型优先(子 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 <owner/repo>` 找卡;无卡不开工,新想法走 intent 表单 |
| 任意仓、任意图 | §0 角色路由 | 按意图读对应 ROLE-*.md(本仓 docs/agent/) |
| 产品仓(AI_Web_School / mutual / QW_Arena1 …) | 该仓根部 AGENTS.md 的入口协议块+角色路由节 | 取 ghcb(AGENTS.md 内钉 SHA 命令)→ `ghcb next <owner/repo>` 找卡;无卡不开工,新想法走该仓 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-NNNN>/`(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/<IR-NNNN>/`,
治理 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 不混两种性质。
Expand All @@ -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 合入时转绿)。
Expand Down
Loading