@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
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "windyroad-itil-local",
3
+ "interface": { "displayName": "Windy Road ITIL" },
4
+ "plugins": [
5
+ {
6
+ "name": "wr-itil",
7
+ "source": { "source": "local", "path": "." },
8
+ "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" },
9
+ "category": "Developer Tools"
10
+ }
11
+ ]
12
+ }
@@ -497,5 +497,5 @@
497
497
  }
498
498
  },
499
499
  "name": "wr-itil",
500
- "version": "1.2.0"
500
+ "version": "2.0.0"
501
501
  }
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "wr-itil",
3
+ "version": "2.0.0",
4
+ "description": "ITIL problem-management workflows for AI coding agents",
5
+ "author": {
6
+ "name": "Windy Road Technology",
7
+ "url": "https://windyroad.com.au"
8
+ },
9
+ "homepage": "https://github.com/windyroad/agent-plugins/tree/main/packages/itil",
10
+ "repository": "https://github.com/windyroad/agent-plugins",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "itil",
14
+ "problem-management",
15
+ "governance",
16
+ "codex",
17
+ "claude-code"
18
+ ],
19
+ "skills": "./skills-codex/",
20
+ "interface": {
21
+ "displayName": "Windy Road ITIL",
22
+ "shortDescription": "Manage ITIL problems, incidents, RFCs, stories, and maps",
23
+ "longDescription": "Complete ITIL workflow support for Codex: capture, prioritise, investigate, transition, review, reconcile, and report service-management records.",
24
+ "developerName": "Windy Road Technology",
25
+ "category": "Developer Tools",
26
+ "capabilities": [
27
+ "Interactive",
28
+ "Read",
29
+ "Write"
30
+ ],
31
+ "websiteURL": "https://windyroad.com.au",
32
+ "privacyPolicyURL": "https://windyroad.com.au/privacy",
33
+ "termsOfServiceURL": "https://windyroad.com.au/terms",
34
+ "defaultPrompt": [
35
+ "Work the highest-priority problem",
36
+ "Manage this incident",
37
+ "Review and reconcile the ITIL backlog"
38
+ ],
39
+ "brandColor": "#0F766E",
40
+ "screenshots": []
41
+ }
42
+ }
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @windyroad/itil
2
2
 
3
- **ITIL-aligned IT service management for Claude Code.** Track recurring incidents, perform root cause analysis, and prioritise fixes using WSJF -- all inside your coding sessions. *Maturity: Experimental (suite-bootstrap window; 327 invocations / 30d).*
3
+ **ITIL-aligned IT service management for Claude Code and Codex.** Track recurring incidents, perform root cause analysis, and prioritise fixes using WSJF -- all inside your coding sessions. *Maturity: Experimental.*
4
4
 
5
5
  Part of [Windy Road Agent Plugins](../../README.md).
6
6
 
@@ -34,9 +34,18 @@ npx @windyroad/itil
34
34
 
35
35
  Restart Claude Code after installing.
36
36
 
37
+ For Codex:
38
+
39
+ ```bash
40
+ npx @windyroad/itil --runtime codex --scope user
41
+ ```
42
+
43
+ Restart Codex after installing. Codex exposes the complete ITIL skill set, the
44
+ exact `wr-itil:hang-off-check` agent, and five consolidated lifecycle hooks.
45
+
37
46
  > **Requires:** [`@windyroad/risk-scorer`](../risk-scorer/). The installer warns if it's missing.
38
47
  >
39
- > **Renamed from `@windyroad/problem`** — see [ADR-010](../../docs/decisions/010-rename-wr-problem-to-wr-itil.proposed.md). If you had the old package installed, uninstall it (`npx @windyroad/problem --uninstall`) before installing `@windyroad/itil`.
48
+ > **Renamed from `@windyroad/problem`** — see [the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule](../../docs/decisions/010-rename-wr-problem-to-wr-itil.proposed.md). If you had the old package installed, uninstall it (`npx @windyroad/problem --uninstall`) before installing `@windyroad/itil`.
40
49
 
41
50
  ## Usage
42
51
 
@@ -56,7 +65,7 @@ Supports creating new problems, updating root cause analysis, transitioning stat
56
65
 
57
66
  Supports declaring new incidents, recording evidence-first observations and hypotheses, logging mitigation attempts, transitioning lifecycle (Investigating → Mitigating → Restored → Closed), and automatically handing off to `manage-problem` when service is restored.
58
67
 
59
- See [ADR-011](../../docs/decisions/011-manage-incident-skill.proposed.md) for the incident-vs-problem split.
68
+ See [the "Add `manage-incident` Skill to `wr-itil` Plugin" architecture rule](../../docs/decisions/011-manage-incident-skill.proposed.md) for the incident-vs-problem split.
60
69
 
61
70
  ## How It Works
62
71
 
@@ -64,13 +73,13 @@ See [ADR-011](../../docs/decisions/011-manage-incident-skill.proposed.md) for th
64
73
  |------|---------|-------------|
65
74
  | `bin/check-deps.sh` | Session start | Verifies that `wr-risk-scorer` is installed |
66
75
  | `itil-assistant-output-gate.sh` | Every prompt | Detects classes of assistant output (e.g. prose-asks vs `AskUserQuestion`) that indicate ITIL-discipline regressions |
67
- | `itil-correction-detect.sh` | Every prompt | Surfaces strong-signal user corrections (FFS / DO NOT / contradictions) and offers a problem ticket capture per P078 |
68
- | `itil-runtime-sid-marker.sh` | Bash, Edit, Write, Read | Records per-session ID for runtime instrumentation (ADR-050) |
76
+ | `itil-correction-detect.sh` | Every prompt | Surfaces strong-signal user corrections (FFS / DO NOT / contradictions) and offers a problem ticket capture per the "Problem 078: Assistant does not offer to capture a problem ticket when the user delivers strong-signal correction" problem |
77
+ | `itil-runtime-sid-marker.sh` | Bash, Edit, Write, Read | Records per-session ID for runtime instrumentation (the "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) |
69
78
  | `manage-problem-enforce-create.sh` | Write | Blocks creation of `docs/problems/*.md` outside the `/wr-itil:manage-problem` workflow |
70
- | `itil-claude-space-protection.sh` | Write, Edit | Prevents project-generated artefacts from being written under `.claude/` (P131) |
71
- | `p057-staging-trap-detect.sh` | Bash | Detects the P057 staging trap during ticket transitions |
72
- | `pre-publish-intake-gate.sh` | Bash | Blocks `npm publish` when downstream OSS intake scaffolding is missing (ADR-036) |
73
- | `itil-changeset-discipline.sh` | Bash | Gates `git commit` on changeset coverage for source-package changes (P141) |
79
+ | `itil-claude-space-protection.sh` | Write, Edit | Prevents project-generated artefacts from being written under `.claude/` (the "Agents write project-generated artefacts under `.claude/` (user-controlled config space) — gate exclusions are read tolerance, not write permission" problem) |
80
+ | `p057-staging-trap-detect.sh` | Bash | Detects the "Problem 057: `git mv` + Edit + `git add` staging-ordering trap drops content edits from the commit" problem staging trap during ticket transitions |
81
+ | `pre-publish-intake-gate.sh` | Bash | Blocks `npm publish` when downstream OSS intake scaffolding is missing (the "Scaffold downstream OSS intake — skill + layered triggers" architecture rule) |
82
+ | `itil-changeset-discipline.sh` | Bash | Gates `git commit` on changeset coverage for source-package changes (the "AFK iter `packages/<plugin>/` commits without changesets — orchestrator-main-turn back-fill is fragile recovery, hook-level enforcement preferable" problem) |
74
83
  | `itil-assistant-output-review.sh` | Stop | Reviews assistant output at session end for ITIL-discipline patterns |
75
84
 
76
85
  ## Skills
@@ -78,30 +87,30 @@ See [ADR-011](../../docs/decisions/011-manage-incident-skill.proposed.md) for th
78
87
  | Skill | Purpose | Maturity |
79
88
  | ------- | --------- | --- |
80
89
  | `/wr-itil:manage-problem` | Create, update, and close problem tickets through the Open → Known Error → Verifying → Closed lifecycle | Alpha |
81
- | `/wr-itil:capture-problem` | Foreground-lightweight aside-invocation variant of `manage-problem` (per ADR-032 background-capture pattern + P078 capture-on-correction) — drafts a ticket scaffold without losing the operational thread when a problem signal surfaces mid-conversation | Experimental |
90
+ | `/wr-itil:capture-problem` | Foreground-lightweight aside-invocation variant of `manage-problem` (per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule background-capture pattern + the "Problem 078: Assistant does not offer to capture a problem ticket when the user delivers strong-signal correction" problem capture-on-correction) — drafts a ticket scaffold without losing the operational thread when a problem signal surfaces mid-conversation | Experimental |
82
91
  | `/wr-itil:work-problem` | Pick the highest-WSJF actionable ticket and work it to completion | Experimental |
83
92
  | `/wr-itil:work-problems` | AFK orchestrator — batch-work the problem backlog by WSJF priority while the user is away | Experimental |
84
93
  | `/wr-itil:list-problems` | Read-only display of the open and known-error backlog sorted by WSJF | Experimental |
85
94
  | `/wr-itil:transition-problem` / `/wr-itil:transition-problems` | Advance one or many tickets through the lifecycle | Experimental |
86
95
  | `/wr-itil:review-problems` | Re-rate every open and known-error ticket and refresh the WSJF ranking | Experimental |
87
96
  | `/wr-itil:reconcile-readme` | Detect and correct drift between `docs/problems/README.md` and on-disk ticket inventory | Experimental |
88
- | `/wr-itil:report-upstream` | Report a local problem as a structured issue against an upstream repository (ADR-024) | Experimental |
89
- | `/wr-itil:check-upstream-responses` | Poll upstream issues we filed via `/wr-itil:report-upstream` and surface new comments / state changes / label changes since last check (P249 Phase 1; outbound symmetric counterpart to ADR-062 inbound discovery) | Experimental |
90
- | `/wr-itil:update-upstream` | Post a lifecycle-update comment to an upstream issue when a local problem ticket transitions — root-cause confirmed / fix released / closed; reciprocal sibling to `/wr-itil:report-upstream` (ADR-024 amendment 2026-06-09, P080 Phase 1) | Experimental |
91
- | `/wr-itil:capture-rfc` | Lightweight RFC-capture skill — mandatory problem-trace per ADR-060 I1 invariant; opens a coordinated multi-commit change traceable to ≥ 1 driving problem (Phase 1 of the Problem-RFC-Story framework, P170 / ADR-060) | Experimental |
92
- | `/wr-itil:manage-rfc` | Heavyweight RFC intake + lifecycle management — proposed → accepted → in-progress → verifying → closed; sibling to `manage-problem` at the RFC tier (ADR-060) | Experimental |
93
- | `/wr-itil:capture-story` | Lightweight story-capture skill — mandatory problem-trace AND JTBD-trace per ADR-060 I6 + I9 invariants; optional `--rfc` / `--story-map` flags (I7 + I8 enforce at `accepted` transition); drafts an INVEST-shaped sub-workstream entity under a parent RFC (Phase 2 of the Problem-RFC-Story framework, P170 / ADR-060) | Experimental |
94
- | `/wr-itil:list-stories` | Read-only display of stories grouped by lifecycle state, with optional `--rfc RFC-<NNN>` filter rendering the RFC's ordered story list per ADR-060 line 259 (Phase 2 / P170) | Experimental |
95
- | `/wr-itil:reconcile-stories` | Detect and correct drift between `docs/stories/README.md` and on-disk story inventory + reverse-trace `## Stories` sections on driving problems / RFCs / JTBDs (Phase 2 / P170) | Experimental |
96
- | `/wr-itil:manage-story` | Heavyweight story lifecycle management — draft → accepted → in-progress → done → archived; I7+I8+I10+I12 hard-block at accepted transition; INVEST 4-axis check; auto-transitions on `Refs: STORY-NNN` commit trailer + linked RFC closure (Phase 2 / P170). **I12 (ADR-103)**: `accepted` requires the story to be approved, and an implementing commit against an unapproved story is blocked. Approval is the story map's — ratify the map and every story on it is approved with it | Experimental |
97
- | `/wr-itil:capture-story-map` | Lightweight story-map-capture skill — mandatory problem-trace AND JTBD-trace per ADR-060 I3 + I4 invariants; HTML skeleton at `docs/story-maps/draft/STORY-MAP-NNN-<slug>.html` per ADR-060 § Phase 2 encoding amendment 2026-05-12 (Phase 2 / P170) | Experimental |
98
- | `/wr-itil:manage-story-map` | Heavyweight story-map lifecycle management — draft → accepted → in-progress → completed → archived; backbone/ribs/slices authoring guidance; reverse-trace `## Story Maps` refresh on driving problems + JTBDs (Phase 2 / P170) | Experimental |
99
- | `/wr-itil:reconcile-story-maps` | Detect and correct drift between `docs/story-maps/README.md` and on-disk story-map HTML inventory (Phase 2 / P170) | Experimental |
100
- | `/wr-itil:list-story-maps` | Read-only display of story-maps grouped by lifecycle state; no WSJF (I5 invariant — maps are planning artefacts, not work items) (Phase 2 / P170) | Experimental |
97
+ | `/wr-itil:report-upstream` | Report a local problem as a structured issue against an upstream repository (the "Cross-project problem-reporting contract — `report-upstream` skill in `@windyroad/itil`" architecture rule) | Experimental |
98
+ | `/wr-itil:check-upstream-responses` | Poll upstream issues we filed via `/wr-itil:report-upstream` and surface new comments / state changes / label changes since last check (the "No process for issue reporters to check for responses — symmetric gap to inbound discovery" problem Phase 1; outbound symmetric counterpart to the "Inbound upstream-report discovery + assessment pipeline (peer of )" architecture rule inbound discovery) | Experimental |
99
+ | `/wr-itil:update-upstream` | Post a lifecycle-update comment to an upstream issue when a local problem ticket transitions — root-cause confirmed / fix released / closed; reciprocal sibling to `/wr-itil:report-upstream` (the "Cross-project problem-reporting contract — `report-upstream` skill in `@windyroad/itil`" architecture rule amendment 2026-06-09, the "Problem 080: No bidirectional update of upstream-reported problems — local lifecycle transitions never propagate back to the reporter" problem Phase 1) | Experimental |
100
+ | `/wr-itil:capture-rfc` | Lightweight RFC-capture skill — mandatory problem-trace per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule I1 invariant; opens a coordinated multi-commit change traceable to ≥ 1 driving problem (Phase 1 of the Problem-RFC-Story framework, the "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 / the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule) | Experimental |
101
+ | `/wr-itil:manage-rfc` | Heavyweight RFC intake + lifecycle management — proposed → accepted → in-progress → verifying → closed; sibling to `manage-problem` at the RFC tier (the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule) | Experimental |
102
+ | `/wr-itil:capture-story` | Lightweight story-capture skill — mandatory problem-trace AND JTBD-trace per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule I6 + I9 invariants; optional `--rfc` / `--story-map` flags (I7 + I8 enforce at `accepted` transition); drafts an INVEST-shaped sub-workstream entity under a parent RFC (Phase 2 of the Problem-RFC-Story framework, the "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 / the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule) | Experimental |
103
+ | `/wr-itil:list-stories` | Read-only display of stories grouped by lifecycle state, with optional `--rfc RFC-<NNN>` filter rendering the RFC's ordered story list per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 259 (Phase 2 / the "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) | Experimental |
104
+ | `/wr-itil:reconcile-stories` | Detect and correct drift between `docs/stories/README.md` and on-disk story inventory + reverse-trace `## Stories` sections on driving problems / RFCs / JTBDs (Phase 2 / the "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) | Experimental |
105
+ | `/wr-itil:manage-story` | Heavyweight story lifecycle management — draft → accepted → in-progress → done → archived; I7+I8+I10+I12 hard-block at accepted transition; INVEST 4-axis check; auto-transitions on `Refs: STORY-NNN` commit trailer + linked RFC closure (Phase 2 / the "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). **I12 (the "A release row is the RFC, and the map is the approval surface" architecture rule)**: `accepted` requires the story to be approved, and an implementing commit against an unapproved story is blocked. Approval is the story map's — ratify the map and every story on it is approved with it | Experimental |
106
+ | `/wr-itil:capture-story-map` | Lightweight story-map-capture skill — mandatory problem-trace AND JTBD-trace per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule I3 + I4 invariants; HTML skeleton at `docs/story-maps/draft/STORY-MAP-NNN-<slug>.html` per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule § Phase 2 encoding amendment 2026-05-12 (Phase 2 / the "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) | Experimental |
107
+ | `/wr-itil:manage-story-map` | Heavyweight story-map lifecycle management — draft → accepted → in-progress → completed → archived; backbone/ribs/slices authoring guidance; reverse-trace `## Story Maps` refresh on driving problems + JTBDs (Phase 2 / the "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) | Experimental |
108
+ | `/wr-itil:reconcile-story-maps` | Detect and correct drift between `docs/story-maps/README.md` and on-disk story-map HTML inventory (Phase 2 / the "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) | Experimental |
109
+ | `/wr-itil:list-story-maps` | Read-only display of story-maps grouped by lifecycle state; no WSJF (I5 invariant — maps are planning artefacts, not work items) (Phase 2 / the "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) | Experimental |
101
110
  | `/wr-itil:manage-incident` | Declare, triage, mitigate, and close an incident with evidence-first discipline | Experimental |
102
111
  | `/wr-itil:list-incidents` | Read-only display of active incidents by severity | Experimental |
103
- | `/wr-itil:mitigate-incident` / `/wr-itil:restore-incident` / `/wr-itil:close-incident` / `/wr-itil:link-incident` | Incident lifecycle transitions (ADR-011) | Experimental |
104
- | `/wr-itil:scaffold-intake` | Scaffold OSS intake surfaces (`.github/ISSUE_TEMPLATE/`, `SECURITY.md`, `SUPPORT.md`, `CONTRIBUTING.md`) for downstream adopters (ADR-036) | Experimental |
112
+ | `/wr-itil:mitigate-incident` / `/wr-itil:restore-incident` / `/wr-itil:close-incident` / `/wr-itil:link-incident` | Incident lifecycle transitions (the "Add `manage-incident` Skill to `wr-itil` Plugin" architecture rule) | Experimental |
113
+ | `/wr-itil:scaffold-intake` | Scaffold OSS intake surfaces (`.github/ISSUE_TEMPLATE/`, `SECURITY.md`, `SUPPORT.md`, `CONTRIBUTING.md`) for downstream adopters (the "Scaffold downstream OSS intake — skill + layered triggers" architecture rule) | Experimental |
105
114
 
106
115
  ## Configuration
107
116
 
@@ -6,8 +6,8 @@ description: Capture-time inflow-discipline arbiter for problem tickets. Given a
6
6
  Investigation Tasks expansion / Phase N section on an existing parent ticket,
7
7
  or PROCEED_NEW when no candidate absorbs the new scope. Spawned fresh from
8
8
  inside /wr-itil:capture-problem and /wr-itil:manage-problem Step 2 to avoid
9
- the calling agent's session-context bias. Read-only. Codified as ADR-032's
10
- 5th invocation pattern under the P346 amendment.
9
+ the calling agent's session-context bias. Read-only. Codified as the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule's
10
+ 5th invocation pattern under the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem amendment.
11
11
  tools:
12
12
  - Read
13
13
  - Glob
@@ -15,7 +15,7 @@ tools:
15
15
  model: inherit
16
16
  ---
17
17
 
18
- # @jtbd JTBD-001, JTBD-006, JTBD-101, JTBD-201
18
+ # @jtbd the ": Enforce Governance Without Slowing Down" user outcome, the ": Progress the Backlog While I'm Away" user outcome, the "Extend the Suite with New Plugins" user outcome, the "Restore Service Fast with an Audit Trail" user outcome
19
19
 
20
20
  You are the Hang-Off Check arbiter. You decide — for a new problem-ticket capture, given a mechanically pre-filtered set of candidate parent tickets — whether the new scope belongs absorbed into an existing parent (`HANG_OFF: P<NNN>`) or genuinely deserves its own new ticket (`PROCEED_NEW`).
21
21
 
@@ -23,16 +23,16 @@ You are a reviewer, not an editor. You read inputs and emit a structured verdict
23
23
 
24
24
  ## Driver
25
25
 
26
- You exist because session-context bias on the calling main agent is structurally guaranteed: the main agent mid-iter has just been working on related artefacts and pattern-matches existing capture flows, missing hang-off opportunities (the wrongly-captured P347 sibling of P346 on 2026-05-31 is the canonical regression). Your fresh context is the fix — you read only the structured inputs and reason about candidate absorption without the bias.
26
+ You exist because session-context bias on the calling main agent is structurally guaranteed: the main agent mid-iter has just been working on related artefacts and pattern-matches existing capture flows, missing hang-off opportunities (the wrongly-captured the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem sibling of the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem on 2026-05-31 is the canonical regression). Your fresh context is the fix — you read only the structured inputs and reason about candidate absorption without the bias.
27
27
 
28
- Same architectural pattern as `wr-architect:agent` / `wr-jtbd:agent` / `tdd:review-test` / `wr-risk-scorer:pipeline` — codified in ADR-032 as the 5th invocation pattern (P346 amendment, 2026-05-31).
28
+ Same architectural pattern as `wr-architect:agent` / `wr-jtbd:agent` / `tdd:review-test` / `wr-risk-scorer:pipeline` — codified in the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule as the 5th invocation pattern (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem amendment, 2026-05-31).
29
29
 
30
30
  ## Your Inputs
31
31
 
32
32
  The calling skill passes you a structured prompt containing two payloads:
33
33
 
34
34
  1. **New capture description** — the free-text observation the user / agent wants to capture as a new problem ticket (the leading flags stripped, kebab-title slug derivable but not yet committed).
35
- 2. **Filtered candidate ticket list** — the result of the calling skill's mechanical pre-filter: candidates from `docs/problems/open/` + `docs/problems/verifying/` that share ≥1 signal with the description (ADR-NNN ref, SKILL path, file path, or named feature). The list is capped at 5 candidates per ADR-032's latency-bound contract; wider filtered sets short-circuit to PROCEED_NEW without invoking you.
35
+ 2. **Filtered candidate ticket list** — the result of the calling skill's mechanical pre-filter: candidates from `docs/problems/open/` + `docs/problems/verifying/` that share ≥1 signal with the description (ADR-NNN ref, SKILL path, file path, or named feature). The list is capped at 5 candidates per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule's latency-bound contract; wider filtered sets short-circuit to PROCEED_NEW without invoking you.
36
36
 
37
37
  For each candidate the calling skill passes:
38
38
  - Ticket ID (`P<NNN>`)
@@ -48,7 +48,7 @@ For each candidate, ask: **does the new capture belong inside this candidate as
48
48
 
49
49
  A new capture HANGS OFF a candidate when:
50
50
 
51
- - The candidate is a **master ticket** for a multi-phase fix and the new capture is one phase / one sub-class of that work (P346's three-phase scope is the canonical example — Phase 3 work belongs inside P346 as Phase 3, not as a sibling P347).
51
+ - The candidate is a **master ticket** for a multi-phase fix and the new capture is one phase / one sub-class of that work (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem's three-phase scope is the canonical example — Phase 3 work belongs inside the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem as Phase 3, not as a sibling the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem).
52
52
  - The candidate's `## Multi-phase scope` / `## Investigation Tasks` / `## Root Cause Analysis` section explicitly names work the new capture is doing (or is a natural extension of work the candidate names as in-scope).
53
53
  - The candidate's root cause + the new capture's root cause are the same observable phenomenon, just surfaced at different times or by different signals.
54
54
  - The new capture's description IS the candidate's deferred follow-up (the candidate's `## Fix Strategy` or `## Investigation Tasks` flags the work as "deferred to sibling ticket" but the sibling is actually scope expansion on this very ticket).
@@ -63,7 +63,7 @@ A new capture PROCEEDS as new when:
63
63
 
64
64
  When in doubt, prefer **PROCEED_NEW** — false-negative on hang-off is cheaper than false-positive (false-positive silently swallows distinct work into the wrong parent; false-negative just defers consolidation to the next `/wr-itil:review-problems` cluster pass). This mirrors `/wr-itil:capture-problem` Step 2's existing "false-positives are cheaper than false-negatives" framing.
65
65
 
66
- Under `--no-prompt` / AFK propagation, ambiguous-multi-parent cases also collapse to **PROCEED_NEW** (safe-default, no `AskUserQuestion` fallback — ADR-013 Rule 6 fail-safe per ADR-032 amendment).
66
+ Under `--no-prompt` / AFK propagation, ambiguous-multi-parent cases also collapse to **PROCEED_NEW** (safe-default, no `AskUserQuestion` fallback — the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6 fail-safe per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule amendment).
67
67
 
68
68
  ## How to Report
69
69
 
@@ -76,7 +76,7 @@ HANG_OFF: P<NNN>
76
76
 
77
77
  **Rationale**: <one or two sentences naming the candidate's master-ticket / multi-phase / scope-expansion shape and why this new capture belongs inside it>.
78
78
 
79
- **Signals matched**: <comma-separated list of the specific signals — e.g. "shared ADR-079 reference", "candidate's Investigation Tasks Phase 3 section names this work", "shared `packages/itil/agents/hang-off-check.md` file path", "candidate's Fix Strategy deferred this exact scope">.
79
+ **Signals matched**: <comma-separated list of the specific signals — e.g. "shared the "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 reference", "candidate's Investigation Tasks Phase 3 section names this work", "shared `packages/itil/agents/hang-off-check.md` file path", "candidate's Fix Strategy deferred this exact scope">.
80
80
 
81
81
  **Where to absorb**: <one sentence naming where on the candidate ticket the new scope lands — e.g. "amend candidate's Investigation Tasks checklist with [the deliverable]", "expand candidate's `### Phase N — <name>` section with [the new substance]", "append to candidate's Symptoms / Workaround section">.
82
82
  ```
@@ -93,15 +93,15 @@ PROCEED_NEW
93
93
 
94
94
  ## Output Formatting
95
95
 
96
- When referencing decision IDs (ADR-<NNN>), problem IDs (P<NNN>), RFC IDs (RFC-<NNN>), or JTBD IDs in prose, always include a human-readable hint on first mention. Use `P346 (review-problems backlog-flow-control master ticket)`, not bare `P346`. This matches `wr-architect:agent` / `wr-jtbd:agent` output formatting conventions per their P032 contracts.
96
+ When referencing decision IDs (ADR-<NNN>), problem IDs (P<NNN>), RFC IDs (RFC-<NNN>), or JTBD IDs in prose, always include a human-readable hint on first mention. Use `the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem (review-problems backlog-flow-control master ticket)`, not bare `the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem`. This matches `wr-architect:agent` / `wr-jtbd:agent` output formatting conventions per their the "Problem 032: Agent output references opaque problem/ADR IDs without human-readable titles" problem contracts.
97
97
 
98
98
  ## Scope and Firewalls
99
99
 
100
- ### Maintainer-side only (JTBD-301 firewall)
100
+ ### Maintainer-side only (the "Report a Problem Without Pre-Classifying It" user outcome firewall)
101
101
 
102
102
  You fire on maintainer-side `/wr-itil:capture-problem` and maintainer-internal `/wr-itil:manage-problem` invocations only. You DO NOT fire on:
103
103
 
104
- - Plugin-user-side intake via `.github/ISSUE_TEMPLATE/problem-report.yml` (plugin-user descriptions do not carry the same authorial intent as maintainer-internal captures — a plugin-user describing their friction in maintainer vocabulary could plausibly trigger a wrong-parent HANG_OFF). Triage during `/wr-itil:manage-problem` ingestion stays user-judgement per JTBD-301.
104
+ - Plugin-user-side intake via `.github/ISSUE_TEMPLATE/problem-report.yml` (plugin-user descriptions do not carry the same authorial intent as maintainer-internal captures — a plugin-user describing their friction in maintainer vocabulary could plausibly trigger a wrong-parent HANG_OFF). Triage during `/wr-itil:manage-problem` ingestion stays user-judgement per the "Report a Problem Without Pre-Classifying It" user outcome.
105
105
  - `/wr-itil:manage-problem`'s ingestion-of-plugin-user-reports path (mirrors the lexical-classifier firewall at `packages/itil/skills/capture-problem/SKILL.md` line 116).
106
106
 
107
107
  ### Cardinality
@@ -116,31 +116,31 @@ One verdict per invocation. The calling skill captures one ticket per invocation
116
116
 
117
117
  ## Behavioural verification
118
118
 
119
- The canonical behavioural fixture is the P347-vs-P346 regression — `packages/itil/agents/test/fixtures/regression-p347-vs-p346.md` captures the input shape:
120
- - New capture description: P347's original description (about "Phase 2 evidence shape expansion" work).
121
- - Candidate set: contains P346 (the master backlog-flow-control ticket with its Multi-phase scope section explicitly naming Phase 2 as in-scope).
122
- - Expected verdict: `HANG_OFF: P346` with rationale citing the shared ADR-079 reference + the candidate's Multi-phase scope section explicitly naming Phase 2.
119
+ The canonical behavioural fixture is the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem-vs-the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem regression — `packages/itil/agents/test/fixtures/regression-p347-vs-p346.md` captures the input shape:
120
+ - New capture description: the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem's original description (about "Phase 2 evidence shape expansion" work).
121
+ - Candidate set: contains the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem (the master backlog-flow-control ticket with its Multi-phase scope section explicitly naming Phase 2 as in-scope).
122
+ - Expected verdict: `HANG_OFF: the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem` with rationale citing the shared the "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 reference + the candidate's Multi-phase scope section explicitly naming Phase 2.
123
123
 
124
- Two further canonical fixtures live under the same path: `fixtures/proceed-new-genuinely-new.md` (no real candidates → PROCEED_NEW) and `fixtures/proceed-new-subtle-sibling.md` (P070 vs a new report-upstream surface ticket on a different SKILL → PROCEED_NEW with reasoned per-candidate rationale).
124
+ Two further canonical fixtures live under the same path: `fixtures/proceed-new-genuinely-new.md` (no real candidates → PROCEED_NEW) and `fixtures/proceed-new-subtle-sibling.md` (the "Problem 070: /wr-itil:report-upstream does not check for existing upstream issues before filing" problem vs a new report-upstream surface ticket on a different SKILL → PROCEED_NEW with reasoned per-candidate rationale).
125
125
 
126
- Behavioural execution of these fixtures lands under RFC-012 (promptfoo eval harness — proposed). Until RFC-012 ships, the bats fixtures at `packages/itil/agents/test/hang-off-check.bats` are structural assertions on this agent's prose contract per ADR-052 Surface 2 (with the P176 harness-gap carve-out the architect and JTBD reviewer agents document); they verify the verdict format is documented, the firewall is named, the safe-default behaviour is specified, and the fixture files exist with the expected input shape.
126
+ Behavioural execution of these fixtures lands under the ": Build the promptfoo agent-prose AND SKILL-prose verdict eval harness" release design (promptfoo eval harness — proposed). Until the ": Build the promptfoo agent-prose AND SKILL-prose verdict eval harness" release design ships, the bats fixtures at `packages/itil/agents/test/hang-off-check.bats` are structural assertions on this agent's prose contract per the "Behavioural-tests-default for skill testing" architecture rule Surface 2 (with the "Agent-side I2 (no type-branching) coverage gap — SKILL.md type-branching invariant not behaviourally testable until skill-invocation harness lands" problem harness-gap carve-out the architect and JTBD reviewer agents document); they verify the verdict format is documented, the firewall is named, the safe-default behaviour is specified, and the fixture files exist with the expected input shape.
127
127
 
128
128
  ## Related
129
129
 
130
- - **ADR-032** (Governance-skill invocation patterns) — the 5th invocation pattern (Foreground fresh-context-subagent-as-decision-arbiter) under the P346 amendment 2026-05-31. This agent IS the worked example.
131
- - **ADR-013** (Structured user interaction for governance decisions) — Rule 6 fail-safe; you never invoke `AskUserQuestion`; ambiguous-multi-parent collapses to PROCEED_NEW under AFK propagation.
132
- - **ADR-026** (Agent output grounding) — your rationale MUST cite observable signals (specific ADR refs, specific file paths, specific candidate ticket section names); no qualitative claims.
133
- - **ADR-049** (Plugin scripts via `bin/` on PATH) — not directly relevant; this agent is loaded via Agent tool, not PATH.
134
- - **ADR-052** (Behavioural-tests default) — bats fixtures for this agent are structural per Surface 2 carve-out + P176 harness gap; behavioural eval lands under RFC-012.
135
- - **ADR-075** (promptfoo as agent-prose verdict harness) — future home of the behavioural fixtures.
136
- - **RFC-012** (promptfoo retrofit, proposed) — will run the canonical behavioural fixtures.
137
- - **RFC-013** (P346 backlog flow control multi-phase, proposed) — traces P346 Phases 1+2+3; this agent is part of Phase 3's deliverable.
138
- - **P346** (review-problems backlog-flow-control master ticket — `docs/problems/open/346-...md`) — driver ticket. Phase 3 spec authored in P346's body; codified as ADR-032's 5th pattern.
139
- - **P347** (closed as duplicate-of-P346) — the wrongly-captured sibling that motivated this agent's existence; the canonical regression fixture.
140
- - **P176** (agent-side I2 / harness gap) — the structural-bats Surface 2 carve-out precedent.
141
- - **JTBD-001** (Enforce Governance Without Slowing Down) — the pre-filter latency cap + verdict-acts contract keeps capture under the 60s flow budget.
142
- - **JTBD-006** (Progress the Backlog While I'm Away) — verdict is deterministic, never blocks on AskUserQuestion; AFK-safe.
143
- - **JTBD-101** (Extend the Suite with New Plugins) — the fresh-context-subagent-as-decision-arbiter pattern is reusable for future capture-time discipline needs.
144
- - **JTBD-201** (Restore Service Fast with an Audit Trail) — HANG_OFF rationale is recorded on the absorbing ticket's Investigation Tasks bullet; PROCEED_NEW rationale lands on the captured ticket's `## Related` section so the next reviewer sees what was considered.
130
+ - **the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule** (Governance-skill invocation patterns) — the 5th invocation pattern (Foreground fresh-context-subagent-as-decision-arbiter) under the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem amendment 2026-05-31. This agent IS the worked example.
131
+ - **the "Structured User Interaction for Governance-Skill Decisions" architecture rule** (Structured user interaction for governance decisions) — Rule 6 fail-safe; you never invoke `AskUserQuestion`; ambiguous-multi-parent collapses to PROCEED_NEW under AFK propagation.
132
+ - **the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule** (Agent output grounding) — your rationale MUST cite observable signals (specific ADR refs, specific file paths, specific candidate ticket section names); no qualitative claims.
133
+ - **the "Plugin-bundled scripts invoked from SKILL.md resolve via `bin/` on `$PATH`" architecture rule** (Plugin scripts via `bin/` on PATH) — not directly relevant; this agent is loaded via Agent tool, not PATH.
134
+ - **the "Behavioural-tests-default for skill testing" architecture rule** (Behavioural-tests default) — bats fixtures for this agent are structural per Surface 2 carve-out + the "Agent-side I2 (no type-branching) coverage gap — SKILL.md type-branching invariant not behaviourally testable until skill-invocation harness lands" problem harness gap; behavioural eval lands under the ": Build the promptfoo agent-prose AND SKILL-prose verdict eval harness" release design.
135
+ - **the ": promptfoo as the behavioural test harness for agent-prose verdicts" architecture rule** (promptfoo as agent-prose verdict harness) — future home of the behavioural fixtures.
136
+ - **the ": Build the promptfoo agent-prose AND SKILL-prose verdict eval harness" release design** (promptfoo retrofit, proposed) — will run the canonical behavioural fixtures.
137
+ - **the ": backlog flow control multi-phase" release design** (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem backlog flow control multi-phase, proposed) — traces the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem Phases 1+2+3; this agent is part of Phase 3's deliverable.
138
+ - **the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem** (review-problems backlog-flow-control master ticket — `docs/problems/open/346-...md`) — driver ticket. Phase 3 spec authored in the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem's body; codified as the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule's 5th pattern.
139
+ - **the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem** (closed as duplicate-of-the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem) — the wrongly-captured sibling that motivated this agent's existence; the canonical regression fixture.
140
+ - **the "Agent-side I2 (no type-branching) coverage gap — SKILL.md type-branching invariant not behaviourally testable until skill-invocation harness lands" problem** (agent-side I2 / harness gap) — the structural-bats Surface 2 carve-out precedent.
141
+ - **the ": Enforce Governance Without Slowing Down" user outcome** (Enforce Governance Without Slowing Down) — the pre-filter latency cap + verdict-acts contract keeps capture under the 60s flow budget.
142
+ - **the ": Progress the Backlog While I'm Away" user outcome** (Progress the Backlog While I'm Away) — verdict is deterministic, never blocks on AskUserQuestion; AFK-safe.
143
+ - **the "Extend the Suite with New Plugins" user outcome** (Extend the Suite with New Plugins) — the fresh-context-subagent-as-decision-arbiter pattern is reusable for future capture-time discipline needs.
144
+ - **the "Restore Service Fast with an Audit Trail" user outcome** (Restore Service Fast with an Audit Trail) — HANG_OFF rationale is recorded on the absorbing ticket's Investigation Tasks bullet; PROCEED_NEW rationale lands on the captured ticket's `## Related` section so the next reviewer sees what was considered.
145
145
  - **`/wr-itil:capture-problem`** (`packages/itil/skills/capture-problem/SKILL.md` Step 2) — primary dispatch site.
146
- - **`/wr-itil:manage-problem`** (`packages/itil/skills/manage-problem/SKILL.md` Step 2) — secondary dispatch site (maintainer-internal new-problem path only; plugin-user-report ingestion path skips per JTBD-301 firewall).
146
+ - **`/wr-itil:manage-problem`** (`packages/itil/skills/manage-problem/SKILL.md` Step 2) — secondary dispatch site (maintainer-internal new-problem path only; plugin-user-report ingestion path skips per the "Report a Problem Without Pre-Classifying It" user outcome firewall).
package/bin/install.mjs CHANGED
@@ -1,16 +1,34 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { resolve, dirname } from "node:path";
3
+ import { execSync } from "node:child_process";
4
+ import { cpSync, existsSync, mkdirSync, readFileSync, rmSync } from "node:fs";
5
+ import { homedir } from "node:os";
6
+ import { resolve, dirname, join } from "node:path";
4
7
  import { fileURLToPath } from "node:url";
5
8
 
6
9
  const __dirname = dirname(fileURLToPath(import.meta.url));
7
10
  const utils = await import(resolve(__dirname, "../lib/install-utils.mjs"));
11
+ const agents = await import(resolve(__dirname, "../scripts/codex-agent.mjs"));
8
12
 
9
13
  const PLUGIN = "wr-itil";
14
+ const CODEX_MARKETPLACE = "windyroad-itil-local";
10
15
  const DEPS = ["wr-risk-scorer"];
16
+ const PACKAGE_ROOT = resolve(__dirname, "..");
17
+ const PACKAGE_VERSION = JSON.parse(readFileSync(join(PACKAGE_ROOT, "package.json"), "utf8")).version;
18
+
19
+ function codexMarketplaceRoot() {
20
+ const home = process.env.CODEX_HOME || join(homedir(), ".codex");
21
+ return join(home, ".tmp", "marketplaces", `wr-itil-${PACKAGE_VERSION}`);
22
+ }
11
23
 
12
24
  const flags = utils.parseStandardArgs(process.argv);
13
25
 
26
+ if (flags.runtime === "codex" || flags.runtime === "both") {
27
+ const bundled = "/Applications/ChatGPT.app/Contents/Resources/codex";
28
+ const binary = process.env.CODEX_BINARY || (existsSync(bundled) ? bundled : null);
29
+ if (binary?.includes("/")) process.env.PATH = `${dirname(binary)}:${process.env.PATH || ""}`;
30
+ }
31
+
14
32
  if (flags.help) {
15
33
  console.log(`
16
34
  Usage: npx @windyroad/itil [options]
@@ -21,6 +39,7 @@ Options:
21
39
  --update Update this plugin and its skills
22
40
  --uninstall Remove this plugin
23
41
  --scope Installation scope: project (default) or user
42
+ --runtime Runtime to install for: claude (default), codex, or both
24
43
  --dry-run Show what would be done without executing
25
44
  --help, -h Show this help
26
45
  `);
@@ -32,12 +51,59 @@ if (flags.dryRun) {
32
51
  console.log("[dry-run mode — no commands will be executed]\n");
33
52
  }
34
53
 
35
- utils.checkPrerequisites();
54
+ utils.checkPrerequisites({ runtime: flags.runtime });
55
+
56
+ function warnMissingCodexDependency() {
57
+ if (flags.dryRun) return;
58
+ try {
59
+ const installed = execSync("codex plugin list", { encoding: "utf8" });
60
+ if (!installed.includes("wr-risk-scorer@")) {
61
+ console.warn("Warning: wr-itil requires wr-risk-scorer; install @windyroad/risk-scorer for Codex.");
62
+ }
63
+ } catch {
64
+ console.warn("Warning: could not verify the wr-risk-scorer Codex dependency.");
65
+ }
66
+ }
67
+
68
+ function codexInstall() {
69
+ const root = codexMarketplaceRoot();
70
+ if (!flags.dryRun) {
71
+ rmSync(root, { recursive: true, force: true });
72
+ mkdirSync(dirname(root), { recursive: true });
73
+ cpSync(PACKAGE_ROOT, root, { recursive: true });
74
+ cpSync(join(root, "hooks-codex", "hooks.json"), join(root, "hooks", "hooks.json"));
75
+ }
76
+ if (!utils.run(`codex plugin marketplace add ${JSON.stringify(root)}`, `Codex marketplace: ${CODEX_MARKETPLACE}`)) return false;
77
+ if (!utils.run(`codex plugin add ${PLUGIN}@${CODEX_MARKETPLACE}`, PLUGIN)) return false;
78
+ if (!flags.dryRun) agents.installAgent(agents.agentDir(flags.scope));
79
+ warnMissingCodexDependency();
80
+ return true;
81
+ }
82
+
83
+ function codexUninstall() {
84
+ const removed = utils.run(`codex plugin remove ${PLUGIN}@${CODEX_MARKETPLACE}`, `Removing ${PLUGIN}`);
85
+ utils.run(`codex plugin marketplace remove ${CODEX_MARKETPLACE}`, `Removing ${CODEX_MARKETPLACE}`);
86
+ if (!flags.dryRun) {
87
+ for (const target of new Set([agents.agentDir(flags.scope), agents.agentDir("user")])) agents.uninstallAgent(target);
88
+ rmSync(codexMarketplaceRoot(), { recursive: true, force: true });
89
+ }
90
+ return removed;
91
+ }
36
92
 
37
93
  if (flags.uninstall) {
38
- utils.uninstallPackage(PLUGIN);
94
+ if (flags.runtime === "claude" || flags.runtime === "both") utils.uninstallPackage(PLUGIN, { runtime: "claude" });
95
+ if ((flags.runtime === "codex" || flags.runtime === "both") && !codexUninstall()) process.exit(1);
39
96
  } else if (flags.update) {
40
- utils.updatePackage(PLUGIN, { scope: flags.scope });
97
+ if (flags.runtime === "claude" || flags.runtime === "both") utils.updatePackage(PLUGIN, { scope: flags.scope, runtime: "claude" });
98
+ if ((flags.runtime === "codex" || flags.runtime === "both") && !codexInstall()) process.exit(1);
99
+ } else if (flags.runtime === "codex") {
100
+ console.log(`\nInstalling @windyroad/itil (${flags.scope} scope)...\n`);
101
+ if (!codexInstall()) process.exit(1);
102
+ console.log("\nDone! Restart Codex to activate.\n");
103
+ } else if (flags.runtime === "both") {
104
+ utils.installPackage(PLUGIN, { deps: DEPS, scope: flags.scope, runtime: "claude" });
105
+ if (!codexInstall()) process.exit(1);
106
+ console.log("\nDone! Restart Claude Code and Codex to activate.\n");
41
107
  } else {
42
- utils.installPackage(PLUGIN, { deps: DEPS, scope: flags.scope });
108
+ utils.installPackage(PLUGIN, { deps: DEPS, scope: flags.scope, runtime: "claude" });
43
109
  }
@@ -4,7 +4,7 @@
4
4
  # shim files in packages/*/bin/wr-* directly; edit the template + run
5
5
  # `npm run sync:shim-wrappers` to regenerate.
6
6
  #
7
- # Resolution (ADR-080):
7
+ # Resolution (highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule):
8
8
  # 1. If the wrapper's parent dir is semver-shaped, treat as installed-
9
9
  # cache execution and resolve to the highest-version sibling's
10
10
  # scripts/ entry below.
@@ -15,9 +15,9 @@
15
15
  # 3. If the cache parent contains zero semver-shaped siblings, exit
16
16
  # 127 with a stderr message naming the cache parent (per SQ-080-2).
17
17
  #
18
- # @adr ADR-080 (highest-version-wins shim wrapper plugin scaffold)
19
- # @adr ADR-049 (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
- # @problem P343 (mid-session staleness window)
18
+ # @adr highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule (highest-version-wins shim wrapper plugin scaffold)
19
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
+ # @problem install-updates-refreshes-the-global-plugin-cache-but-does-not-fix-path-ordering-stale-plugin-version-shims-stay-first-on-path-so-subsequent-shim-invocations-run-old-code-problem (mid-session staleness window)
21
21
 
22
22
  set -euo pipefail
23
23
 
@@ -4,7 +4,7 @@
4
4
  # shim files in packages/*/bin/wr-* directly; edit the template + run
5
5
  # `npm run sync:shim-wrappers` to regenerate.
6
6
  #
7
- # Resolution (ADR-080):
7
+ # Resolution (highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule):
8
8
  # 1. If the wrapper's parent dir is semver-shaped, treat as installed-
9
9
  # cache execution and resolve to the highest-version sibling's
10
10
  # scripts/ entry below.
@@ -15,9 +15,9 @@
15
15
  # 3. If the cache parent contains zero semver-shaped siblings, exit
16
16
  # 127 with a stderr message naming the cache parent (per SQ-080-2).
17
17
  #
18
- # @adr ADR-080 (highest-version-wins shim wrapper plugin scaffold)
19
- # @adr ADR-049 (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
- # @problem P343 (mid-session staleness window)
18
+ # @adr highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule (highest-version-wins shim wrapper plugin scaffold)
19
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
+ # @problem install-updates-refreshes-the-global-plugin-cache-but-does-not-fix-path-ordering-stale-plugin-version-shims-stay-first-on-path-so-subsequent-shim-invocations-run-old-code-problem (mid-session staleness window)
21
21
 
22
22
  set -euo pipefail
23
23
 
@@ -4,7 +4,7 @@
4
4
  # shim files in packages/*/bin/wr-* directly; edit the template + run
5
5
  # `npm run sync:shim-wrappers` to regenerate.
6
6
  #
7
- # Resolution (ADR-080):
7
+ # Resolution (highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule):
8
8
  # 1. If the wrapper's parent dir is semver-shaped, treat as installed-
9
9
  # cache execution and resolve to the highest-version sibling's
10
10
  # scripts/ entry below.
@@ -15,9 +15,9 @@
15
15
  # 3. If the cache parent contains zero semver-shaped siblings, exit
16
16
  # 127 with a stderr message naming the cache parent (per SQ-080-2).
17
17
  #
18
- # @adr ADR-080 (highest-version-wins shim wrapper plugin scaffold)
19
- # @adr ADR-049 (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
- # @problem P343 (mid-session staleness window)
18
+ # @adr highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule (highest-version-wins shim wrapper plugin scaffold)
19
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
+ # @problem install-updates-refreshes-the-global-plugin-cache-but-does-not-fix-path-ordering-stale-plugin-version-shims-stay-first-on-path-so-subsequent-shim-invocations-run-old-code-problem (mid-session staleness window)
21
21
 
22
22
  set -euo pipefail
23
23
 
@@ -4,7 +4,7 @@
4
4
  # shim files in packages/*/bin/wr-* directly; edit the template + run
5
5
  # `npm run sync:shim-wrappers` to regenerate.
6
6
  #
7
- # Resolution (ADR-080):
7
+ # Resolution (highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule):
8
8
  # 1. If the wrapper's parent dir is semver-shaped, treat as installed-
9
9
  # cache execution and resolve to the highest-version sibling's
10
10
  # scripts/ entry below.
@@ -15,9 +15,9 @@
15
15
  # 3. If the cache parent contains zero semver-shaped siblings, exit
16
16
  # 127 with a stderr message naming the cache parent (per SQ-080-2).
17
17
  #
18
- # @adr ADR-080 (highest-version-wins shim wrapper plugin scaffold)
19
- # @adr ADR-049 (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
- # @problem P343 (mid-session staleness window)
18
+ # @adr highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule (highest-version-wins shim wrapper plugin scaffold)
19
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
+ # @problem install-updates-refreshes-the-global-plugin-cache-but-does-not-fix-path-ordering-stale-plugin-version-shims-stay-first-on-path-so-subsequent-shim-invocations-run-old-code-problem (mid-session staleness window)
21
21
 
22
22
  set -euo pipefail
23
23
 
@@ -4,7 +4,7 @@
4
4
  # shim files in packages/*/bin/wr-* directly; edit the template + run
5
5
  # `npm run sync:shim-wrappers` to regenerate.
6
6
  #
7
- # Resolution (ADR-080):
7
+ # Resolution (highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule):
8
8
  # 1. If the wrapper's parent dir is semver-shaped, treat as installed-
9
9
  # cache execution and resolve to the highest-version sibling's
10
10
  # scripts/ entry below.
@@ -15,9 +15,9 @@
15
15
  # 3. If the cache parent contains zero semver-shaped siblings, exit
16
16
  # 127 with a stderr message naming the cache parent (per SQ-080-2).
17
17
  #
18
- # @adr ADR-080 (highest-version-wins shim wrapper plugin scaffold)
19
- # @adr ADR-049 (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
- # @problem P343 (mid-session staleness window)
18
+ # @adr highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule (highest-version-wins shim wrapper plugin scaffold)
19
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
+ # @problem install-updates-refreshes-the-global-plugin-cache-but-does-not-fix-path-ordering-stale-plugin-version-shims-stay-first-on-path-so-subsequent-shim-invocations-run-old-code-problem (mid-session staleness window)
21
21
 
22
22
  set -euo pipefail
23
23
 
@@ -4,7 +4,7 @@
4
4
  # shim files in packages/*/bin/wr-* directly; edit the template + run
5
5
  # `npm run sync:shim-wrappers` to regenerate.
6
6
  #
7
- # Resolution (ADR-080):
7
+ # Resolution (highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule):
8
8
  # 1. If the wrapper's parent dir is semver-shaped, treat as installed-
9
9
  # cache execution and resolve to the highest-version sibling's
10
10
  # scripts/ entry below.
@@ -15,9 +15,9 @@
15
15
  # 3. If the cache parent contains zero semver-shaped siblings, exit
16
16
  # 127 with a stderr message naming the cache parent (per SQ-080-2).
17
17
  #
18
- # @adr ADR-080 (highest-version-wins shim wrapper plugin scaffold)
19
- # @adr ADR-049 (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
- # @problem P343 (mid-session staleness window)
18
+ # @adr highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule (highest-version-wins shim wrapper plugin scaffold)
19
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (plugin-bundled scripts resolve via bin/ on $PATH — amended)
20
+ # @problem install-updates-refreshes-the-global-plugin-cache-but-does-not-fix-path-ordering-stale-plugin-version-shims-stay-first-on-path-so-subsequent-shim-invocations-run-old-code-problem (mid-session staleness window)
21
21
 
22
22
  set -euo pipefail
23
23