@seanyao/roll 3.609.2 → 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.
- package/CHANGELOG.md +44 -1
- package/README.md +5 -6
- package/dist/roll.mjs +16146 -16186
- package/package.json +3 -2
- package/skills/README.md +14 -1
- package/skills/docs/skill-authoring.md +66 -0
- package/skills/reports/skill-audit-summary.md +53 -0
- package/skills/roll-.changelog/SKILL.md +25 -443
- package/skills/roll-.changelog/references/full-contract.md +462 -0
- package/skills/roll-.clarify/SKILL.md +6 -4
- package/skills/roll-.dream/SKILL.md +26 -353
- package/skills/roll-.dream/references/full-contract.md +365 -0
- package/skills/roll-.echo/SKILL.md +6 -4
- package/skills/roll-.qa/SKILL.md +25 -236
- package/skills/roll-.qa/references/full-contract.md +256 -0
- package/skills/roll-.review/SKILL.md +6 -2
- package/skills/roll-brief/SKILL.md +6 -8
- package/skills/roll-build/SKILL.md +28 -864
- package/skills/roll-build/references/full-contract.md +883 -0
- package/skills/roll-debug/SKILL.md +26 -585
- package/skills/roll-debug/references/full-contract.md +607 -0
- package/skills/roll-design/SKILL.md +28 -903
- package/skills/roll-design/references/full-contract.md +923 -0
- package/skills/roll-doc/SKILL.md +25 -574
- package/skills/roll-doc/references/full-contract.md +594 -0
- package/skills/roll-doctor/SKILL.md +21 -2
- package/skills/roll-fix/SKILL.md +28 -621
- package/skills/roll-fix/references/full-contract.md +640 -0
- package/skills/roll-idea/SKILL.md +6 -2
- package/skills/roll-loop/SKILL.md +27 -543
- package/skills/roll-loop/references/full-contract.md +555 -0
- package/skills/roll-notes/SKILL.md +6 -2
- package/skills/roll-onboard/SKILL.md +6 -2
- package/skills/roll-peer/SKILL.md +27 -316
- package/skills/roll-peer/references/full-contract.md +329 -0
- package/skills/roll-propose/SKILL.md +6 -8
- package/skills/roll-review-pr/SKILL.md +6 -2
- package/skills/roll-sentinel/SKILL.md +26 -344
- package/skills/roll-sentinel/references/full-contract.md +363 -0
- package/skills/roll-spar/SKILL.md +27 -269
- package/skills/roll-spar/references/full-contract.md +288 -0
- package/skills/route-cases/skills.json +235 -0
- package/skills/scripts/audit-skills.mjs +272 -0
- package/skills/scripts/test-audit-skills.mjs +39 -0
- package/skills/tests/fixtures/skill-audit/block-skill/SKILL.md +12 -0
- package/skills/tests/fixtures/skill-audit/minimal-skill/SKILL.md +8 -0
- package/skills/tests/fixtures/skill-audit/quoted-skill/SKILL.md +10 -0
- package/skills/tests/fixtures/skill-audit/route-cases.json +21 -0
- package/skills/tests/fixtures/skill-audit/spoke-skill/SKILL.md +12 -0
- package/skills/tests/fixtures/skill-audit/spoke-skill/references/runbook.md +3 -0
- package/bin/roll +0 -15361
- package/lib/backfill-pi-usage.py +0 -243
- package/lib/changelog_audit.py +0 -149
- package/lib/changelog_generate.py +0 -470
- package/lib/consistency_check.py +0 -409
- package/lib/context_feed_budget.sh +0 -194
- package/lib/github_sync.py +0 -876
- package/lib/i18n/slides.sh +0 -3
- package/lib/i18n/slides_build.sh +0 -38
- package/lib/i18n/slides_delete.sh +0 -19
- package/lib/i18n/slides_list.sh +0 -14
- package/lib/i18n/slides_logs.sh +0 -12
- package/lib/i18n/slides_new.sh +0 -15
- package/lib/i18n/slides_preview.sh +0 -14
- package/lib/i18n/slides_templates.sh +0 -7
- package/lib/i18n.sh +0 -211
- package/lib/loop-exit-summary.py +0 -393
- package/lib/loop-fmt.py +0 -589
- package/lib/loop_pick_agent.py +0 -316
- package/lib/loop_result_eval.py +0 -469
- package/lib/loop_unstick.py +0 -180
- package/lib/model_prices.py +0 -194
- package/lib/prices_fetcher.py +0 -534
- package/lib/roll-backlog.py +0 -225
- package/lib/roll-brief.py +0 -286
- package/lib/roll-help.py +0 -158
- package/lib/roll-home.py +0 -556
- package/lib/roll-init.py +0 -156
- package/lib/roll-loop-status.py +0 -1691
- package/lib/roll-loop-story.py +0 -191
- package/lib/roll-peer.py +0 -252
- package/lib/roll-setup.py +0 -102
- package/lib/roll-status.py +0 -367
- package/lib/roll_git.py +0 -41
- package/lib/roll_render.py +0 -414
- package/lib/slides/components/README.md +0 -123
- package/lib/slides/components/cards-2.html +0 -9
- package/lib/slides/components/cards-3.html +0 -9
- package/lib/slides/components/cards-4.html +0 -9
- package/lib/slides/components/compare.html +0 -22
- package/lib/slides/components/highlight.html +0 -9
- package/lib/slides/components/pipeline.html +0 -12
- package/lib/slides/components/plain.html +0 -7
- package/lib/slides/components/quote.html +0 -4
- package/lib/slides/components/timeline.html +0 -9
- package/lib/slides/templates/introduction-v3.html +0 -571
- package/lib/slides/templates/pitch.html +0 -0
- package/lib/slides-render.py +0 -778
- package/lib/slides-validate.py +0 -357
- package/lib/test_quality_gate.py +0 -143
- package/skills/roll-deck/SKILL.md +0 -296
- /package/skills/roll-debug/{injectable-bb.js → assets/injectable-bb.js} +0 -0
- /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:
|
|
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
|
-
|
|
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
|
-
|
|
11
|
+
## Load
|
|
11
12
|
|
|
12
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
266
|
-
|
|
267
|
-
└── Cost: $0.07 per check
|
|
17
|
+
- Code health scans; load roll-.dream.
|
|
18
|
+
- Interactive page debugging; load roll-debug.
|
|
268
19
|
|
|
269
|
-
|
|
270
|
-
- Each patrol: 90% Level 1 + 10% Level 2
|
|
271
|
-
- Once weekly: Level 3 deep inspection
|
|
272
|
-
```
|
|
20
|
+
## Read On Demand
|
|
273
21
|
|
|
274
|
-
|
|
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
|
-
|
|
277
|
-
// Batch checks to reduce cost.
|
|
278
|
-
// Instead of 10 separate checks, open one browser for all 10.
|
|
25
|
+
## Workflow Skeleton
|
|
279
26
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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
|
-
##
|
|
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
|
-
##
|
|
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
|
-
##
|
|
42
|
+
## Maintenance
|
|
359
43
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
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.
|