@seanyao/roll 4.713.2 → 4.717.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.
- package/CHANGELOG.md +104 -0
- package/README.md +13 -2
- package/dist/postinstall.mjs +28 -1
- package/dist/roll.mjs +15428 -6819
- package/docs/architecture.md +2 -0
- package/guide/INDEX.md +2 -0
- package/guide/en/acceptance-evidence.md +66 -0
- package/guide/en/ai-agents.md +7 -7
- package/guide/en/browser-operations.md +711 -0
- package/guide/en/faq.md +64 -0
- package/guide/en/loop.md +96 -7
- package/guide/en/pairing.md +4 -5
- package/guide/en/tools.md +11 -0
- package/guide/zh/acceptance-evidence.md +59 -0
- package/guide/zh/ai-agents.md +5 -5
- package/guide/zh/browser-operations.md +632 -0
- package/guide/zh/faq.md +62 -0
- package/guide/zh/loop.md +90 -7
- package/guide/zh/pairing.md +3 -4
- package/guide/zh/tools.md +11 -0
- package/package.json +2 -1
- package/skills/roll-build/SKILL.md +2 -1
- package/skills/roll-build/references/full-contract.md +20 -16
package/docs/architecture.md
CHANGED
|
@@ -221,6 +221,8 @@ building ──attest earned──► publishable ──push+PR──► awaitin
|
|
|
221
221
|
- 完全跳过预检:`loop_safety.skip_network_check: true`(FIX-1025)——当你确认所配置的服务可直连、不希望被任何固定主机探测拦住时使用。
|
|
222
222
|
- English: the precheck defaults to `github.com:443`. For a domestic-only workflow, point it at a host you actually need via `loop_safety.probe_url`, or opt out entirely with `loop_safety.skip_network_check: true` — so a dropped VPN never halts loop/release when every configured provider is directly reachable.
|
|
223
223
|
- Warm session 复用:`loop_safety.session_reuse: true` 只表达复用意图;必须同时设置 `loop_safety.resume_scope: same-story` 才会在同一 story 重试时复用 codex session。缺省、非法值或未设置 `resume_scope` 都按 `off` 处理,跨卡复用保持禁用。
|
|
224
|
+
- Builder 硬轮换:`loop_safety.builder_no_consecutive_repeat`(默认开)保证任意连续两个 cycle 的 builder agent 不相同——上一个 cycle 的 builder 被从本次 execute 池中硬排除。池缩到只剩上一个 builder 时**失败即声(ALERT + pending)**,绝不静默重复、绝不空转;轮换真正发生时记 `builder:rotation` 事件可审计。设 `builder_no_consecutive_repeat: false` 关闭;仅约束 builder(Evaluator 独立性靠 fresh session,不靠排除品牌)。
|
|
225
|
+
- English: `loop_safety.builder_no_consecutive_repeat` (default on) forbids two consecutive cycles from sharing a Builder — the previous cycle's builder is hard-excluded from the execute pool. If that empties the pool it fails loud (ALERT + pending), never repeating silently; a real rotation records a `builder:rotation` audit event. Set `false` to disable. Builder-only (Evaluator independence comes from fresh sessions, not brand exclusion).
|
|
224
226
|
|
|
225
227
|
策略是规则源——它不直接执行动作,而是被其他上下文读取并遵循。
|
|
226
228
|
|
package/guide/INDEX.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
| AGENTS.md | Roll Project — Internal Conventions | convention | 2026-05-28 |
|
|
10
10
|
| CONTRIBUTING.md | Contributing to Roll | convention | 2026-05-23 |
|
|
11
11
|
| guide/en/ai-agents.md | Roll — AI Agent Support | guide | 2026-06-30 |
|
|
12
|
+
| guide/en/browser-operations.md | Roll — Browser Operations (managed + interactive lanes) | guide | 2026-07-15 |
|
|
12
13
|
| guide/en/acceptance-evidence.md | Acceptance Evidence — roll attest / Evidence lifecycle | guide | 2026-07-02 |
|
|
13
14
|
| guide/en/changelog.md | Roll — Changelog | guide | 2026-05-21 |
|
|
14
15
|
| guide/en/configuration.md | Roll — Configuration | guide | 2026-07-02 |
|
|
@@ -39,6 +40,7 @@
|
|
|
39
40
|
| guide/en/testing.md | Roll — Testing Workflow | guide | 2026-05-23 |
|
|
40
41
|
| guide/en/testing/quality-rubric.md | Test Quality Rubric | guide | 2026-05-23 |
|
|
41
42
|
| guide/zh/ai-agents.md | Roll — AI Agent 支持 | guide | 2026-06-30 |
|
|
43
|
+
| guide/zh/browser-operations.md | Roll — 浏览器操作(受管通道 + 交互通道) | guide | 2026-07-15 |
|
|
42
44
|
| guide/zh/changelog.md | Roll — Changelog (中文) | guide | 2026-05-21 |
|
|
43
45
|
| guide/zh/configuration.md | Roll — 配置 | guide | 2026-07-02 |
|
|
44
46
|
| guide/zh/conventions.md | Roll — 约定与 AGENTS.md | guide | 2026-07-02 |
|
|
@@ -53,6 +53,12 @@ the archive rebuild; they are a convenience/archive view, not the delivery-truth
|
|
|
53
53
|
`roll attest` also runs standalone — without an intent map every AC renders as
|
|
54
54
|
🟧 Claimed, honestly.
|
|
55
55
|
|
|
56
|
+
Captured artifacts render by their actual media type, not the capture lane that
|
|
57
|
+
produced them. Image files (`png`, `jpg`, `jpeg`, `webp`, or `gif`, including a
|
|
58
|
+
recognised image signature without an extension) render as images; text output
|
|
59
|
+
such as `.txt` or `.log` is escaped and shown inline in a readable `<pre>`
|
|
60
|
+
block. A terminal capture may therefore appear in either form.
|
|
61
|
+
|
|
56
62
|
## Gate policy
|
|
57
63
|
|
|
58
64
|
The attest gate is **hard by default**. A delivered story with ACs but no fresh,
|
|
@@ -108,6 +114,66 @@ renderer forces it down to 🟧 Claimed and lists it under **Discrepancies**.
|
|
|
108
114
|
evidence; it is explicitly not the same as an agent-confirmed `pass`. Verbal
|
|
109
115
|
completion ("I confirmed it works") is exactly what this rules out.
|
|
110
116
|
|
|
117
|
+
## Outward behavior verification
|
|
118
|
+
|
|
119
|
+
Some ACs describe behavior Roll cannot prove locally — a real
|
|
120
|
+
`npm i -g github:owner/repo`, a published CLI's first run, a live OAuth
|
|
121
|
+
callback. A build or `npm pack` succeeding does **not** prove any of these; a
|
|
122
|
+
simulation is not the outward promise. Marking such an AC "manual-only" and
|
|
123
|
+
letting it render green is the same as substituting *not run* for *passed*.
|
|
124
|
+
|
|
125
|
+
When a story or fix documents an external install / publish / login channel, the
|
|
126
|
+
relevant AC must declare **one** explicit verification path in its Evaluation
|
|
127
|
+
contract — Roll never infers "outward" from prose:
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
expected_evidence:
|
|
131
|
+
- kind: external-smoke # real command in an isolated env
|
|
132
|
+
target: npm i -g github:owner/repo#<commit> && repo --version
|
|
133
|
+
proves: the documented git-install channel installs and starts clean
|
|
134
|
+
outward:
|
|
135
|
+
mode: external-smoke
|
|
136
|
+
command: npm i -g github:owner/repo#<commit> && repo --version
|
|
137
|
+
environment: release # ci | nightly | release
|
|
138
|
+
timeout_sec: 180
|
|
139
|
+
- kind: owner-attested # human sign-off when no smoke can cover it
|
|
140
|
+
proves: the production OAuth callback round-trips
|
|
141
|
+
outward:
|
|
142
|
+
mode: owner-attested
|
|
143
|
+
reason: needs a real third-party account; no safe automated path exists
|
|
144
|
+
approvalRef: https://github.com/owner/repo/issues/1343
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The attest report renders an **Outward verification** banner and table near the
|
|
148
|
+
top. Only a real smoke pass (or a valid, unexpired owner attestation) is green:
|
|
149
|
+
|
|
150
|
+
| Resolved state | Report line | Green? |
|
|
151
|
+
|----------------|-------------|--------|
|
|
152
|
+
| `verified` | `VERIFIED (external smoke)` / `VERIFIED (owner-attested)` | yes |
|
|
153
|
+
| `verified-in-simulation` | `verified-in-simulation — simulation only, NOT accepted` | **no** |
|
|
154
|
+
| `unverified-external` | `UNVERIFIED — external smoke not run` (or `owner attestation pending`) | **no** |
|
|
155
|
+
| `failed-external` | `FAILED — external smoke` | **no** |
|
|
156
|
+
|
|
157
|
+
A single non-`verified` outward AC turns the banner red — the delivery cannot
|
|
158
|
+
overstate its outward behavior. `npm pack`–style simulation evidence is kept and
|
|
159
|
+
labeled `verified-in-simulation`, but it never substitutes for a real smoke.
|
|
160
|
+
|
|
161
|
+
### Release / nightly smoke setup
|
|
162
|
+
|
|
163
|
+
External smoke runs in an **isolated** environment — a fresh temporary
|
|
164
|
+
`HOME`/`PREFIX`/working directory — and executes only the exact command template
|
|
165
|
+
declared in the spec, with controlled variables. Its artifact records exit code,
|
|
166
|
+
version, and a redacted stdout/stderr summary; credentials are never written.
|
|
167
|
+
|
|
168
|
+
Point the runner at an environment with `ROLL_SMOKE_ENV=release` (or `ci` /
|
|
169
|
+
`nightly`); a declaration whose `environment` does not match the current one is
|
|
170
|
+
reported `unverified`, never silently skipped. **No real publish or account
|
|
171
|
+
action is ever automatic**: nothing that pushes a package, mutates a remote
|
|
172
|
+
account, or spends money runs without a declared authority (an `external-smoke`
|
|
173
|
+
command you wrote into the spec, or an `owner-attested` approval reference). If no
|
|
174
|
+
matching smoke environment exists, the AC stays `unverified` and the report stays
|
|
175
|
+
non-green — it is never auto-promoted to a manual pass.
|
|
176
|
+
|
|
111
177
|
## Declaring visual evidence at design time
|
|
112
178
|
|
|
113
179
|
`roll story validate` checks, at design time, that a spec is *born* with a
|
package/guide/en/ai-agents.md
CHANGED
|
@@ -23,7 +23,7 @@ migration input, but it is no longer the primary authoring surface for agent
|
|
|
23
23
|
semantics. Use:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
roll agent # show Machine Scope, Project Scope,
|
|
26
|
+
roll agent # show Machine Scope, effective Project Scope, and installed pool
|
|
27
27
|
roll agent migrate --dry-run # preview conversion from legacy files
|
|
28
28
|
roll agent migrate # write roll-agents/v1 files
|
|
29
29
|
roll agent list # show installed agents
|
|
@@ -170,13 +170,13 @@ roll supervisor health --json # machine-readable classifications
|
|
|
170
170
|
roll supervisor next # next card + agent health summary
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
##
|
|
173
|
+
## Migration from Older Agent Config
|
|
174
174
|
|
|
175
|
-
Older projects may
|
|
176
|
-
|
|
177
|
-
`
|
|
178
|
-
|
|
179
|
-
|
|
175
|
+
Older projects may contain `.roll/local.yaml agent`, `.roll/pairing.yaml`, or v3
|
|
176
|
+
route slots in `.roll/agents.yaml`. These are not runtime inputs. Run
|
|
177
|
+
`roll agent migrate --dry-run` to preview their one-time conversion, then
|
|
178
|
+
`roll agent migrate` to write scoped bindings. A loop that encounters v3 route
|
|
179
|
+
slots fails loudly instead of silently using a second configuration model.
|
|
180
180
|
|
|
181
181
|
## See Also
|
|
182
182
|
|