@seanyao/roll 2026.523.2 → 2026.524.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 (54) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/bin/roll +546 -97
  3. package/lib/__pycache__/loop-fmt.cpython-314.pyc +0 -0
  4. package/lib/__pycache__/loop_unstick.cpython-314.pyc +0 -0
  5. package/lib/__pycache__/model_prices.cpython-314.pyc +0 -0
  6. package/lib/__pycache__/roll-home.cpython-314.pyc +0 -0
  7. package/lib/__pycache__/roll-loop-status.cpython-314.pyc +0 -0
  8. package/lib/__pycache__/roll_render.cpython-314.pyc +0 -0
  9. package/lib/changelog_audit.py +155 -0
  10. package/lib/i18n/agent.sh +0 -0
  11. package/lib/i18n/alert.sh +0 -0
  12. package/lib/i18n/backlog.sh +0 -0
  13. package/lib/i18n/brief.sh +0 -0
  14. package/lib/i18n/changelog.sh +0 -0
  15. package/lib/i18n/ci.sh +0 -0
  16. package/lib/i18n/debug.sh +0 -0
  17. package/lib/i18n/doctor.sh +31 -0
  18. package/lib/i18n/dream.sh +0 -0
  19. package/lib/i18n/init.sh +17 -0
  20. package/lib/i18n/lang.sh +0 -0
  21. package/lib/i18n/loop.sh +0 -0
  22. package/lib/i18n/migrate.sh +0 -0
  23. package/lib/i18n/offboard.sh +15 -0
  24. package/lib/i18n/onboard.sh +0 -0
  25. package/lib/i18n/peer.sh +0 -0
  26. package/lib/i18n/propose.sh +0 -0
  27. package/lib/i18n/release.sh +0 -0
  28. package/lib/i18n/research.sh +0 -0
  29. package/lib/i18n/review_pr.sh +0 -0
  30. package/lib/i18n/sentinel.sh +0 -0
  31. package/lib/i18n/setup.sh +0 -0
  32. package/lib/i18n/shared.sh +83 -0
  33. package/lib/i18n/skills/roll-brief.sh +20 -0
  34. package/lib/i18n/skills/roll-build.sh +97 -0
  35. package/lib/i18n/skills/roll-design.sh +18 -0
  36. package/lib/i18n/skills/roll-fix.sh +14 -0
  37. package/lib/i18n/skills/roll-loop.sh +28 -0
  38. package/lib/i18n/skills/roll-onboard.sh +16 -0
  39. package/lib/i18n/slides.sh +0 -0
  40. package/lib/i18n/status.sh +0 -0
  41. package/lib/i18n/update.sh +9 -0
  42. package/lib/i18n.sh +25 -0
  43. package/lib/loop-fmt.py +77 -11
  44. package/lib/loop_unstick.py +180 -0
  45. package/lib/model_prices.py +93 -12
  46. package/lib/prices/snapshot-2026-05-22.json +2 -0
  47. package/lib/prices/snapshot-2026-05-23-deepseek.json +15 -0
  48. package/lib/prices/snapshot-2026-05-23-kimi.json +14 -0
  49. package/lib/roll-home.py +17 -1
  50. package/lib/roll-loop-status.py +9 -0
  51. package/lib/roll_render.py +10 -2
  52. package/package.json +1 -1
  53. package/skills/roll-.dream/SKILL.md +4 -4
  54. package/skills/roll-loop/SKILL.md +15 -1
@@ -75,13 +75,25 @@ denied operations and the cycle will idle-exit.
75
75
  loop:
76
76
  primary_agent: claude # claude | deepseek | kimi
77
77
  fallback_agent: deepseek # used when primary fails
78
- max_items_per_run: 3 # limit parallel risk; adjust as needed
78
+ max_items_per_run: 1 # one story per cycle atomic delivery, predictable cycle time
79
79
  brief_on_feature_complete: true
80
80
  retry_backoff: [2, 4, 8, 16] # seconds, exponential
81
81
  ```
82
82
 
83
83
  ## Workflow
84
84
 
85
+ > **One story per cycle (强约束)**: 每个 cycle 只 pick 一个 Todo、跑完 Step 4
86
+ > 立刻退出,不再回 Step 2 找下一个。理由:
87
+ > - cycle 时间可预测(不会因贪心一连串 PR 撞 45 分钟 hard timeout)
88
+ > - PR / events / dashboard 每行一个故事,归因清晰
89
+ > - 一个故事一个 PR 一次 review,blast radius 最小
90
+ >
91
+ > 唯一例外是依赖修复(CI self-heal 等)已经内嵌在当前故事的 Step 4 里——
92
+ > 那部分不算"新挑故事"。
93
+ >
94
+ > 实现层:max_items_per_run 默认 1,executor skill 跑完 Step 5 必须 exit。
95
+ > 不要在同一个 cycle 内多次 emit `pick_todo` 事件。
96
+
85
97
  ### Step 1 — Orphan 🔨 Recovery
86
98
 
87
99
  Process-level crash recovery (LOCK, heartbeat, retry budget) is handled by
@@ -311,6 +323,8 @@ After each item completes:
311
323
  3. Update state file: `status: idle`
312
324
  4. Check if a Feature is now fully complete (all its Stories ✅)
313
325
  5. If yes and `brief_on_feature_complete: true` → invoke `Skill("roll-brief")`
326
+ 6. **EXIT the cycle.** 不要回 Step 2 找下一个故事,不要再 emit `pick_todo`。
327
+ 一个 cycle 只交付一个故事;剩下的 Todo 等下一个 launchd tick 起新 cycle 处理。
314
328
 
315
329
  ### Step 5 — Write Run Summary
316
330