panopticon-cli 0.4.32 → 0.4.33
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/dist/{agents-BDFHF4T3.js → agents-VLK4BMVA.js} +10 -7
- package/dist/chunk-7SN4L4PH.js +150 -0
- package/dist/chunk-7SN4L4PH.js.map +1 -0
- package/dist/chunk-7XNJJBH6.js +538 -0
- package/dist/chunk-7XNJJBH6.js.map +1 -0
- package/dist/chunk-AQXETQHW.js +113 -0
- package/dist/chunk-AQXETQHW.js.map +1 -0
- package/dist/{chunk-2NIAOCIC.js → chunk-ASY7T35E.js} +170 -64
- package/dist/chunk-ASY7T35E.js.map +1 -0
- package/dist/chunk-B3PF6JPQ.js +212 -0
- package/dist/chunk-B3PF6JPQ.js.map +1 -0
- package/dist/{chunk-XP2DXWYP.js → chunk-BKCWRMUX.js} +88 -35
- package/dist/chunk-BKCWRMUX.js.map +1 -0
- package/dist/chunk-CFCUOV3Q.js +669 -0
- package/dist/chunk-CFCUOV3Q.js.map +1 -0
- package/dist/chunk-CWELWPWQ.js +32 -0
- package/dist/chunk-CWELWPWQ.js.map +1 -0
- package/dist/chunk-DI7ABPNQ.js +352 -0
- package/dist/chunk-DI7ABPNQ.js.map +1 -0
- package/dist/{chunk-VU4FLXV5.js → chunk-FQ66DECN.js} +31 -4
- package/dist/chunk-FQ66DECN.js.map +1 -0
- package/dist/{review-status-GWQYY77L.js → chunk-GFP3PIPB.js} +14 -7
- package/dist/chunk-GFP3PIPB.js.map +1 -0
- package/dist/chunk-JQBV3Q2W.js +29 -0
- package/dist/chunk-JQBV3Q2W.js.map +1 -0
- package/dist/{chunk-BWGFN44T.js → chunk-JT4O4YVM.js} +28 -16
- package/dist/chunk-JT4O4YVM.js.map +1 -0
- package/dist/{chunk-VIWUCJ4V.js → chunk-KJ2TRXNK.js} +34 -36
- package/dist/chunk-KJ2TRXNK.js.map +1 -0
- package/dist/{chunk-JY7R7V4G.js → chunk-OMNXYPXC.js} +2 -2
- package/dist/chunk-OMNXYPXC.js.map +1 -0
- package/dist/chunk-PELXV435.js +215 -0
- package/dist/chunk-PELXV435.js.map +1 -0
- package/dist/chunk-PI7Y3PSN.js +797 -0
- package/dist/chunk-PI7Y3PSN.js.map +1 -0
- package/dist/chunk-RBUO57TC.js +154 -0
- package/dist/chunk-RBUO57TC.js.map +1 -0
- package/dist/chunk-XFR2DLMR.js +600 -0
- package/dist/chunk-XFR2DLMR.js.map +1 -0
- package/dist/chunk-XKT5MHPT.js +677 -0
- package/dist/chunk-XKT5MHPT.js.map +1 -0
- package/dist/{chunk-HCTJFIJJ.js → chunk-YLPSQAM2.js} +2 -2
- package/dist/{chunk-HCTJFIJJ.js.map → chunk-YLPSQAM2.js.map} +1 -1
- package/dist/{chunk-6HXKTOD7.js → chunk-ZTFNYOC7.js} +53 -38
- package/dist/chunk-ZTFNYOC7.js.map +1 -0
- package/dist/cli/index.js +4362 -2927
- package/dist/cli/index.js.map +1 -1
- package/dist/{config-BOAMSKTF.js → config-4CJNUE3O.js} +7 -3
- package/dist/dashboard/prompts/merge-agent.md +217 -0
- package/dist/dashboard/prompts/review-agent.md +409 -0
- package/dist/dashboard/prompts/sync-main.md +84 -0
- package/dist/dashboard/prompts/test-agent.md +283 -0
- package/dist/dashboard/prompts/work-agent.md +247 -0
- package/dist/dashboard/public/assets/index-UjZq6ykz.css +32 -0
- package/dist/dashboard/public/assets/index-kAJqtLDO.js +708 -0
- package/dist/dashboard/public/index.html +2 -2
- package/dist/dashboard/server.js +15194 -3160
- package/dist/{dns-L3L2BB27.js → dns-7BDJSD3E.js} +4 -2
- package/dist/{feedback-writer-AAKF5BTK.js → feedback-writer-LVZ5TFYZ.js} +8 -4
- package/dist/feedback-writer-LVZ5TFYZ.js.map +1 -0
- package/dist/hume-WMAUBBV2.js +13 -0
- package/dist/index.d.ts +153 -40
- package/dist/index.js +65 -23
- package/dist/index.js.map +1 -1
- package/dist/{projects-VXRUCMLM.js → projects-JEIVIYC6.js} +3 -3
- package/dist/rally-RKFSWC7E.js +10 -0
- package/dist/{remote-agents-Z3R2A5BN.js → remote-agents-TFSMW7GN.js} +2 -2
- package/dist/{remote-workspace-2G6V2KNP.js → remote-workspace-AHVHQEES.js} +8 -8
- package/dist/review-status-EPFG4XM7.js +19 -0
- package/dist/shadow-state-5MDP6YXH.js +30 -0
- package/dist/shadow-state-5MDP6YXH.js.map +1 -0
- package/dist/{specialist-context-N32QBNNQ.js → specialist-context-T3NBMCIE.js} +8 -7
- package/dist/{specialist-context-N32QBNNQ.js.map → specialist-context-T3NBMCIE.js.map} +1 -1
- package/dist/{specialist-logs-GF3YV4KL.js → specialist-logs-CVKD3YJ3.js} +7 -6
- package/dist/specialist-logs-CVKD3YJ3.js.map +1 -0
- package/dist/{specialists-JBIW6MP4.js → specialists-TKAP6T6Z.js} +7 -6
- package/dist/specialists-TKAP6T6Z.js.map +1 -0
- package/dist/tldr-daemon-T3THOUGT.js +21 -0
- package/dist/tldr-daemon-T3THOUGT.js.map +1 -0
- package/dist/traefik-QX4ZV4YG.js +19 -0
- package/dist/traefik-QX4ZV4YG.js.map +1 -0
- package/dist/tunnel-W2GZBLEV.js +13 -0
- package/dist/tunnel-W2GZBLEV.js.map +1 -0
- package/dist/workspace-manager-KLHUCIZV.js +22 -0
- package/dist/workspace-manager-KLHUCIZV.js.map +1 -0
- package/package.json +2 -2
- package/scripts/heartbeat-hook +37 -10
- package/scripts/patches/llm-tldr-tsx-support.py +109 -0
- package/scripts/pre-tool-hook +26 -15
- package/scripts/record-cost-event.js +177 -43
- package/scripts/record-cost-event.ts +87 -3
- package/scripts/statusline.sh +169 -0
- package/scripts/stop-hook +14 -11
- package/scripts/tldr-post-edit +72 -0
- package/scripts/tldr-read-enforcer +275 -0
- package/skills/check-merged/SKILL.md +143 -0
- package/skills/crash-investigation/SKILL.md +301 -0
- package/skills/github-cli/SKILL.md +185 -0
- package/skills/pan-reopen/SKILL.md +65 -0
- package/skills/pan-sync-main/SKILL.md +87 -0
- package/skills/pan-tldr/SKILL.md +149 -0
- package/skills/react-best-practices/SKILL.md +125 -0
- package/skills/spec-readiness/REPORT-TEMPLATE.md +158 -0
- package/skills/spec-readiness/SCORING-REFERENCE.md +369 -0
- package/skills/spec-readiness/SKILL.md +400 -0
- package/skills/spec-readiness-setup/SKILL.md +361 -0
- package/skills/workspace-status/SKILL.md +56 -0
- package/templates/traefik/dynamic/panopticon.yml.template +0 -5
- package/templates/traefik/traefik.yml +0 -8
- package/dist/chunk-2NIAOCIC.js.map +0 -1
- package/dist/chunk-3XAB4IXF.js +0 -51
- package/dist/chunk-3XAB4IXF.js.map +0 -1
- package/dist/chunk-6HXKTOD7.js.map +0 -1
- package/dist/chunk-BBCUK6N2.js +0 -241
- package/dist/chunk-BBCUK6N2.js.map +0 -1
- package/dist/chunk-BWGFN44T.js.map +0 -1
- package/dist/chunk-ELK6Q7QI.js +0 -545
- package/dist/chunk-ELK6Q7QI.js.map +0 -1
- package/dist/chunk-JY7R7V4G.js.map +0 -1
- package/dist/chunk-LYSBSZYV.js +0 -1523
- package/dist/chunk-LYSBSZYV.js.map +0 -1
- package/dist/chunk-VIWUCJ4V.js.map +0 -1
- package/dist/chunk-VU4FLXV5.js.map +0 -1
- package/dist/chunk-XP2DXWYP.js.map +0 -1
- package/dist/dashboard/public/assets/index-C7X6LP5Z.css +0 -32
- package/dist/dashboard/public/assets/index-ClYqpcAJ.js +0 -645
- package/dist/feedback-writer-AAKF5BTK.js.map +0 -1
- package/dist/review-status-GWQYY77L.js.map +0 -1
- package/dist/traefik-CUJM6K5Z.js +0 -12
- /package/dist/{agents-BDFHF4T3.js.map → agents-VLK4BMVA.js.map} +0 -0
- /package/dist/{config-BOAMSKTF.js.map → config-4CJNUE3O.js.map} +0 -0
- /package/dist/{dns-L3L2BB27.js.map → dns-7BDJSD3E.js.map} +0 -0
- /package/dist/{projects-VXRUCMLM.js.map → hume-WMAUBBV2.js.map} +0 -0
- /package/dist/{remote-agents-Z3R2A5BN.js.map → projects-JEIVIYC6.js.map} +0 -0
- /package/dist/{specialist-logs-GF3YV4KL.js.map → rally-RKFSWC7E.js.map} +0 -0
- /package/dist/{specialists-JBIW6MP4.js.map → remote-agents-TFSMW7GN.js.map} +0 -0
- /package/dist/{remote-workspace-2G6V2KNP.js.map → remote-workspace-AHVHQEES.js.map} +0 -0
- /package/dist/{traefik-CUJM6K5Z.js.map → review-status-EPFG4XM7.js.map} +0 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
# Spec Readiness — Scoring Reference
|
|
2
|
+
|
|
3
|
+
This file contains detailed scoring criteria, deduction examples, and calibration data.
|
|
4
|
+
Subagents read this file to score individual dimensions.
|
|
5
|
+
|
|
6
|
+
## Scoring Baseline
|
|
7
|
+
|
|
8
|
+
For each dimension, start at **15** (baseline "decent" score), apply deductions for negative findings and bonuses for positive findings, then clamp to 0-20.
|
|
9
|
+
|
|
10
|
+
Record each finding with:
|
|
11
|
+
- **Finding text** — what was observed
|
|
12
|
+
- **Impact** — points added or deducted
|
|
13
|
+
- **Source** — traceability (e.g., "Issue description", "Comment by @dev on Jan 15", "Child issue #42 created 4 weeks after initial batch", "Edit #17 on Oct 15")
|
|
14
|
+
- **Recommendation** — what to do about it (if deduction)
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Dimension 1: Requirements Clarity (0-20)
|
|
19
|
+
|
|
20
|
+
*"Is the spec complete and unambiguous?"*
|
|
21
|
+
|
|
22
|
+
### Scoring Guide
|
|
23
|
+
|
|
24
|
+
| Points | Criteria |
|
|
25
|
+
|--------|----------|
|
|
26
|
+
| 16-20 | Description reads as a locked spec. No open questions. ON/OFF/edge behaviors documented. Validation rules explicit. No conflicting text. |
|
|
27
|
+
| 11-15 | Most requirements documented. Minor open questions remain. Description is mostly stable. |
|
|
28
|
+
| 6-10 | Multiple open questions, TBD markers, or "needs confirmation" items. Description reads like meeting notes. High edit churn. |
|
|
29
|
+
| 0-5 | Description is a placeholder or contains conflicting information. Major behaviors undefined. |
|
|
30
|
+
|
|
31
|
+
### What to Check
|
|
32
|
+
|
|
33
|
+
1. **Open question markers** in description and notes:
|
|
34
|
+
- Literal "?" in requirement statements (not just punctuation)
|
|
35
|
+
- "TBD", "TODO", "needs confirmation", "open question", "to be determined"
|
|
36
|
+
- "needs discussion", "to be decided", "pending", "awaiting"
|
|
37
|
+
- Strikethrough text (HTML `<s>`, `<strike>`, `<del>`, `text-decoration:line-through`, markdown `~~`)
|
|
38
|
+
- Highlighting (yellow/green background — inline Q&A, not a finished spec)
|
|
39
|
+
- Square brackets: `[?]`, `[TBD]`, `[OPEN]`
|
|
40
|
+
|
|
41
|
+
2. **Description edit history** (if available from tracker):
|
|
42
|
+
- < 10 edits: Normal (neutral)
|
|
43
|
+
- 10-30 edits: Moderate churn (minor deduction)
|
|
44
|
+
- 30+ edits: High churn — spec is a living document, not locked (major deduction)
|
|
45
|
+
- **Late edits** (after first child issue moves to In-Progress): Each late description change = deduction. Requirements changing during development is the #1 risk signal.
|
|
46
|
+
|
|
47
|
+
3. **External documents**:
|
|
48
|
+
- Scan description for links to PRD, BRD, spec documents (Google Docs, Confluence, SharePoint, Notion, attached files)
|
|
49
|
+
- Check issue attachments for documents
|
|
50
|
+
- If found: bonus points. If attached AFTER development started (check edit history for when attachment was added vs. when first child moved to In-Progress): reduced bonus.
|
|
51
|
+
- If a URL is accessible, use WebFetch to analyze coverage and cross-reference with description for gaps. Note: WebFetch may fail on authenticated URLs.
|
|
52
|
+
|
|
53
|
+
4. **Discussion threads / comments** — scan for requirement questions asked after work began:
|
|
54
|
+
- "Where can I find...", "How should we handle...", "What happens when..."
|
|
55
|
+
- Questions from developers (not product) indicate requirements gaps
|
|
56
|
+
- Each requirement question during active development = deduction
|
|
57
|
+
|
|
58
|
+
5. **Child issue descriptions** — spot-check for acceptance criteria:
|
|
59
|
+
- Issues with only a title and no description: deduction
|
|
60
|
+
- Issues with description but no testable acceptance criteria: minor deduction
|
|
61
|
+
- "Given/When/Then" or explicit acceptance criteria: bonus
|
|
62
|
+
|
|
63
|
+
### Deduction Examples
|
|
64
|
+
- Each unresolved open question: -2 pts
|
|
65
|
+
- Description has 30+ edits: -3 pts
|
|
66
|
+
- Description changed after dev started: -2 pts per significant change
|
|
67
|
+
- No PRD/BRD attached (if customer-directed): -2 pts
|
|
68
|
+
- PRD attached after dev started: -1 pt
|
|
69
|
+
- >50% of child issues lack acceptance criteria: -3 pts
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Dimension 2: Technical Discovery (0-20)
|
|
74
|
+
|
|
75
|
+
*"Have the technical unknowns been investigated?"*
|
|
76
|
+
|
|
77
|
+
### Scoring Guide
|
|
78
|
+
|
|
79
|
+
| Points | Criteria |
|
|
80
|
+
|--------|----------|
|
|
81
|
+
| 16-20 | Spike/investigation completed and accepted BEFORE implementation started. Repos, DB schema, APIs all identified. Team familiarity acknowledged with buffer. |
|
|
82
|
+
| 11-15 | Investigation exists but ran alongside implementation. Some technical details identified. |
|
|
83
|
+
| 6-10 | No investigation, or investigation is incomplete. Minimal technical discovery. |
|
|
84
|
+
| 0-5 | No technical discovery at all. Estimate is a business number. Team unfamiliarity not acknowledged. |
|
|
85
|
+
|
|
86
|
+
### What to Check
|
|
87
|
+
|
|
88
|
+
1. **Spike / investigation issues** among children:
|
|
89
|
+
- Look for issues with "SPIKE", "spike", "Spike", "investigation", "analysis", "discovery", "POC", "prototype" in the name (plus any custom patterns from wrapper config `conventions.spike_patterns`)
|
|
90
|
+
- Check if spike is Accepted/Completed BEFORE the earliest implementation issue moves to In-Progress
|
|
91
|
+
- Spike completed after implementation started = not gating, deduction
|
|
92
|
+
- No spike at all = major deduction
|
|
93
|
+
- Multiple spikes (insufficient first attempt, had to redo) = deduction for spike quality
|
|
94
|
+
|
|
95
|
+
2. **Technical detail in description**:
|
|
96
|
+
- Mentions of specific repositories, file paths, class names: bonus
|
|
97
|
+
- Mentions of specific database tables or schema: bonus
|
|
98
|
+
- Mentions of specific API endpoints or services: bonus
|
|
99
|
+
- Generic/vague references ("update the system"): no bonus
|
|
100
|
+
|
|
101
|
+
3. **Team familiarity signals** in description/notes:
|
|
102
|
+
- "Team is learning", "new codebase", "old system", "legacy": risk acknowledged (neutral if buffer applied, deduction if no buffer)
|
|
103
|
+
- No mention when the work touches unfamiliar code: deduction
|
|
104
|
+
|
|
105
|
+
4. **Estimation**:
|
|
106
|
+
- Estimate field populated: neutral (estimate exists)
|
|
107
|
+
- No estimate: deduction
|
|
108
|
+
- Estimate set before investigation completed: deduction (estimate preceded discovery)
|
|
109
|
+
|
|
110
|
+
5. **Infrastructure issues** among children:
|
|
111
|
+
- Look for issues mentioning "database", "schema", "migration", "table", "infrastructure", "permissions", "settings"
|
|
112
|
+
- Sequenced early (low issue number, early sprint)? Bonus.
|
|
113
|
+
- Added late (created weeks after initial batch)? Deduction — infrastructure was an afterthought.
|
|
114
|
+
|
|
115
|
+
### Deduction Examples
|
|
116
|
+
- No spike/investigation issue: -8 pts
|
|
117
|
+
- Spike not accepted before implementation started: -4 pts
|
|
118
|
+
- Investigation had to be redone (insufficient first attempt): -3 pts
|
|
119
|
+
- No specific repos/tables/endpoints in description: -3 pts
|
|
120
|
+
- No estimate: -2 pts
|
|
121
|
+
- Infrastructure issues added late: -3 pts
|
|
122
|
+
- Team familiarity risk not acknowledged: -2 pts
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Dimension 3: Scope & Decomposition (0-20)
|
|
127
|
+
|
|
128
|
+
*"Is the issue right-sized with clear boundaries?"*
|
|
129
|
+
|
|
130
|
+
### Scoring Guide
|
|
131
|
+
|
|
132
|
+
| Points | Criteria |
|
|
133
|
+
|--------|----------|
|
|
134
|
+
| 16-20 | Explicit "in scope" / "out of scope" statements. Issue is a single coherent deliverable. Child count reasonable. No overflow markers. |
|
|
135
|
+
| 11-15 | Scope mostly clear. "Out of scope" not explicitly stated. Slightly large but manageable. |
|
|
136
|
+
| 6-10 | Overloaded (multiple work streams). Notes suggest splitting but it wasn't done. |
|
|
137
|
+
| 0-5 | No scope definition. Issue is a catch-all. Already has overflow markers. |
|
|
138
|
+
|
|
139
|
+
### What to Check
|
|
140
|
+
|
|
141
|
+
1. **Issue name overflow markers** (configurable via wrapper `conventions.overflow_markers`):
|
|
142
|
+
- Default patterns: `[Unfinished]`, `[Continued]`, `[Carry-over]`, `[Part N]`
|
|
143
|
+
- These mean the issue was NOT right-sized from the start. Major deduction.
|
|
144
|
+
|
|
145
|
+
2. **Child issue count vs. timeline**:
|
|
146
|
+
- Determine the planned duration (milestone/cycle dates, or sprint count)
|
|
147
|
+
- Calculate child issues per sprint
|
|
148
|
+
- > 8 issues per sprint: Red flag (overloaded)
|
|
149
|
+
- > 20 total children for a single cycle: Deduction
|
|
150
|
+
- > 30 total children: Major deduction
|
|
151
|
+
|
|
152
|
+
3. **Decomposition signals** in description/notes:
|
|
153
|
+
- "Break this up", "split into", "multiple issues/features": If this advice exists but wasn't followed = major deduction
|
|
154
|
+
- "Phase 1", "Phase 2": Acknowledged phasing is positive
|
|
155
|
+
- "Out of scope", "not included", "explicitly excluded": Bonus for scope clarity
|
|
156
|
+
|
|
157
|
+
4. **Child issue carryover**:
|
|
158
|
+
- Count children with overflow markers in their names
|
|
159
|
+
- Each carried-over issue = evidence of underestimation
|
|
160
|
+
- Carryover rate > 30%: Major deduction
|
|
161
|
+
|
|
162
|
+
5. **Scope creep signals** (from edit history or child creation dates):
|
|
163
|
+
- New requirements added after initial description (look for "New Requirement", "added requirement", "additional scope" in edit descriptions)
|
|
164
|
+
- Child issues created significantly later than the initial batch (check CreationDate spread)
|
|
165
|
+
- Late-created children suggest scope was discovered, not planned
|
|
166
|
+
|
|
167
|
+
### Deduction Examples
|
|
168
|
+
- Overflow markers in issue name: -6 pts
|
|
169
|
+
- >20 children for a single cycle: -3 pts
|
|
170
|
+
- Notes say "break into N issues" but it wasn't done: -5 pts
|
|
171
|
+
- No "out of scope" statement: -2 pts
|
|
172
|
+
- >30% child carryover rate: -4 pts
|
|
173
|
+
- Scope added after initial description: -2 pts per addition
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Dimension 4: Dependencies & Prerequisites (0-20)
|
|
178
|
+
|
|
179
|
+
*"Is the critical path mapped?"*
|
|
180
|
+
|
|
181
|
+
### Scoring Guide
|
|
182
|
+
|
|
183
|
+
| Points | Criteria |
|
|
184
|
+
|--------|----------|
|
|
185
|
+
| 16-20 | Issue dependencies tracked in the tracker. External dependencies identified. Prerequisites all accounted for before dev starts. |
|
|
186
|
+
| 11-15 | Key dependencies documented informally (in descriptions). Most prerequisites identified. |
|
|
187
|
+
| 6-10 | Dependencies exist but aren't tracked. Some prerequisites discovered after work started. |
|
|
188
|
+
| 0-5 | No dependency mapping. Issues treated as independent backlog. Prerequisites discovered during sprints. |
|
|
189
|
+
|
|
190
|
+
### What to Check
|
|
191
|
+
|
|
192
|
+
1. **Formal dependency links** (blocking/blocked-by relations in tracker):
|
|
193
|
+
- Check each child issue for dependency links (predecessors/successors, blocking/blocked-by relations)
|
|
194
|
+
- Any formal links: Bonus
|
|
195
|
+
- Zero links across all children: Major deduction
|
|
196
|
+
|
|
197
|
+
2. **Implicit dependency signals** in descriptions:
|
|
198
|
+
- "Depends on", "requires", "blocked by", "after X is done", "prerequisite"
|
|
199
|
+
- These indicate dependencies exist but aren't formally tracked
|
|
200
|
+
|
|
201
|
+
3. **Questions about prerequisites** in comments/discussions:
|
|
202
|
+
- "Where can I find the [X] ID?" — External ID prerequisite not identified
|
|
203
|
+
- "Does [object] have an external identifier?" — Data prerequisite missed
|
|
204
|
+
- "Which repo is this in?" — Code location not identified
|
|
205
|
+
- Each such question during active development = deduction
|
|
206
|
+
|
|
207
|
+
4. **Foundation issue sequencing**:
|
|
208
|
+
- Are DB/settings/permissions issues early in the sequence?
|
|
209
|
+
- Or were they added after other issues started? (Check creation dates)
|
|
210
|
+
- Foundation work added late = infrastructure prerequisites missed
|
|
211
|
+
|
|
212
|
+
5. **External integration points**:
|
|
213
|
+
- Does the description mention other systems, APIs, teams, or repos?
|
|
214
|
+
- Are those reflected in child issues?
|
|
215
|
+
- Missing integration issues = deduction
|
|
216
|
+
|
|
217
|
+
### Deduction Examples
|
|
218
|
+
- Zero formal dependency links across all children: -6 pts
|
|
219
|
+
- Prerequisite discovered during sprint (evidence in comments): -3 pts each
|
|
220
|
+
- Foundation issues added after initial batch: -3 pts
|
|
221
|
+
- External integration mentioned but no corresponding issue: -3 pts
|
|
222
|
+
- No external dependencies documented (when issue clearly has them): -4 pts
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Dimension 5: Edge Cases & Test Strategy (0-20)
|
|
227
|
+
|
|
228
|
+
*"Are failure modes documented?"*
|
|
229
|
+
|
|
230
|
+
### Scoring Guide
|
|
231
|
+
|
|
232
|
+
| Points | Criteria |
|
|
233
|
+
|--------|----------|
|
|
234
|
+
| 16-20 | Error paths documented (missing config, null values, partial setup). Test scenarios enumerated. QA strategy defined. Acceptance criteria are testable. |
|
|
235
|
+
| 11-15 | Happy path well-defined. Some edge cases mentioned. Test issue exists. |
|
|
236
|
+
| 6-10 | Only happy path documented. No "what if" scenarios. Testing is an afterthought. |
|
|
237
|
+
| 0-5 | No edge case discussion. No test strategy. Assumptions stated without validation. |
|
|
238
|
+
|
|
239
|
+
### What to Check
|
|
240
|
+
|
|
241
|
+
1. **Edge case language** in description/notes:
|
|
242
|
+
- "What if", "when missing", "if not configured", "null", "empty", "partial"
|
|
243
|
+
- "Error handling", "fallback", "default behavior"
|
|
244
|
+
- These indicate failure modes were considered
|
|
245
|
+
|
|
246
|
+
2. **Assumptions without test coverage**:
|
|
247
|
+
- Look for "Assumption:", "We assume", "Expected:", "Must have"
|
|
248
|
+
- For each assumption, check if a corresponding test case or edge case issue exists
|
|
249
|
+
- Unvalidated assumptions = deduction
|
|
250
|
+
|
|
251
|
+
3. **Test issues** among children:
|
|
252
|
+
- Look for issues with "QA", "test", "automation", "validate", "verify" in name
|
|
253
|
+
- Created early (with implementation) = good. Created months later = afterthought.
|
|
254
|
+
- Test issue with no work done late in the cycle = deduction
|
|
255
|
+
|
|
256
|
+
4. **Bugs already filed**:
|
|
257
|
+
- Search for bugs linked to this issue's children
|
|
258
|
+
- Bugs filed during development = edge cases discovered in execution (not design)
|
|
259
|
+
- Bugs of the form "what happens when X is missing/null/not configured" = major deduction
|
|
260
|
+
|
|
261
|
+
5. **Acceptance criteria quality** on child issues:
|
|
262
|
+
- Check if descriptions contain testable criteria
|
|
263
|
+
- Criteria should be measurable: "When X, then Y" not "it should work correctly"
|
|
264
|
+
- Rate: "good" (testable criteria), "weak" (vague criteria), "none" (no criteria)
|
|
265
|
+
- >50% "none": Major deduction
|
|
266
|
+
- >50% "good": Bonus
|
|
267
|
+
|
|
268
|
+
### Deduction Examples
|
|
269
|
+
- No edge case language in description: -4 pts
|
|
270
|
+
- Assumptions stated without validation plan: -2 pts each
|
|
271
|
+
- No test issues: -4 pts
|
|
272
|
+
- Test issue added as afterthought (late creation, no work done): -2 pts
|
|
273
|
+
- Bugs filed for "missing config" scenarios during dev: -3 pts
|
|
274
|
+
- >50% of children lack acceptance criteria: -4 pts
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## JSON Sidecar Schema
|
|
279
|
+
|
|
280
|
+
The JSON sidecar must follow this structure:
|
|
281
|
+
|
|
282
|
+
```json
|
|
283
|
+
{
|
|
284
|
+
"identifier": "MIN-704",
|
|
285
|
+
"title": "Add Code Mode API discovery tools to MCP server",
|
|
286
|
+
"project": "Mind Your Now",
|
|
287
|
+
"milestone": "Q1 CY26",
|
|
288
|
+
"owner": "Edward Becker",
|
|
289
|
+
"score": 74,
|
|
290
|
+
"maxScore": 100,
|
|
291
|
+
"status": "Mostly Ready",
|
|
292
|
+
"statusColor": "green",
|
|
293
|
+
"assessmentDate": "2026-02-27",
|
|
294
|
+
"tracker": "linear",
|
|
295
|
+
"childIssueCount": 5,
|
|
296
|
+
"dimensions": {
|
|
297
|
+
"requirementsClarity": {
|
|
298
|
+
"score": 17,
|
|
299
|
+
"maxScore": 20,
|
|
300
|
+
"summary": "One-line summary of findings",
|
|
301
|
+
"findings": [
|
|
302
|
+
{
|
|
303
|
+
"finding": "Description of what was observed",
|
|
304
|
+
"impact": -3,
|
|
305
|
+
"source": "Traceability reference",
|
|
306
|
+
"recommendation": "What to do about it"
|
|
307
|
+
}
|
|
308
|
+
]
|
|
309
|
+
},
|
|
310
|
+
"technicalDiscovery": { "score": 0, "maxScore": 20, "summary": "", "findings": [] },
|
|
311
|
+
"scopeDecomposition": { "score": 0, "maxScore": 20, "summary": "", "findings": [] },
|
|
312
|
+
"dependencies": { "score": 0, "maxScore": 20, "summary": "", "findings": [] },
|
|
313
|
+
"edgeCasesTestStrategy": { "score": 0, "maxScore": 20, "summary": "", "findings": [] }
|
|
314
|
+
},
|
|
315
|
+
"topBlockers": [
|
|
316
|
+
"Actionable blocker 1 with point-improvement estimate",
|
|
317
|
+
"Actionable blocker 2"
|
|
318
|
+
],
|
|
319
|
+
"childAssessments": [
|
|
320
|
+
{
|
|
321
|
+
"identifier": "MIN-705",
|
|
322
|
+
"title": "Child Issue Title",
|
|
323
|
+
"status": "Backlog",
|
|
324
|
+
"hasAcceptanceCriteria": true,
|
|
325
|
+
"criteriaQuality": "good",
|
|
326
|
+
"notes": ""
|
|
327
|
+
}
|
|
328
|
+
],
|
|
329
|
+
"externalDocuments": {
|
|
330
|
+
"found": false,
|
|
331
|
+
"type": null,
|
|
332
|
+
"attachedDate": null,
|
|
333
|
+
"devStartDate": null,
|
|
334
|
+
"attachedBeforeDevStarted": null,
|
|
335
|
+
"accessible": null,
|
|
336
|
+
"notes": ""
|
|
337
|
+
},
|
|
338
|
+
"wrapper": null,
|
|
339
|
+
"metadata": {
|
|
340
|
+
"skillVersion": "2.0.0",
|
|
341
|
+
"generatedBy": "spec-readiness",
|
|
342
|
+
"methodology": "5-dimension scoring model"
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## Scoring Calibration Reference
|
|
350
|
+
|
|
351
|
+
The scoring model baseline was derived from post-mortem analysis of two significantly overrun features. Both traced their overruns to incomplete requirements at development start.
|
|
352
|
+
|
|
353
|
+
### Case 1 — Expected Score: ~42 (Partial / Risky)
|
|
354
|
+
- Quoted 20 days, actual 41.5+ days (+107% overrun)
|
|
355
|
+
- Requirements Clarity: ~7/20 (58+ description edits, open questions, BRD attached 4 months late, requirements changed during dev)
|
|
356
|
+
- Technical Discovery: ~8/20 (3 spikes but none gating, key repo not identified until week 5)
|
|
357
|
+
- Scope & Decomposition: ~12/20 (13 children reasonable, but "New Requirement" added mid-dev)
|
|
358
|
+
- Dependencies: ~5/20 (zero dependency links, investigation spike sat idle 3 months)
|
|
359
|
+
- Edge Cases: ~10/20 (QA issue exists but not started, validation rules debated during dev)
|
|
360
|
+
|
|
361
|
+
### Case 2 — Expected Score: ~35 (Not Ready)
|
|
362
|
+
- Planned 1 quarter, took 3 quarters (2.3x overrun)
|
|
363
|
+
- Requirements Clarity: ~8/20 (external ID prerequisite discovered after start)
|
|
364
|
+
- Technical Discovery: ~6/20 (team learning curve acknowledged but no buffer, no gating investigation)
|
|
365
|
+
- Scope & Decomposition: ~4/20 (notes said "split into 4 features" but it wasn't done, overflow to next quarter)
|
|
366
|
+
- Dependencies: ~7/20 (some implicit sequencing but no formal links)
|
|
367
|
+
- Edge Cases: ~10/20 (4 bugs for "missing config" scenarios, assumption that every record has a required field)
|
|
368
|
+
|
|
369
|
+
If your organization has its own post-mortems, use them to validate and adjust the deduction weights. The scoring guide point ranges and deduction examples are tunable through experience.
|