@seanyao/roll 4.630.1 → 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 +74 -0
  2. package/README.md +65 -55
  3. package/conventions/global/AGENTS.md +8 -7
  4. package/dist/roll.mjs +13277 -8746
  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,231 @@
1
+ # Acceptance Review Page — `roll attest`
2
+
3
+ Every delivered story can carry a **single-file Acceptance Review Page**: per-AC
4
+ verdicts with the artifacts that back them, openable offline, printable to PDF,
5
+ readable by non-engineers.
6
+
7
+ ## Where Review Pages live
8
+
9
+ Every story has ONE home — its card folder under the epic:
10
+
11
+ ```
12
+ .roll/features/<epic>/<id>/<run-id>/<id>-review.html ← Acceptance Review Page (self-contained)
13
+ .roll/features/<epic>/<id>/<run-id>/<id>-report.html ← legacy report alias (one release cycle)
14
+ .roll/features/<epic>/<id>/<run-id>/evidence.json ← collected hard facts
15
+ .roll/features/<epic>/<id>/<run-id>/evidence/ ← raw command/test artifacts
16
+ .roll/features/<epic>/<id>/<run-id>/screenshots/ ← visual proof, when relevant
17
+ .roll/features/<epic>/<id>/ac-map.json ← AC → evidence intent map
18
+ .roll/features/<epic>/<id>/latest ← symlink to the newest run
19
+ ```
20
+
21
+ Runs are timestamped and never overwritten. The backlog `✅ Done` row links to
22
+ `latest/<id>-review.html`; CHANGELOG bullets may carry an invisible
23
+ `<!-- evidence: ... -->` marker for traceability.
24
+
25
+ **The story's `latest/<id>-review.html` is the human acceptance entry.** A
26
+ story is accepted by opening its own Acceptance Review Page — not a global archive/index page.
27
+ `roll attest` is story-scoped: it writes only this story's Review Page, the legacy report alias, and the
28
+ `latest` pointer. It does not refresh any global archive, epic, or front-page
29
+ HTML. Those board pages, when you want them, are rendered on demand with
30
+ the archive rebuild; they are a convenience/archive view, not the delivery-truth surface.
31
+
32
+ ## Lifecycle in three stages
33
+
34
+ 1. Open the evidence frame. At the beginning of a loop cycle the runner creates
35
+ the timestamped run directory and exports it to the inner agent as
36
+ `ROLL_RUN_DIR`. The derived directories `ROLL_EVIDENCE_DIR` and
37
+ `ROLL_SCREENSHOTS_DIR` point at `<run-id>/evidence/` and
38
+ `<run-id>/screenshots/`.
39
+ 2. Collect during execution. `roll test` writes command output and summaries
40
+ into `ROLL_EVIDENCE_DIR`; visual lanes write screenshots into
41
+ `ROLL_SCREENSHOTS_DIR` when the surface requires inspection. The agent keeps
42
+ `ac-map.json` in the story card root, mapping each AC to the evidence files
43
+ that support it, with a status per AC: `pass` · `readonly` · `partial` ·
44
+ `claimed` · `missing`.
45
+ 3. Close with the hard attest gate. The runner calls
46
+ `roll attest <story-id> --run-dir "$ROLL_RUN_DIR"` at the end of delivery.
47
+ `roll attest` sweeps the hard facts (TCR commits, latest CI run, optional
48
+ deploy probe, test-pass proof), renders the Acceptance Review Page, and moves `latest` to the
49
+ run. That is all it writes — it is story-scoped. It does not mount a story
50
+ archive delivery section, regenerate `.roll/index.json`, or refresh any global
51
+ archive/epic/front page (run the archive rebuild on demand for those board pages).
52
+
53
+ `roll attest` also runs standalone — without an intent map every AC renders as
54
+ 🟧 Claimed, honestly.
55
+
56
+ ## Gate policy
57
+
58
+ The attest gate is **hard by default**. A delivered story with ACs but no fresh,
59
+ contentful report is blocked rather than marked `✅ Done`. During an explicit
60
+ migration window a project may set `.roll/policy.yaml` to soft mode:
61
+
62
+ ```yaml
63
+ loop_safety:
64
+ attest_gate: soft
65
+ ```
66
+
67
+ Soft mode records the gap and raises the same audit signal, but it does not
68
+ block the delivery cycle. Treat it as temporary compatibility, not the default.
69
+
70
+ ## The red line
71
+
72
+ An AC with **zero evidence** can never claim `pass`: the renderer forces it
73
+ down to 🟧 Claimed and lists it under **Discrepancies**. Verbal completion
74
+ ("I confirmed it works") is exactly what this rules out.
75
+
76
+ ## Declaring visual evidence at design time
77
+
78
+ `roll story validate` checks, at design time, that a spec is *born* with a
79
+ visual-evidence AC (and, for a web surface, a declared product page to capture).
80
+ Two rules decide what the validator recognises:
81
+
82
+ - **The `[visual-evidence]` marker is authoritative.** An AC item that opens with
83
+ a literal `[visual-evidence]` marker *is* a visual-evidence AC — on its own, no
84
+ matter what words follow. You do not need to also write "screenshot" / "截图":
85
+ the marker is your explicit declaration. (Without the marker, the validator
86
+ still recognises unambiguous nouns like `screenshot` / `截图` / `录屏`.)
87
+
88
+ ```markdown
89
+ - [ ] [visual-evidence] headless capture of the Now landing and each tab
90
+ ```
91
+
92
+ - **The declared surface wins over AC text.** Once a spec has a visual-evidence
93
+ AC, its surface is read from the frontmatter first:
94
+ - a declared `deliverable_url:` (alias `screenshot_url:`) ⇒ **web** — the card
95
+ has committed to a real product page, so it owes a web screenshot;
96
+ - a declared `physical_terminal:` ⇒ **terminal** with a stricter contract — the
97
+ report must contain a real macOS `Terminal.app` screenshot captured from
98
+ screen pixels. Headless stdout, transcript-rendered images, and HTML replays
99
+ are rejected for this contract;
100
+ - else a declared `deliverable_cmd:` ⇒ **terminal** — a CLI deliverable that
101
+ rides the terminal-capture lane;
102
+ - else the AC text decides (web / terminal / ambiguous).
103
+
104
+ So a card that declares `deliverable_url: .roll/features/agents.html` is judged
105
+ a **web** surface even when its AC prose mentions a `roll` command.
106
+
107
+ ## Evidence Modes
108
+
109
+ Stories may declare `evidence_mode:` in frontmatter, or an Evaluation contract
110
+ may declare `- evidence_mode: ...`. Roll also derives a mode for Evaluator
111
+ prompts, but only an explicit non-visual mode changes the screenshot gate.
112
+ That explicit mode is not a blank override: a declared URL, terminal command,
113
+ physical terminal, or visual-evidence AC still escalates to the relevant capture
114
+ gate.
115
+
116
+ | Mode | Required proof | Screenshot policy |
117
+ |------|----------------|-------------------|
118
+ | `visual_ui` | rendered visual capture, functional/smoke check, CI | required |
119
+ | `cli_output` | stdout/stderr snapshot, exit code, command fixture or focused test, CI | conditional; required for terminal/TUI visual changes |
120
+ | `refactor_contract` | focused tests, typecheck/build, grep/no-old-symbol checks, CI | not required unless visual risk is present |
121
+ | `data_state` | fixture replay, event assertions, idempotency/concurrency coverage, CI | not required unless visual risk is present |
122
+ | `docs_content` | rendered text checks, link checks, diff review, CI | conditional; required for layout changes |
123
+
124
+ `screenshot_exempt:` should name or imply the alternate matrix, preferably by
125
+ pairing it with `evidence_mode: refactor_contract`, `data_state`, or
126
+ `docs_content`. QA/Evaluator may escalate any non-visual mode back to a screenshot
127
+ gate when a visual surface changed, an AC explicitly asks for visual evidence, or
128
+ prior evidence exposes rendering/layout risk; the escalation reason must be
129
+ recorded.
130
+
131
+ ## External tool readiness
132
+
133
+ Visual evidence uses machine-level tools that are declared explicitly and probed
134
+ at startup:
135
+
136
+ - `macOS screencapture` — physical Terminal.app / browser-window screenshot
137
+ capture. It is built into macOS, but Terminal.app, the stable roll capture
138
+ host, must have Screen Recording permission. Missing permission means attest
139
+ records an honest screenshot skip; headless, transcript-rendered, and HTML
140
+ reproduction images do not count as screenshot evidence. A successful
141
+ interactive `Terminal.app` permission probe is cached under `ROLL_HOME` so
142
+ repeated `roll doctor` / setup checks do not keep re-triggering the macOS
143
+ prompt; if permission was just granted, restart Terminal.app before trusting
144
+ the cache.
145
+ - `Playwright Chromium` — optional headless web capture for `roll attest` and
146
+ archive screenshots. Install with `npx playwright install chromium`.
147
+
148
+ `roll doctor` always prints the current availability, permission state, impact,
149
+ and repair command for these tools. Use `roll doctor --tools` when you only want
150
+ the focused tool and Terminal.app Screen Recording readiness view. `roll init`
151
+ and `roll loop go` run the same probe at startup; in an interactive terminal they ask whether to install/open
152
+ the missing setup steps, and in automation they stay silent unless
153
+ `ROLL_EXTERNAL_TOOLS=yes` or `ROLL_EXTERNAL_TOOLS=no` is set. Choosing `no`
154
+ prints the evidence impact and continues without changing the machine.
155
+
156
+ The machine Agents page (`.roll/features/agents.html`) includes the same tool
157
+ status block so a reviewer can see whether evidence capture depends on
158
+ machine setup rather than story code.
159
+
160
+ ## Review Score fold
161
+
162
+ When `.roll/notes/` carries the story's Review Score entry, the report ends
163
+ with a collapsed *Review Score · 评审分* section. No entry → no section. The
164
+ Review Score is produced by a fresh-session peer Reviewer, never by the
165
+ building agent.
166
+
167
+ ## Where cards come from — `roll idea`
168
+
169
+ Add a card with one natural-language sentence:
170
+
171
+ ```bash
172
+ roll idea "Refund flow is broken for partial payments"
173
+ ```
174
+
175
+ `roll idea` auto-classifies it (bug → FIX / feature → IDEA), assigns the
176
+ next id in that family, lint-checks the description, infers the right epic
177
+ folder, and mints the full card folder (spec.md + story page + index
178
+ refresh). All in one command.
179
+
180
+ For explicit control over id and epic, the internal `roll story new` is
181
+ available:
182
+
183
+ ```bash
184
+ roll story new US-PAY-001 --title "Refund flow" --epic payments
185
+ # the ONE minting entry: card folder + backlog row + index refresh in one step.
186
+ # Batch minting: add --no-index per card, finish with a single the archive rebuild.
187
+ ```
188
+
189
+ Both channels write the frontmatter'd `spec.md`, the story page skeleton,
190
+ and refresh `.roll/index.json`. They refuse to overwrite an existing card —
191
+ cards are born once, then evolved by hand. Skills never hand-create card
192
+ files; the `cards` consistency dimension fails the release gate on any
193
+ live backlog row without a card.
194
+
195
+ ## Static Archive — the archive rebuild
196
+
197
+ the archive rebuild is an on-demand repair/archive renderer. It regenerates browsable,
198
+ three-layer static HTML pages (every page is self-contained, localized with one
199
+ visible language at a time, theme-aware, printable):
200
+
201
+ ```
202
+ .roll/features/index.html ← archive front page (Story / Cycle /
203
+ Release), truth strip, searchable epic cards
204
+ .roll/features/<epic>/index.html ← epic page: epic ledger + stories in three
205
+ groups (merged / in a cycle / in backlog)
206
+ .roll/features/<epic>/<id>/index.html ← story archive: five stations — Definition,
207
+ Design, Execution, Delivery (attest banner
208
+ + per-AC evidence blocks), Retrospective
209
+ ```
210
+
211
+ Every figure is computed from the truth model — anchors -> selectors -> adapter
212
+ -> projections — never typed in. Story facts compare backlog claims with merge
213
+ and evidence truth; Cycle facts use TerminalOutcome records; Release facts use
214
+ the latest gate verdict and active waiver. The guiding line: **backlog is wish,
215
+ main is truth, done ≡ merged.**
216
+
217
+ The archive front page keeps unknown visible. `?` means the fact is absent
218
+ or outside the known schema; `0` means a known zero. A premature backlog
219
+ `✅ Done` row is treated as a claim that conflicts with truth and is rendered as
220
+ drift, not as delivered work.
221
+
222
+ On story archive pages, screenshot evidence remains a thumbnail linked to the
223
+ full image. Text evidence such as Vitest output is read from the referenced
224
+ evidence file and shown inline under the AC in a folded, scrollable block; if
225
+ the file is missing or unreadable, the page shows an explicit unavailable state.
226
+
227
+ The current delivery truth remains story-scoped attest plus CLI-first
228
+ observability (`roll status`, `roll loop watch`, `roll loop runs`,
229
+ `roll loop cycle <id>`). Use the archive rebuild by hand for reconciliation, archive
230
+ export, CI artifacts, or migration repair; rebuild mode re-renders every story
231
+ page from source after hand-merges or history migrations.
@@ -0,0 +1,185 @@
1
+ # Roll — AI Agent Support
2
+
3
+ Roll treats AI agents as a scoped pool of execution identities. The current
4
+ model is:
5
+
6
+ ```text
7
+ Scope -> Role -> Binding -> Agent -> optional Model
8
+ ```
9
+
10
+ The same shape repeats at every level. A machine can declare the agents it has,
11
+ a project can bind roles for its work, and a story or skill can narrow those
12
+ bindings when needed.
13
+
14
+ ## Agent-Domain Files
15
+
16
+ - `~/.roll/agents.yaml` is Machine Scope. It declares the local agent pool and
17
+ machine-level roles such as `supervise`.
18
+ - `.roll/agents.yaml` is Project Scope. It binds project/story roles such as
19
+ `supervise`, `execute`, and `evaluate`.
20
+
21
+ `~/.roll/config.yaml` may still exist for generic preferences and legacy
22
+ migration input, but it is no longer the primary authoring surface for agent
23
+ semantics. Use:
24
+
25
+ ```bash
26
+ roll agent # show Machine Scope, Project Scope, roles, pool, and legacy inputs
27
+ roll agent migrate --dry-run # preview conversion from legacy files
28
+ roll agent migrate # write roll-agents/v1 files
29
+ roll agent list # show installed agents
30
+ ```
31
+
32
+ ## Roles
33
+
34
+ Roll uses three core Agent-domain roles:
35
+
36
+ - `supervise` — coordinates at project level. In guided mode this may be the
37
+ current agent session you are talking to; in autonomous mode Roll resolves the
38
+ role and drives the loop.
39
+ - `execute` — builds or fixes a story through the selected skill workflow.
40
+ - `evaluate` — reviews, scores, or checks the delivery in a fresh session.
41
+
42
+ **Who played each role in a finished cycle?** After a cycle runs, the resolved
43
+ roles are not a mystery you have to reconstruct from logs. Run
44
+ `roll loop cycle <id> --roles` to see exactly who was Builder and who was Evaluator,
45
+ which peers were consulted, and which single score the gate accepted. The same
46
+ cast is written to `summary.md` / `summary.json` and embedded in the story's
47
+ Execution Cast report block. See
48
+ [Cycle Role Visibility](./loop.md#cycle-role-visibility) for the full surface.
49
+
50
+ Project defaults normally bind story roles:
51
+
52
+ ```yaml
53
+ schema: roll-agents/v1
54
+ scope: project
55
+ inherits: machine
56
+ defaults:
57
+ story:
58
+ roles:
59
+ execute:
60
+ kind: select
61
+ from: [kimi, codex, pi]
62
+ require: [execute]
63
+ strategy: first-available
64
+ evaluate:
65
+ kind: select
66
+ from: [claude, codex, kimi, pi, agy, reasonix, cursor]
67
+ require: [evaluate]
68
+ strategy: health-aware
69
+ ```
70
+
71
+ Machine scope can declare a supervisor and the local pool:
72
+
73
+ ```yaml
74
+ schema: roll-agents/v1
75
+ scope: machine
76
+ agents:
77
+ codex:
78
+ capabilities: [supervise, execute, evaluate]
79
+ kimi:
80
+ capabilities: [execute, evaluate]
81
+ roles:
82
+ supervise:
83
+ use: codex
84
+ ```
85
+
86
+ ## Fair Eligibility
87
+
88
+ Static config lists fair candidates. It should not permanently exclude a
89
+ supported agent because of an old auth, VPN, account, or network incident.
90
+ Runtime health is checked when Roll resolves or spawns the role:
91
+
92
+ - unavailable candidates are skipped for the current resolution;
93
+ - the skip is recorded as a runtime fact;
94
+ - the static pool remains fair until you intentionally narrow it.
95
+
96
+ Unknown or unregistered agent names fail loud during config parsing.
97
+
98
+ `health-aware` is the selection strategy for open role casting. It keeps the
99
+ same installed pool visible for Designer, Builder, Evaluator, and Peer Reviewer
100
+ unless an owner policy narrows the pool, then ranks candidates with recent
101
+ health signals, role capability tags, successful deliveries, recent use, and
102
+ cost band. A degraded candidate stays visible with warnings, but a healthy
103
+ candidate with the right capability wins. A cheap weaker agent can remain
104
+ eligible for focused work while ranking lower for broad or high-risk Builder
105
+ work.
106
+
107
+ Use the route trace when you need to see the cast instead of guessing:
108
+
109
+ ```bash
110
+ roll supervisor route --role builder --story US-123
111
+ roll supervisor route --role evaluator --story US-123 --json
112
+ ```
113
+
114
+ The trace lists every candidate, eligibility, score reasons, warnings, skipped
115
+ runtime facts, selected agent, strategy, and source binding.
116
+
117
+ ## Guided vs Autonomous Mode
118
+
119
+ In guided mode, you can keep working in the current agent window. That session
120
+ acts as the supervisor front door: it can inspect `roll agent`, run migrations,
121
+ and ask Roll to continue through the CLI.
122
+
123
+ In autonomous mode, you do not open multiple agent windows manually. The loop
124
+ resolves `supervise`, `story.execute`, and `story.evaluate`, then spawns fresh
125
+ agent sessions for the roles through the configured bindings.
126
+
127
+ ## Supported Agents
128
+
129
+ | Agent | CLI command | Notes |
130
+ |-------|-------------|-------|
131
+ | Claude Code | `claude` | Anthropic coding agent. |
132
+ | Kimi CLI | `kimi-code` (legacy: `kimi-cli` / `kimi`) | Moonshot coding agent. |
133
+ | Codex CLI | `codex` | OpenAI coding agent; `openai` aliases to `codex`. |
134
+ | Antigravity | `agy` | Google Antigravity agent; legacy `gemini` aliases to `agy`. |
135
+ | Pi | `pi` | The `deepseek` alias resolves to `pi`. |
136
+ | Reasonix | `reasonix` | DeepSeek-native coding agent; requires `DEEPSEEK_API_KEY`. |
137
+ | Cursor | `cursor-agent` | Cursor headless agent; day-one usage is recorded as `?` until parseable token/cost output is available. |
138
+
139
+ Agent-specific behavior belongs in one profile, not in downstream runner gates:
140
+
141
+ 1. Add the public registry entry in `packages/core/src/agent/specs.ts`.
142
+ 2. Add or update the runner profile in `packages/cli/src/runner/agent-spawn.ts`.
143
+ 3. Keep executor, attest, pairing, and scoring code agent-agnostic.
144
+ 4. Add unit coverage for the profile and registry entry.
145
+
146
+ ## Agent Toolchain Health (US-V4-022)
147
+
148
+ Supervisor treats agent toolchain health as part of coordination, not as an
149
+ owner-side mystery. It scans warnings, auth/network status, polluted skill
150
+ roots, stale setup sync, and worktree permission failures, then classifies them
151
+ into one of four operational categories:
152
+
153
+ - **auth_block** — "403", "please run /login", "Unauthorized" → `pause_for_owner`
154
+ - **network_block** — `ECONNREFUSED`, `ETIMEDOUT`, DNS failure → `continue`
155
+ (transient; loop retries or breathes)
156
+ - **setup_skill_root_pollution** — Reasonix auxiliary-dir warnings, skills with no
157
+ description → `create_fix` → routed to the delta team as a FIX
158
+ - **worktree_permission_failure** — `EACCES` / "permission denied" on a worktree
159
+ path → `pause_for_owner`
160
+
161
+ When the signal is setup/skill-root pollution, Supervisor must **not** label it
162
+ as auth-blocked. It routes the repair to the backlog/delta team as a FIX,
163
+ instead of asking the owner to debug ad hoc. Supervisor coordinates and
164
+ diagnoses these issues but does not become the Builder or Evaluator, and it does
165
+ not auto-delete global files.
166
+
167
+ ```bash
168
+ roll supervisor health # human-readable health board
169
+ roll supervisor health --json # machine-readable classifications
170
+ roll supervisor next # next card + agent health summary
171
+ ```
172
+
173
+ ## Legacy Compatibility
174
+
175
+ Older projects may still contain `.roll/local.yaml agent`, `.roll/pairing.yaml`,
176
+ or v3 route slots in `.roll/agents.yaml`. `roll agent` shows them under
177
+ `Legacy compatibility`, and `roll agent migrate` converts their useful data into
178
+ the scoped model. They remain readable compatibility inputs, not the primary
179
+ agent-management model.
180
+
181
+ ## See Also
182
+
183
+ - [configuration.md](configuration.md) — config and policy files
184
+ - [pairing.md](pairing.md) — evaluate-role review and scoring
185
+ - [loop.md](loop.md) — autonomous role resolution
@@ -0,0 +1,108 @@
1
+ # roll backlog sync — pull GitHub Issues into your backlog
2
+
3
+ `roll backlog sync` pulls issues from a GitHub repository and writes them
4
+ into your local `.roll/backlog.md`. It is single-direction
5
+ (issues → backlog) in v1: nothing is written back to GitHub.
6
+
7
+ `roll backlog sync` 把 GitHub Issues 拉进本地 `.roll/backlog.md`。
8
+
9
+ ## Authentication
10
+
11
+ The sync resolves a GitHub token in this order:
12
+
13
+ 1. `$GITHUB_TOKEN` — set it in your environment or CI secrets.
14
+ 2. `gh auth token` — falls back to the GitHub CLI if you have run
15
+ `gh auth login`.
16
+
17
+ If neither is available the command stops and tells you how to set one.
18
+
19
+ ```bash
20
+ export GITHUB_TOKEN=ghp_xxx
21
+ # or, if you use the GitHub CLI:
22
+ gh auth login
23
+ ```
24
+
25
+ ## Quick start
26
+
27
+ ```bash
28
+ # First sync must name the repo explicitly:
29
+ roll backlog sync --repo seanyao/roll-meta
30
+
31
+ # Preview without writing anything:
32
+ roll backlog sync --repo seanyao/roll-meta --dry-run
33
+
34
+ # Only pull issues carrying specific labels (OR semantics):
35
+ roll backlog sync --repo seanyao/roll-meta --label P1,bug
36
+
37
+ # After the first run the repo is remembered, so you can omit --repo:
38
+ roll backlog sync
39
+ ```
40
+
41
+ ## Flags
42
+
43
+ | Flag | Notes |
44
+ |--------------|-------|
45
+ | `--repo` | `owner/repo`. Required on the first sync; afterwards read from config. |
46
+ | `--dry-run` | Compute the diff and print it, but leave `.roll/backlog.md` unchanged. |
47
+ | `--label` | Comma-separated label filter. May repeat. Matches any (OR). |
48
+
49
+ ## label → type mapping
50
+
51
+ The issue's labels decide the backlog type prefix. The first matching
52
+ label wins; with no match the default is `US`.
53
+
54
+ | GitHub label | Backlog type |
55
+ |-----------------------------|--------------|
56
+ | `bug` | `FIX` |
57
+ | `enhancement` / `feature` / `US` | `US` |
58
+ | `refactor` | `REFACTOR` |
59
+ | (no matching label) | `US` |
60
+
61
+ Issue state maps to the status column: `open` → `📋 Todo`,
62
+ `closed` → `✅ Done`. The issue title becomes the row description.
63
+
64
+ ## IDs and idempotency
65
+
66
+ Each issue gets a stable backlog id `GH-<number>` (e.g. issue #13 →
67
+ `GH-13`), combined with the type prefix (`US-GH-13`, `FIX-GH-13`).
68
+
69
+ Sync is idempotent: a second run skips any issue whose id already exists
70
+ in `.roll/backlog.md` — it never overwrites the status or description of
71
+ an existing row, and prints `skipped (already exists): GH-13`. Each run
72
+ ends with a summary:
73
+
74
+ ```
75
+ added: 2, skipped: 5, total issues: 7
76
+ ```
77
+
78
+ `--dry-run` prints the same diff with `+` (would add) and `=` (would
79
+ skip) markers and never touches the file.
80
+
81
+ ## Configuration: `.roll/local.yaml`
82
+
83
+ After a successful real sync the resolved repo, labels and timestamp are
84
+ persisted so later runs can omit `--repo`:
85
+
86
+ ```yaml
87
+ backlog_sync:
88
+ repo: seanyao/roll-meta
89
+ direction: issues-to-backlog
90
+ labels: []
91
+ last_sync_at: 2026-05-28T10:00:00Z
92
+ ```
93
+
94
+ | Field | Meaning |
95
+ |-----------------|---------|
96
+ | `repo` | Default `owner/repo` for flagless syncs. |
97
+ | `direction` | Always `issues-to-backlog` in v1. |
98
+ | `labels` | Default label filter; an explicit `--label` flag overrides it. |
99
+ | `last_sync_at` | Timestamp of the last successful sync. |
100
+
101
+ An explicit flag always overrides the persisted config. If
102
+ `.roll/local.yaml` has no `backlog_sync:` block, the first sync must pass
103
+ `--repo`.
104
+
105
+ ## Not in v1
106
+
107
+ Two-way write-back, Projects/Milestones mapping, PR linking, non-GitHub
108
+ platforms, and custom mapping rules are out of scope for v1.
@@ -0,0 +1,66 @@
1
+ # Roll — Changelog
2
+
3
+ Roll keeps `CHANGELOG.md` in sync automatically. You never have to write or
4
+ update it manually.
5
+
6
+ ## How It Works
7
+
8
+ 1. `$roll-build` (or `$roll-fix`) delivers a story and stages `CHANGELOG.md`.
9
+ 2. The story completion commit includes `CHANGELOG.md` — no separate commit.
10
+ 3. On release, Roll's release process renames `## Unreleased` to the version tag.
11
+
12
+ ## What Gets Written
13
+
14
+ The `$roll-.changelog` skill reads `BACKLOG.md` and writes a bullet for each
15
+ completed story or fix. It filters for user-visible changes only:
16
+
17
+ **Written:**
18
+ - New commands users can invoke
19
+ - Bug fixes users would notice
20
+ - Visible behavior changes (layout, output, speed)
21
+ - Install / upgrade changes
22
+
23
+ **Skipped:**
24
+ - Internal refactors
25
+ - Test infrastructure changes
26
+ - Developer-only bug fixes
27
+ - Implementation details
28
+
29
+ The skill enforces a style gate — bullets are short, plain-language,
30
+ user-facing. Technical jargon triggers a rewrite loop.
31
+
32
+ ## Release-ready sections
33
+
34
+ `roll release` treats the changelog as ready in either shape: an
35
+ `## Unreleased` section with bullets, **or** a pre-written next-version
36
+ section at the top (`## v3.608.1 — 2026-06-08`) naming a version newer than
37
+ package.json's current — the release flow's own convention. A first section
38
+ matching the current version means everything is already shipped.
39
+
40
+ ```markdown
41
+ ## Unreleased
42
+ - **Added**: `roll loop runs` — instantly see what loop ran and when
43
+ - **Fixed**: `roll update` no longer reports the wrong version after upgrading
44
+
45
+ ## v2026.05.07
46
+ - ...
47
+ ```
48
+
49
+ ## First-Time Backfill
50
+
51
+ If your project has no `CHANGELOG.md` yet, `$roll-.changelog` creates one
52
+ and backfills all historical completed stories, grouped by date.
53
+
54
+ ## Manual Trigger
55
+
56
+ ```bash
57
+ $roll-.changelog # stage CHANGELOG.md (call from within a build session)
58
+ ```
59
+
60
+ When called outside a build session (standalone), it stages and commits
61
+ with `chore: sync changelog`.
62
+
63
+ ## See Also
64
+
65
+ - [loop.md](loop.md) — loop triggers changelog automatically after each story
66
+ - [skills.md](skills.md) — `roll-.changelog` in the support skills table