@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,17 +1,17 @@
1
1
  #!/usr/bin/env bash
2
2
  # packages/itil/scripts/plugin-maturity-populate.sh
3
3
  #
4
- # Phase 3a (P087) plugin-maturity population script.
4
+ # Phase 3a (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) plugin-maturity population script.
5
5
  #
6
6
  # Reads two Phase 2 NDJSON streams — `wr-itil-skill-invocations` output
7
7
  # (transcript-axis) + `wr-itil-plugin-exercise-index` output (git-axis) —
8
- # applies ADR-053 §promotion criteria + §Bootstrapping clause, and writes
8
+ # applies windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §promotion criteria + §Bootstrapping clause, and writes
9
9
  # the `maturity:` field per surface and per plugin root into each
10
10
  # `packages/<plugin>/.claude-plugin/plugin.json`. Idempotent: re-running
11
11
  # with unchanged inputs and a pinned `--now=` produces byte-identical
12
12
  # plugin.json output.
13
13
  #
14
- # Plugin.json schema extension (ADR-063 §plugin.json field schema):
14
+ # Plugin.json schema extension (windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule §plugin.json field schema):
15
15
  # {
16
16
  # "name": "wr-<plugin>",
17
17
  # "version": "...",
@@ -56,7 +56,7 @@
56
56
  # (`packages/<bare-name>/`) and accepts bare-form NDJSON input — no
57
57
  # plugin.json `name`-matching required.
58
58
  #
59
- # Bootstrapping clause (ADR-053 §Bootstrapping clause):
59
+ # Bootstrapping clause (windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §Bootstrapping clause):
60
60
  # Active iff `max(days_shipped across plugins) < 60`. Sunset auto-
61
61
  # derives from the data (architect §D — no hard-coded calendar date).
62
62
  # Under bootstrapping: default = Experimental; provisional Alpha iff
@@ -64,7 +64,7 @@
64
64
  # stay Experimental during bootstrapping — provisional-Alpha rule
65
65
  # requires a numeric invocation count.
66
66
  #
67
- # Steady-state thresholds (ADR-053 §promotion criteria, post-sunset):
67
+ # Steady-state thresholds (windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §promotion criteria, post-sunset):
68
68
  # Experimental: days <14 OR invocations <10 OR tickets <3
69
69
  # Alpha: days 14–60 AND inv 10–100 AND tickets 3–10
70
70
  # Beta: days ≥60 AND inv ≥100 AND tickets ≥10 AND breaking ≥30
@@ -72,11 +72,11 @@
72
72
  # Stable: days ≥180 AND inv ≥1000 AND breaking ≥90 (or null)
73
73
  # Deprecated: author-declared; preserved across re-runs.
74
74
  #
75
- # ADR-044 silent-framework carve-out (scope-limited per ADR-063 §scope):
75
+ # decision-delegation-contract-when-agents-act-on-the-framework-vs-ask-the-user-architecture-rule silent-framework carve-out (scope-limited per windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule §scope):
76
76
  # Band recomputation is mechanical, policy-resolved. No `AskUserQuestion`
77
77
  # per band recompute. The carve-out does NOT cover author-declared
78
78
  # Deprecated assignment, `supersededBy:` authoring, or Phase 4+ gate
79
- # threshold tuning — those remain AskUserQuestion-eligible per ADR-013
79
+ # threshold tuning — those remain AskUserQuestion-eligible per structured-user-interaction-for-governance-skill-decisions-architecture-rule
80
80
  # Rule 1.
81
81
  #
82
82
  # Usage:
@@ -88,29 +88,29 @@
88
88
  # [--dry-run] # print diff to stdout, do not write
89
89
  #
90
90
  # Exit codes:
91
- # 0 = always — ADR-013 Rule 6 fail-safe. Missing NDJSON inputs / no
91
+ # 0 = always — structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 fail-safe. Missing NDJSON inputs / no
92
92
  # packages/ / opt-out marker all hit the no-write stderr-
93
93
  # comment path.
94
94
  #
95
- # Privacy (ADR-035 clauses adopted verbatim):
95
+ # Privacy (centralised-review-reports-for-cross-project-skill-improvement-jsonl-at-claude-review-reports-architecture-rule clauses adopted verbatim):
96
96
  # - Opt-out marker `.claude/.skill-metrics-opt-out` disables writes.
97
97
  # - No network egress — the script body invokes no exfiltration
98
98
  # primitives. Negative-grep enforcement lives in the bats fixture.
99
99
  #
100
- # @problem P237 (Phase 3a — population script)
101
- # @problem P087 (parent — no maturity signal on plugin features)
102
- # @adr ADR-063 (Plugin maturity presentation layer — Phase 3a contract)
103
- # @adr ADR-053 (Plugin maturity taxonomy — promotion criteria +
100
+ # @problem phase-3a-wr-itil-plugin-maturity-populate-writes-plugin-json-maturity-field-from-phase-2-ndjson-problem (Phase 3a — population script)
101
+ # @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 (parent — no maturity signal on plugin features)
102
+ # @adr windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule (Plugin maturity presentation layer — Phase 3a contract)
103
+ # @adr windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule (Plugin maturity taxonomy — promotion criteria +
104
104
  # Bootstrapping clause)
105
- # @adr ADR-058 (Phase 2 NDJSON measurement — input shape)
106
- # @adr ADR-049 (Shim grammar — `wr-itil-plugin-maturity-populate` on $PATH)
107
- # @adr ADR-035 (Privacy posture — opt-out marker, no network primitive)
108
- # @adr ADR-044 (Decision delegation — silent-framework carve-out)
109
- # @adr ADR-052 (Behavioural tests default)
110
- # @adr ADR-013 Rule 6 (non-interactive fail-safe — exit 0 always)
111
- # @jtbd JTBD-201 (Restore Service Fast — rich-record evidence block IS the
105
+ # @adr windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule (Phase 2 NDJSON measurement — input shape)
106
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (Shim grammar — `wr-itil-plugin-maturity-populate` on $PATH)
107
+ # @adr centralised-review-reports-for-cross-project-skill-improvement-jsonl-at-claude-review-reports-architecture-rule (Privacy posture — opt-out marker, no network primitive)
108
+ # @adr decision-delegation-contract-when-agents-act-on-the-framework-vs-ask-the-user-architecture-rule (Decision delegation — silent-framework carve-out)
109
+ # @adr behavioural-tests-default-for-skill-testing-architecture-rule (Behavioural tests default)
110
+ # @adr structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 (non-interactive fail-safe — exit 0 always)
111
+ # @jtbd restore-service-fast-with-an-audit-trail-user-outcome (Restore Service Fast — rich-record evidence block IS the
112
112
  # durable audit-trail surface at the canonical record)
113
- # @jtbd JTBD-101 (Extend the Suite — band-derivation persists Phase 2
113
+ # @jtbd extend-the-suite-with-new-plugins-user-outcome (Extend the Suite — band-derivation persists Phase 2
114
114
  # transient NDJSON signal as durable plugin.json field)
115
115
 
116
116
  set -uo pipefail
@@ -140,7 +140,7 @@ for arg in "$@"; do
140
140
  esac
141
141
  done
142
142
 
143
- # ── Opt-out marker check (ADR-035 / ADR-058 §Privacy posture) ───────────────
143
+ # ── 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) ───────────────
144
144
 
145
145
  OPT_OUT_MARKER="${PROJECT_ROOT}/.claude/.skill-metrics-opt-out"
146
146
  if [ -e "$OPT_OUT_MARKER" ]; then
@@ -148,7 +148,7 @@ if [ -e "$OPT_OUT_MARKER" ]; then
148
148
  exit 0
149
149
  fi
150
150
 
151
- # ── packages/ discovery check (ADR-013 Rule 6 fail-safe) ────────────────────
151
+ # ── packages/ discovery check (structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 fail-safe) ────────────────────
152
152
 
153
153
  if [ ! -d "${PROJECT_ROOT}/packages" ]; then
154
154
  echo "# wr-itil-plugin-maturity-populate: no packages/ directory at ${PROJECT_ROOT}" >&2
@@ -287,16 +287,16 @@ def discover_surfaces(pkg_dir):
287
287
  out["command"] = sorted(f.stem for f in commands_dir.glob("*.md") if f.is_file())
288
288
  return out
289
289
 
290
- # ── Band-mapping (ADR-053 §promotion criteria + §Bootstrapping clause) ─────
290
+ # ── Band-mapping (windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §promotion criteria + §Bootstrapping clause) ─────
291
291
 
292
- # Band ordering, worst-first. "Deprecated" is an overlay axis (ADR-053
292
+ # Band ordering, worst-first. "Deprecated" is an overlay axis (windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule
293
293
  # §granularity contract line 109) — elided from the rollup computation but
294
294
  # retained on individual surface entries. Worst-case rollup compares only
295
295
  # {Experimental, Alpha, Beta, Stable}.
296
296
  BAND_ORDER = ["Experimental", "Alpha", "Beta", "Stable"]
297
297
 
298
298
  def compute_band(evidence):
299
- """Map a per-surface evidence record -> band per ADR-053.
299
+ """Map a per-surface evidence record -> band per windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule.
300
300
 
301
301
  - During bootstrapping (suite-oldest < 60d): default Experimental;
302
302
  provisional Alpha iff invocations_30d >= 100 AND days_shipped >= 14.
@@ -310,7 +310,7 @@ def compute_band(evidence):
310
310
  breaking = evidence.get("breaking_change_age_days") # None or int
311
311
 
312
312
  if bootstrapping_active:
313
- # Provisional Alpha rule (ADR-053 §Bootstrapping clause line 86).
313
+ # Provisional Alpha rule (windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §Bootstrapping clause line 86).
314
314
  if isinstance(inv, int) and inv >= 100 and days >= 14:
315
315
  return "Alpha"
316
316
  return "Experimental"
@@ -359,12 +359,12 @@ def lookup_invocations(plugin_bare, kind, name):
359
359
 
360
360
  def build_surface_record(existing, kind, plugin_bare, name, evidence):
361
361
  """Construct the new maturity record for a surface, respecting the
362
- Deprecated-overlay invariant (architect §I + ADR-053 #6 / #102):
362
+ Deprecated-overlay invariant (architect §I + windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule #6 / #102):
363
363
  if existing band is Deprecated, return existing record VERBATIM —
364
364
  do NOT recompute, do NOT update computed_at, do NOT overwrite
365
365
  supersededBy. All other records get a fresh recompute.
366
366
 
367
- Under ADR-063 Amendment 2026-05-18 (P0 hotfix), `existing` IS the
367
+ Under windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule Amendment 2026-05-18 (P0 hotfix), `existing` IS the
368
368
  maturity record directly (no inner `.maturity` envelope) when read
369
369
  from the new nested location `plugin_doc["maturity"][<kind>][<name>]`.
370
370
  """
@@ -413,12 +413,12 @@ for pkg_dir in plugin_dirs:
413
413
  # (NOT top-level — Claude Code's plugin manifest validator rejects
414
414
  # top-level `hooks:` / `skills:` / `agents:` / `commands:` keys with
415
415
  # `Validation errors: hooks: Invalid input, skills: Invalid input` when
416
- # they carry maturity-only records). Per ADR-063 Amendment 2026-05-18
416
+ # they carry maturity-only records). Per windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule Amendment 2026-05-18
417
417
  # (P0 hotfix). Schema version bumps to "2.0" because the path move is
418
- # NOT additive per ADR-058 §Confirmation #8.
418
+ # NOT additive per windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule §Confirmation #8.
419
419
  kind_to_key = {"skill": "skills", "agent": "agents", "hook": "hooks", "command": "commands"}
420
420
  surface_bands_for_rollup = []
421
- # P269: collect per-surface invocations_30d across the populate pass so
421
+ # amend-plugin-maturity-populate-sh-to-write-rollup-invocations-30d-on-plugin-root-rollup-for-compound-rendering-problem: collect per-surface invocations_30d across the populate pass so
422
422
  # the rollup can carry the sum. Non-null integers participate in the sum;
423
423
  # nulls (hook sentinel — architect §C) are excluded. All-null surface
424
424
  # set yields a null rollup_invocations_30d to preserve the "not
@@ -461,21 +461,21 @@ for pkg_dir in plugin_dirs:
461
461
  new_maturity_kinds[key] = new_map
462
462
  wrote_records += len(new_map)
463
463
 
464
- # Plugin root rollup. ADR-063 Amendment 2026-05-18: per-kind surface
464
+ # Plugin root rollup. windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule Amendment 2026-05-18: per-kind surface
465
465
  # maps nest UNDER `maturity:` alongside `schema_version` + `band`, not
466
466
  # at top level. Write-ordering fix (architect issue 2 line 441): build
467
467
  # the entire `maturity:` dict in a single assignment so the rollup
468
468
  # write does not clobber the per-kind nested maps.
469
469
  #
470
- # ADR-063 Amendment 2026-05-18 (P269 — rollup compound-evidence write):
470
+ # windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule Amendment 2026-05-18 (amend-plugin-maturity-populate-sh-to-write-rollup-invocations-30d-on-plugin-root-rollup-for-compound-rendering-problem — rollup compound-evidence write):
471
471
  # rollup additionally carries `rollup_invocations_30d` + `bootstrapping`
472
472
  # so the Phase 3b renderer's AND-gated compound predicate
473
473
  # (plugin-maturity-render.sh:146) can fire the
474
474
  # `*Maturity: <Band> (suite-bootstrap window; <N> invocations / 30d).*`
475
475
  # form during the bootstrapping window. Without these two fields the
476
- # renderer falls through to bare-band, violating ADR-053 §Bootstrapping
476
+ # renderer falls through to bare-band, violating windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §Bootstrapping
477
477
  # clause Phase 3 rendering requirement (line 88). Additive-within-2.0
478
- # per ADR-058 §Confirmation #8 — old consumers reading
478
+ # per windyroad-plugin-maturity-measurement-mechanism-session-transcript-invocation-counts-plus-commit-history-composite-read-only-ndjson-architecture-rule §Confirmation #8 — old consumers reading
479
479
  # `{schema_version, band}` continue to work; new consumers get the
480
480
  # additional fields where present.
481
481
  rollup = rollup_band(surface_bands_for_rollup)
@@ -495,7 +495,7 @@ for pkg_dir in plugin_dirs:
495
495
  plugin_doc["maturity"] = maturity_doc
496
496
  else:
497
497
  # Plugin with no shipped surfaces -> no plugin-level maturity field
498
- # (ADR-053 §granularity contract line 110).
498
+ # (windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §granularity contract line 110).
499
499
  plugin_doc.pop("maturity", None)
500
500
 
501
501
  # Defensive cleanup: strip any legacy top-level keys left over from the
@@ -527,7 +527,7 @@ for pkg_dir in plugin_dirs:
527
527
  else:
528
528
  plugin_json_path.write_text(new_text, encoding="utf-8")
529
529
 
530
- # ── Operator-facing freshness summary on stderr (JTBD-007 currency aid) ────
530
+ # ── Operator-facing freshness summary on stderr (keep-plugins-current-across-projects-user-outcome currency aid) ────
531
531
  # Non-load-bearing; cheap operator-comfort signal per JTBD review §4.
532
532
 
533
533
  print(
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # packages/itil/scripts/plugin-maturity-render.sh
3
3
  #
4
- # Phase 3b (P087 / P238) plugin-maturity README renderer.
4
+ # Phase 3b (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-3b-readme-badge-renderer-wr-itil-plugin-maturity-render-advisory-drift-detector-check-plugin-maturity-drift-sh-problem) plugin-maturity README renderer.
5
5
  #
6
6
  # Reads each `packages/<plugin>/.claude-plugin/plugin.json` `maturity:`
7
7
  # field (populated by Phase 3a `wr-itil-plugin-maturity-populate`) and
@@ -12,19 +12,19 @@
12
12
  # Post-bootstrap: `*Maturity: <Band>.*`
13
13
  # Bootstrapping window: `*Maturity: <Band> (suite-bootstrap window;
14
14
  # <N> invocations / 30d).*`
15
- # Markdown text only — no shields.io URL, no inline SVG (ADR-063
15
+ # Markdown text only — no shields.io URL, no inline SVG (windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule
16
16
  # §README badge rendering format).
17
17
  #
18
18
  # 2. Per-skill `Maturity` column populated in the existing `## Skills`
19
19
  # table. Cell value is band name only (no compound — compound stays
20
- # at the rollup per ADR-063). Adds the column header on first run;
20
+ # at the rollup per windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule). Adds the column header on first run;
21
21
  # replaces cell values on subsequent runs.
22
22
  #
23
23
  # Idempotent: re-running with unchanged plugin.json + README produces
24
24
  # byte-identical README output. Replaces existing `*Maturity: ...*` span
25
25
  # rather than appending.
26
26
  #
27
- # Anti-patterns enforced (ADR-063 §Decision Outcome §"README badge
27
+ # Anti-patterns enforced (windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule §Decision Outcome §"README badge
28
28
  # rendering format" + §"Bootstrapping clause rendering"):
29
29
  # - NEVER emit a standalone `## Maturity` section
30
30
  # - NEVER emit a header block immediately after H1 before any prose
@@ -32,8 +32,8 @@
32
32
  # - Compound rendering stays at rollup only — per-skill cell carries
33
33
  # band name only
34
34
  #
35
- # ADR-044 silent-framework carve-out: band has already been computed by
36
- # Phase 3a per ADR-053 §promotion criteria; the renderer is mechanical
35
+ # decision-delegation-contract-when-agents-act-on-the-framework-vs-ask-the-user-architecture-rule silent-framework carve-out: band has already been computed by
36
+ # Phase 3a per windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §promotion criteria; the renderer is mechanical
37
37
  # and never invokes AskUserQuestion.
38
38
  #
39
39
  # Usage:
@@ -42,28 +42,28 @@
42
42
  # [--dry-run] # print diff to stdout, do not write
43
43
  #
44
44
  # Exit codes:
45
- # 0 = always — ADR-013 Rule 6 fail-safe. Missing packages/ / opt-out
45
+ # 0 = always — structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 fail-safe. Missing packages/ / opt-out
46
46
  # marker / missing plugin.json / missing README / missing
47
47
  # maturity field all hit no-write stderr-comment paths.
48
48
  #
49
- # Privacy (ADR-035 clauses adopted verbatim):
49
+ # Privacy (centralised-review-reports-for-cross-project-skill-improvement-jsonl-at-claude-review-reports-architecture-rule clauses adopted verbatim):
50
50
  # - Opt-out marker `.claude/.skill-metrics-opt-out` disables writes.
51
51
  # - No network egress — script body invokes no exfiltration primitive.
52
52
  #
53
- # @problem P238 (Phase 3b — README badge renderer + advisory drift detector)
54
- # @problem P087 (parent — no maturity signal on plugin features)
55
- # @adr ADR-063 (Plugin maturity presentation layer — Phase 3b contract)
56
- # @adr ADR-053 (Plugin maturity taxonomy — Bootstrapping clause rendering)
57
- # @adr ADR-051 (JTBD-anchored README — prose-weaving precedent)
58
- # @adr ADR-049 (Shim grammar — `wr-itil-plugin-maturity-render` on $PATH)
59
- # @adr ADR-044 (Decision delegation — silent-framework carve-out)
60
- # @adr ADR-035 (Privacy posture — opt-out marker, no network primitive)
61
- # @adr ADR-052 (Behavioural tests default)
62
- # @adr ADR-013 Rule 6 (non-interactive fail-safe — exit 0 always)
63
- # @jtbd JTBD-302 (Trust That the README Describes the Plugin I Just
53
+ # @problem phase-3b-readme-badge-renderer-wr-itil-plugin-maturity-render-advisory-drift-detector-check-plugin-maturity-drift-sh-problem (Phase 3b — README badge renderer + advisory drift detector)
54
+ # @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 (parent — no maturity signal on plugin features)
55
+ # @adr windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule (Plugin maturity presentation layer — Phase 3b contract)
56
+ # @adr windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule (Plugin maturity taxonomy — Bootstrapping clause rendering)
57
+ # @adr windyroad-plugin-readmes-anchor-on-jtbd-job-ids-with-load-bearing-commit-hook-prose-woven-framing-architecture-rule (JTBD-anchored README — prose-weaving precedent)
58
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (Shim grammar — `wr-itil-plugin-maturity-render` on $PATH)
59
+ # @adr decision-delegation-contract-when-agents-act-on-the-framework-vs-ask-the-user-architecture-rule (Decision delegation — silent-framework carve-out)
60
+ # @adr centralised-review-reports-for-cross-project-skill-improvement-jsonl-at-claude-review-reports-architecture-rule (Privacy posture — opt-out marker, no network primitive)
61
+ # @adr behavioural-tests-default-for-skill-testing-architecture-rule (Behavioural tests default)
62
+ # @adr structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 (non-interactive fail-safe — exit 0 always)
63
+ # @jtbd trust-that-the-readme-describes-the-plugin-i-just-installed-user-outcome (Trust That the README Describes the Plugin I Just
64
64
  # Installed — README is the contract surface)
65
- # @jtbd JTBD-101 (Extend the Suite — clear patterns include stability)
66
- # @jtbd JTBD-003 (Compose Only the Guardrails I Need — at-a-glance
65
+ # @jtbd extend-the-suite-with-new-plugins-user-outcome (Extend the Suite — clear patterns include stability)
66
+ # @jtbd compose-only-the-guardrails-i-need-user-outcome (Compose Only the Guardrails I Need — at-a-glance
67
67
  # stability for composition decisions)
68
68
 
69
69
  set -uo pipefail
@@ -87,7 +87,7 @@ for arg in "$@"; do
87
87
  esac
88
88
  done
89
89
 
90
- # ── Opt-out marker check (ADR-035) ──────────────────────────────────────────
90
+ # ── Opt-out marker check (centralised-review-reports-for-cross-project-skill-improvement-jsonl-at-claude-review-reports-architecture-rule) ──────────────────────────────────────────
91
91
 
92
92
  OPT_OUT_MARKER="${PROJECT_ROOT}/.claude/.skill-metrics-opt-out"
93
93
  if [ -e "$OPT_OUT_MARKER" ]; then
@@ -95,7 +95,7 @@ if [ -e "$OPT_OUT_MARKER" ]; then
95
95
  exit 0
96
96
  fi
97
97
 
98
- # ── packages/ discovery check (ADR-013 Rule 6 fail-safe) ────────────────────
98
+ # ── packages/ discovery check (structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 fail-safe) ────────────────────
99
99
 
100
100
  if [ ! -d "${PROJECT_ROOT}/packages" ]; then
101
101
  echo "# wr-itil-plugin-maturity-render: no packages/ directory at ${PROJECT_ROOT}" >&2
@@ -134,10 +134,10 @@ ANTI_SECTION_RE = re.compile(r"(?m)^##\s+Maturity\s*$")
134
134
 
135
135
 
136
136
  def format_rollup_badge(maturity_record):
137
- """Render the prose-woven rollup badge per ADR-063.
137
+ """Render the prose-woven rollup badge per windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule.
138
138
 
139
139
  During the suite-bootstrap window the rollup carries the compound
140
- form per ADR-053 §Bootstrapping clause rendering; post-sunset it
140
+ form per windyroad-plugin-skill-agent-hook-maturity-taxonomy-architecture-rule §Bootstrapping clause rendering; post-sunset it
141
141
  renders the band name only.
142
142
  """
143
143
  band = maturity_record.get("band", "Experimental")
@@ -345,7 +345,7 @@ def render_plugin(pkg_dir):
345
345
  new_text = weave_rollup_into_lead_prose(readme_text, badge)
346
346
 
347
347
  # Build per-skill band map from the plugin.json `maturity.skills.<name>`
348
- # nested location. Per ADR-063 Amendment 2026-05-18 (P0 hotfix), per-skill
348
+ # nested location. Per windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule Amendment 2026-05-18 (P0 hotfix), per-skill
349
349
  # maturity records nest UNDER the top-level `maturity:` key as `band` /
350
350
  # `schema_version` / `computed_at` / `evidence` (no outer `.maturity`
351
351
  # envelope — the nested record IS the maturity record).
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env bash
2
2
  # packages/itil/scripts/plugin-validate-ci-gate.sh
3
3
  #
4
- # P263 / ADR-063 §Confirmation #11 — CI pre-publish manifest-validity
4
+ # ci-gate-claude-plugin-install-dry-run-per-plugin-pre-publish-confirmation-11-implementation-problem / windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule §Confirmation #11 — CI pre-publish manifest-validity
5
5
  # gate. Loops every `packages/*/.claude-plugin/plugin.json` in CWD,
6
6
  # runs `claude plugin validate <plugin_dir>` (NON-strict — see RCA
7
7
  # note below), accumulates failures, and exits non-zero if ANY plugin
8
8
  # manifest fails validation.
9
9
  #
10
- # WHY NON-STRICT (P263 / P258 refined RCA, 2026-05-30):
11
- # - The historical P258 incident's failure class was a RECOGNISED
10
+ # WHY NON-STRICT (ci-gate-claude-plugin-install-dry-run-per-plugin-pre-publish-confirmation-11-implementation-problem / plugin-json-top-level-hooks-skills-agents-keys-are-reserved-by-claude-code-s-manifest-validator-adding-arbitrary-content-breaks-claude-plugin-install-problem refined RCA, 2026-05-30):
11
+ # - The historical plugin-json-top-level-hooks-skills-agents-keys-are-reserved-by-claude-code-s-manifest-validator-adding-arbitrary-content-breaks-claude-plugin-install-problem incident's failure class was a RECOGNISED
12
12
  # top-level key (`hooks` / `skills` / `agents` / `commands`)
13
13
  # carrying wrong-typed content — caught by `claude plugin validate`
14
14
  # non-strict as a hard ERROR (`Validation errors: hooks: Invalid
15
15
  # input`).
16
- # - ADR-063 Amendment 2026-05-18's chosen safe-extension pattern
16
+ # - windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule Amendment 2026-05-18's chosen safe-extension pattern
17
17
  # places maturity records at top-level `maturity:` — an
18
18
  # UNRECOGNISED top-level key — because unrecognised keys are
19
19
  # warning-only and the plugin still loads. This is the durable
@@ -22,7 +22,7 @@
22
22
  # - Non-strict therefore catches the historical incident's
23
23
  # mechanism without rejecting the safe-extension pattern. The
24
24
  # prose Confirmation #11 originally named `claude plugin install
25
- # --dry-run`; P258 investigation refined to `claude plugin
25
+ # --dry-run`; plugin-json-top-level-hooks-skills-agents-keys-are-reserved-by-claude-code-s-manifest-validator-adding-arbitrary-content-breaks-claude-plugin-install-problem investigation refined to `claude plugin
26
26
  # validate --strict`; this script's RCA refined further to
27
27
  # non-strict.
28
28
  #
@@ -30,7 +30,7 @@
30
30
  # CI installs `@anthropic-ai/claude-code@2.1.150` before invoking
31
31
  # this script. The exact pin protects against Anthropic-side CLI
32
32
  # behaviour change silently breaking the gate. 2.1.150 is the
33
- # version P263 iter 6 empirically tested against. Bump the pin
33
+ # version ci-gate-claude-plugin-install-dry-run-per-plugin-pre-publish-confirmation-11-implementation-problem iter 6 empirically tested against. Bump the pin
34
34
  # only after re-running the iter-6 probe against the new version.
35
35
  #
36
36
  # LOOP CONTRACT:
@@ -38,19 +38,19 @@
38
38
  # - Does NOT short-circuit on first failure — every plugin is
39
39
  # exercised so CI surfaces every defect at once.
40
40
  # - `nullglob` makes a zero-plugin tree a no-op exit 0 (adopter-
41
- # tree portability per ADR-049).
41
+ # tree portability per plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule).
42
42
  #
43
43
  # References:
44
- # ADR-063 — Amendment 2026-05-18 + §Confirmation #11
45
- # ADR-049 — PATH-on-shim grammar (`wr-itil-plugin-validate-ci-gate`)
46
- # ADR-052 — behavioural tests default (bats at
44
+ # windyroad-plugin-maturity-presentation-layer-plugin-json-schema-prose-woven-readme-badge-in-suite-wr-itil-plugin-maturity-list-display-shim-architecture-rule — Amendment 2026-05-18 + §Confirmation #11
45
+ # plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule — PATH-on-shim grammar (`wr-itil-plugin-validate-ci-gate`)
46
+ # behavioural-tests-default-for-skill-testing-architecture-rule — behavioural tests default (bats at
47
47
  # `scripts/test/plugin-validate-ci-gate.bats`)
48
- # ADR-014 — single-commit grain (script + shim + bats + CI + ADR
48
+ # governance-skills-commit-their-own-completed-work-architecture-rule — single-commit grain (script + shim + bats + CI + ADR
49
49
  # amendment + changeset land together)
50
- # P258 — root-cause driver (recognised vs unrecognised key
50
+ # plugin-json-top-level-hooks-skills-agents-keys-are-reserved-by-claude-code-s-manifest-validator-adding-arbitrary-content-breaks-claude-plugin-install-problem — root-cause driver (recognised vs unrecognised key
51
51
  # distinction)
52
- # P246 — sibling-class "gate-the-actual-load-bearing-surface"
53
- # P263 — this implementation's ticket
52
+ # agent-waits-on-calendar-trigger-for-held-cohort-graduation-violates-symmetric-balance-principle-problem — sibling-class "gate-the-actual-load-bearing-surface"
53
+ # ci-gate-claude-plugin-install-dry-run-per-plugin-pre-publish-confirmation-11-implementation-problem — this implementation's ticket
54
54
 
55
55
  set -e
56
56
  shopt -s nullglob
@@ -4,7 +4,7 @@
4
4
  # Diagnose-only drift detector for docs/problems/README.md vs filesystem
5
5
  # truth. Reads ticket files from BOTH the flat layout
6
6
  # `<problems-dir>/<NNN>-*.<status>.md` AND the per-state subdir layout
7
- # `<problems-dir>/<status>/<NNN>-*.md` (RFC-002 dual-tolerant migration
7
+ # `<problems-dir>/<status>/<NNN>-*.md` (docs-problems-flat-layout-migration-per-state-subdirs-adopter-auto-migration-release-design dual-tolerant migration
8
8
  # window), parses the README's WSJF Rankings + Verification Queue +
9
9
  # Closed tables, and reports each disagreement.
10
10
  #
@@ -15,7 +15,7 @@
15
15
  #
16
16
  # Dual-layout precedence: when the same ID appears in both layout-halves
17
17
  # (transient mid-migration race between `git mv` and README refresh),
18
- # the per-state subdir wins — ADR-031 §"Authoritative state signal"
18
+ # the per-state subdir wins — problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule §"Authoritative state signal"
19
19
  # treats subdirectory as the post-migration ground truth.
20
20
  #
21
21
  # Exit codes:
@@ -24,7 +24,7 @@
24
24
  # 2 = parse error (README missing or malformed)
25
25
  #
26
26
  # Output format on drift (one line per drift entry, ≤ 150 bytes per
27
- # ADR-038 progressive-disclosure budget):
27
+ # progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule progressive-disclosure budget):
28
28
  # DRIFT <ID> wsjf-rankings: claims=<status> actual=<status>
29
29
  # MISSING <ID> wsjf-rankings: actual=<status> file=<basename>
30
30
  # STALE <ID> verification-queue: actual=<status>
@@ -34,18 +34,18 @@
34
34
  # skill applies edits with narrative-aware preservation; this script's
35
35
  # only job is to report ground truth.
36
36
  #
37
- # @problem P118
38
- # @problem P170 (RFC-002 — dual-tolerant migration window)
39
- # @problem P252 (Inbound Upstream Reports rows mis-attributed to VQ)
40
- # @adr ADR-014 (Reconciliation as preflight robustness layer)
41
- # @adr ADR-022 (Verification Pending lifecycle excludes from WSJF Rankings)
42
- # @adr ADR-031 (Per-state subdir is post-migration authoritative state signal)
43
- # @adr ADR-038 (Progressive disclosure — per-row byte budget)
44
- # @adr ADR-062 (Inbound upstream-report discovery + assessment pipeline)
45
- # @rfc RFC-004 (P079 inbound-upstream-report discovery)
46
- # @jtbd JTBD-006 (Progress the Backlog While I'm Away)
47
- # @jtbd JTBD-001 (Enforce Governance Without Slowing Down)
48
- # @jtbd JTBD-302 (Trust That the README Describes the Plugin I Just Installed)
37
+ # @problem docs-problems-readme-md-drifts-from-filesystem-truth-across-sessions-despite-refresh-on-create-and-refresh-on-transition-both-closed-problem
38
+ # @problem problem-tickets-strain-as-fixes-decompose-into-multiple-coordinated-changes-need-an-rfc-framework-that-ties-all-changes-back-to-problems-and-unifies-technical-with-user-business-problems-problem (docs-problems-flat-layout-migration-per-state-subdirs-adopter-auto-migration-release-design — dual-tolerant migration window)
39
+ # @problem reconcile-readme-false-positive-parses-inbound-upstream-reports-matched-local-ticket-column-as-verification-queue-problem (Inbound Upstream Reports rows mis-attributed to VQ)
40
+ # @adr governance-skills-commit-their-own-completed-work-architecture-rule (Reconciliation as preflight robustness layer)
41
+ # @adr problem-lifecycle-add-a-verification-pending-status-between-known-error-and-closed-architecture-rule (Verification Pending lifecycle excludes from WSJF Rankings)
42
+ # @adr problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule (Per-state subdir is post-migration authoritative state signal)
43
+ # @adr progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule (Progressive disclosure — per-row byte budget)
44
+ # @adr inbound-upstream-report-discovery-assessment-pipeline-peer-of-architecture-rule (Inbound upstream-report discovery + assessment pipeline)
45
+ # @rfc inbound-upstream-report-discovery-assessment-pipeline-implementation-rollout-release-design (problem-079-no-inbound-sync-of-upstream-reported-problems-reports-filed-via-the-intake-templates-never-surface-in-the-local-backlog-problem inbound-upstream-report discovery)
46
+ # @jtbd progress-the-backlog-while-i-m-away-user-outcome (Progress the Backlog While I'm Away)
47
+ # @jtbd enforce-governance-without-slowing-down-user-outcome (Enforce Governance Without Slowing Down)
48
+ # @jtbd trust-that-the-readme-describes-the-plugin-i-just-installed-user-outcome (Trust That the README Describes the Plugin I Just Installed)
49
49
 
50
50
  set -uo pipefail
51
51
 
@@ -66,9 +66,9 @@ fi
66
66
 
67
67
  # ── Build filesystem truth: ID → status ─────────────────────────────────────
68
68
  #
69
- # RFC-002 dual-tolerant enumeration: walk BOTH the flat layout and the
69
+ # docs-problems-flat-layout-migration-per-state-subdirs-adopter-auto-migration-release-design dual-tolerant enumeration: walk BOTH the flat layout and the
70
70
  # per-state subdir layout. Per-state subdir wins on collision (mid-
71
- # migration race; per-state is the migration target per ADR-031).
71
+ # migration race; per-state is the migration target per problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule).
72
72
 
73
73
  declare -A FS_STATUS
74
74
  shopt -s nullglob
@@ -83,7 +83,7 @@ for f in "$PROBLEMS_DIR"/[0-9][0-9][0-9]-*.open.md \
83
83
  num="${base%%-*}"
84
84
  id="P${num}"
85
85
  # `ticket_status` (not bash `status`) — zsh has `$status` as a read-only
86
- # built-in mapping to `$?`. Defensive rename per P133 even though this
86
+ # built-in mapping to `$?`. Defensive rename per zsh-portability-gap-in-shell-snippet-examples-across-skill-md-files-bash-style-word-splitting-bash-builtin-variable-names-fail-silently-or-noisily-on-zsh-problem even though this
87
87
  # script's `#!/usr/bin/env bash` shebang means it never runs under zsh.
88
88
  case "$base" in
89
89
  *.open.md) ticket_status="open" ;;
@@ -98,7 +98,7 @@ done
98
98
  # Per-state subdir layout: docs/problems/<state>/<NNN>-<title>.md
99
99
  # Status derived from parent directory name (the subdirectory IS the
100
100
  # state signal post-migration). Writes after the flat loop so per-state
101
- # wins on cross-layout ID collision (ADR-031 authoritative state).
101
+ # wins on cross-layout ID collision (problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule authoritative state).
102
102
  for ticket_status in open known-error verifying closed parked; do
103
103
  for f in "$PROBLEMS_DIR"/"$ticket_status"/[0-9][0-9][0-9]-*.md; do
104
104
  base="$(basename "$f")"
@@ -114,11 +114,11 @@ shopt -u nullglob
114
114
 
115
115
  WSJF_START=$(grep -n '^## WSJF Rankings' "$README" | head -1 | cut -d: -f1)
116
116
  VQ_START=$(grep -n '^## Verification Queue' "$README" | head -1 | cut -d: -f1)
117
- # Inbound Upstream Reports (ADR-062 / RFC-004) sits between Verification
117
+ # Inbound Upstream Reports (inbound-upstream-report-discovery-assessment-pipeline-peer-of-architecture-rule / inbound-upstream-report-discovery-assessment-pipeline-implementation-rollout-release-design) sits between Verification
118
118
  # Queue and Closed when populated. Its `Matched local ticket` column
119
119
  # carries `| P<NNN> |` cross-refs that look like VQ rows but live in a
120
120
  # distinct section. The VQ slice MUST terminate at this header when
121
- # present, otherwise its rows get miscounted as VQ entries (P252).
121
+ # present, otherwise its rows get miscounted as VQ entries (reconcile-readme-false-positive-parses-inbound-upstream-reports-matched-local-ticket-column-as-verification-queue-problem).
122
122
  INBOUND_START=$(grep -n '^## Inbound Upstream Reports' "$README" | head -1 | cut -d: -f1)
123
123
  CLOSED_START=$(grep -n '^## Closed' "$README" | head -1 | cut -d: -f1)
124
124
  PARKED_START=$(grep -n '^## Parked' "$README" | head -1 | cut -d: -f1)
@@ -126,7 +126,7 @@ END_LINE=$(wc -l < "$README")
126
126
 
127
127
  # Sentinel each end with the next section start (or EOF). The VQ_END
128
128
  # cascade prefers INBOUND_START when present so Inbound rows are
129
- # excluded from VQ extraction (P252).
129
+ # excluded from VQ extraction (reconcile-readme-false-positive-parses-inbound-upstream-reports-matched-local-ticket-column-as-verification-queue-problem).
130
130
  WSJF_END=${VQ_START:-${INBOUND_START:-${CLOSED_START:-${PARKED_START:-$END_LINE}}}}
131
131
  VQ_END=${INBOUND_START:-${CLOSED_START:-${PARKED_START:-$END_LINE}}}
132
132
  CLOSED_END=${PARKED_START:-$END_LINE}
@@ -172,7 +172,7 @@ while read -r id; do
172
172
  done <<< "$README_WSJF_IDS"
173
173
 
174
174
  # (2) Each ID listed in Verification Queue must be .verifying.md on disk.
175
- # .closed.md → STALE (drift class P062 closure didn't refresh);
175
+ # .closed.md → STALE (drift class problem-062-manage-problem-does-not-refresh-docs-problems-readme-md-on-single-ticket-transitions-fast-path-cache-goes-stale-silently-problem closure didn't refresh);
176
176
  # .open.md / .known-error.md → STALE; missing → STALE.
177
177
  while read -r id; do
178
178
  [ -z "$id" ] && continue
@@ -19,13 +19,13 @@
19
19
  # 2 = parse error (README missing or malformed)
20
20
  #
21
21
  # Output format on drift (one line per drift entry, ≤ 150 bytes per
22
- # ADR-038 progressive-disclosure budget):
22
+ # progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule progressive-disclosure budget):
23
23
  # DRIFT RFC-<NNN> wsjf-rankings: claims=<status> actual=<status>
24
24
  # MISSING RFC-<NNN> wsjf-rankings: actual=<status>
25
25
  # STALE RFC-<NNN> verification-queue: actual=<status>
26
26
  # MISMATCH RFC-<NNN> closed: actual=<status>
27
27
  #
28
- # Reverse-trace pass (B5.T8 — closes ADR-060 Confirmation criterion 3):
28
+ # Reverse-trace pass (B5.T8 — closes problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule Confirmation criterion 3):
29
29
  # When <problems-dir> is provided AND on disk, the reconciler also
30
30
  # checks the auto-maintained `## RFCs` section on each problem ticket
31
31
  # against the RFC frontmatter `problems:` claims. Three drift kinds:
@@ -43,22 +43,22 @@
43
43
  # applies edits with narrative-aware preservation; this script's only
44
44
  # job is to report ground truth.
45
45
  #
46
- # Sibling to packages/itil/scripts/reconcile-readme.sh (P118 / ADR-014):
46
+ # Sibling to packages/itil/scripts/reconcile-readme.sh (docs-problems-readme-md-drifts-from-filesystem-truth-across-sessions-despite-refresh-on-create-and-refresh-on-transition-both-closed-problem / governance-skills-commit-their-own-completed-work-architecture-rule):
47
47
  # same parse + diff structure, applied at the RFC tier instead of the
48
48
  # problems tier. Differences:
49
49
  # - Filename pattern: RFC-NNN-*.<status>.md (5 statuses: proposed,
50
50
  # accepted, in-progress, verifying, closed)
51
51
  # - ID format: RFC-<NNN> (vs P<NNN>)
52
52
  # - WSJF Rankings covers proposed/accepted/in-progress (RFC dev-work
53
- # queue per ADR-060 § Decisions Resolved — RFC-level WSJF, Phase 1)
53
+ # queue per problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule § Decisions Resolved — RFC-level WSJF, Phase 1)
54
54
  # - Verification Queue covers verifying (matches problem tier)
55
55
  # - Closed covers closed
56
- # - No Parked tier (RFCs don't have a Parked status per ADR-060;
56
+ # - No Parked tier (RFCs don't have a Parked status per problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule;
57
57
  # only Problems do)
58
58
  #
59
- # @problem P170
60
- # @adr ADR-060 (Problem-RFC-Story framework — Phase 1 item 5)
61
- # @adr ADR-049 (Plugin script resolution via bin/ on PATH — paired bin shim)
59
+ # @problem problem-tickets-strain-as-fixes-decompose-into-multiple-coordinated-changes-need-an-rfc-framework-that-ties-all-changes-back-to-problems-and-unifies-technical-with-user-business-problems-problem
60
+ # @adr problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule (Problem-RFC-Story framework — Phase 1 item 5)
61
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (Plugin script resolution via bin/ on PATH — paired bin shim)
62
62
 
63
63
  set -uo pipefail
64
64
 
@@ -221,7 +221,7 @@ done
221
221
  # frontmatter `problems:` claims (and vice-versa).
222
222
 
223
223
  if [ -d "$PROBLEMS_DIR" ]; then
224
- # rfc_problems_claim["RFC-NNN"] = "P168 P169 ..."
224
+ # rfc_problems_claim["RFC-NNN"] = "risk-scorer-doesn-t-consume-docs-risks-catalog-or-bootstrap-from-risk-reports-problem build-recogniser-shape-catalogue-into-windyroad-risk-scorer-plugin-automatic-bootstrap-ongoing-maintenance-problem ..."
225
225
  declare -A rfc_problems_claim
226
226
  shopt -s nullglob
227
227
  for f in "$RFCS_DIR"/RFC-[0-9][0-9][0-9]-*.md; do
@@ -229,7 +229,7 @@ if [ -d "$PROBLEMS_DIR" ]; then
229
229
  num="${base#RFC-}"
230
230
  num="${num%%-*}"
231
231
  rfc_id="RFC-${num}"
232
- # Parse YAML frontmatter `problems: [P168, P169]` (single line).
232
+ # Parse YAML frontmatter `problems: [risk-scorer-doesn-t-consume-docs-risks-catalog-or-bootstrap-from-risk-reports-problem, build-recogniser-shape-catalogue-into-windyroad-risk-scorer-plugin-automatic-bootstrap-ongoing-maintenance-problem]` (single line).
233
233
  raw=$(awk '/^problems:/ { print; exit }' "$f")
234
234
  # Strip everything except inside-brackets bare comma-separated content.
235
235
  inner=$(echo "$raw" | sed -E 's/^[[:space:]]*problems:[[:space:]]*\[//; s/\][[:space:]]*$//')
@@ -247,11 +247,11 @@ if [ -d "$PROBLEMS_DIR" ]; then
247
247
  done
248
248
  shopt -u nullglob
249
249
 
250
- # problem_rfc_rows["P168 RFC-001"] = "<claimed-status>"
251
- # problem_rfc_ids["P168"] = "RFC-001 RFC-002 ..."
250
+ # problem_rfc_rows["risk-scorer-doesn-t-consume-docs-risks-catalog-or-bootstrap-from-risk-reports-problem pipeline-consume-catalog-and-bootstrap-from-reports-multi-commit-retrofit-release-design"] = "<claimed-status>"
251
+ # problem_rfc_ids["risk-scorer-doesn-t-consume-docs-risks-catalog-or-bootstrap-from-risk-reports-problem"] = "pipeline-consume-catalog-and-bootstrap-from-reports-multi-commit-retrofit-release-design docs-problems-flat-layout-migration-per-state-subdirs-adopter-auto-migration-release-design ..."
252
252
  declare -A problem_rfc_rows
253
253
  declare -A problem_rfc_ids
254
- # P312 / ADR-031: scan both flat docs/problems/<NNN>-*.md AND per-state
254
+ # reconcile-rfcs-reports-spurious-missing-reverse-trace-doesn-t-traverse-docs-problems-per-state-subdirs-class-glob-gap-problem / problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule: scan both flat docs/problems/<NNN>-*.md AND per-state
255
255
  # subdir docs/problems/<state>/<NNN>-*.md layouts so the reverse-trace
256
256
  # remains valid post-migration. Mirrors reconcile-readme.sh lines 74-110.
257
257
  shopt -s nullglob