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.
Files changed (138) hide show
  1. package/dist/{agents-BDFHF4T3.js → agents-VLK4BMVA.js} +10 -7
  2. package/dist/chunk-7SN4L4PH.js +150 -0
  3. package/dist/chunk-7SN4L4PH.js.map +1 -0
  4. package/dist/chunk-7XNJJBH6.js +538 -0
  5. package/dist/chunk-7XNJJBH6.js.map +1 -0
  6. package/dist/chunk-AQXETQHW.js +113 -0
  7. package/dist/chunk-AQXETQHW.js.map +1 -0
  8. package/dist/{chunk-2NIAOCIC.js → chunk-ASY7T35E.js} +170 -64
  9. package/dist/chunk-ASY7T35E.js.map +1 -0
  10. package/dist/chunk-B3PF6JPQ.js +212 -0
  11. package/dist/chunk-B3PF6JPQ.js.map +1 -0
  12. package/dist/{chunk-XP2DXWYP.js → chunk-BKCWRMUX.js} +88 -35
  13. package/dist/chunk-BKCWRMUX.js.map +1 -0
  14. package/dist/chunk-CFCUOV3Q.js +669 -0
  15. package/dist/chunk-CFCUOV3Q.js.map +1 -0
  16. package/dist/chunk-CWELWPWQ.js +32 -0
  17. package/dist/chunk-CWELWPWQ.js.map +1 -0
  18. package/dist/chunk-DI7ABPNQ.js +352 -0
  19. package/dist/chunk-DI7ABPNQ.js.map +1 -0
  20. package/dist/{chunk-VU4FLXV5.js → chunk-FQ66DECN.js} +31 -4
  21. package/dist/chunk-FQ66DECN.js.map +1 -0
  22. package/dist/{review-status-GWQYY77L.js → chunk-GFP3PIPB.js} +14 -7
  23. package/dist/chunk-GFP3PIPB.js.map +1 -0
  24. package/dist/chunk-JQBV3Q2W.js +29 -0
  25. package/dist/chunk-JQBV3Q2W.js.map +1 -0
  26. package/dist/{chunk-BWGFN44T.js → chunk-JT4O4YVM.js} +28 -16
  27. package/dist/chunk-JT4O4YVM.js.map +1 -0
  28. package/dist/{chunk-VIWUCJ4V.js → chunk-KJ2TRXNK.js} +34 -36
  29. package/dist/chunk-KJ2TRXNK.js.map +1 -0
  30. package/dist/{chunk-JY7R7V4G.js → chunk-OMNXYPXC.js} +2 -2
  31. package/dist/chunk-OMNXYPXC.js.map +1 -0
  32. package/dist/chunk-PELXV435.js +215 -0
  33. package/dist/chunk-PELXV435.js.map +1 -0
  34. package/dist/chunk-PI7Y3PSN.js +797 -0
  35. package/dist/chunk-PI7Y3PSN.js.map +1 -0
  36. package/dist/chunk-RBUO57TC.js +154 -0
  37. package/dist/chunk-RBUO57TC.js.map +1 -0
  38. package/dist/chunk-XFR2DLMR.js +600 -0
  39. package/dist/chunk-XFR2DLMR.js.map +1 -0
  40. package/dist/chunk-XKT5MHPT.js +677 -0
  41. package/dist/chunk-XKT5MHPT.js.map +1 -0
  42. package/dist/{chunk-HCTJFIJJ.js → chunk-YLPSQAM2.js} +2 -2
  43. package/dist/{chunk-HCTJFIJJ.js.map → chunk-YLPSQAM2.js.map} +1 -1
  44. package/dist/{chunk-6HXKTOD7.js → chunk-ZTFNYOC7.js} +53 -38
  45. package/dist/chunk-ZTFNYOC7.js.map +1 -0
  46. package/dist/cli/index.js +4362 -2927
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/{config-BOAMSKTF.js → config-4CJNUE3O.js} +7 -3
  49. package/dist/dashboard/prompts/merge-agent.md +217 -0
  50. package/dist/dashboard/prompts/review-agent.md +409 -0
  51. package/dist/dashboard/prompts/sync-main.md +84 -0
  52. package/dist/dashboard/prompts/test-agent.md +283 -0
  53. package/dist/dashboard/prompts/work-agent.md +247 -0
  54. package/dist/dashboard/public/assets/index-UjZq6ykz.css +32 -0
  55. package/dist/dashboard/public/assets/index-kAJqtLDO.js +708 -0
  56. package/dist/dashboard/public/index.html +2 -2
  57. package/dist/dashboard/server.js +15194 -3160
  58. package/dist/{dns-L3L2BB27.js → dns-7BDJSD3E.js} +4 -2
  59. package/dist/{feedback-writer-AAKF5BTK.js → feedback-writer-LVZ5TFYZ.js} +8 -4
  60. package/dist/feedback-writer-LVZ5TFYZ.js.map +1 -0
  61. package/dist/hume-WMAUBBV2.js +13 -0
  62. package/dist/index.d.ts +153 -40
  63. package/dist/index.js +65 -23
  64. package/dist/index.js.map +1 -1
  65. package/dist/{projects-VXRUCMLM.js → projects-JEIVIYC6.js} +3 -3
  66. package/dist/rally-RKFSWC7E.js +10 -0
  67. package/dist/{remote-agents-Z3R2A5BN.js → remote-agents-TFSMW7GN.js} +2 -2
  68. package/dist/{remote-workspace-2G6V2KNP.js → remote-workspace-AHVHQEES.js} +8 -8
  69. package/dist/review-status-EPFG4XM7.js +19 -0
  70. package/dist/shadow-state-5MDP6YXH.js +30 -0
  71. package/dist/shadow-state-5MDP6YXH.js.map +1 -0
  72. package/dist/{specialist-context-N32QBNNQ.js → specialist-context-T3NBMCIE.js} +8 -7
  73. package/dist/{specialist-context-N32QBNNQ.js.map → specialist-context-T3NBMCIE.js.map} +1 -1
  74. package/dist/{specialist-logs-GF3YV4KL.js → specialist-logs-CVKD3YJ3.js} +7 -6
  75. package/dist/specialist-logs-CVKD3YJ3.js.map +1 -0
  76. package/dist/{specialists-JBIW6MP4.js → specialists-TKAP6T6Z.js} +7 -6
  77. package/dist/specialists-TKAP6T6Z.js.map +1 -0
  78. package/dist/tldr-daemon-T3THOUGT.js +21 -0
  79. package/dist/tldr-daemon-T3THOUGT.js.map +1 -0
  80. package/dist/traefik-QX4ZV4YG.js +19 -0
  81. package/dist/traefik-QX4ZV4YG.js.map +1 -0
  82. package/dist/tunnel-W2GZBLEV.js +13 -0
  83. package/dist/tunnel-W2GZBLEV.js.map +1 -0
  84. package/dist/workspace-manager-KLHUCIZV.js +22 -0
  85. package/dist/workspace-manager-KLHUCIZV.js.map +1 -0
  86. package/package.json +2 -2
  87. package/scripts/heartbeat-hook +37 -10
  88. package/scripts/patches/llm-tldr-tsx-support.py +109 -0
  89. package/scripts/pre-tool-hook +26 -15
  90. package/scripts/record-cost-event.js +177 -43
  91. package/scripts/record-cost-event.ts +87 -3
  92. package/scripts/statusline.sh +169 -0
  93. package/scripts/stop-hook +14 -11
  94. package/scripts/tldr-post-edit +72 -0
  95. package/scripts/tldr-read-enforcer +275 -0
  96. package/skills/check-merged/SKILL.md +143 -0
  97. package/skills/crash-investigation/SKILL.md +301 -0
  98. package/skills/github-cli/SKILL.md +185 -0
  99. package/skills/pan-reopen/SKILL.md +65 -0
  100. package/skills/pan-sync-main/SKILL.md +87 -0
  101. package/skills/pan-tldr/SKILL.md +149 -0
  102. package/skills/react-best-practices/SKILL.md +125 -0
  103. package/skills/spec-readiness/REPORT-TEMPLATE.md +158 -0
  104. package/skills/spec-readiness/SCORING-REFERENCE.md +369 -0
  105. package/skills/spec-readiness/SKILL.md +400 -0
  106. package/skills/spec-readiness-setup/SKILL.md +361 -0
  107. package/skills/workspace-status/SKILL.md +56 -0
  108. package/templates/traefik/dynamic/panopticon.yml.template +0 -5
  109. package/templates/traefik/traefik.yml +0 -8
  110. package/dist/chunk-2NIAOCIC.js.map +0 -1
  111. package/dist/chunk-3XAB4IXF.js +0 -51
  112. package/dist/chunk-3XAB4IXF.js.map +0 -1
  113. package/dist/chunk-6HXKTOD7.js.map +0 -1
  114. package/dist/chunk-BBCUK6N2.js +0 -241
  115. package/dist/chunk-BBCUK6N2.js.map +0 -1
  116. package/dist/chunk-BWGFN44T.js.map +0 -1
  117. package/dist/chunk-ELK6Q7QI.js +0 -545
  118. package/dist/chunk-ELK6Q7QI.js.map +0 -1
  119. package/dist/chunk-JY7R7V4G.js.map +0 -1
  120. package/dist/chunk-LYSBSZYV.js +0 -1523
  121. package/dist/chunk-LYSBSZYV.js.map +0 -1
  122. package/dist/chunk-VIWUCJ4V.js.map +0 -1
  123. package/dist/chunk-VU4FLXV5.js.map +0 -1
  124. package/dist/chunk-XP2DXWYP.js.map +0 -1
  125. package/dist/dashboard/public/assets/index-C7X6LP5Z.css +0 -32
  126. package/dist/dashboard/public/assets/index-ClYqpcAJ.js +0 -645
  127. package/dist/feedback-writer-AAKF5BTK.js.map +0 -1
  128. package/dist/review-status-GWQYY77L.js.map +0 -1
  129. package/dist/traefik-CUJM6K5Z.js +0 -12
  130. /package/dist/{agents-BDFHF4T3.js.map → agents-VLK4BMVA.js.map} +0 -0
  131. /package/dist/{config-BOAMSKTF.js.map → config-4CJNUE3O.js.map} +0 -0
  132. /package/dist/{dns-L3L2BB27.js.map → dns-7BDJSD3E.js.map} +0 -0
  133. /package/dist/{projects-VXRUCMLM.js.map → hume-WMAUBBV2.js.map} +0 -0
  134. /package/dist/{remote-agents-Z3R2A5BN.js.map → projects-JEIVIYC6.js.map} +0 -0
  135. /package/dist/{specialist-logs-GF3YV4KL.js.map → rally-RKFSWC7E.js.map} +0 -0
  136. /package/dist/{specialists-JBIW6MP4.js.map → remote-agents-TFSMW7GN.js.map} +0 -0
  137. /package/dist/{remote-workspace-2G6V2KNP.js.map → remote-workspace-AHVHQEES.js.map} +0 -0
  138. /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.