@seanyao/roll 3.614.2 → 3.614.3
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
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v3.614.3 — 2026-06-14
|
|
6
|
+
|
|
7
|
+
### 改进
|
|
8
|
+
|
|
9
|
+
- **设计技能更严**:`roll-design` 现在把"详细设计"做成一道硬步骤——拆任务之前,必须先拿出能照着写的方案(数据结构、**至少一个完整样例**、接口、映射规则、边界情况)并经确认。规矩一句话:拿不出一个完整样例,就还没设计完。(US-SKILL-029)
|
|
10
|
+
|
|
11
|
+
### 修复
|
|
12
|
+
|
|
13
|
+
- 失败/空转的一轮循环现在也记下用了哪个模型:之前那条记录里模型是空的(只补过另一处、这条漏了),导致实时窗和循环账本看不到是哪个 AI 在跑;现在哪个都记上。(FIX-294)
|
|
14
|
+
|
|
5
15
|
## v3.614.2 — 2026-06-14
|
|
6
16
|
|
|
7
17
|
### 修复
|
package/dist/roll.mjs
CHANGED
|
@@ -2324,6 +2324,7 @@ function buildTerminalEvent(input) {
|
|
|
2324
2324
|
cycleId: input.cycleId,
|
|
2325
2325
|
storyId: input.storyId,
|
|
2326
2326
|
agent: input.agent,
|
|
2327
|
+
model: input.model ?? "",
|
|
2327
2328
|
startedAt: input.startedAt,
|
|
2328
2329
|
endedAt: input.endedAt,
|
|
2329
2330
|
outcome: input.outcome,
|
|
@@ -2412,6 +2413,10 @@ var init_truth_registry = __esm({
|
|
|
2412
2413
|
{ field: "cycleId", surface: "event:cycle:terminal", anchor: "cycle_outcome", writer: "buildTerminalEvent", kind: "authoritative" },
|
|
2413
2414
|
{ field: "storyId", surface: "event:cycle:terminal", anchor: "cycle_outcome", writer: "buildTerminalEvent", kind: "authoritative" },
|
|
2414
2415
|
{ field: "agent", surface: "event:cycle:terminal", anchor: "cycle_outcome", writer: "buildTerminalEvent", kind: "authoritative" },
|
|
2416
|
+
// FIX-294: routed model is a dispatch-time fact (like agent) — authoritative,
|
|
2417
|
+
// ALWAYS present even when usage couldn't be parsed; the `usage` fact below
|
|
2418
|
+
// still owns the present-or-reasoned token/cost truth.
|
|
2419
|
+
{ field: "model", surface: "event:cycle:terminal", anchor: "cycle_outcome", writer: "buildTerminalEvent", kind: "authoritative" },
|
|
2415
2420
|
{ field: "startedAt", surface: "event:cycle:terminal", anchor: "cycle_outcome", writer: "buildTerminalEvent", kind: "authoritative" },
|
|
2416
2421
|
{ field: "endedAt", surface: "event:cycle:terminal", anchor: "cycle_outcome", writer: "buildTerminalEvent", kind: "authoritative" },
|
|
2417
2422
|
{ field: "outcome", surface: "event:cycle:terminal", anchor: "cycle_outcome", writer: "buildTerminalEvent", kind: "authoritative" },
|
|
@@ -30703,10 +30708,13 @@ function buildTerminalRecord(cmd, ctx, worktreePath, nowSec2) {
|
|
|
30703
30708
|
} else {
|
|
30704
30709
|
usage2 = absent("no_parseable_usage");
|
|
30705
30710
|
}
|
|
30711
|
+
const routedModel = (ctx.model ?? "").trim() !== "" ? ctx.model : ctx.agent ?? "";
|
|
30712
|
+
const model = ctx.cost !== void 0 && ctx.cost.model !== "" ? ctx.cost.model : routedModel;
|
|
30706
30713
|
return buildTerminalEvent({
|
|
30707
30714
|
cycleId: cmd.cycleId,
|
|
30708
30715
|
storyId,
|
|
30709
30716
|
agent: ctx.agent ?? "",
|
|
30717
|
+
model,
|
|
30710
30718
|
startedAt: ctx.startSec ?? nowSec2,
|
|
30711
30719
|
endedAt: nowSec2,
|
|
30712
30720
|
outcome: OUTCOME[cmd.status] ?? "unknown",
|
package/package.json
CHANGED
|
@@ -27,20 +27,23 @@ Load when the user wants to discuss approaches, design a solution, model domains
|
|
|
27
27
|
|
|
28
28
|
1. Clarify only when intent or boundaries are unclear.
|
|
29
29
|
2. Model domain depth proportional to risk and novelty.
|
|
30
|
-
3.
|
|
31
|
-
4.
|
|
32
|
-
5.
|
|
30
|
+
3. Detailed design before decomposition — for any non-trivial work, produce a concrete, implementable design artifact and get owner sign-off: (a) data/contract schema, (b) AT LEAST ONE complete worked sample of the intended output/behavior, (c) key interface signatures, (d) mapping/normalization rules, (e) edge cases & failure modes. Depth scales with risk/novelty; trivial work may be light.
|
|
31
|
+
4. Split into INVEST stories — each a slice of the agreed detailed design.
|
|
32
|
+
5. Write specs through roll story new and update backlog.
|
|
33
|
+
6. Self-score the design quality.
|
|
33
34
|
|
|
34
35
|
## Hard Gates
|
|
35
36
|
|
|
36
37
|
- Do not start implementation from this skill.
|
|
37
38
|
- Backlog rows and spec files must stay consistent.
|
|
38
39
|
- Peer review gates apply only when explicitly available/requested.
|
|
40
|
+
- No story decomposition until a detailed design exists and the owner has signed off (proportional to risk). Decomposition slices an agreed design — it is NOT a substitute for designing. If you cannot show at least one complete worked sample of the intended output/behavior, the design is NOT done.
|
|
39
41
|
|
|
40
42
|
## Gotchas
|
|
41
43
|
|
|
42
44
|
- Design writes backlog/spec artifacts; it must not quietly start code implementation.
|
|
43
45
|
- Use roll story new for story directories; do not hand-create backlog rows without matching dossier structure.
|
|
46
|
+
- Jumping from idea straight to INVEST stories (skipping detailed design) produces shallow specs and improvised, inconsistent implementation. Decomposition must slice a concrete, owner-agreed detailed design — schema + at least one complete worked sample + interfaces + mapping rules + edge cases.
|
|
44
47
|
|
|
45
48
|
## Maintenance
|
|
46
49
|
|
|
@@ -200,12 +200,28 @@ it('should handle concurrent writes', async () => {
|
|
|
200
200
|
|
|
201
201
|
---
|
|
202
202
|
|
|
203
|
+
## 9. Detailed Design Completeness 📐
|
|
204
|
+
|
|
205
|
+
**Definition:** Before decomposing work into stories, the detailed design must be concrete and implementable — not a sketch.
|
|
206
|
+
|
|
207
|
+
**Must include (proportional to risk/novelty):**
|
|
208
|
+
- [ ] Data/contract **schema**
|
|
209
|
+
- [ ] **At least one complete worked sample** of the intended output/behavior
|
|
210
|
+
- [ ] Key **interface signatures**
|
|
211
|
+
- [ ] **Mapping/normalization rules**
|
|
212
|
+
- [ ] **Edge cases & failure modes**
|
|
213
|
+
|
|
214
|
+
**Rule:** If you cannot show at least one complete worked sample, the design is NOT done. Decomposition slices an agreed design — it is not a substitute for designing.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
203
218
|
## Mandatory Check Process
|
|
204
219
|
|
|
205
220
|
During the **Test Design Review** phase of each Story, the following must be answered:
|
|
206
221
|
|
|
207
222
|
```markdown
|
|
208
223
|
### Engineering Common Sense Checklist
|
|
224
|
+
- [ ] **Detailed design completeness**: Does the detailed design include at least one complete worked sample plus schema, interface signatures, mapping rules, and edge cases?
|
|
209
225
|
- [ ] **Idempotency**: Can it be run repeatedly? Are there tests?
|
|
210
226
|
- [ ] **Cross-module contract**: Are IDs/formats/algorithms consistent?
|
|
211
227
|
- [ ] **Data flow**: Is the producer → consumer pipeline complete?
|
|
@@ -176,7 +176,7 @@ Expected AC:
|
|
|
176
176
|
Input: IDEA-NNN identifier from .roll/backlog.md
|
|
177
177
|
|
|
178
178
|
Execution path:
|
|
179
|
-
[Read .roll/backlog.md IDEA-NNN row] → [Analyze] → [DDD Slice] → [Split Stories]
|
|
179
|
+
[Read .roll/backlog.md IDEA-NNN row] → [Analyze] → [DDD Slice] → [Solution Design] → [Split Stories]
|
|
180
180
|
→ [Write BACKLOG 📋 Todo] → [Annotate IDEA row: → US-XXX] → Done
|
|
181
181
|
|
|
182
182
|
IDEA annotation: append `→ US-XXX` to the IDEA row's Description column.
|
|
@@ -289,10 +289,22 @@ User Input
|
|
|
289
289
|
│
|
|
290
290
|
▼
|
|
291
291
|
┌─────────────────────────────────────────┐
|
|
292
|
-
│ 3. Solution Design
|
|
293
|
-
│
|
|
294
|
-
│ -
|
|
292
|
+
│ 3. Detailed (Solution) Design ★MANDATORY│
|
|
293
|
+
│ Before ANY decomposition, for │
|
|
294
|
+
│ non-trivial work produce a concrete, │
|
|
295
|
+
│ implementable artifact (depth scales │
|
|
296
|
+
│ with risk/novelty): │
|
|
297
|
+
│ - Architecture / module decomposition │
|
|
295
298
|
│ - Dependency analysis │
|
|
299
|
+
│ Required artifacts (all of): │
|
|
300
|
+
│ (a) data/contract schema │
|
|
301
|
+
│ (b) ≥1 COMPLETE worked sample of │
|
|
302
|
+
│ the intended output/behavior │
|
|
303
|
+
│ (c) key interface signatures │
|
|
304
|
+
│ (d) mapping/normalization rules │
|
|
305
|
+
│ (e) edge cases & failure modes │
|
|
306
|
+
│ Rule: if you cannot show a complete │
|
|
307
|
+
│ worked sample, the design is NOT done.│
|
|
296
308
|
│ [Greenfield] Tactical Model per Context:
|
|
297
309
|
│ - Aggregate Root + Entities + VOs │
|
|
298
310
|
│ - Invariants (业务不变式) │
|
|
@@ -312,6 +324,15 @@ User Input
|
|
|
312
324
|
│ AGREE / skipped
|
|
313
325
|
▼
|
|
314
326
|
┌─────────────────────────────────────────┐
|
|
327
|
+
│ [gate] Owner Sign-off on Detailed Design │ ← REQUIRED before decomposition
|
|
328
|
+
│ Decomposition slices an AGREED design;│
|
|
329
|
+
│ it does NOT replace designing. Get │
|
|
330
|
+
│ owner sign-off (proportional to risk) │
|
|
331
|
+
│ before splitting into stories. │
|
|
332
|
+
└──────────────────┬──────────────────────┘
|
|
333
|
+
│ Signed off
|
|
334
|
+
▼
|
|
335
|
+
┌─────────────────────────────────────────┐
|
|
315
336
|
│ 4. Split into Stories │
|
|
316
337
|
│ - INVEST principles │
|
|
317
338
|
│ - Bounded Context → US domain prefix │
|