@seanyao/roll 3.610.1 → 3.610.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 (73) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +5 -5
  3. package/dist/roll.mjs +9115 -11282
  4. package/package.json +3 -1
  5. package/skills/README.md +14 -1
  6. package/skills/docs/skill-authoring.md +66 -0
  7. package/skills/reports/skill-audit-summary.md +53 -0
  8. package/skills/roll-.changelog/SKILL.md +25 -443
  9. package/skills/roll-.changelog/references/full-contract.md +462 -0
  10. package/skills/roll-.clarify/SKILL.md +6 -4
  11. package/skills/roll-.dream/SKILL.md +26 -353
  12. package/skills/roll-.dream/references/full-contract.md +365 -0
  13. package/skills/roll-.echo/SKILL.md +6 -4
  14. package/skills/roll-.qa/SKILL.md +25 -236
  15. package/skills/roll-.qa/references/full-contract.md +256 -0
  16. package/skills/roll-.review/SKILL.md +6 -2
  17. package/skills/roll-brief/SKILL.md +6 -8
  18. package/skills/roll-build/SKILL.md +28 -864
  19. package/skills/roll-build/references/full-contract.md +883 -0
  20. package/skills/roll-debug/SKILL.md +26 -585
  21. package/skills/roll-debug/references/full-contract.md +607 -0
  22. package/skills/roll-design/SKILL.md +28 -903
  23. package/skills/roll-design/references/full-contract.md +923 -0
  24. package/skills/roll-doc/SKILL.md +25 -574
  25. package/skills/roll-doc/references/full-contract.md +594 -0
  26. package/skills/roll-doctor/SKILL.md +21 -2
  27. package/skills/roll-fix/SKILL.md +28 -621
  28. package/skills/roll-fix/references/full-contract.md +640 -0
  29. package/skills/roll-idea/SKILL.md +6 -2
  30. package/skills/roll-loop/SKILL.md +27 -543
  31. package/skills/roll-loop/references/full-contract.md +555 -0
  32. package/skills/roll-notes/SKILL.md +6 -2
  33. package/skills/roll-onboard/SKILL.md +6 -2
  34. package/skills/roll-peer/SKILL.md +27 -316
  35. package/skills/roll-peer/references/full-contract.md +329 -0
  36. package/skills/roll-propose/SKILL.md +6 -8
  37. package/skills/roll-review-pr/SKILL.md +6 -2
  38. package/skills/roll-sentinel/SKILL.md +26 -344
  39. package/skills/roll-sentinel/references/full-contract.md +363 -0
  40. package/skills/roll-spar/SKILL.md +27 -269
  41. package/skills/roll-spar/references/full-contract.md +288 -0
  42. package/skills/route-cases/skills.json +235 -0
  43. package/skills/scripts/audit-skills.mjs +272 -0
  44. package/skills/scripts/test-audit-skills.mjs +39 -0
  45. package/skills/tests/fixtures/skill-audit/block-skill/SKILL.md +12 -0
  46. package/skills/tests/fixtures/skill-audit/minimal-skill/SKILL.md +8 -0
  47. package/skills/tests/fixtures/skill-audit/quoted-skill/SKILL.md +10 -0
  48. package/skills/tests/fixtures/skill-audit/route-cases.json +21 -0
  49. package/skills/tests/fixtures/skill-audit/spoke-skill/SKILL.md +12 -0
  50. package/skills/tests/fixtures/skill-audit/spoke-skill/references/runbook.md +3 -0
  51. package/lib/i18n/slides.sh +0 -3
  52. package/lib/i18n/slides_build.sh +0 -38
  53. package/lib/i18n/slides_delete.sh +0 -19
  54. package/lib/i18n/slides_list.sh +0 -14
  55. package/lib/i18n/slides_logs.sh +0 -12
  56. package/lib/i18n/slides_new.sh +0 -15
  57. package/lib/i18n/slides_preview.sh +0 -14
  58. package/lib/i18n/slides_templates.sh +0 -7
  59. package/lib/slides/components/README.md +0 -123
  60. package/lib/slides/components/cards-2.html +0 -9
  61. package/lib/slides/components/cards-3.html +0 -9
  62. package/lib/slides/components/cards-4.html +0 -9
  63. package/lib/slides/components/compare.html +0 -22
  64. package/lib/slides/components/highlight.html +0 -9
  65. package/lib/slides/components/pipeline.html +0 -12
  66. package/lib/slides/components/plain.html +0 -7
  67. package/lib/slides/components/quote.html +0 -4
  68. package/lib/slides/components/timeline.html +0 -9
  69. package/lib/slides/templates/introduction-v3.html +0 -571
  70. package/lib/slides/templates/pitch.html +0 -0
  71. package/skills/roll-deck/SKILL.md +0 -296
  72. /package/skills/roll-debug/{injectable-bb.js → assets/injectable-bb.js} +0 -0
  73. /package/skills/roll-design/{ENGINEERING_CHECKLIST.md → references/engineering-checklist.md} +0 -0
@@ -2,363 +2,45 @@
2
2
  name: roll-sentinel
3
3
  license: MIT
4
4
  allowed-tools: "Read, Edit, Write, Bash, WebFetch"
5
- description: Smart patrol inspector for production systems. Scheduled randomized sampling checks based on BACKLOG requirements. Cost-controlled AI validation with intelligent spot-checking logic.
5
+ description: "Load when production or deployed behavior needs cost-controlled randomized patrol checks based on backlog requirements and runtime sampling."
6
6
  ---
7
+ # Roll Sentinel
7
8
 
8
- # Sentinel
9
+ This hub keeps the routing boundary, hard gates, and execution skeleton in the initial context. Load the heavier runbook only when the task actually needs the detailed contract.
9
10
 
10
- **Smart Patrol Inspector** - Scheduled, randomized, cost-controlled patrol and acceptance checks for production systems.
11
+ ## Load
11
12
 
12
- ## When Not to Use
13
-
14
- - One-off debugging of a reported bug (use `$roll-debug`)
15
- - Full-coverage regression testing (sentinel samples, does not cover)
16
- - Dev/staging environment checks (use CI tests instead)
17
- - Pre-commit self-review of diffs (use `$roll-.review`)
18
-
19
- ## Core Principle
20
-
21
- ```
22
- ┌─────────────────────────────────────────────────────────────┐
23
- │ Smart Patrol Logic │
24
- ├─────────────────────────────────────────────────────────────┤
25
- │ │
26
- │ Not full-coverage checks! Think of it like a security │
27
- │ guard on patrol: │
28
- │ │
29
- │ 🕐 Scheduled Triggers - Auto-patrol on schedule │
30
- │ └── "Patrol once every 6 hours" │
31
- │ │
32
- │ 🎲 Random Sampling - Different samples each time │
33
- │ └── "Check Stories 1-10 this time, 50-60 next time" │
34
- │ │
35
- │ 💰 Cost Control - AI checks are expensive, use sparingly │
36
- │ └── "Only check 10 each time, not all 100" │
37
- │ │
38
- │ 🎯 BACKLOG-Based - Validate against requirements │
39
- │ └── "US-001 says login works, so verify login" │
40
- │ │
41
- └─────────────────────────────────────────────────────────────┘
42
- ```
43
-
44
- ## Patrol Strategy
45
-
46
- ### Sampling Logic
47
-
48
- ```javascript
49
- // Sampling logic for each patrol
50
- function selectSamples(backlog, strategy = 'smart') {
51
- const completedStories = backlog.filter(s => s.status === '✅');
52
-
53
- switch(strategy) {
54
- case 'random':
55
- // Fully random: randomly select N from all completed Stories
56
- return shuffle(completedStories).slice(0, 10);
57
-
58
- case 'weighted':
59
- // Weighted random: prioritize recently modified and frequently used
60
- return completedStories
61
- .sort((a, b) => b.lastModified - a.lastModified)
62
- .slice(0, 5) // 5 most recent
63
- .concat(shuffle(completedStories).slice(0, 5)); // + 5 random
64
-
65
- case 'coverage':
66
- // Coverage sampling: ensure different modules are all covered
67
- const byModule = groupBy(completedStories, 'module');
68
- return Object.values(byModule).map(
69
- stories => randomPick(stories)
70
- );
71
- }
72
- }
73
- ```
74
-
75
- ### Cost Control
76
-
77
- | Strategy | Sample Size | Frequency | Use Case |
78
- |----------|-------------|-----------|----------|
79
- | **Light** | 5 Stories | Once daily | Stable period |
80
- | **Normal** | 10 Stories | Every 6 hours | General monitoring |
81
- | **Intensive** | 20 Stories | Every hour | Post-release period |
82
- | **Full** | All | Once weekly | Weekly patrol |
83
-
84
- ```yaml
85
- # sentinel.config.yml
86
- cost_control:
87
- daily_budget: 100 # AI call budget
88
-
89
- light_patrol:
90
- samples: 5
91
- schedule: "0 9 * * *" # Daily at 9am
92
-
93
- normal_patrol:
94
- samples: 10
95
- schedule: "0 */6 * * *" # Every 6 hours
96
-
97
- # Intensive patrol after deployment
98
- post_deploy:
99
- trigger: "after_deploy"
100
- samples: 20
101
- duration: "2h" # Lasts 2 hours
102
- ```
103
-
104
- ### Uncertainty Handling
105
-
106
- ```javascript
107
- // Systems have uncertainty; a single check may be inaccurate.
108
- // Use multiple random checks to increase confidence.
109
-
110
- class UncertaintyHandler {
111
- // Track check result history
112
- history = new Map(); // storyId -> [check1, check2, ...]
113
-
114
- // Determine if an issue is real
115
- isRealIssue(storyId, currentResult) {
116
- const pastResults = this.history.get(storyId) || [];
117
- pastResults.push(currentResult);
118
-
119
- // Only consider it a real issue if it fails 3 times consecutively
120
- const recent3 = pastResults.slice(-3);
121
- if (recent3.every(r => r.status === 'FAIL')) {
122
- return true; // Real issue
123
- }
124
-
125
- // If it fails occasionally, it may be intermittent; keep observing
126
- if (recent3.filter(r => r.status === 'FAIL').length === 1) {
127
- return false; // Likely intermittent, don't alert yet
128
- }
129
-
130
- return false;
131
- }
132
- }
133
- ```
134
-
135
- ## When to Patrol
136
-
137
- ### Scheduled Patrols
138
-
139
- ```bash
140
- # Daily patrol - randomly check a few each day
141
- $roll-sentinel patrol --mode=normal
142
-
143
- # Late-night patrol - full check during off-peak hours
144
- $roll-sentinel patrol --mode=full --schedule="0 3 * * *"
145
-
146
- # Weekend walkthrough - check the week's accumulation on Sunday
147
- $roll-sentinel patrol --mode=weekly --schedule="0 10 * * 0"
148
- ```
149
-
150
- ### Event-Triggered
151
-
152
- ```bash
153
- # Intensive patrol for 2 hours after deployment
154
- $roll-sentinel patrol --mode=intensive --duration=2h --after-deploy
155
-
156
- # Emergency check after an alert
157
- $roll-sentinel patrol --mode=focus --target=US-XXX
158
- ```
13
+ Load when production or deployed behavior needs cost-controlled randomized patrol checks based on backlog requirements and runtime sampling.
159
14
 
160
- ## Patrol Report
161
-
162
- ```markdown
163
- ## 🛡️ Sentinel Patrol Report #247
164
- **Time**: 2024-01-15 14:00 UTC
165
- **Patrol ID**: patrol-20240115-1400
166
- **Mode**: Normal (Random Sampling)
167
-
168
- ### 📊 Sampling Info
169
- | Metric | Value |
170
- |--------|-------|
171
- | Total Stories | 150 |
172
- | Sample Size | 10 |
173
- | Sampling Rate | 6.7% |
174
- | Cost Estimate | $0.07 |
175
-
176
- ### 🎲 Random Sample
177
- | # | Story | Module | Last Checked | Result |
178
- |---|-------|--------|--------------|--------|
179
- | 1 | US-LOGIN-001 | Auth | 6h ago | ✅ |
180
- | 2 | US-STORY-042 | Content | 12h ago | ✅ |
181
- | 3 | US-AUDIO-015 | Player | 2h ago | 🟡* |
182
- | 4 | US-SEARCH-003 | Search | 18h ago | ✅ |
183
- | 5 | ... | ... | ... | ... |
184
-
185
- \* US-AUDIO-015: Occasional playback stuttering (2nd occurrence, under observation)
186
-
187
- ### 🔴 Issues Found
188
- None (no confirmed issues found in this sample)
189
-
190
- ### 📈 Patrol Statistics (7 days)
191
- | Metric | Value |
192
- |--------|-------|
193
- | Total Patrols | 28 |
194
- | Stories Checked | 280 |
195
- | Issues Found | 3 |
196
- | False Positives | 1 |
197
- | Coverage | 85% of all stories |
198
-
199
- ### 💰 Cost Report
200
- | Item | Usage |
201
- |------|-------|
202
- | AI Checks | 280 calls |
203
- | Playwright Runs | 28 sessions |
204
- | Total Cost | $2 |
205
- | Budget Used | 15% of monthly |
206
- ```
207
-
208
- ## Smart Detection Logic
209
-
210
- ### Pattern 1: Intermittent vs Real Issue
211
-
212
- ```javascript
213
- // Don't alert on the first failure; look at the trend
214
- const checks = [
215
- { time: 'T-6h', status: 'PASS' },
216
- { time: 'T-12h', status: 'FAIL' }, // Intermittent?
217
- { time: 'T-18h', status: 'PASS' },
218
- { time: 'Now', status: 'FAIL' }, // Failed again!
219
- ];
220
-
221
- // 2 consecutive failures → Create Issue
222
- if (lastN(checks, 2).all(c => c.status === 'FAIL')) {
223
- createBacklogItem('FIX-XXX');
224
- }
225
- // Occasional failure → Log for observation
226
- else if (checks.filter(c => c.status === 'FAIL').length <= 1) {
227
- logForObservation('Might be flaky, continue monitoring');
228
- }
229
- ```
230
-
231
- ### Pattern 2: Hotspot Detection
232
-
233
- ```javascript
234
- // Some Stories frequently show issues when sampled.
235
- // Automatically increase their check frequency.
236
-
237
- const hotSpots = analyzeHistory();
238
- // hotSpots = [
239
- // { story: 'US-AUDIO-015', failRate: 0.3 }, // 30% failure rate
240
- // { story: 'US-SEARCH-003', failRate: 0.1 },
241
- // ]
242
-
243
- // Increase weight for hotspots
244
- if (hotSpots.some(h => h.story === selectedStory)) {
245
- // If it's a hotspot, even if not randomly selected, add extra check probability
246
- if (Math.random() < 0.3) {
247
- extraCheck(story);
248
- }
249
- }
250
- ```
251
-
252
- ## Cost Optimization
253
-
254
- ### Tiered Checking
255
-
256
- ```
257
- Level 1: Lightweight Check (cheap)
258
- └── HTTP ping / API health check
259
- └── Cost: $0.001 per check
260
-
261
- Level 2: Functional Check (moderate)
262
- └── Playwright critical path
263
- └── Cost: $0.01 per check
15
+ ## When Not to Use
264
16
 
265
- Level 3: AI Deep Check (expensive)
266
- └── AI-powered content quality analysis
267
- └── Cost: $0.07 per check
17
+ - Code health scans; load roll-.dream.
18
+ - Interactive page debugging; load roll-debug.
268
19
 
269
- Strategy:
270
- - Each patrol: 90% Level 1 + 10% Level 2
271
- - Once weekly: Level 3 deep inspection
272
- ```
20
+ ## Read On Demand
273
21
 
274
- ### Smart Batching
22
+ - Read [the full contract](references/full-contract.md) before executing the workflow end to end, recovering from failures, or checking exact output templates.
23
+ - Keep this hub in context for trigger boundaries and hard gates.
275
24
 
276
- ```javascript
277
- // Batch checks to reduce cost.
278
- // Instead of 10 separate checks, open one browser for all 10.
25
+ ## Workflow Skeleton
279
26
 
280
- async function batchCheck(stories) {
281
- const browser = await chromium.launch();
282
- const context = await browser.newContext();
283
-
284
- // Reuse browser session to check multiple Stories
285
- for (const story of stories) {
286
- const page = await context.newPage();
287
- await checkStory(page, story);
288
- await page.close();
289
- }
290
-
291
- await browser.close();
292
- // Cost: 1 session for 10 checks
293
- }
294
- ```
27
+ 1. Select sampling targets from backlog requirements.
28
+ 2. Run randomized cost-controlled checks.
29
+ 3. Validate observed production behavior.
30
+ 4. Record patrol evidence and escalate anomalies.
295
31
 
296
- ## Workflow: Find Issue → Backlog
32
+ ## Hard Gates
297
33
 
298
- ```
299
- ┌─────────────────────────────────────────────────────────────┐
300
- │ Issue Discovery Workflow via Patrol │
301
- ├─────────────────────────────────────────────────────────────┤
302
- │ │
303
- │ 1. Sentinel Patrol (scheduled random sampling) │
304
- │ └── Sample: US-AUDIO-015 │
305
- │ │
306
- │ 2. Check Result │
307
- │ └── Status: FAIL (playback stuttering) │
308
- │ │
309
- │ 3. Uncertainty Check │
310
- │ └── Check history: this is the 2nd failure │
311
- │ └── 1st was 6h ago (possibly intermittent) │
312
- │ └── Decision: continue observing, don't create Issue │
313
- │ │
314
- │ 4. Next Patrol │
315
- │ └── US-AUDIO-015 sampled again (hotspot weighting) │
316
- │ └── Status: FAIL (failed again!) │
317
- │ └── Check history: 2 consecutive failures │
318
- │ └── Decision: create FIX-AUDIO-015 │
319
- │ │
320
- │ 5. Create Backlog Item │
321
- │ └── Add FIX-AUDIO-015 to .roll/backlog.md │
322
- │ └── Status: 📋 Todo │
323
- │ └── Awaiting human fix │
324
- │ │
325
- │ 6. Human Fix │
326
- │ └── User: "Fix FIX-AUDIO-015" │
327
- │ └── $roll-fix FIX-AUDIO-015 │
328
- │ │
329
- │ 7. Verification │
330
- │ └── Next patrol will prioritize verifying this FIX │
331
- │ └── Status: ✅ Fixed │
332
- │ │
333
- └─────────────────────────────────────────────────────────────┘
334
- ```
34
+ - Sampling budget remains explicit.
35
+ - Do not turn sentinel into exhaustive monitoring.
335
36
 
336
- ## Integration with Other Skills
37
+ ## Gotchas
337
38
 
338
- ```
339
- ┌─────────────────────────────────────────────────────────────┐
340
- │ Complete Monitoring System │
341
- ├─────────────────────────────────────────────────────────────┤
342
- │ │
343
- │ $roll-sentinel patrol Scheduled random patrol (main) │
344
- │ ↓ │
345
- │ Issue found? ──┬── Yes ──→ Create BACKLOG item │
346
- │ │ Await $roll-fix │
347
- │ │ │
348
- │ └── No ──→ Continue patrolling │
349
- │ │
350
- │ $roll-debug On-demand deep diagnosis (aux) │
351
- │ (When Sentinel finds an issue, manually trigger deep dive) │
352
- │ │
353
- │ $roll-build Post-fix regression verify │
354
- │ │
355
- └─────────────────────────────────────────────────────────────┘
356
- ```
39
+ - Sentinel samples deployed behavior; it is not a code architecture scanner.
40
+ - Keep cost controls and randomized sampling visible; do not turn patrols into exhaustive monitoring.
357
41
 
358
- ## Best Practices
42
+ ## Maintenance
359
43
 
360
- 1. **Don't do full-coverage checks** - Expensive and unnecessary
361
- 2. **Random + Hotspots** - Balance coverage and cost
362
- 3. **Multi-check confirmation** - Avoid false positives from intermittent failures
363
- 4. **Budget control** - Set daily/monthly AI call limits
364
- 5. **Progressive intensity** - Light during stable periods, Intensive after releases
44
+ - Description changes require updates in `route-cases/skills.json`.
45
+ - New observed failures should add a gotcha and the matching positive or negative route case.
46
+ - Heavy examples, templates, recovery paths, and deterministic snippets belong in `references/`, `assets/`, or `scripts/`, not in this hub.