@windyroad/itil 1.2.0 → 2.0.0-preview.1111

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 (266) hide show
  1. package/.agents/plugins/marketplace.json +12 -0
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +42 -0
  4. package/README.md +34 -25
  5. package/agents/hang-off-check.md +34 -34
  6. package/bin/install.mjs +71 -5
  7. package/bin/wr-itil-catchup-scan +4 -4
  8. package/bin/wr-itil-check-deferred-placeholder-staleness +4 -4
  9. package/bin/wr-itil-check-fail-soft-skip-discipline +4 -4
  10. package/bin/wr-itil-check-fix-rfc-trace +4 -4
  11. package/bin/wr-itil-check-locale-discipline +4 -4
  12. package/bin/wr-itil-check-outbound-responses-staleness +4 -4
  13. package/bin/wr-itil-check-problems-readme-budget +4 -4
  14. package/bin/wr-itil-check-rfc-has-stories +4 -4
  15. package/bin/wr-itil-check-rfc-stories-ratified +4 -4
  16. package/bin/wr-itil-check-ticket-jtbd-ratification +4 -4
  17. package/bin/wr-itil-check-upstream-cache-staleness +4 -4
  18. package/bin/wr-itil-check-upstream-responses +4 -4
  19. package/bin/wr-itil-classify-readme-drift +4 -4
  20. package/bin/wr-itil-derive-release-vehicle +4 -4
  21. package/bin/wr-itil-detect-unratified-stories-maps +4 -4
  22. package/bin/wr-itil-effort-tally +4 -4
  23. package/bin/wr-itil-enumerate-postrelease-kv-candidates +4 -4
  24. package/bin/wr-itil-evaluate-relevance +4 -4
  25. package/bin/wr-itil-mark-create-gate +4 -4
  26. package/bin/wr-itil-mark-story-oversight-confirmed +4 -4
  27. package/bin/wr-itil-migrate-problems-layout +4 -4
  28. package/bin/wr-itil-migrate-story-status-mirror +4 -4
  29. package/bin/wr-itil-next-rfc-id +4 -4
  30. package/bin/wr-itil-plugin-exercise-index +4 -4
  31. package/bin/wr-itil-plugin-maturity-populate +4 -4
  32. package/bin/wr-itil-plugin-maturity-render +4 -4
  33. package/bin/wr-itil-plugin-validate-ci-gate +4 -4
  34. package/bin/wr-itil-reconcile-readme +4 -4
  35. package/bin/wr-itil-reconcile-rfcs +4 -4
  36. package/bin/wr-itil-reconcile-stories +4 -4
  37. package/bin/wr-itil-reconcile-story-maps +4 -4
  38. package/bin/wr-itil-render-story-map +4 -4
  39. package/bin/wr-itil-resolve-governance-plugin-dirs +4 -4
  40. package/bin/wr-itil-skill-invocations +4 -4
  41. package/bin/wr-itil-story-map-edit +4 -4
  42. package/bin/wr-itil-story-map-query +4 -4
  43. package/bin/wr-itil-update-jtbd-references-section +4 -4
  44. package/bin/wr-itil-update-problem-references-section +4 -4
  45. package/bin/wr-itil-update-problem-rfcs-section +4 -4
  46. package/bin/wr-itil-update-rfc-commits-section +4 -4
  47. package/bin/wr-itil-update-rfc-references-section +4 -4
  48. package/bin/wr-itil-verify-iter-summary +4 -4
  49. package/hooks/itil-assistant-output-gate.sh +3 -3
  50. package/hooks/itil-assistant-output-review.sh +5 -5
  51. package/hooks/itil-bash-polling-antipattern-detect.sh +11 -11
  52. package/hooks/itil-changeset-discipline.sh +24 -24
  53. package/hooks/itil-claude-space-protection.sh +21 -14
  54. package/hooks/itil-codex-dispatch.sh +164 -0
  55. package/hooks/itil-commit-trailer-transition-advisory.sh +11 -11
  56. package/hooks/itil-correction-detect.sh +8 -8
  57. package/hooks/itil-deferral-cadence-gate.sh +23 -23
  58. package/hooks/itil-fictional-defer-detect.sh +16 -16
  59. package/hooks/itil-fix-title-lifecycle-advisory.sh +11 -11
  60. package/hooks/itil-mid-loop-ask-detect.sh +14 -14
  61. package/hooks/itil-no-implement-draft-gate.sh +18 -18
  62. package/hooks/itil-pending-questions-surface.sh +11 -11
  63. package/hooks/itil-readme-refresh-discipline.sh +27 -27
  64. package/hooks/itil-rfc-oversight-nudge.sh +7 -7
  65. package/hooks/itil-rfc-trailer-advisory.sh +28 -28
  66. package/hooks/itil-runtime-sid-marker.sh +11 -11
  67. package/hooks/itil-story-mirror-migration-nudge.sh +7 -7
  68. package/hooks/lib/block-list.sh +17 -17
  69. package/hooks/lib/changeset-detect.sh +27 -27
  70. package/hooks/lib/claude-space-gate.sh +23 -15
  71. package/hooks/lib/command-detect.sh +12 -12
  72. package/hooks/lib/create-gate.sh +9 -39
  73. package/hooks/lib/detectors.sh +12 -12
  74. package/hooks/lib/readme-refresh-detect.sh +51 -51
  75. package/hooks/lib/runtime-sid.sh +12 -12
  76. package/hooks/lib/session-id.sh +28 -28
  77. package/hooks/lib/session-marker.sh +1 -1
  78. package/hooks/lib/staging-detect.sh +13 -13
  79. package/hooks/manage-problem-enforce-create.sh +16 -27
  80. package/hooks/p057-staging-trap-detect.sh +18 -18
  81. package/hooks/pre-publish-intake-gate.sh +5 -5
  82. package/hooks/staleness-check.sh +6 -6
  83. package/hooks-codex/hooks.json +57 -0
  84. package/lib/check-deferred-placeholder-staleness.sh +10 -10
  85. package/lib/check-outbound-responses-staleness.sh +2 -2
  86. package/lib/check-upstream-cache-staleness.sh +2 -2
  87. package/lib/derive-first-dispatch.sh +19 -19
  88. package/lib/enumerate-postrelease-kv-candidates.sh +18 -18
  89. package/lib/migrate-problems-layout.sh +12 -12
  90. package/lib/story-oversight.sh +27 -27
  91. package/package.json +16 -3
  92. package/scripts/catchup-scan.sh +25 -25
  93. package/scripts/check-fail-soft-skip-discipline.sh +10 -10
  94. package/scripts/check-fix-rfc-trace.sh +8 -8
  95. package/scripts/check-locale-discipline.sh +13 -13
  96. package/scripts/check-problems-readme-budget.sh +12 -12
  97. package/scripts/check-rfc-has-stories.sh +7 -7
  98. package/scripts/check-rfc-rejected-alternatives.sh +11 -11
  99. package/scripts/check-rfc-stories-ratified.sh +9 -9
  100. package/scripts/check-ticket-jtbd-ratification.sh +10 -10
  101. package/scripts/check-upstream-responses.sh +22 -22
  102. package/scripts/classify-readme-drift.sh +13 -13
  103. package/scripts/codex-agent.mjs +104 -0
  104. package/scripts/derive-release-vehicle.sh +23 -23
  105. package/scripts/detect-unoversighted-rfcs.sh +3 -3
  106. package/scripts/detect-unratified-stories-maps.sh +5 -5
  107. package/scripts/effort-tally.sh +10 -10
  108. package/scripts/evaluate-relevance.sh +16 -16
  109. package/scripts/mark-create-gate.sh +4 -4
  110. package/scripts/mark-story-oversight-confirmed.sh +14 -14
  111. package/scripts/migrate-story-status-mirror.sh +6 -6
  112. package/scripts/next-rfc-id.sh +5 -5
  113. package/scripts/plugin-exercise-index.sh +26 -26
  114. package/scripts/plugin-maturity-populate.sh +38 -38
  115. package/scripts/plugin-maturity-render.sh +26 -26
  116. package/scripts/plugin-validate-ci-gate.sh +14 -14
  117. package/scripts/reconcile-readme.sh +23 -23
  118. package/scripts/reconcile-rfcs.sh +13 -13
  119. package/scripts/reconcile-stories.sh +12 -12
  120. package/scripts/reconcile-story-maps.sh +6 -6
  121. package/scripts/render-story-map.mjs +24 -24
  122. package/scripts/render-story-map.sh +3 -3
  123. package/scripts/resolve-governance-plugin-dirs.sh +10 -10
  124. package/scripts/run-check-deferred-placeholder-staleness.sh +3 -3
  125. package/scripts/run-check-outbound-responses-staleness.sh +3 -3
  126. package/scripts/run-check-upstream-cache-staleness.sh +3 -3
  127. package/scripts/run-enumerate-postrelease-kv-candidates.sh +3 -3
  128. package/scripts/run-migrate-problems-layout.sh +3 -3
  129. package/scripts/skill-invocations.sh +29 -29
  130. package/scripts/story-map-edit.mjs +6 -6
  131. package/scripts/story-map-edit.sh +3 -3
  132. package/scripts/story-map-query.mjs +8 -8
  133. package/scripts/story-map-query.sh +3 -3
  134. package/scripts/update-jtbd-references-section.sh +8 -8
  135. package/scripts/update-problem-references-section.sh +12 -12
  136. package/scripts/update-problem-rfcs-section.sh +9 -9
  137. package/scripts/update-rfc-commits-section.sh +7 -7
  138. package/scripts/update-rfc-references-section.sh +3 -3
  139. package/scripts/update-story-references-section.sh +5 -5
  140. package/scripts/verify-iter-summary.sh +3 -3
  141. package/skills/capture-problem/REFERENCE.md +33 -33
  142. package/skills/capture-problem/SKILL.md +108 -108
  143. package/skills/capture-problem/agents/openai.yaml +3 -0
  144. package/skills/capture-rfc/SKILL.md +21 -323
  145. package/skills/capture-rfc/agents/openai.yaml +3 -0
  146. package/skills/capture-story/SKILL.md +65 -65
  147. package/skills/capture-story/agents/openai.yaml +3 -0
  148. package/skills/capture-story-map/SKILL.md +31 -31
  149. package/skills/capture-story-map/agents/openai.yaml +3 -0
  150. package/skills/check-upstream-responses/SKILL.md +38 -38
  151. package/skills/check-upstream-responses/agents/openai.yaml +3 -0
  152. package/skills/close-incident/SKILL.md +25 -25
  153. package/skills/close-incident/agents/openai.yaml +3 -0
  154. package/skills/link-incident/SKILL.md +22 -22
  155. package/skills/link-incident/agents/openai.yaml +3 -0
  156. package/skills/list-incidents/SKILL.md +9 -9
  157. package/skills/list-incidents/agents/openai.yaml +3 -0
  158. package/skills/list-problems/SKILL.md +17 -17
  159. package/skills/list-problems/agents/openai.yaml +3 -0
  160. package/skills/list-stories/SKILL.md +23 -23
  161. package/skills/list-stories/agents/openai.yaml +3 -0
  162. package/skills/list-story-maps/SKILL.md +9 -9
  163. package/skills/list-story-maps/agents/openai.yaml +3 -0
  164. package/skills/manage-incident/SKILL.md +59 -59
  165. package/skills/manage-incident/agents/openai.yaml +3 -0
  166. package/skills/manage-problem/SKILL.md +222 -222
  167. package/skills/manage-problem/agents/openai.yaml +3 -0
  168. package/skills/manage-rfc/SKILL.md +62 -62
  169. package/skills/manage-rfc/agents/openai.yaml +3 -0
  170. package/skills/manage-story/SKILL.md +49 -49
  171. package/skills/manage-story/agents/openai.yaml +3 -0
  172. package/skills/manage-story-map/SKILL.md +30 -30
  173. package/skills/manage-story-map/agents/openai.yaml +3 -0
  174. package/skills/mitigate-incident/SKILL.md +40 -40
  175. package/skills/mitigate-incident/agents/openai.yaml +3 -0
  176. package/skills/reconcile-readme/SKILL.md +28 -28
  177. package/skills/reconcile-readme/agents/openai.yaml +3 -0
  178. package/skills/reconcile-stories/SKILL.md +17 -17
  179. package/skills/reconcile-stories/agents/openai.yaml +3 -0
  180. package/skills/reconcile-story-maps/SKILL.md +11 -11
  181. package/skills/reconcile-story-maps/agents/openai.yaml +3 -0
  182. package/skills/report-upstream/SKILL.md +73 -73
  183. package/skills/report-upstream/agents/openai.yaml +3 -0
  184. package/skills/restore-incident/SKILL.md +28 -28
  185. package/skills/restore-incident/agents/openai.yaml +3 -0
  186. package/skills/review-problems/SKILL.md +129 -129
  187. package/skills/review-problems/agents/openai.yaml +3 -0
  188. package/skills/scaffold-intake/SKILL.md +26 -26
  189. package/skills/scaffold-intake/agents/openai.yaml +3 -0
  190. package/skills/transition-problem/SKILL.md +85 -85
  191. package/skills/transition-problem/agents/openai.yaml +3 -0
  192. package/skills/transition-problems/SKILL.md +69 -69
  193. package/skills/transition-problems/agents/openai.yaml +3 -0
  194. package/skills/update-upstream/SKILL.md +97 -97
  195. package/skills/update-upstream/agents/openai.yaml +3 -0
  196. package/skills/work-problem/SKILL.md +42 -42
  197. package/skills/work-problem/agents/openai.yaml +3 -0
  198. package/skills/work-problems/SKILL.md +327 -327
  199. package/skills/work-problems/agents/openai.yaml +3 -0
  200. package/skills-codex/capture-problem/REFERENCE.md +139 -0
  201. package/skills-codex/capture-problem/SKILL.md +438 -0
  202. package/skills-codex/capture-problem/agents/openai.yaml +3 -0
  203. package/skills-codex/capture-rfc/SKILL.md +45 -0
  204. package/skills-codex/capture-rfc/agents/openai.yaml +3 -0
  205. package/skills-codex/capture-story/SKILL.md +407 -0
  206. package/skills-codex/capture-story/agents/openai.yaml +3 -0
  207. package/skills-codex/capture-story-map/SKILL.md +286 -0
  208. package/skills-codex/capture-story-map/agents/openai.yaml +3 -0
  209. package/skills-codex/check-upstream-responses/SKILL.md +160 -0
  210. package/skills-codex/check-upstream-responses/agents/openai.yaml +3 -0
  211. package/skills-codex/close-incident/SKILL.md +192 -0
  212. package/skills-codex/close-incident/agents/openai.yaml +3 -0
  213. package/skills-codex/link-incident/SKILL.md +173 -0
  214. package/skills-codex/link-incident/agents/openai.yaml +3 -0
  215. package/skills-codex/list-incidents/SKILL.md +92 -0
  216. package/skills-codex/list-incidents/agents/openai.yaml +3 -0
  217. package/skills-codex/list-problems/SKILL.md +126 -0
  218. package/skills-codex/list-problems/agents/openai.yaml +3 -0
  219. package/skills-codex/list-stories/SKILL.md +170 -0
  220. package/skills-codex/list-stories/agents/openai.yaml +3 -0
  221. package/skills-codex/list-story-maps/SKILL.md +104 -0
  222. package/skills-codex/list-story-maps/agents/openai.yaml +3 -0
  223. package/skills-codex/manage-incident/SKILL.md +378 -0
  224. package/skills-codex/manage-incident/agents/openai.yaml +3 -0
  225. package/skills-codex/manage-problem/SKILL.md +1180 -0
  226. package/skills-codex/manage-problem/agents/openai.yaml +3 -0
  227. package/skills-codex/manage-rfc/SKILL.md +314 -0
  228. package/skills-codex/manage-rfc/agents/openai.yaml +3 -0
  229. package/skills-codex/manage-story/SKILL.md +284 -0
  230. package/skills-codex/manage-story/agents/openai.yaml +3 -0
  231. package/skills-codex/manage-story-map/SKILL.md +198 -0
  232. package/skills-codex/manage-story-map/agents/openai.yaml +3 -0
  233. package/skills-codex/mitigate-incident/SKILL.md +239 -0
  234. package/skills-codex/mitigate-incident/agents/openai.yaml +3 -0
  235. package/skills-codex/reconcile-readme/SKILL.md +175 -0
  236. package/skills-codex/reconcile-readme/agents/openai.yaml +3 -0
  237. package/skills-codex/reconcile-stories/SKILL.md +124 -0
  238. package/skills-codex/reconcile-stories/agents/openai.yaml +3 -0
  239. package/skills-codex/reconcile-story-maps/SKILL.md +81 -0
  240. package/skills-codex/reconcile-story-maps/agents/openai.yaml +3 -0
  241. package/skills-codex/report-upstream/SKILL.md +716 -0
  242. package/skills-codex/report-upstream/agents/openai.yaml +3 -0
  243. package/skills-codex/restore-incident/SKILL.md +216 -0
  244. package/skills-codex/restore-incident/agents/openai.yaml +3 -0
  245. package/skills-codex/review-problems/SKILL.md +524 -0
  246. package/skills-codex/review-problems/agents/openai.yaml +3 -0
  247. package/skills-codex/scaffold-intake/SKILL.md +209 -0
  248. package/skills-codex/scaffold-intake/agents/openai.yaml +3 -0
  249. package/skills-codex/scaffold-intake/templates/CONTRIBUTING.md.tmpl +31 -0
  250. package/skills-codex/scaffold-intake/templates/SECURITY.md.tmpl +39 -0
  251. package/skills-codex/scaffold-intake/templates/SUPPORT.md.tmpl +32 -0
  252. package/skills-codex/scaffold-intake/templates/config.yml.tmpl +8 -0
  253. package/skills-codex/scaffold-intake/templates/problem-report.yml.tmpl +114 -0
  254. package/skills-codex/transition-problem/SKILL.md +371 -0
  255. package/skills-codex/transition-problem/agents/openai.yaml +3 -0
  256. package/skills-codex/transition-problems/SKILL.md +310 -0
  257. package/skills-codex/transition-problems/agents/openai.yaml +3 -0
  258. package/skills-codex/update-upstream/SKILL.md +583 -0
  259. package/skills-codex/update-upstream/agents/openai.yaml +3 -0
  260. package/skills-codex/work-problem/SKILL.md +160 -0
  261. package/skills-codex/work-problem/agents/openai.yaml +3 -0
  262. package/skills-codex/work-problems/SKILL.md +58 -0
  263. package/skills-codex/work-problems/agents/openai.yaml +3 -0
  264. package/templates/story-map.css +1 -1
  265. package/bin/wr-itil-mark-rfc-capture-gate +0 -51
  266. package/scripts/mark-rfc-capture-gate.sh +0 -32
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env bash
2
- # wr-itil — per-ticket effort tally from AFK iteration cost metadata (ADR-067, P248)
2
+ # wr-itil — per-ticket effort tally from AFK iteration cost metadata (cost-based-wsjf-effort-capture-time-cost-actuals-tally-per-ticket-retro-driven-rms-calibration-tally-first-architecture-rule, use-time-and-token-cost-not-t-shirt-sizing-for-wsjf-effort-with-retro-driven-estimation-refinement-problem)
3
3
  #
4
- # @jtbd JTBD-006 (Progress the Backlog While I'm Away — AFK actuals feed WSJF calibration + audit trail)
5
- # @jtbd JTBD-202 (Run Pre-Flight Governance Checks — structured, auditable effort tally)
4
+ # @jtbd progress-the-backlog-while-i-m-away-user-outcome (Progress the Backlog While I'm Away — AFK actuals feed WSJF calibration + audit trail)
5
+ # @jtbd run-pre-flight-governance-checks-before-release-or-handover-user-outcome (Run Pre-Flight Governance Checks — structured, auditable effort tally)
6
6
  #
7
7
  # Attributes `.afk-run-state/iter*.json` actuals back to their source ticket
8
8
  # (the `pNNN` token in the filename) and emits the `## Effort Tally` schema. The
9
9
  # reusable core shared by:
10
- # - the backfill (seed historical tickets — ADR-067 Decision Outcome item 4)
11
- # - go-forward per-iter append (work-problems — ADR-067 item 2)
10
+ # - the backfill (seed historical tickets — cost-based-wsjf-effort-capture-time-cost-actuals-tally-per-ticket-retro-driven-rms-calibration-tally-first-architecture-rule Decision Outcome item 4)
11
+ # - go-forward per-iter append (work-problems — cost-based-wsjf-effort-capture-time-cost-actuals-tally-per-ticket-retro-driven-rms-calibration-tally-first-architecture-rule item 2)
12
12
  #
13
- # Authority hierarchy (P089 Gap 2 — load-bearing): `total_cost_usd` is the
13
+ # Authority hierarchy (problem-089-work-problems-step-5-dispatch-has-two-robustness-gaps-stdin-warning-pollutes-json-output-and-cost-metadata-undercounts-when-subprocess-exits-via-background-task-notification-ack-problem Gap 2 — load-bearing): `total_cost_usd` is the
14
14
  # AUTHORITATIVE actual (session-cumulative by CLI contract; reliable token-spend
15
15
  # proxy). `duration_ms` is reliable wall-clock. Raw `usage.*` token counts are
16
16
  # BEST-EFFORT (undercount when a subprocess exits on a background-ack turn) and
@@ -26,15 +26,15 @@
26
26
  # Idempotently inject/replace that section in the ticket file (lazy-empty:
27
27
  # zero iters → section removed). Mirrors update-problem-references-section.sh.
28
28
  #
29
- # --source defaults to afk-backfill (ADR-067 item 2a — every row generated from
29
+ # --source defaults to afk-backfill (cost-based-wsjf-effort-capture-time-cost-actuals-tally-per-ticket-retro-driven-rms-calibration-tally-first-architecture-rule item 2a — every row generated from
30
30
  # pre-existing .afk-run-state data is a historical backfill until a go-forward
31
31
  # per-iter append wires `--source live-iter`).
32
32
  #
33
- # Phase bucketing (ADR-067 item 2 — RCA vs RFC): derived from the ticket's
33
+ # Phase bucketing (cost-based-wsjf-effort-capture-time-cost-actuals-tally-per-ticket-retro-driven-rms-calibration-tally-first-architecture-rule item 2 — RCA vs RFC): derived from the ticket's
34
34
  # **Status** body line — `Open` → RCA, anything else → RFC.
35
35
  # ponytail: single-phase attribution; a ticket that accrued iters while Open
36
36
  # then more while Known Error buckets ALL iters to its current phase. Named
37
- # upgrade path = per-iter git-log status discrimination (ADR-067 item 2 Phase
37
+ # upgrade path = per-iter git-log status discrimination (cost-based-wsjf-effort-capture-time-cost-actuals-tally-per-ticket-retro-driven-rms-calibration-tally-first-architecture-rule item 2 Phase
38
38
  # 2 design). Correct for the common single-phase case; the ceiling travels in
39
39
  # the AUTO-GENERATED marker below.
40
40
  #
@@ -157,7 +157,7 @@ if [ -n "$line" ]; then
157
157
  tokens="$(echo "$line" | sed -E 's/.*tokens=~([0-9.]+M).*/\1/')"
158
158
  new_section="## Effort Tally"$'\n\n'
159
159
  new_section+="<!-- AUTO-GENERATED by wr-itil-effort-tally; do not hand-edit. source: ${SOURCE}."$'\n'
160
- new_section+=" Phase bucketed from current **Status** (single-phase ceiling — ADR-067 item 2). -->"$'\n\n'
160
+ new_section+=" Phase bucketed from current **Status** (single-phase ceiling — cost-based-wsjf-effort-capture-time-cost-actuals-tally-per-ticket-retro-driven-rms-calibration-tally-first-architecture-rule item 2). -->"$'\n\n'
161
161
  new_section+="| Phase | Iters | Cost (USD, authoritative) | Time (min) | Tokens (best-effort) |"$'\n'
162
162
  new_section+="|---|---|---|---|---|"$'\n'
163
163
  new_section+="| ${PHASE} | ${iters} | \$${cost} | ${minutes} | ~${tokens} |"$'\n'
@@ -2,8 +2,8 @@
2
2
  # packages/itil/scripts/evaluate-relevance.sh
3
3
  #
4
4
  # Evaluate whether a problem ticket has become "no longer relevant" by
5
- # checking observable evidence per ADR-026 grounding. Implements 5
6
- # evidence shapes per ADR-079 (Phase 1 + Phase 2):
5
+ # checking observable evidence per agent-output-grounding-no-fabricated-quantitative-estimates-cite-persist-uncertainty-architecture-rule grounding. Implements 5
6
+ # evidence shapes per evidence-based-relevance-close-pass-for-the-problem-backlog-phase-1-file-no-longer-exists-phase-2-adr-shipped-confirmed-named-skill-exists-self-marker-in-body-driver-child-closed-phase-1-false-positive-fixes-architecture-rule (Phase 1 + Phase 2):
7
7
  #
8
8
  # Shape 1 — file-no-longer-exists (Phase 1, original)
9
9
  # Shape 2 — ADR-shipped with `human-oversight: confirmed` (Phase 2)
@@ -12,9 +12,9 @@
12
12
  # Shape 5 — driver-child-ticket-closed (Phase 2)
13
13
  #
14
14
  # Phase 1 false-positive fixes (Phase 2):
15
- # - state-suffix detection (P180): per-state subdirs + .<state>.md
16
- # - sibling-file detection (P244): dir-glob slug-prefix
17
- # - rename detection (P251): git log --follow --diff-filter=AD
15
+ # - state-suffix detection (agent-defers-mitigation-selection-to-user-during-active-incident-surfaces-mitigation-choice-as-user-authority-when-skill-contract-empowers-agent-driven-reversible-mitigations-problem): per-state subdirs + .<state>.md
16
+ # - sibling-file detection (phase-3-f9-wr-itil-plugin-maturity-list-in-suite-display-shim-reads-installed-plugins-plugin-json-maturity-field-emits-ndjson-per-surface-rollup-per-plugin-problem): dir-glob slug-prefix
17
+ # - rename detection (rfc-first-trace-invariant-not-enforced-fixes-start-without-rfc-story-map-or-jtbd-trace-problem): git log --follow --diff-filter=AD
18
18
  #
19
19
  # Usage:
20
20
  # evaluate-relevance.sh <ticket-file> [<min-age-days>]
@@ -35,13 +35,13 @@
35
35
  # 2 = SKIP
36
36
  # 3 = error
37
37
  #
38
- # Set LC_ALL=C for portable byte-grep per P328 (BSD grep on macOS
38
+ # Set LC_ALL=C for portable byte-grep per bsd-grep-sed-awk-on-macos-silently-fail-or-error-on-utf-8-without-lc-all-en-us-utf-8-problem (BSD grep on macOS
39
39
  # silently misbehaves on UTF-8 without an explicit locale).
40
40
  #
41
- # ADR-049: invoked via the `wr-itil-evaluate-relevance` PATH shim.
42
- # ADR-026: every CLOSE-CANDIDATE verdict cites the evidence per shape.
43
- # ADR-052: behavioural bats at scripts/test/evaluate-relevance.bats.
44
- # ADR-079: design (Phase 1 + Phase 2).
41
+ # plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule: invoked via the `wr-itil-evaluate-relevance` PATH shim.
42
+ # agent-output-grounding-no-fabricated-quantitative-estimates-cite-persist-uncertainty-architecture-rule: every CLOSE-CANDIDATE verdict cites the evidence per shape.
43
+ # behavioural-tests-default-for-skill-testing-architecture-rule: behavioural bats at scripts/test/evaluate-relevance.bats.
44
+ # evidence-based-relevance-close-pass-for-the-problem-backlog-phase-1-file-no-longer-exists-phase-2-adr-shipped-confirmed-named-skill-exists-self-marker-in-body-driver-child-closed-phase-1-false-positive-fixes-architecture-rule: design (Phase 1 + Phase 2).
45
45
 
46
46
  set -euo pipefail
47
47
  export LC_ALL=C
@@ -96,7 +96,7 @@ path_exists() {
96
96
  return 1
97
97
  }
98
98
 
99
- # Detect state-suffix variants of an incident/problem/RFC path (P180 fix).
99
+ # Detect state-suffix variants of an incident/problem/RFC path (agent-defers-mitigation-selection-to-user-during-active-incident-surfaces-mitigation-choice-as-user-authority-when-skill-contract-empowers-agent-driven-reversible-mitigations-problem fix).
100
100
  # Given a path like `docs/incidents/I002-foo.investigating.md`, also checks
101
101
  # `docs/incidents/I002-foo.{restored,mitigating,closed}.md`. Returns 0 if
102
102
  # any sibling state-suffix variant exists.
@@ -108,7 +108,7 @@ state_suffix_variant_exists() {
108
108
  # Strip trailing .<state>.md to a slug-prefix and recombine with each
109
109
  # state. Conservative — only fires for paths in docs/incidents/,
110
110
  # docs/problems/, docs/rfcs/, docs/stories/, docs/story-maps/ where the
111
- # state-suffix convention applies (ADR-031 / ADR-060).
111
+ # state-suffix convention applies (problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule / problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule).
112
112
  case "$dir" in
113
113
  docs/incidents|docs/problems|docs/problems/*|docs/rfcs|docs/rfcs/*|docs/stories|docs/stories/*|docs/story-maps|docs/story-maps/*)
114
114
  ;;
@@ -122,7 +122,7 @@ state_suffix_variant_exists() {
122
122
  if [ "$slug" = "$base" ]; then
123
123
  return 1
124
124
  fi
125
- # Also try the per-state subdir layout (RFC-002 migration window).
125
+ # Also try the per-state subdir layout (docs-problems-flat-layout-migration-per-state-subdirs-adopter-auto-migration-release-design migration window).
126
126
  local parent
127
127
  parent=$(dirname "$dir")
128
128
  local entity
@@ -152,7 +152,7 @@ state_suffix_variant_exists() {
152
152
  }
153
153
 
154
154
  # Detect sibling files with similar slug-prefix in the same parent dir
155
- # (P244 fix). Given `packages/foo/scripts/bar-list.sh`, finds
155
+ # (phase-3-f9-wr-itil-plugin-maturity-list-in-suite-display-shim-reads-installed-plugins-plugin-json-maturity-field-emits-ndjson-per-surface-rollup-per-plugin-problem fix). Given `packages/foo/scripts/bar-list.sh`, finds
156
156
  # `packages/foo/scripts/bar-render.sh` / `bar-populate.sh` etc.
157
157
  # Returns 0 (and echoes the matched sibling) if a sibling exists.
158
158
  sibling_file_exists() {
@@ -195,7 +195,7 @@ sibling_file_exists() {
195
195
  return 1
196
196
  }
197
197
 
198
- # Detect rename via git log --follow (P251 fix). Returns 0 (and echoes the
198
+ # Detect rename via git log --follow (rfc-first-trace-invariant-not-enforced-fixes-start-without-rfc-story-map-or-jtbd-trace-problem fix). Returns 0 (and echoes the
199
199
  # detected new name) if the file was renamed away from <path>.
200
200
  rename_detected() {
201
201
  local p="$1"
@@ -242,7 +242,7 @@ record_shape() {
242
242
  # Shape 1 — file-no-longer-exists (Phase 1 original).
243
243
  # Extracts candidate paths, drops self-refs, runs path_exists per
244
244
  # candidate. Detects state-suffix / sibling-file / rename to avoid Phase 1
245
- # false-positives (P180/P244/P251); on detection routes to KEEP-WITH-NOTE.
245
+ # false-positives (agent-defers-mitigation-selection-to-user-during-active-incident-surfaces-mitigation-choice-as-user-authority-when-skill-contract-empowers-agent-driven-reversible-mitigations-problem/phase-3-f9-wr-itil-plugin-maturity-list-in-suite-display-shim-reads-installed-plugins-plugin-json-maturity-field-emits-ndjson-per-surface-rollup-per-plugin-problem/rfc-first-trace-invariant-not-enforced-fixes-start-without-rfc-story-map-or-jtbd-trace-problem); on detection routes to KEEP-WITH-NOTE.
246
246
 
247
247
  candidates=$(grep -oE '(packages|docs|\.changeset|src|test|scripts)/[A-Za-z0-9._/-]+\.(md|sh|ts|tsx|js|jsx|json|yml|yaml|bats|py|txt|html)' "$ticket_file" 2>/dev/null \
248
248
  | sort -u \
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env bash
2
- # wr-itil — write the problem-tier create-gate marker (P119) under every
3
- # candidate session SID (P260 / ADR-050 Option C).
2
+ # wr-itil — write the problem-tier create-gate marker (agent-bypasses-wr-itil-manage-problem-step-2-duplicate-check-by-writing-tickets-directly-to-docs-problems-problem) under every
3
+ # candidate session SID (create-gate-marker-race-between-concurrent-claude-sessions-via-shared-runtime-sid-file-problem / capture-the-runtime-stdin-session-id-via-a-pretooluse-hook-so-the-create-gate-marker-binds-to-the-same-sid-the-runtime-hook-will-see-architecture-rule Option C).
4
4
  #
5
5
  # Internalises the source+pipe that capture-problem / manage-problem Step 2
6
6
  # previously ran INLINE with repo-relative `source packages/itil/hooks/lib/*.sh`
7
7
  # — which only resolved in the source monorepo and broke in adopter installs
8
- # (P317 / RFC-009). This script resolves its sibling libs RELATIVE TO ITS OWN
8
+ # (capture-problem-capture-rfc-manage-problem-step-2-create-gate-marker-step-sources-repo-relative-packages-itil-hooks-lib-sh-fails-in-adopter-installs-recurring-published-path-class-problem / adopter-safe-path-resolution-in-shipped-skills-24-repo-relative-references-release-design). This script resolves its sibling libs RELATIVE TO ITS OWN
9
9
  # LOCATION (`$(dirname)/../hooks/lib`), so it works wherever the plugin is
10
10
  # installed. SKILLs invoke it by name via the `wr-itil-mark-create-gate` PATH
11
- # shim (ADR-049) instead of sourcing repo-relative lib files.
11
+ # shim (plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule) instead of sourcing repo-relative lib files.
12
12
  set -uo pipefail
13
13
 
14
14
  LIB="$(cd "$(dirname "${BASH_SOURCE[0]}")/../hooks/lib" 2>/dev/null && pwd)" || {
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env bash
2
- # mark-story-oversight-confirmed.sh — ADR-090 ratify write-path.
2
+ # mark-story-oversight-confirmed.sh — story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule ratify write-path.
3
3
  #
4
4
  # Writes `human-oversight: confirmed` + an `oversight-hash` fingerprint of the
5
5
  # current content into a story (markdown frontmatter) or story-map (HTML meta).
6
6
  # Idempotent: re-running recomputes the hash and replaces any existing marker
7
7
  # (never duplicates). A later content edit changes the content hash, so the
8
8
  # stored fingerprint no longer matches → the artefact reads as drifted /
9
- # unratified until re-ratified (ADR-090 drift-invalidation).
9
+ # unratified until re-ratified (story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule drift-invalidation).
10
10
  #
11
- # ADR-103 retired the ADR-101 `--pure-decomposition` flag and its
11
+ # a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule retired the an-afk-loop-may-accept-and-implement-a-story-that-only-decomposes-already-ratified-substance-architecture-rule `--pure-decomposition` flag and its
12
12
  # `oversight-basis:` record. Nothing here strips a stale one: the only writer
13
13
  # that did was the markdown leg, and markdown is a story, which is now refused
14
14
  # outright. No artefact in the corpus carries the field.
@@ -16,10 +16,10 @@
16
16
  # Usage: mark-story-oversight-confirmed.sh <story-or-map-file>
17
17
  # Exit: 0 = ratified; 2 = usage / file error.
18
18
  #
19
- # Authority: ADR-090, ADR-103. Driver: P404 Phase 2, P456. Test: mark-story-oversight-confirmed.bats.
19
+ # Authority: story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule, a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule. Driver: implement-in-the-skills-and-tests-1-story-per-rfc-story-map-story-ratification-problem Phase 2, afk-iter-cannot-progress-a-ratified-known-error-when-the-fix-vehicle-rfc-has-empty-stories-problem. Test: mark-story-oversight-confirmed.bats.
20
20
  set -euo pipefail
21
21
 
22
- # Adopter-safe: source the shared hash lib RELATIVE TO THIS SCRIPT (P317), never
22
+ # Adopter-safe: source the shared hash lib RELATIVE TO THIS SCRIPT (capture-problem-capture-rfc-manage-problem-step-2-create-gate-marker-step-sources-repo-relative-packages-itil-hooks-lib-sh-fails-in-adopter-installs-recurring-published-path-class-problem), never
23
23
  # repo-relative.
24
24
  LIB="$(cd "$(dirname "${BASH_SOURCE[0]}")/../lib" 2>/dev/null && pwd)" || {
25
25
  echo "mark-story-oversight-confirmed: cannot locate lib dir" >&2; exit 2; }
@@ -33,21 +33,21 @@ if [ -z "$f" ]; then
33
33
  fi
34
34
  [ -f "$f" ] || { echo "mark-story-oversight-confirmed: file not found: $f" >&2; exit 2; }
35
35
 
36
- # ADR-103: only a story MAP is ratified. A story carries no oversight marker at
36
+ # a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule: only a story MAP is ratified. A story carries no oversight marker at
37
37
  # all — its approval is its map's. Marking a story would re-create the second
38
- # approval surface ADR-103 removed, so refuse rather than silently write one.
39
- # What ADR-103 removes is the STORY-tier marker, and a story is markdown. So the
38
+ # approval surface a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule removed, so refuse rather than silently write one.
39
+ # What a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule removes is the STORY-tier marker, and a story is markdown. So the
40
40
  # refusal is keyed on the encoding, not on a `docs/stories/` path substring: a
41
41
  # caller working outside that tree — a test fixture, an adopter with a different
42
42
  # layout — must get the same answer.
43
43
  #
44
- # Deliberately NOT keyed on the ADR-102 data island, tempting as that is. A map
45
- # predating ADR-102 has no island, and an island test would lock those out of
44
+ # Deliberately NOT keyed on the story-maps-render-from-json-through-a-canonical-template-architecture-rule data island, tempting as that is. A map
45
+ # predating story-maps-render-from-json-through-a-canonical-template-architecture-rule has no island, and an island test would lock those out of
46
46
  # ratification entirely. Marking some unrelated .html file is a user error; a
47
47
  # story marker is a governance hole, and only the second one is worth refusing.
48
48
  case "$f" in
49
49
  *.md|*.markdown)
50
- echo "mark-story-oversight-confirmed: refusing to mark $f (ADR-103). Only a story MAP is ratified. A story carries no oversight marker; its approval is derived from the maps named in its \`story-maps:\` field, so ratify the map instead." >&2
50
+ echo "mark-story-oversight-confirmed: refusing to mark $f (a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule). Only a story MAP is ratified. A story carries no oversight marker; its approval is derived from the maps named in its \`story-maps:\` field, so ratify the map instead." >&2
51
51
  exit 2 ;;
52
52
  esac
53
53
 
@@ -57,7 +57,7 @@ tmp="$(mktemp)"
57
57
  case "$f" in
58
58
  *.html)
59
59
  if grep -qF '<script id="story-map-data"' "$f"; then
60
- # ADR-102 map: the data island is the source of truth and every <meta> is
60
+ # story-maps-render-from-json-through-a-canonical-template-architecture-rule map: the data island is the source of truth and every <meta> is
61
61
  # GENERATED from it. Writing the marker to <meta> alone would be undone by
62
62
  # the next render, silently destroying a human ratification — so the
63
63
  # marker goes into the island and the <meta> follows on render.
@@ -124,10 +124,10 @@ PYMARK
124
124
  ;;
125
125
  *)
126
126
  # The markdown-frontmatter writer that used to live here was a working
127
- # writer for the story-level marker ADR-103 removed. It is deleted rather
127
+ # writer for the story-level marker a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule removed. It is deleted rather
128
128
  # than left unreachable behind the guard above, so that a later relaxation
129
129
  # of that guard fails loudly instead of silently restoring story markers.
130
- echo "mark-story-oversight-confirmed: refusing to mark $f (ADR-103) — no recognised story-map encoding (expected a <script id=\"story-map-data\"> island, or a legacy HTML map)." >&2
130
+ echo "mark-story-oversight-confirmed: refusing to mark $f (a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule) — no recognised story-map encoding (expected a <script id=\"story-map-data\"> island, or a legacy HTML map)." >&2
131
131
  rm -f "$tmp"; exit 2
132
132
  ;;
133
133
  esac
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # migrate-story-status-mirror.sh — P474 one-time migration.
2
+ # migrate-story-status-mirror.sh — oversight-hash-treats-the-status-body-mirror-as-substance-so-an-accept-transition-self-invalidates-its-own-ratification-problem one-time migration.
3
3
  #
4
4
  # Removes the redundant `**Status**:` body line from story artefacts and carries
5
5
  # each artefact's existing ratification forward.
@@ -20,13 +20,13 @@
20
20
  # identifies WHICH content the confirmation covered. Recomputing that pointer,
21
21
  # over content whose sole delta is a mechanical mirror of an already-excluded
22
22
  # field, removes zero ratified substance from coverage. That argument is what
23
- # distinguishes this from the P348 hollow-marker class, and it holds ONLY
23
+ # distinguishes this from the iter-subprocesses-set-human-oversight-confirmed-marker-on-adrs-personas-jtbds-without-an-actual-user-confirmation-event-problem hollow-marker class, and it holds ONLY
24
24
  # because of two guards:
25
25
  #
26
26
  # 1. Per-artefact validity gate — re-fingerprint only when the stored hash
27
27
  # still matches the content as it stands. An artefact that had already
28
28
  # drifted stays drifted; nothing is silently revived. Without this the
29
- # migration is a blanket re-bless, which IS P348.
29
+ # migration is a blanket re-bless, which IS iter-subprocesses-set-human-oversight-confirmed-marker-on-adrs-personas-jtbds-without-an-actual-user-confirmation-event-problem.
30
30
  # 2. Mirror-agreement precondition — if the body line disagrees with the
31
31
  # frontmatter, it is carrying independent information (the real corpus had
32
32
  # `superseded (was: draft)` and `in-progress (2026-07-23)`), so deleting it
@@ -40,8 +40,8 @@
40
40
  # Usage: migrate-story-status-mirror.sh [<stories-dir>...] (default: docs/stories)
41
41
  # Exit: 0 = completed (including "nothing to do"); 2 = usage / missing lib.
42
42
  #
43
- # Authority: ADR-090 (oversight fingerprint), ADR-103 (stories carry no marker).
44
- # Driver: P474. Test: migrate-story-status-mirror.bats.
43
+ # Authority: story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule (oversight fingerprint), a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule (stories carry no marker).
44
+ # Driver: oversight-hash-treats-the-status-body-mirror-as-substance-so-an-accept-transition-self-invalidates-its-own-ratification-problem. Test: migrate-story-status-mirror.bats.
45
45
 
46
46
  set -euo pipefail
47
47
 
@@ -106,7 +106,7 @@ for d in "${dirs[@]}"; do
106
106
  # Was this artefact ratified-and-valid BEFORE we touch it? Decide now: once
107
107
  # the line is gone the pre-migration hash is unreproducible.
108
108
  #
109
- # ADR-103: a story carries no fingerprint of its own, so this is always 0 on
109
+ # a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule: a story carries no fingerprint of its own, so this is always 0 on
110
110
  # the story tier and the re-point branch below never runs there. The branch
111
111
  # is retained for any artefact that does carry one.
112
112
  was_valid=0
@@ -36,12 +36,12 @@
36
36
  # working tree, for hermetic tests; outside a git repository the history half
37
37
  # is skipped automatically.
38
38
  #
39
- # @adr ADR-119 (a fix proposal draws a release row, never a document; the
39
+ # @adr a-fix-proposal-draws-a-release-row-never-a-document-architecture-rule (a fix proposal draws a release row, never a document; the
40
40
  # identity is allocated by scanning row identities including git history)
41
- # @adr ADR-115 (identities are never reused — hence highest+1, not lowest gap)
42
- # @adr ADR-049 (invoked via the wr-itil-next-rfc-id bin shim on $PATH)
43
- # @adr ADR-052 (behavioural bats in packages/itil/scripts/test/next-rfc-id.bats)
44
- # @problem P508
41
+ # @adr story-map-ids-are-never-reused-architecture-rule (identities are never reused — hence highest+1, not lowest gap)
42
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (invoked via the wr-itil-next-rfc-id bin shim on $PATH)
43
+ # @adr behavioural-tests-default-for-skill-testing-architecture-rule (behavioural bats in packages/itil/scripts/test/next-rfc-id.bats)
44
+ # @problem the-fix-proposal-still-instantiates-a-standalone-rfc-document-after-made-it-a-release-row-problem
45
45
 
46
46
  set -uo pipefail
47
47
 
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env bash
2
2
  # packages/itil/scripts/plugin-exercise-index.sh
3
3
  #
4
- # Phase 2b (P087) git-axis maturity-measurement script.
4
+ # Phase 2b (problem-087-no-maturity-battle-hardening-signal-on-plugins-skills-agents-or-hooks-readmes-don-t-tell-users-which-features-are-stable-vs-experimental-problem) git-axis maturity-measurement script.
5
5
  #
6
6
  # Runs `git log --since=<window>d --name-only --pretty=format:%H|%aI|%s`
7
7
  # once at the project root, auto-discovers plugins by listing `packages/*/`,
8
8
  # and emits one NDJSON record per plugin with the v1.0 schema fields per
9
- # ADR-058 §Script contracts (line 87-113).
9
+ # windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule §Script contracts (line 87-113).
10
10
  #
11
- # Schema (per ADR-058 line 95-110):
11
+ # Schema (per windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule line 95-110):
12
12
  # {"schema_version":"1.0","axis":"plugin-exercise-index","plugin":"<name>",
13
13
  # "commits_window":<N>,"window_days":<N>,"days_shipped":<N>,
14
14
  # "closed_tickets_window":<N>,"tickets_window_days":<N>,
@@ -17,7 +17,7 @@
17
17
  # composite_index = log10(commits_window+1)
18
18
  # + log10(closed_tickets_window+1)
19
19
  # + (days_shipped >= 60 ? 1.0 : 0.0)
20
- # (ADR-058 line 112, Option E6 "MAY emit alongside band" carve-out.)
20
+ # (windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule line 112, Option E6 "MAY emit alongside band" carve-out.)
21
21
  #
22
22
  # Usage:
23
23
  # wr-itil-plugin-exercise-index [--window-days=N] [--tickets-window-days=N]
@@ -25,19 +25,19 @@
25
25
  # [--category-overrides=FILE]
26
26
  #
27
27
  # Defaults:
28
- # --window-days 60 (ADR-058 line 89)
29
- # --tickets-window-days 90 (ADR-058 line 93)
28
+ # --window-days 60 (windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule line 89)
29
+ # --tickets-window-days 90 (windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule line 93)
30
30
  # --project-root $PWD
31
31
  #
32
32
  # Exit codes:
33
- # 0 = always — ADR-013 Rule 6 fail-safe. Outside-git-repo, missing
33
+ # 0 = always — structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 fail-safe. Outside-git-repo, missing
34
34
  # `packages/`, opt-out marker all hit the zero-records path
35
35
  # with stderr-comment.
36
36
  #
37
- # Privacy (ADR-035 clauses adopted verbatim, adapted for the git axis):
37
+ # Privacy (centralised-review-reports-for-cross-project-skill-improvement-jsonl-at-claude-review-reports-architecture-rule clauses adopted verbatim, adapted for the git axis):
38
38
  # - Opt-out marker `.claude/.skill-metrics-opt-out` disables reads.
39
39
  # - No network egress — the script body invokes no exfiltration
40
- # primitives. ADR-058 §Confirmation 3 enforces via negative-grep on
40
+ # primitives. windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule §Confirmation 3 enforces via negative-grep on
41
41
  # this file (banned-token list lives in the bats fixture, not here,
42
42
  # to avoid self-matching).
43
43
  # - Content sanitisation — commit subjects are parsed ONLY for
@@ -46,16 +46,16 @@
46
46
  # only plugin-attribution surface is the `packages/<plugin>/` path
47
47
  # prefix extracted from `--name-only` output.
48
48
  #
49
- # @problem P087 (Phase 2b — git axis)
50
- # @adr ADR-058 (Plugin maturity measurement mechanism)
51
- # @adr ADR-049 (Shim grammar — bin/wr-itil-plugin-exercise-index on $PATH)
52
- # @adr ADR-035 (Privacy posture adopted verbatim)
53
- # @adr ADR-052 (Behavioural tests default; ADR-058 §Confirmation 6-8)
54
- # @adr ADR-013 Rule 6 (non-interactive fail-safe — exit 0 always)
55
- # @adr ADR-023 (Performance — ≤1.0s warm-cache; 60-day window default)
56
- # @jtbd JTBD-101 (Extend the Suite — hardening-prioritisation outcome,
49
+ # @problem problem-087-no-maturity-battle-hardening-signal-on-plugins-skills-agents-or-hooks-readmes-don-t-tell-users-which-features-are-stable-vs-experimental-problem (Phase 2b — git axis)
50
+ # @adr windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule (Plugin maturity measurement mechanism)
51
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (Shim grammar — bin/wr-itil-plugin-exercise-index on $PATH)
52
+ # @adr centralised-review-reports-for-cross-project-skill-improvement-jsonl-at-claude-review-reports-architecture-rule (Privacy posture adopted verbatim)
53
+ # @adr behavioural-tests-default-for-skill-testing-architecture-rule (Behavioural tests default; windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule §Confirmation 6-8)
54
+ # @adr structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 (non-interactive fail-safe — exit 0 always)
55
+ # @adr wr-architect-agent-performance-review-scope-prompt-amendment-performance-budget-adr-template-architecture-rule (Performance — ≤1.0s warm-cache; 60-day window default)
56
+ # @jtbd extend-the-suite-with-new-plugins-user-outcome (Extend the Suite — hardening-prioritisation outcome,
57
57
  # 2026-05-04 amendment serves Phase 2 NDJSON as data source)
58
- # @jtbd JTBD-201 (Restore Service Fast — audit-trail composition)
58
+ # @jtbd restore-service-fast-with-an-audit-trail-user-outcome (Restore Service Fast — audit-trail composition)
59
59
 
60
60
  set -uo pipefail
61
61
 
@@ -82,7 +82,7 @@ for arg in "$@"; do
82
82
  esac
83
83
  done
84
84
 
85
- # ── Opt-out marker check (ADR-035 / ADR-058 §Privacy posture) ───────────────
85
+ # ── Opt-out marker check (centralised-review-reports-for-cross-project-skill-improvement-jsonl-at-claude-review-reports-architecture-rule / windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule §Privacy posture) ───────────────
86
86
 
87
87
  OPT_OUT_MARKER="${PROJECT_ROOT}/.claude/.skill-metrics-opt-out"
88
88
  if [ -e "$OPT_OUT_MARKER" ]; then
@@ -90,14 +90,14 @@ if [ -e "$OPT_OUT_MARKER" ]; then
90
90
  exit 0
91
91
  fi
92
92
 
93
- # ── Git-repo check (ADR-013 Rule 6 fail-safe) ───────────────────────────────
93
+ # ── Git-repo check (structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 fail-safe) ───────────────────────────────
94
94
 
95
95
  if [ ! -d "${PROJECT_ROOT}/.git" ] && ! git -C "$PROJECT_ROOT" rev-parse --git-dir >/dev/null 2>&1; then
96
96
  echo "# wr-itil-plugin-exercise-index: not a git repository at ${PROJECT_ROOT}" >&2
97
97
  exit 0
98
98
  fi
99
99
 
100
- # ── packages/ discovery check (ADR-013 Rule 6 fail-safe) ────────────────────
100
+ # ── packages/ discovery check (structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 fail-safe) ────────────────────
101
101
 
102
102
  if [ ! -d "${PROJECT_ROOT}/packages" ]; then
103
103
  echo "# wr-itil-plugin-exercise-index: no packages/ directory at ${PROJECT_ROOT}" >&2
@@ -115,7 +115,7 @@ if [ "$PLUGIN_COUNT" -eq 0 ]; then
115
115
  exit 0
116
116
  fi
117
117
 
118
- # ── --category-overrides validation (ADR-058 §Per-category override hook) ───
118
+ # ── --category-overrides validation (windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule §Per-category override hook) ───
119
119
  # Forward-extension flag; ships unused in Phase 2.
120
120
 
121
121
  if [ -n "$CATEGORY_OVERRIDES" ] && [ ! -f "$CATEGORY_OVERRIDES" ]; then
@@ -160,13 +160,13 @@ closed_tickets_window = defaultdict(int)
160
160
  BREAKING_RE = re.compile(r"\b(BREAKING)\b|(?:^|\s)(feat!|fix!|chore!|refactor!)")
161
161
 
162
162
  # ── Single git log pass with in-Python window filter ────────────────────────
163
- # ADR-058 line 89 pins `git log --since=<window>d --name-only
163
+ # windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule line 89 pins `git log --since=<window>d --name-only
164
164
  # --pretty=format:%H|%aI|%s`. Git's `--since=Nd` was observed unreliable on
165
165
  # 2026-05-16 against the test fixture (returned empty even for commits well
166
166
  # within the window — likely a date-parser quirk with future-year commit
167
167
  # dates), so the window filter is applied in-Python against the `%aI`
168
168
  # author-date field that is already extracted for `breaking_change_age_days`
169
- # and `days_shipped`. The `git log` invocation otherwise matches the ADR-058
169
+ # and `days_shipped`. The `git log` invocation otherwise matches the windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule
170
170
  # contract verbatim (--name-only, the literal `|` separator). Single pass
171
171
  # instead of two — pass-2 (oldest-commit) and pass-1 (in-window) collapse
172
172
  # into one walk because we already iterate every commit's date.
@@ -245,7 +245,7 @@ for sha, iso_ts, subject, paths in parse_log_all():
245
245
  del subject
246
246
  continue
247
247
 
248
- # days_shipped: track min(author_date) per plugin. ADR-058 line 91 says
248
+ # days_shipped: track min(author_date) per plugin. windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule line 91 says
249
249
  # "days since the OLDEST git commit"; oldest is interpreted as min by
250
250
  # author-date rather than min by commit-topology so the value is stable
251
251
  # against commit-reordering and rebase. (Topological --reverse can
@@ -257,7 +257,7 @@ for sha, iso_ts, subject, paths in parse_log_all():
257
257
  if cur is None or ts < cur:
258
258
  oldest_commit_ts[plug] = ts
259
259
 
260
- # In-window filter — applied in Python (ADR-058 line 89 contract for the
260
+ # In-window filter — applied in Python (windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule line 89 contract for the
261
261
  # git invocation; window cutoff in-process for portability).
262
262
  if ts < cutoff:
263
263
  del subject