@seanyao/roll 4.630.2 → 4.702.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +65 -56
  3. package/conventions/global/AGENTS.md +8 -7
  4. package/dist/roll.mjs +12909 -8532
  5. package/docs/INDEX.md +32 -0
  6. package/docs/architecture.md +444 -0
  7. package/docs/difftest-freeze-paradigm.md +113 -0
  8. package/docs/live-console.md +203 -0
  9. package/docs/manifesto.md +65 -0
  10. package/docs/migration/role-taxonomy-v4.md +60 -0
  11. package/docs/verification.md +83 -0
  12. package/guide/INDEX.md +86 -0
  13. package/guide/assets/layouts/cards-2.png +0 -0
  14. package/guide/assets/layouts/cards-3.png +0 -0
  15. package/guide/assets/layouts/cards-4.png +0 -0
  16. package/guide/assets/layouts/compare.png +0 -0
  17. package/guide/assets/layouts/highlight.png +0 -0
  18. package/guide/assets/layouts/pipeline.png +0 -0
  19. package/guide/assets/layouts/plain.png +0 -0
  20. package/guide/assets/layouts/quote.png +0 -0
  21. package/guide/assets/layouts/timeline.png +0 -0
  22. package/guide/en/acceptance-evidence.md +231 -0
  23. package/guide/en/ai-agents.md +185 -0
  24. package/guide/en/backlog-github-sync.md +108 -0
  25. package/guide/en/changelog.md +66 -0
  26. package/guide/en/configuration.md +112 -0
  27. package/guide/en/consistency.md +58 -0
  28. package/guide/en/conventions.md +113 -0
  29. package/guide/en/dream.md +121 -0
  30. package/guide/en/faq.md +855 -0
  31. package/guide/en/feedback.md +31 -0
  32. package/guide/en/getting-started.md +103 -0
  33. package/guide/en/installation.md +86 -0
  34. package/guide/en/legacy-onboarding.md +195 -0
  35. package/guide/en/loop-data-layout.md +256 -0
  36. package/guide/en/loop-driven-architecture.md +186 -0
  37. package/guide/en/loop.md +1324 -0
  38. package/guide/en/methodology.md +715 -0
  39. package/guide/en/migration-2.0.md +154 -0
  40. package/guide/en/overview.md +190 -0
  41. package/guide/en/pairing.md +151 -0
  42. package/guide/en/patterns/README.md +76 -0
  43. package/guide/en/patterns/graft-pattern.md +110 -0
  44. package/guide/en/patterns/replant-pattern.md +114 -0
  45. package/guide/en/patterns/seed-pattern.md +132 -0
  46. package/guide/en/peer.md +71 -0
  47. package/guide/en/pr-review.md +62 -0
  48. package/guide/en/practices/engineering-common-sense.md +395 -0
  49. package/guide/en/pricing.md +116 -0
  50. package/guide/en/project-setup.md +126 -0
  51. package/guide/en/roll-doc-audit.md +98 -0
  52. package/guide/en/skills.md +206 -0
  53. package/guide/en/test-isolation.md +51 -0
  54. package/guide/en/testing/quality-rubric.md +340 -0
  55. package/guide/en/testing.md +123 -0
  56. package/guide/en/tools.md +173 -0
  57. package/guide/skills.md +30 -0
  58. package/guide/zh/acceptance-evidence.md +194 -0
  59. package/guide/zh/ai-agents.md +170 -0
  60. package/guide/zh/backlog-github-sync.md +105 -0
  61. package/guide/zh/changelog.md +57 -0
  62. package/guide/zh/configuration.md +99 -0
  63. package/guide/zh/consistency.md +48 -0
  64. package/guide/zh/conventions.md +96 -0
  65. package/guide/zh/dream.md +97 -0
  66. package/guide/zh/faq.md +773 -0
  67. package/guide/zh/feedback.md +30 -0
  68. package/guide/zh/getting-started.md +96 -0
  69. package/guide/zh/installation.md +83 -0
  70. package/guide/zh/legacy-onboarding.md +192 -0
  71. package/guide/zh/loop-data-layout.md +236 -0
  72. package/guide/zh/loop-driven-architecture.md +186 -0
  73. package/guide/zh/loop.md +1124 -0
  74. package/guide/zh/methodology.md +702 -0
  75. package/guide/zh/migration-2.0.md +154 -0
  76. package/guide/zh/overview.md +186 -0
  77. package/guide/zh/pairing.md +117 -0
  78. package/guide/zh/patterns/README.md +74 -0
  79. package/guide/zh/patterns/graft-pattern.md +108 -0
  80. package/guide/zh/patterns/replant-pattern.md +112 -0
  81. package/guide/zh/patterns/seed-pattern.md +130 -0
  82. package/guide/zh/peer.md +63 -0
  83. package/guide/zh/pr-review.md +54 -0
  84. package/guide/zh/practices/engineering-common-sense.md +393 -0
  85. package/guide/zh/pricing.md +97 -0
  86. package/guide/zh/project-setup.md +114 -0
  87. package/guide/zh/roll-doc-audit.md +90 -0
  88. package/guide/zh/skills.md +191 -0
  89. package/guide/zh/test-isolation.md +46 -0
  90. package/guide/zh/testing/quality-rubric.md +284 -0
  91. package/guide/zh/testing.md +116 -0
  92. package/guide/zh/tools.md +173 -0
  93. package/package.json +4 -1
  94. package/skills/README.md +1 -0
  95. package/skills/roll-.qa/SKILL.md +1 -1
  96. package/skills/roll-.review/SKILL.md +1 -1
  97. package/skills/roll-build/SKILL.md +1 -1
  98. package/skills/roll-build/references/full-contract.md +16 -13
  99. package/skills/roll-design/SKILL.md +3 -3
  100. package/skills/roll-design/references/full-contract.md +17 -13
  101. package/skills/roll-fix/SKILL.md +1 -1
  102. package/skills/roll-fix/references/full-contract.md +13 -10
  103. package/skills/roll-peer/SKILL.md +1 -1
  104. package/skills/roll-prime/SKILL.md +77 -0
  105. package/skills/roll-prime/references/explorer-annex.md +39 -0
  106. package/skills/roll-prime/references/supervisor-prompt.md +165 -0
  107. package/skills/route-cases/skills.json +10 -0
  108. package/template/AGENTS.md +3 -1
@@ -0,0 +1,114 @@
1
+ > Mirror of the original Chinese source — English translation pending. See IDEA-NNN for translation status.
2
+
3
+ # Replant Pattern — Legacy 项目的"翻种"路径
4
+
5
+ > Roll 三种接入模式之一。另见 [graft-pattern.md](./graft-pattern.md)、[seed-pattern.md](./seed-pattern.md)。
6
+ >
7
+ > **核心精神:以现有产品为靶子,反推规格、有意识精炼、连根拔起栽新苗。**
8
+
9
+ ## 何时选这个 pattern
10
+
11
+ 适合:
12
+ - 现有项目累积包袱太重,重构成本 > 重建成本
13
+ - 想借机做一次有意识的架构跃迁(去掉冗余、调整边界、统一约定)
14
+ - 团队有能力维持"新旧并行"一段时间
15
+ - 现有项目的**测试套件足够完整**(这是反推规格的契约层)
16
+
17
+ 不适合:
18
+ - 现有项目还在快速演化(重建期间会持续漂移)
19
+ - 测试覆盖率低(反推的规格会丢掉隐性约束)
20
+ - 团队不能停下新功能开发
21
+
22
+ ## 目录结构
23
+
24
+ ```
25
+ project-builder/ 构建 v2.0 的工程项目
26
+
27
+ ├── project-v1.0/ ⓪ 原料:v1.x 完整 snapshot(只读参照物)
28
+ │ └── (按某个 tag 冻结,不随主线演化)
29
+
30
+ ├── project-rev/ ① 粗料:从 v1.0 反推的草稿
31
+ │ ├── prd-draft.md
32
+ │ ├── architecture-draft.md
33
+ │ ├── ddd-draft.md
34
+ │ └── us-list-draft.md
35
+
36
+ ├── .roll/ ② 工坊 meta(管理"构建 v2.0"这个项目)
37
+ │ ├── backlog.md
38
+ │ ├── specs/ ← 精炼后的 v2.0 权威规格
39
+ │ │ ├── prd.md
40
+ │ │ ├── architecture.md
41
+ │ │ └── ddd.md
42
+ │ ├── features/ 每条 Story 详情
43
+ │ └── decisions/ 构建过程中的 ADR
44
+
45
+ └── project-v2.0/ ③ 产物:v2.0 真身(loop 增量构建出来)
46
+ └── (bin/ lib/ ...)
47
+ ```
48
+
49
+ ## 数据流
50
+
51
+ ```
52
+ v1.0 源码 ──反推──→ project-rev/(粗料)
53
+
54
+ ▼ 精炼(保留 / 丢弃 / 新增 / 重塑)
55
+ .roll/specs/(设计权威)
56
+
57
+ ▼ Loop 按 .roll/backlog 增量构建
58
+ project-v2.0/(产物)
59
+
60
+ ▼ 发布
61
+ 覆盖 origin 仓库 @ 2.0.0
62
+ ```
63
+
64
+ ## 三层数据各自的角色
65
+
66
+ | 层 | 数据性质 | 写一次还是反复改 |
67
+ |----|---------|----------------|
68
+ | `project-v1.0/` | 不可变 snapshot | 只读 |
69
+ | `project-rev/` | AI 反推产物,反映"v1.0 实际行为" | 写一次,后续可补丁但不大改 |
70
+ | `.roll/specs/` | 人工精炼后的 v2.0 蓝图 | **反复迭代**,是设计权威 |
71
+ | `project-v2.0/` | Loop 按 specs 增量构建的代码 | Story 推进时增长 |
72
+
73
+ **关键洞察:`project-rev/` → `.roll/specs/` 不是简单 copy,是一次有意识的设计跃迁。**
74
+
75
+ 这是真正去掉 v1.0 累积包袱的窗口。粗料保留下来作为对照组(v2.0 发布时随产物归档到 `project-v2.0/.roll/specs/origins/`,作为历史档案)。
76
+
77
+ ## 执行步骤
78
+
79
+ 1. **冻结 v1.0**:选定 tag/commit,复制源码到 `project-v1.0/`,标注版本号
80
+ 2. **反推粗料**:AI 读 v1.0 源码 + 测试,产出 `project-rev/` 下的草稿
81
+ 3. **精炼规格**:人工 review 粗料,做出"保留 / 丢弃 / 新增 / 重塑"的决策,产出 `.roll/specs/`
82
+ 4. **拆解 Story**:基于 specs 写 `.roll/backlog.md`,按依赖顺序
83
+ 5. **Loop 构建**:在 `project-v2.0/` 下增量造,Story 实现时引用 `.roll/specs/` 作为权威
84
+ 6. **对照校验**:每条 Story 完成后用 v1.0 测试套验证 v2.0(如果测试可移植)
85
+ 7. **发布**:v2.0 满足验收后覆盖 origin 仓库,发布主版本号
86
+
87
+ ## 早停门
88
+
89
+ | 检查点 | 通过判据 | 不通过怎么办 |
90
+ |-------|---------|------------|
91
+ | Day 1 后 | PRD 对 v1.0 artifact 覆盖率 ≥ 90% | < 70% 停下来:项目行为已超出"可声明为产品"的范畴 |
92
+ | 第一批 Story 后 | v2.0 行为与 v1.0 一致率 ≥ 80% | < 80% 停下来:分析 gap 来自反推漏项还是 v1.0 偶然行为 |
93
+
94
+ 任一门没过 → 切换到 [graft-pattern](./graft-pattern.md),承认这个项目不适合重建。
95
+
96
+ ## 与其他 pattern 的对比
97
+
98
+ | 维度 | replant-pattern | graft-pattern | seed-pattern |
99
+ |------|----------------|---------------|--------------|
100
+ | 对原架构的态度 | 推翻重建 | 保留并嫁接 | 无原架构(从零) |
101
+ | 风险 | 高(隐性知识丢失) | 低(不动原码) | 低 |
102
+ | 上限 | 高(彻底清债) | 中(仍受历史约束) | 高(无包袱起步) |
103
+ | 适用 | 累积包袱重、可冷藏老版本 | 仍在演化、不可停下来 | 新项目、从 idea 阶段 |
104
+ | 工作量 | 大(造一个新的) | 小(接入工具链) | 中(先写 spec 再 loop) |
105
+
106
+ ## 实例:Roll 自身
107
+
108
+ Roll 项目自己用这个 pattern 从 v1.x 重建到 v2.0:
109
+ - `roll-builder/roll-v1.0/` ← v2026.518.4 snapshot
110
+ - `roll-builder/roll-rev/` ← Claude 反推的 PRD/Arch/DDD/US 草稿
111
+ - `roll-builder/.roll/specs/` ← 精炼后的 v2.0 设计权威
112
+ - `roll-builder/roll-v2.0/` ← Loop 增量构建的 v2.0 产物,发布到 `seanyao/roll`
113
+
114
+ 这是 Roll 的"自我重塑"工程,也是 replant-pattern 的 reference implementation。
@@ -0,0 +1,132 @@
1
+ > Mirror of the original Chinese source — English translation pending. See IDEA-NNN for translation status.
2
+
3
+ # Seed Pattern — 新项目的"播种"路径
4
+
5
+ > Roll 三种接入模式之一。另见 [graft-pattern.md](./graft-pattern.md)、[replant-pattern.md](./replant-pattern.md)。
6
+ >
7
+ > **核心精神:项目从第一天就携带 Roll 基因,像一粒种子在新土里发芽,所有约定、目录、工作流原生匹配。**
8
+
9
+ ## 何时选这个 pattern
10
+
11
+ 适合:
12
+ - 从零开始的新项目
13
+ - 有明确的产品愿景,实现细节灵活
14
+ - 想从 day 1 用 Roll loop 的自治能力
15
+ - 团队愿意先写 PRD / Architecture 再动代码(即使只写最薄一层)
16
+
17
+ 不适合:
18
+ - 完全探索性项目,PRD 都写不出来 → 先用别的工具做原型,定型后再 seed 适配
19
+ - 极小项目(一个 100 行的 script),上 Roll 是过度工程
20
+
21
+ ## 目录结构
22
+
23
+ ```
24
+ my-new-project/ ← Roll 原生项目,从 day 1 就是 .roll/ 形态
25
+
26
+ ├── README.md 产品门面
27
+ ├── LICENSE
28
+ ├── AGENTS.md AI 约定(roll init 生成)
29
+ ├── CHANGELOG.md 随发版生长
30
+ ├── package.json 或其他语言对应的 manifest
31
+
32
+ ├── src/ lib/ tests/ 产品代码(最初为空,Loop 增量构建)
33
+
34
+ ├── guide/ 用户文档(最初为空,发布前生长)
35
+ │ ├── en/ zh/
36
+
37
+ └── .roll/ ← 项目管理 + 设计过程(从 day 1 存在)
38
+ ├── backlog.md 创始人写下的初始 Story 清单
39
+ ├── specs/ 初始 PRD / Architecture / DDD
40
+ │ ├── prd.md
41
+ │ ├── architecture.md
42
+ │ └── domain/
43
+ ├── features/ Story 详情
44
+ ├── briefs/ dream/ Roll 自动产出
45
+ └── decisions/ ADR
46
+ ```
47
+
48
+ ## 数据流
49
+
50
+ ```
51
+ 创始人愿景 ──写入──→ .roll/specs/(初始 PRD / Architecture)
52
+
53
+ ▼ 拆解 Story
54
+ .roll/backlog.md
55
+
56
+ ▼ Loop 增量构建
57
+ src/ lib/ tests/(产品产物)
58
+
59
+ ▼ 发布
60
+ v1.0.0
61
+ ```
62
+
63
+ 与 replant-pattern 的本质差异:**起点不同**。
64
+ - replant:从已有 v1.x 反推规格
65
+ - seed:由人直接写规格(创始人愿景作为唯一输入)
66
+
67
+ ## 三层数据角色
68
+
69
+ | 层 | 数据性质 | 何时写 |
70
+ |----|---------|------|
71
+ | `.roll/specs/` | 设计权威 | 项目启动时写第一版,演化中持续迭代 |
72
+ | `.roll/backlog.md` | 工作流入口 | specs 写完后拆解,loop 推进时增减 |
73
+ | `src/` `lib/` `tests/` | 产品产物 | Loop 按 backlog 增量构建 |
74
+
75
+ ## 执行步骤
76
+
77
+ 1. `mkdir my-new-project && cd my-new-project`
78
+ 2. `roll init` 生成 `.roll/` 骨架 + `AGENTS.md`
79
+ 3. **写第一版 specs**:用 `$roll-design` 或手写,在 `.roll/specs/` 完成 PRD / Architecture / DDD
80
+ 4. **拆解 Story**:用 `$roll-design` 把 specs 拆成 INVEST-compliant Story 写入 `.roll/backlog.md`
81
+ 5. **启动 loop**:`roll loop on`,进入自治构建
82
+ 6. 创始人持续校对、调整 specs,loop 跟着新 backlog 跑
83
+
84
+ ## 创始人的两种姿态
85
+
86
+ **姿态 A — specs-driven(重型)**
87
+ 先把 PRD / Architecture 写得相对完整再启动 loop。
88
+ - 适合:愿景清晰、有 senior 工程师、关键决策需要前置敲定
89
+ - 风险:可能过度设计、与现实脱节
90
+
91
+ **姿态 B — seed-driven(轻型)**
92
+ specs 只写最核心的 1-2 章,backlog 只列前 3 条 Story,启动 loop 边跑边写。
93
+ - 适合:愿景模糊、迭代快、容错高、Hackathon 节奏
94
+ - 风险:早期决策反复,loop 可能跑出不符合最终愿景的代码
95
+
96
+ 两种姿态对应**同一个目录结构**,差别只在 `.roll/specs/` 的初始完整度。
97
+
98
+ ## 与其他 pattern 的对比
99
+
100
+ | 维度 | seed-pattern | replant-pattern | graft-pattern |
101
+ |------|--------------------|----------------|---------------|
102
+ | 起点 | 空目录 + 愿景 | 现有 v1.x | 现有项目 |
103
+ | 规格来源 | 人写 | 反推 v1.x + 精炼 | 不需要(用现有) |
104
+ | 历史包袱 | 无 | 反推时丢弃 | 保留 |
105
+ | 上限 | 高 | 高 | 中 |
106
+ | 启动门槛 | 中(要先写 PRD) | 高(反推 + 精炼) | 低(直接加 .roll/) |
107
+ | 适用 | 新项目、从 idea 阶段 | 包袱重、可冷藏老版本 | 仍在演化、不可停下来 |
108
+
109
+ ## 实例
110
+
111
+ - 新创立的 SaaS 产品,第一天就用 Roll 管开发
112
+ - 学习型项目,"如何用 Roll 协作" 本身就是学习目标
113
+ - Hackathon 项目,48 小时内从 idea 到 demo,全程 Roll 驱动
114
+ - 个人侧项目,单人开发但想要 AI loop 的"24h 续航"能力
115
+
116
+ ## 演化路径
117
+
118
+ seed 项目的自然演化:
119
+
120
+ ```
121
+ seed 启动
122
+
123
+ ▼ 跑 3-6 个月,积累 specs + backlog
124
+ 项目进入"成熟"期
125
+
126
+ ├── 一切顺畅 → 继续 seed 节奏
127
+
128
+ ├── 发现累积了不该有的债 → 切换 replant-pattern
129
+ │ (把当前版本当 v1.x snapshot,反推清债)
130
+
131
+ └── 想拉新人/团队加入 → 文档或网站与实现不齐时,用 $roll-doc-audit 对账并补齐
132
+ ```
@@ -0,0 +1,71 @@
1
+ # $roll-peer — Structured External Review
2
+
3
+ `$roll-peer` runs external-provider review through the same structured adapter
4
+ used by goal-mode final review. The old top-level peer CLI is retired; invoke
5
+ the skill from an agent workflow when you need this capability.
6
+
7
+ Use `$roll-peer` when you need the full multi-round negotiation protocol, or
8
+ when a durable reviewer fact from Claude, Codex, Kimi, Pi, or another installed
9
+ external CLI should be recorded.
10
+
11
+ ## Prompt Shape
12
+
13
+ ```text
14
+ $roll-peer
15
+ Review this plan and return VERDICT / REASON / FINDING lines.
16
+ ```
17
+
18
+ Reviewer output must contain exactly one verdict line:
19
+
20
+ ```text
21
+ VERDICT: APPROVE|REQUEST_CHANGES
22
+ REASON: <short reason>
23
+ FINDING: <concrete issue>
24
+ ```
25
+
26
+ Malformed or multiple verdict lines fail closed as `REQUEST_CHANGES`.
27
+
28
+ ## Recorded Facts
29
+
30
+ Every accepted review appends one JSON line to:
31
+
32
+ ```text
33
+ .roll/peer/runs.jsonl
34
+ ```
35
+
36
+ When a reviewer process produced output, the transcript is also written under:
37
+
38
+ ```text
39
+ .roll/peer/transcripts/
40
+ ```
41
+
42
+ The recorded fact includes reviewer agent, provider, command family, verdict,
43
+ reason, findings, timeout/error state, duration, transcript path, and evidence
44
+ path. Goal-mode final review emits the same fact fields on `goal:final_review`.
45
+
46
+ ## Parse Failures
47
+
48
+ When a reviewer or scorer runs inside an autonomous cycle but its output is
49
+ **unparseable** (for example, control characters before the `SCORE` line, or a
50
+ missing `VERDICT` line), the attempt is not silently dropped. The raw attempt is
51
+ captured under `.roll/loop/peer/`, and the agent's row in the cycle role cast
52
+ shows `failed` with a `cause` and a `raw artifact:` pointer.
53
+
54
+ See [Cycle Role Visibility](./loop.md#cycle-role-visibility) for how to read
55
+ that cast, and
56
+ [Troubleshooting unparseable score/review](../../docs/live-console.md#troubleshooting)
57
+ for recovery steps.
58
+
59
+ ## External Reviewers vs Auxiliary Subagents
60
+
61
+ `$roll-peer` is for external-provider reviewer CLIs. Codex-internal subagents are
62
+ useful auxiliary analysis workers, but they are not a substitute for external
63
+ peer review. The adapter treats `codex-subagent:*` / `subagent:*` identities as
64
+ auxiliary and excludes them from heterogeneous reviewer selection.
65
+
66
+ ## Relationship To Pairing
67
+
68
+ Loop pairing is a build-time gate: a heterogeneous peer re-checks risky delivery
69
+ diffs during autonomous cycles and writes cycle evidence. `$roll-peer` is the
70
+ agent-invoked negotiation skill for structured external review. They share the
71
+ same explicit-diversity principle but serve different workflows.
@@ -0,0 +1,62 @@
1
+ # Roll — PR Review
2
+
3
+ Roll handles the full PR lifecycle — from opening to merging — without requiring
4
+ manual intervention for most cases.
5
+
6
+ ## Manual Review
7
+
8
+ ```bash
9
+ roll review-pr <number> # AI review of a specific PR
10
+ ```
11
+
12
+ Fetches the PR title, body, and diff via `gh cli`, routes to the project's
13
+ configured AI agent, and outputs a structured verdict:
14
+
15
+ | Verdict | Action |
16
+ |---------|--------|
17
+ | `APPROVE` | `gh pr review --approve` |
18
+ | `REQUEST_CHANGES` | `gh pr review --request-changes` with reason |
19
+ | `UNCERTAIN` | Writes ALERT — human decides |
20
+
21
+ ## Loop PR Inbox
22
+
23
+ Each loop cycle processes open PRs before picking new stories:
24
+
25
+ | PR classification | Loop action |
26
+ |---|---|
27
+ | Loop's own (`loop/*` branch) | Skip — no self-review |
28
+ | Bot already approved | Skip — let auto-merge proceed |
29
+ | Bot requested changes | Write ALERT — wait for author |
30
+ | Stale (CI failed, branch behind) | Auto-rebase onto `main` |
31
+ | External / clean | Invoke `roll review-pr` |
32
+
33
+ **Stale PR circuit breaker**: If rebasing fails 3× within 24 hours, loop stops
34
+ retrying and writes an ALERT for human attention.
35
+
36
+ ## Auto-merge
37
+
38
+ Loop's own PRs (`loop/*`) are opened with `--auto --squash --delete-branch`.
39
+ GitHub merges them automatically once all required checks pass. No manual
40
+ `git merge` needed.
41
+
42
+ ## Optional: Event-Driven Review (GitHub Actions)
43
+
44
+ For instant feedback (seconds vs. up to 1 hour with loop scheduling):
45
+
46
+ ```bash
47
+ cp templates/workflows/pr-review-event.yml .github/workflows/
48
+ ```
49
+
50
+ This workflow triggers `roll review-pr` on every PR open or update.
51
+ Fork PRs and PRs with `[skip-ai-review]` in the body are skipped automatically.
52
+ The two modes coexist — GHA provides instant feedback, loop acts as safety net.
53
+
54
+ ## Skip AI Review
55
+
56
+ Add `[skip-ai-review]` anywhere in the PR body to auto-approve without invoking
57
+ the agent. Useful for mechanical PRs (dependency bumps, generated content).
58
+
59
+ ## See Also
60
+
61
+ - [loop.md](loop.md) — full loop PR inbox details and stale rebase handling
62
+ - [ai-agents.md](ai-agents.md) — which agent handles reviews