@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,15 +1,15 @@
1
1
  #!/usr/bin/env bash
2
2
  # Canonical shared migration routine — adopter `docs/problems/` flat → per-state subdir.
3
- # P170 / RFC-002 / ADR-031 (accepted 2026-05-12).
3
+ # 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 / problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule (accepted 2026-05-12).
4
4
  #
5
- # Adopter repos that installed `@windyroad/itil` before ADR-031 acceptance
5
+ # Adopter repos that installed `@windyroad/itil` before problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule acceptance
6
6
  # carry the flat-layout `docs/problems/<NNN>-<slug>.<state>.md` shape. The
7
7
  # `manage-problem` and `work-problems` skills source this file at Step 1
8
- # (ADR-032 foreground-synchronous) and call `migrate_problems_to_per_state_layout`
8
+ # (governance-skill-invocation-patterns-foreground-background-with-deferred-question-resumption-architecture-rule foreground-synchronous) and call `migrate_problems_to_per_state_layout`
9
9
  # before any layout-dependent logic, so adopter trees auto-migrate on first
10
10
  # invocation post-update.
11
11
  #
12
- # Distribution: ADR-017 sync pattern. Canonical lives at
12
+ # Distribution: shared-code-duplicated-into-per-package-lib-kept-in-sync-by-script-ci-drift-check-architecture-rule sync pattern. Canonical lives at
13
13
  # packages/shared/lib/migrate-problems-layout.sh
14
14
  # Synced into each consumer's lib/ (currently only `packages/itil/lib/`)
15
15
  # by `scripts/sync-migrate-problems-layout.sh`. Drift is asserted by
@@ -51,9 +51,9 @@ detect_flat_layout() {
51
51
  # Idempotent + partial-migration-safe entrypoint.
52
52
  # Returns 0 when already-migrated (no-op) OR migration completed cleanly.
53
53
  # Returns non-zero on git failure. Writes a standalone commit with
54
- # subject `docs(problems): auto-migrate to per-state subdirectory layout (ADR-031)`
54
+ # subject `docs(problems): auto-migrate to per-state subdirectory layout (problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule)`
55
55
  # and a footer `RISK_BYPASS: adr-031-migration` trailer recognised by the
56
- # commit-gate hook (T11). Standalone-commit grain per ADR-031 §
56
+ # commit-gate hook (T11). Standalone-commit grain per problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule §
57
57
  # Backward Compatibility (line 124).
58
58
  migrate_problems_to_per_state_layout() {
59
59
  local repo_root="${1:-$PWD}"
@@ -103,12 +103,12 @@ migrate_problems_to_per_state_layout() {
103
103
  return 0
104
104
  fi
105
105
 
106
- # JTBD-006 AFK transparency (T8 jtbd-review nitpick c): single stderr
106
+ # progress-the-backlog-while-i-m-away-user-outcome AFK transparency (T8 jtbd-review nitpick c): single stderr
107
107
  # line on first-fire so AFK orchestrator output records the action.
108
- echo "migrate-problems-layout: relocated $moved_count tickets to per-state subdirs (ADR-031)" >&2
108
+ echo "migrate-problems-layout: relocated $moved_count tickets to per-state subdirs (problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule)" >&2
109
109
 
110
- # JTBD-201 audit-trail forward-pointer (T8 jtbd-review nitpick b):
111
- # commit body cites ADR-031 so future `git log` readers have the
110
+ # restore-service-fast-with-an-audit-trail-user-outcome audit-trail forward-pointer (T8 jtbd-review nitpick b):
111
+ # commit body cites problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule so future `git log` readers have the
112
112
  # semantic context without needing to grep the trailer.
113
113
  # T10 fix: use sequential `-m` paragraphs instead of `--trailer`; the
114
114
  # `--trailer` mechanism in git 2.47.x appended a spurious trailing
@@ -116,9 +116,9 @@ migrate_problems_to_per_state_layout() {
116
116
  # parsers downstream. Sequential `-m` paragraphs write a clean
117
117
  # `RISK_BYPASS: adr-031-migration` line in the body.
118
118
  (cd "$repo_root" && git commit \
119
- -m "docs(problems): auto-migrate to per-state subdirectory layout (ADR-031)" \
119
+ -m "docs(problems): auto-migrate to per-state subdirectory layout (problem-ticket-directory-layout-per-state-subdirectories-under-docs-problems-architecture-rule)" \
120
120
  -m "See: docs/decisions/031-problem-ticket-directory-layout.accepted.md" \
121
- -m "Policy-authorised under ADR-013 Rule 6 + ADR-019 precedent (pure-rename + pure-mkdir; fully reversible via git revert)." \
121
+ -m "Policy-authorised under structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 + afk-orchestrator-preflight-get-the-repo-into-a-clean-state-before-starting-architecture-rule precedent (pure-rename + pure-mkdir; fully reversible via git revert)." \
122
122
  -m "RISK_BYPASS: adr-031-migration") || {
123
123
  echo "ERROR: migration commit failed" >&2
124
124
  return 1
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # story-oversight.sh — ADR-090 lazy-fingerprint ratification helpers.
2
+ # story-oversight.sh — story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule lazy-fingerprint ratification helpers.
3
3
  #
4
4
  # Shared by detect-unratified-stories-maps.sh, check-rfc-stories-ratified.sh, and
5
5
  # mark-story-oversight-confirmed.sh so all three agree on ONE hash definition
@@ -8,8 +8,8 @@
8
8
  # A story MAP is RATIFIED when it carries a `confirmed` human-oversight marker
9
9
  # AND a stored oversight-hash that matches a fresh hash of its content-minus-
10
10
  # marker. Any content edit changes the hash → the artefact reads as drifted /
11
- # unratified until re-ratified. This is ADR-090's drift-invalidation (ADR-009
12
- # drift lineage, NOT ADR-066 write-once) — the same hash-the-artefact pattern
11
+ # unratified until re-ratified. This is story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule's drift-invalidation (gate-marker-lifecycle-ttl-drift-not-stop-hook-reset-architecture-rule
12
+ # drift lineage, NOT human-oversight-marker-wr-architect-review-decisions-drain-for-recorded-decisions-architecture-rule write-once) — the same hash-the-artefact pattern
13
13
  # the external-comms gate uses.
14
14
  #
15
15
  # Sourced, not executed. Requires `shasum` (BSD + coreutils both ship it).
@@ -19,17 +19,17 @@
19
19
  # encodings in one filter:
20
20
  # - markdown: `human-oversight:` / `oversight-hash:` frontmatter lines
21
21
  # - HTML: <meta name="human-oversight" ...> / <meta name="oversight-hash" ...>
22
- # - ADR-102 data island: the same fields as JSON keys, `"humanOversight":` /
23
- # `"oversightHash":` / `"oversightDate":` / `"oversightNote":`. Since ADR-102
22
+ # - story-maps-render-from-json-through-a-canonical-template-architecture-rule data island: the same fields as JSON keys, `"humanOversight":` /
23
+ # `"oversightHash":` / `"oversightDate":` / `"oversightNote":`. Since story-maps-render-from-json-through-a-canonical-template-architecture-rule
24
24
  # scopes a map's hash to the island, the marker now lives INSIDE the hashed
25
25
  # region — so without this third spelling, ratifying a map mutated the very
26
26
  # bytes it was fingerprinting and the stored hash could never match. Every
27
27
  # map would have read as drifted the instant it was ratified.
28
28
  # THE single definition of what the fingerprint ignores. Reads stdin, writes the
29
29
  # normalised stream. Both hash functions route through this and neither carries
30
- # its own copy — that duplication is why the P474 `**Status**:` mirror had to be
30
+ # its own copy — that duplication is why the oversight-hash-treats-the-status-body-mirror-as-substance-so-an-accept-transition-self-invalidates-its-own-ratification-problem `**Status**:` mirror had to be
31
31
  # removed from two places and why a third copy could have been missed entirely
32
- # (RFC-059 / STORY-055).
32
+ # (lifecycle-state-is-not-duplicated-inside-hashed-story-content-release-design / one-definition-of-what-the-oversight-fingerprint-ignores-delivery-story).
33
33
  #
34
34
  # Excludes the marker lines plus the lifecycle `status` key in both encodings, and
35
35
  # normalises lifecycle PROGRESS — acceptance-criterion ticks and slice
@@ -37,9 +37,9 @@
37
37
  # criterion or advancing status is progress, not a revision of what the human
38
38
  # ratified; the value statement, criterion TEXT and structure all still drift.
39
39
  #
40
- # Editing this filter changes ADR-090's Decision Outcome, not merely a mechanism.
40
+ # Editing this filter changes story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule's Decision Outcome, not merely a mechanism.
41
41
  # It is the surface the 2026-07-03 narrowing changed while going unrecorded for
42
- # three weeks; a change here needs an ADR-090 amendment. The pattern is a
42
+ # three weeks; a change here needs an story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule amendment. The pattern is a
43
43
  # LITERAL on purpose: built from a variable, an expansion that ever yielded empty
44
44
  # would make `grep -vE ''` suppress every line and hash the empty stream to a
45
45
  # constant, after which one artefact's stored hash would validate against ANY
@@ -59,20 +59,20 @@ oversight_excluded_keys() {
59
59
 
60
60
  # The MAP-SUBSTANCE key set: the island keys a story map's ratification hangs on.
61
61
  #
62
- # Editing this set — here or in the SUBSTANCE tuple below — changes ADR-090's
63
- # Decision Outcome as amended by ADR-103, not merely a mechanism. It IS the drift
64
- # trigger. A change here needs an ADR-090 amendment, and the bidirectional test
62
+ # Editing this set — here or in the SUBSTANCE tuple below — changes story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule's
63
+ # Decision Outcome as amended by a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule, not merely a mechanism. It IS the drift
64
+ # trigger. A change here needs an story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule amendment, and the bidirectional test
65
65
  # will NOT catch that: it asserts the accessor and the tuple agree, so it passes
66
66
  # whenever both move together, which is the shape of exactly that edit. The
67
67
  # sibling notice on _oversight_filter says the same thing for the same reason.
68
68
  #
69
69
  # SCOPE: island keys only. Unlike oversight_excluded_keys, which strips keys from
70
70
  # every artefact in three encodings, this set is meaningless for anything with no
71
- # island — stories and pre-ADR-102 maps fall through to whole-file bytes. The two
71
+ # island — stories and pre-story-maps-render-from-json-through-a-canonical-template-architecture-rule maps fall through to whole-file bytes. The two
72
72
  # are not complements; `excluded ∪ substance` is not the key space.
73
73
  #
74
- # THIS IS THE ONLY ENUMERATION. Six documents used to restate it (ADR-090,
75
- # ADR-103, ADR-105, capture-story-map, and manage-story-map twice) and by
74
+ # THIS IS THE ONLY ENUMERATION. Six documents used to restate it (story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule,
75
+ # a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule, the-grid-ships-in-the-file-a-map-is-readable-with-no-script-engine-architecture-rule, capture-story-map, and manage-story-map twice) and by
76
76
  # 2026-08-08 it had drifted in both directions at once: the ADRs still named
77
77
  # `lead` and `traceProse`, dead the day before, while manage-story-map had lost
78
78
  # `storyMapId` and `secondaryPersona`, both live. The prose now states the rule
@@ -88,25 +88,25 @@ oversight_map_substance_keys() {
88
88
 
89
89
  # Emit the bytes a fingerprint should cover.
90
90
  #
91
- # For a story map under ADR-102 that is the DATA ISLAND alone, not the whole
91
+ # For a story map under story-maps-render-from-json-through-a-canonical-template-architecture-rule that is the DATA ISLAND alone, not the whole
92
92
  # file: the grid, the <style> block and the <meta> block are all generated from
93
93
  # the island, so hashing the whole file would let a template change regenerate
94
94
  # every map, drift every stored fingerprint, and silently revoke ratification
95
- # across the corpus (ADR-090's marker is drift-invalidated). A presentation
95
+ # across the corpus (story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule's marker is drift-invalidated). A presentation
96
96
  # change must never revoke a substance approval.
97
97
  #
98
- # Anything with no island — stories (.md), and maps predating ADR-102 — falls
98
+ # Anything with no island — stories (.md), and maps predating story-maps-render-from-json-through-a-canonical-template-architecture-rule — falls
99
99
  # through to whole-file bytes, so the story leg and the legacy corpus are
100
100
  # untouched.
101
101
  _oversight_hashable() {
102
102
  local f="$1"
103
103
  if grep -qF '<script id="story-map-data"' "$f" 2>/dev/null; then
104
- # ADR-103: the fingerprint covers SUBSTANCE only — the map's identity and
104
+ # a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule: the fingerprint covers SUBSTANCE only — the map's identity and
105
105
  # prose, its traces, and its backbone (the activity columns). Releases and
106
106
  # the cards in them are SCHEDULING: drawing a row, or putting a story in
107
107
  # one, is not a revision of what a human approved.
108
108
  #
109
- # This is what retires the ADR-101 carve-out. That existed because
109
+ # This is what retires the an-afk-loop-may-accept-and-implement-a-story-that-only-decomposes-already-ratified-substance-architecture-rule carve-out. That existed because
110
110
  # capturing a story onto its map drifted the map's hash, which broke the
111
111
  # very condition the story had to satisfy. With cards outside the basis,
112
112
  # the drift never happens and the carve-out has nothing to carve.
@@ -144,17 +144,17 @@ oversight_content_hash() {
144
144
  _oversight_hashable "$1" | _oversight_filter | shasum -a 256 | awk '{print $1}'
145
145
  }
146
146
 
147
- # ADR-103 retired the ADR-101 AFK pure-decomposition carve-out and its map leg.
148
- # The carve-out existed because ADR-095 compels a card onto the map at capture,
149
- # which under ADR-090 drift-invalidation re-opened the map's ratification by
147
+ # a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule retired the an-afk-loop-may-accept-and-implement-a-story-that-only-decomposes-already-ratified-substance-architecture-rule AFK pure-decomposition carve-out and its map leg.
148
+ # The carve-out existed because story-map-membership-and-story-content-completeness-are-enforced-at-capture-architecture-rule compels a card onto the map at capture,
149
+ # which under story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule drift-invalidation re-opened the map's ratification by
150
150
  # construction — the condition a story had to satisfy was broken by authoring the
151
- # story. ADR-103 took cards out of the fingerprint basis entirely, so that no
151
+ # story. a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule took cards out of the fingerprint basis entirely, so that no
152
152
  # longer happens and there is nothing left to exclude. Removed with it:
153
153
  # oversight_content_hash_excluding_stories, oversight_map_leg_ok,
154
154
  # oversight_is_pure_decomposition, oversight_declares_pure_decomposition.
155
155
 
156
156
  # Echo the stored oversight-hash, empty if none. Three spellings carry the same
157
- # fact: md frontmatter, an HTML <meta>, and — for an ADR-102 map — the data
157
+ # fact: md frontmatter, an HTML <meta>, and — for an story-maps-render-from-json-through-a-canonical-template-architecture-rule map — the data
158
158
  # island, which is where mark-story-oversight-confirmed actually writes. The
159
159
  # island MUST be read here: the <meta> is a projection the renderer regenerates
160
160
  # from it, so a map marked but not yet re-rendered would otherwise read as
@@ -171,7 +171,7 @@ oversight_stored_hash() {
171
171
  oversight_is_confirmed() {
172
172
  grep -qiE '^human-oversight:[[:space:]]*confirmed([[:space:]]|$)' "$1" && return 0
173
173
  grep -qiE '<meta[^>]*name="human-oversight"[^>]*content="confirmed"' "$1" && return 0
174
- # ADR-102 island spelling — see oversight_stored_hash for why this is load-bearing.
174
+ # story-maps-render-from-json-through-a-canonical-template-architecture-rule island spelling — see oversight_stored_hash for why this is load-bearing.
175
175
  grep -qiE '"humanOversight"[[:space:]]*:[[:space:]]*"confirmed"' "$1" && return 0
176
176
  return 1
177
177
  }
@@ -187,7 +187,7 @@ is_story_map_ratified() {
187
187
  [ "$stored" = "$(oversight_content_hash "$f")" ]
188
188
  }
189
189
 
190
- # Is this STORY approved? ADR-103 made the story map the approval surface, and a
190
+ # Is this STORY approved? a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule made the story map the approval surface, and a
191
191
  # story carries no oversight marker of its own — not even one saying it inherits.
192
192
  # A story is approved exactly when every map it names is ratified.
193
193
  #
package/package.json CHANGED
@@ -1,11 +1,16 @@
1
1
  {
2
2
  "name": "@windyroad/itil",
3
- "version": "1.2.0",
4
- "description": "ITIL-aligned IT service management for Claude Code (problem, and future incident/change skills)",
3
+ "version": "2.0.0-preview.1111",
4
+ "description": "ITIL-aligned IT service management for Claude Code and Codex",
5
5
  "bin": {
6
6
  "windyroad-itil": "./bin/install.mjs"
7
7
  },
8
8
  "type": "module",
9
+ "scripts": {
10
+ "build:codex": "node scripts/sync-codex-skills.mjs --build",
11
+ "prepack": "node scripts/sync-codex-skills.mjs --pack",
12
+ "postpack": "node scripts/sync-codex-skills.mjs --restore-pack"
13
+ },
9
14
  "license": "MIT",
10
15
  "repository": {
11
16
  "type": "git",
@@ -17,22 +22,30 @@
17
22
  "claude-code-plugin",
18
23
  "ai-agent",
19
24
  "ai-coding",
20
- "itil"
25
+ "itil",
26
+ "codex"
21
27
  ],
22
28
  "files": [
23
29
  "bin/",
24
30
  "agents/",
25
31
  "hooks/",
26
32
  "skills/",
33
+ "skills-codex/",
27
34
  "scripts/",
28
35
  "templates/",
36
+ ".agents/",
29
37
  ".claude-plugin/",
38
+ ".codex-plugin/",
39
+ "hooks-codex/",
30
40
  "lib/",
31
41
  "!skills/*/eval/",
32
42
  "!agents/test/",
33
43
  "!hooks/test/",
34
44
  "!lib/test/",
35
45
  "!scripts/test/",
46
+ "!scripts/check-published-internal-ids.sh",
47
+ "!scripts/codex-work-problems.md",
48
+ "!scripts/sync-codex-skills.mjs",
36
49
  "!skills/*/test/"
37
50
  ]
38
51
  }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # packages/itil/scripts/catchup-scan.sh
3
3
  #
4
- # Phase 2 of P080 — `--catchup` migration-mode worklist scanner for
4
+ # Phase 2 of problem-080-no-bidirectional-update-of-upstream-reported-problems-local-lifecycle-transitions-never-propagate-back-to-the-reporter-problem — `--catchup` migration-mode worklist scanner for
5
5
  # `/wr-itil:update-upstream`. Walks the EXISTING `.verifying.md` +
6
6
  # `.closed.md` ticket corpus, filters to tickets carrying a `## Reported
7
7
  # Upstream` back-link section (written by `/wr-itil:report-upstream`
@@ -10,16 +10,16 @@
10
10
  #
11
11
  # Read-only / local-only: this script makes NO `gh` calls and NO writes.
12
12
  # It only reads local ticket files and prints a worklist to stdout. The
13
- # actual `gh issue comment` / `gh issue close` posts — and the ADR-028
13
+ # actual `gh issue comment` / `gh issue close` posts — and the external-comms-gate-voice-tone-risk-leak-evaluators-on-shared-pretooluse-surface-architecture-rule
14
14
  # external-comms + voice-tone gate composition that guards them — stay in
15
15
  # the `/wr-itil:update-upstream` SKILL's per-ticket Step 4-6 loop, which
16
16
  # consumes this worklist. Keeping the writes out of the scanner keeps it
17
17
  # AFK-safe and behaviourally testable without a live upstream.
18
18
  #
19
- # Idempotency (P080 Phase 2 acceptance criterion 3): a ticket whose
19
+ # Idempotency (problem-080-no-bidirectional-update-of-upstream-reported-problems-local-lifecycle-transitions-never-propagate-back-to-the-reporter-problem Phase 2 acceptance criterion 3): a ticket whose
20
20
  # `## Upstream Lifecycle Updates` log already records an entry for the
21
21
  # current target-state transition is reported as SKIP/already-logged, NOT
22
- # re-posted. The marker-on-body log (append-only per the ADR-024 P080
22
+ # re-posted. The marker-on-body log (append-only per the cross-project-problem-reporting-contract-report-upstream-skill-in-windyroad-itil-architecture-rule problem-080-no-bidirectional-update-of-upstream-reported-problems-local-lifecycle-transitions-never-propagate-back-to-the-reporter-problem
23
23
  # amendment) is the source of truth — re-running catchup is safe.
24
24
  #
25
25
  # Usage:
@@ -31,19 +31,19 @@
31
31
  # 0 = success (zero or more worklist lines on stdout)
32
32
  # 1 = error (problems-dir missing, malformed CLI args)
33
33
  #
34
- # Two surfaces are walked (P376 — cross-direction parity):
34
+ # Two surfaces are walked (catchup-scanner-misses-the-inbound-direction-outbound-templates-carry-the-same-structural-defect-the-rework-fixed-on-the-inbound-side-cross-direction-parity-gap-problem — cross-direction parity):
35
35
  # OUTBOUND — tickets with a `## Reported Upstream` section (issues WE filed
36
36
  # against an upstream we depend on).
37
37
  # INBOUND — tickets with an `**Origin**: inbound-reported (#NN)` field
38
- # (ADR-076 — issues someone else filed *against us* on our own repo, which
39
- # the P363 rework made dispatchable). Without this leg the inbound catchup
38
+ # (inbound-reported-problems-rank-ahead-of-internally-discovered-problems-via-a-sort-tier-architecture-rule — issues someone else filed *against us* on our own repo, which
39
+ # the inbound-reported-tickets-never-receive-fix-released-verdict-on-originating-issue-problem rework made dispatchable). Without this leg the inbound catchup
40
40
  # candidates were a manual `grep -lE '^\*\*Origin\*\*:\s*inbound-reported'`
41
41
  # surface the maintainer had to remember after every `--catchup` run.
42
42
  # A ticket carrying BOTH surfaces emits BOTH an outbound and an inbound line
43
43
  # (the two legs are independent, mirroring the update-upstream SKILL).
44
44
  #
45
45
  # Structured stdout (one per actionable upstream entry; <= 150 bytes per
46
- # line per ADR-038). ASCII `->` for the transition arrow per the P334
46
+ # line per progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule). ASCII `->` for the transition arrow per the generate-decisions-compendium-sh-uses-awk-substr-with-unicode-ellipsis-not-portable-between-macos-bsd-awk-and-linux-gnu-awk-ci-drift-gate-fires-on-cross-platform-regenerations-problem
47
47
  # awk/script portability lesson (no Unicode in machine-read output):
48
48
  # CATCHUP P<NNN> <url> state=<state> transition=<KE->Verifying|Verifying->Closed> disclosure=<issue|pull-request>
49
49
  # CATCHUP P<NNN> inbound-<ref> state=<state> transition=<…> direction=inbound
@@ -57,24 +57,24 @@
57
57
  # Trailing summary line (stderr) for the SKILL / human reader:
58
58
  # SUMMARY scanned=<N> catchup=<N> skip-logged=<N> skip-out-of-band=<N>
59
59
  #
60
- # @problem P080 — no bidirectional update of upstream-reported problems (Phase 2 --catchup)
61
- # @adr ADR-024 (amended P080 Phase 2 — --catchup migration mode + idempotency contract)
62
- # @adr ADR-014 (governance skills commit their own work)
63
- # @adr ADR-038 (progressive disclosure — per-row byte budget)
64
- # @adr ADR-049 (invoked via wr-itil-catchup-scan bin shim, never repo-relative path)
65
- # @adr ADR-032 (foreground synchronous skill)
66
- # @adr ADR-076 (reads the `**Origin**: inbound-reported (#NN)` field for the inbound leg)
67
- # @adr ADR-117 (prefer an upstream pull request over an issue — the CATCHUP
60
+ # @problem problem-080-no-bidirectional-update-of-upstream-reported-problems-local-lifecycle-transitions-never-propagate-back-to-the-reporter-problem — no bidirectional update of upstream-reported problems (Phase 2 --catchup)
61
+ # @adr cross-project-problem-reporting-contract-report-upstream-skill-in-windyroad-itil-architecture-rule (amended problem-080-no-bidirectional-update-of-upstream-reported-problems-local-lifecycle-transitions-never-propagate-back-to-the-reporter-problem Phase 2 — --catchup migration mode + idempotency contract)
62
+ # @adr governance-skills-commit-their-own-completed-work-architecture-rule (governance skills commit their own work)
63
+ # @adr progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule (progressive disclosure — per-row byte budget)
64
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (invoked via wr-itil-catchup-scan bin shim, never repo-relative path)
65
+ # @adr governance-skill-invocation-patterns-foreground-background-with-deferred-question-resumption-architecture-rule (foreground synchronous skill)
66
+ # @adr inbound-reported-problems-rank-ahead-of-internally-discovered-problems-via-a-sort-tier-architecture-rule (reads the `**Origin**: inbound-reported (#NN)` field for the inbound leg)
67
+ # @adr prefer-an-upstream-pull-request-over-an-issue-when-the-upstream-accepts-pull-requests-architecture-rule (prefer an upstream pull request over an issue — the CATCHUP
68
68
  # row carries a `disclosure=` discriminator so the consuming skill knows
69
69
  # whether to comment on a pull request or an issue. A `pull request` path
70
70
  # is actionable, so it is NOT skipped alongside out-of-band / mailbox.)
71
- # @problem P376 — catchup scanner misses the inbound direction (cross-direction parity)
72
- # @rfc RFC-028 (consume the Origin field for inbound-reported verdict — extended to the catchup surface)
73
- # @jtbd JTBD-301 (reporter feedback loop — the catchup's primary job)
74
- # @jtbd JTBD-006 (AFK-safe worklist scanner)
75
- # @jtbd JTBD-004 (cross-repo coordination — reconcile local corpus vs upstream trackers)
76
- # @jtbd JTBD-001 (governance without slowing down — derive the worklist, no manual policing)
77
- # @jtbd JTBD-201 (symmetric local/upstream audit trail)
71
+ # @problem catchup-scanner-misses-the-inbound-direction-outbound-templates-carry-the-same-structural-defect-the-rework-fixed-on-the-inbound-side-cross-direction-parity-gap-problem — catchup scanner misses the inbound direction (cross-direction parity)
72
+ # @rfc consume-the-origin-field-for-inbound-reported-fix-released-verdict-release-design (consume the Origin field for inbound-reported verdict — extended to the catchup surface)
73
+ # @jtbd report-a-problem-without-pre-classifying-it-user-outcome (reporter feedback loop — the catchup's primary job)
74
+ # @jtbd progress-the-backlog-while-i-m-away-user-outcome (AFK-safe worklist scanner)
75
+ # @jtbd connect-agents-across-repos-to-collaborate-user-outcome (cross-repo coordination — reconcile local corpus vs upstream trackers)
76
+ # @jtbd enforce-governance-without-slowing-down-user-outcome (governance without slowing down — derive the worklist, no manual policing)
77
+ # @jtbd restore-service-fast-with-an-audit-trail-user-outcome (symmetric local/upstream audit trail)
78
78
 
79
79
  set -uo pipefail
80
80
 
@@ -108,7 +108,7 @@ fi
108
108
  # reporter most wants (fix released / closed) are the ones the pre-Phase-1
109
109
  # corpus is missing. Open / Known-Error / Parked tickets are out of scope
110
110
  # for the migration (their transitions, if linked, fire the per-ticket
111
- # path going forward). Dual-tolerant per RFC-002: flat layout
111
+ # path going forward). Dual-tolerant per docs-problems-flat-layout-migration-per-state-subdirs-adopter-auto-migration-release-design: flat layout
112
112
  # `<NNN>-*.<status>.md` AND per-state subdir `<status>/<NNN>-*.md`.
113
113
 
114
114
  shopt -s nullglob
@@ -170,7 +170,7 @@ extract_ticket_id() {
170
170
  }
171
171
 
172
172
  # Extract the actionable inbound issue ref from the `**Origin**:
173
- # inbound-reported (<ref>)` field (ADR-076). Returns the `#NN` /
173
+ # inbound-reported (<ref>)` field (inbound-reported-problems-rank-ahead-of-internally-discovered-problems-via-a-sort-tier-architecture-rule). Returns the `#NN` /
174
174
  # `<repo>#NN` token, or empty when the Origin is not inbound-reported OR
175
175
  # carries no actionable issue number (e.g. "relayed from other projects").
176
176
  extract_inbound_ref() {
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # check-fail-soft-skip-discipline.sh — advisory lint for P351 (skills
2
+ # check-fail-soft-skip-discipline.sh — advisory lint for skills-fail-soft-skip-when-their-precondition-config-is-missing-should-auto-bootstrap-with-user-input-as-needed-rather-than-silently-skipping-problem (skills
3
3
  # fail-soft-skip when their precondition config is missing — should
4
4
  # auto-bootstrap with user input as needed rather than silently
5
5
  # skipping).
@@ -7,7 +7,7 @@
7
7
  # Detects SKILL.md prose that names the fail-soft-skip pattern without
8
8
  # a paired auto-bootstrap routine. The default behaviour of skills with
9
9
  # config-file preconditions has been "fail-soft skip" when the config is
10
- # missing; the right behaviour (per P351) is to recognise the gap and
10
+ # missing; the right behaviour (per skills-fail-soft-skip-when-their-precondition-config-is-missing-should-auto-bootstrap-with-user-input-as-needed-rather-than-silently-skipping-problem) is to recognise the gap and
11
11
  # auto-bootstrap the missing config — invoking AskUserQuestion for any
12
12
  # required user input, then proceeding with the original pass. In AFK
13
13
  # mode where AskUserQuestion is unavailable, queue a config-direction
@@ -43,13 +43,13 @@
43
43
  # Promote `WR_FAIL_SOFT_SKIP_WARN_ONLY=0` once every affected SKILL.md
44
44
  # has been migrated to the auto-bootstrap pattern.
45
45
  #
46
- # @adr ADR-040 (advisory-then-load-bearing reusable pattern)
47
- # @adr ADR-049 (plugin-bundled scripts; PATH shim)
48
- # @adr ADR-052 (behavioural-tests-default)
49
- # @adr ADR-013 Rule 6 (non-interactive fail-safe — advisory exit 0)
50
- # @jtbd JTBD-001 (Enforce Governance Without Slowing Down)
51
- # @jtbd JTBD-101 (Extend the Suite with New Plugins)
52
- # @problem P351 (skills fail-soft-skip when precondition config missing
46
+ # @adr session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule (advisory-then-load-bearing reusable pattern)
47
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (plugin-bundled scripts; PATH shim)
48
+ # @adr behavioural-tests-default-for-skill-testing-architecture-rule (behavioural-tests-default)
49
+ # @adr structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 (non-interactive fail-safe — advisory exit 0)
50
+ # @jtbd enforce-governance-without-slowing-down-user-outcome (Enforce Governance Without Slowing Down)
51
+ # @jtbd extend-the-suite-with-new-plugins-user-outcome (Extend the Suite with New Plugins)
52
+ # @problem skills-fail-soft-skip-when-their-precondition-config-is-missing-should-auto-bootstrap-with-user-input-as-needed-rather-than-silently-skipping-problem (skills fail-soft-skip when precondition config missing
53
53
  # — should auto-bootstrap with user input)
54
54
 
55
55
  set -uo pipefail
@@ -132,7 +132,7 @@ done
132
132
  if [ "$violations" -gt 0 ]; then
133
133
  echo "" >&2
134
134
  echo "check-fail-soft-skip-discipline: $violations potential fail-soft-skip site(s) across $scanned SKILL.md file(s)" >&2
135
- echo "Phase 1 advisory (WR_FAIL_SOFT_SKIP_WARN_ONLY=$WARN_ONLY). Authors should pair each site with an auto-bootstrap routine per P351." >&2
135
+ echo "Phase 1 advisory (WR_FAIL_SOFT_SKIP_WARN_ONLY=$WARN_ONLY). Authors should pair each site with an auto-bootstrap routine per skills-fail-soft-skip-when-their-precondition-config-is-missing-should-auto-bootstrap-with-user-input-as-needed-rather-than-silently-skipping-problem." >&2
136
136
  if [ "$WARN_ONLY" = "0" ]; then
137
137
  exit 1
138
138
  fi
@@ -60,18 +60,18 @@
60
60
  # Exit 3 is a refusal the caller can act on without reading prose, and is
61
61
  # distinct from caller-misuse 2.
62
62
  #
63
- # @adr ADR-119 (a fix proposal draws a release row, never a document; the reader
63
+ # @adr a-fix-proposal-draws-a-release-row-never-a-document-architecture-rule (a fix proposal draws a release row, never a document; the reader
64
64
  # is repointed ahead of the writer and fails closed during the window)
65
- # @adr ADR-103 (a release row is the RFC; the map is the approval surface, and
65
+ # @adr a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule (a release row is the RFC; the map is the approval surface, and
66
66
  # a proposal needing a new map queues for a person)
67
- # @adr ADR-071 (every fix goes through an RFC — unconditional, no carve-out)
68
- # @adr ADR-060 (I1 load-bearing-from-the-start; I13 fix-proposal invariant)
69
- # @adr ADR-049 (invoked via the wr-itil-check-fix-rfc-trace bin shim on
67
+ # @adr every-fix-goes-through-an-rfc-architecture-rule (every fix goes through an RFC — unconditional, no carve-out)
68
+ # @adr problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule (I1 load-bearing-from-the-start; I13 fix-proposal invariant)
69
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (invoked via the wr-itil-check-fix-rfc-trace bin shim on
70
70
  # $PATH; never repo-relative from a SKILL)
71
- # @adr ADR-052 (behavioural bats coverage in
71
+ # @adr behavioural-tests-default-for-skill-testing-architecture-rule (behavioural bats coverage in
72
72
  # packages/itil/scripts/test/check-fix-rfc-trace.bats)
73
- # @problem P314
74
- # @problem P508
73
+ # @problem rework-the-fix-time-rfc-trace-gate-wrong-lifecycle-placement-hard-block-should-be-auto-create-per-corrected-known-error-semantics-problem
74
+ # @problem the-fix-proposal-still-instantiates-a-standalone-rfc-document-after-made-it-a-release-row-problem
75
75
 
76
76
  set -uo pipefail
77
77
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # check-locale-discipline.sh — advisory lint for P328 (BSD locale UTF-8
2
+ # check-locale-discipline.sh — advisory lint for bsd-grep-sed-awk-on-macos-silently-fail-or-error-on-utf-8-without-lc-all-en-us-utf-8-problem (BSD locale UTF-8
3
3
  # friction on macOS).
4
4
  #
5
5
  # BSD `grep` / `sed` / `awk` on macOS silently fail (or emit
@@ -8,8 +8,8 @@
8
8
  # `LC_ALL=en_US.UTF-8` set. Our prose surfaces (ADRs, problem-ticket bodies,
9
9
  # briefing entries, SKILL.md files) are pervasively em-dash / smart-quote
10
10
  # rich, so any script that grep / sed / awks those surfaces is exposed.
11
- # P328 captures three distinct incident classes from the 2026-05-30
12
- # ADR-077 compendium session.
11
+ # bsd-grep-sed-awk-on-macos-silently-fail-or-error-on-utf-8-without-lc-all-en-us-utf-8-problem captures three distinct incident classes from the 2026-05-30
12
+ # generated-docs-decisions-readme-md-compendium-as-token-cheap-load-surface-for-routine-architect-agent-compliance-architecture-rule compendium session.
13
13
  #
14
14
  # This lint walks `packages/*/scripts/*.sh`, `packages/*/hooks/*.sh`, and
15
15
  # `packages/*/lib/*.sh` (including `packages/*/hooks/lib/*.sh`) and reports
@@ -40,15 +40,15 @@
40
40
  # been migrated. Until then, the warnings are signal-only — they identify
41
41
  # scripts that may silently mis-process UTF-8 input on macOS.
42
42
  #
43
- # @adr ADR-040 (advisory-then-load-bearing reusable pattern)
44
- # @adr ADR-049 (plugin-bundled scripts; PATH shim)
45
- # @adr ADR-052 (behavioural-tests-default)
46
- # @adr ADR-080 (highest-version-wins shim wrapper)
47
- # @adr ADR-013 Rule 6 (non-interactive fail-safe — advisory exit 0)
48
- # @adr ADR-005 (Plugin testing strategy)
49
- # @jtbd JTBD-001 (Enforce Governance Without Slowing Down)
50
- # @jtbd JTBD-101 (Extend the Suite with New Plugins)
51
- # @problem P328 (BSD grep/sed/awk on macOS friction with UTF-8)
43
+ # @adr session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule (advisory-then-load-bearing reusable pattern)
44
+ # @adr plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule (plugin-bundled scripts; PATH shim)
45
+ # @adr behavioural-tests-default-for-skill-testing-architecture-rule (behavioural-tests-default)
46
+ # @adr highest-version-wins-shim-wrapper-for-plugin-scaffold-template-shims-architecture-rule (highest-version-wins shim wrapper)
47
+ # @adr structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 (non-interactive fail-safe — advisory exit 0)
48
+ # @adr plugin-testing-strategy-architecture-rule (Plugin testing strategy)
49
+ # @jtbd enforce-governance-without-slowing-down-user-outcome (Enforce Governance Without Slowing Down)
50
+ # @jtbd extend-the-suite-with-new-plugins-user-outcome (Extend the Suite with New Plugins)
51
+ # @problem bsd-grep-sed-awk-on-macos-silently-fail-or-error-on-utf-8-without-lc-all-en-us-utf-8-problem (BSD grep/sed/awk on macOS friction with UTF-8)
52
52
 
53
53
  set -uo pipefail
54
54
 
@@ -172,7 +172,7 @@ for f in "${TARGETS[@]}"; do
172
172
  done
173
173
 
174
174
  if [ "$violations" -gt 0 ]; then
175
- printf 'check-locale-discipline: %d violation(s) across %d script(s) — add `export LC_ALL=en_US.UTF-8` at the top of each script that calls grep/sed/awk on UTF-8 content, or use an inline `LC_ALL=...` prefix per invocation (P328).\n' \
175
+ printf 'check-locale-discipline: %d violation(s) across %d script(s) — add `export LC_ALL=en_US.UTF-8` at the top of each script that calls grep/sed/awk on UTF-8 content, or use an inline `LC_ALL=...` prefix per invocation (bsd-grep-sed-awk-on-macos-silently-fail-or-error-on-utf-8-without-lc-all-en-us-utf-8-problem).\n' \
176
176
  "$violations" "$scanned" >&2
177
177
  if [ "$WARN_ONLY" = "1" ]; then
178
178
  exit 0
@@ -2,9 +2,9 @@
2
2
  # packages/itil/scripts/check-problems-readme-budget.sh
3
3
  #
4
4
  # Diagnose-only advisory script for the docs/problems/README.md "Last
5
- # reviewed" line (line 3). Sibling to P099's
5
+ # reviewed" line (line 3). Sibling to problem-099-docs-briefing-md-grows-unbounded-via-run-retro-appends-violates-progressive-disclosure-problem's
6
6
  # packages/retrospective/scripts/check-briefing-budgets.sh on a
7
- # different surface — both apply ADR-040 line 92's reusable triplet
7
+ # different surface — both apply session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule line 92's reusable triplet
8
8
  # (read-only diagnostic + behavioural bats + ADR-tier-budget
9
9
  # enforcement clause) to an accumulator-doc surface.
10
10
  #
@@ -13,7 +13,7 @@
13
13
  #
14
14
  # Default <readme-path> is ./docs/problems/README.md.
15
15
  # Threshold is read from PROBLEMS_README_LINE3_MAX_BYTES (default 5120
16
- # — matches ADR-040 Tier 3 Tier 3 envelope; the soft per-fragment cap
16
+ # — matches session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule Tier 3 Tier 3 envelope; the soft per-fragment cap
17
17
  # is 1024 bytes, enforced by the SKILL.md authoring contracts in
18
18
  # manage-problem / transition-problem / transition-problems /
19
19
  # review-problems / reconcile-readme).
@@ -23,23 +23,23 @@
23
23
  # 2 = parse error (README path missing or unreadable)
24
24
  #
25
25
  # Output format on overflow (one line, terse machine-readable per
26
- # ADR-038 progressive-disclosure budget):
26
+ # progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule progressive-disclosure budget):
27
27
  # OVER <readme-path> line=3 bytes=<N> threshold=<N>
28
28
  #
29
29
  # Output is empty (no lines) when line 3 is under the threshold.
30
30
  #
31
31
  # Read-only — does NOT mutate the README. Truncation is owned by the
32
- # per-operation refresh contracts in manage-problem Step 5 P094 +
33
- # Step 7 P062 (and the sibling skills).
32
+ # per-operation refresh contracts in manage-problem Step 5 problem-094-wr-itil-manage-problem-does-not-refresh-docs-problems-readme-md-on-ticket-creation-problem +
33
+ # Step 7 problem-062-manage-problem-does-not-refresh-docs-problems-readme-md-on-single-ticket-transitions-fast-path-cache-goes-stale-silently-problem (and the sibling skills).
34
34
  #
35
- # @problem P134
36
- # @adr ADR-040 (Session-start briefing surface — Tier 3 budget; line 92's
35
+ # @problem docs-problems-readme-md-line-3-narrative-blob-accumulator-bloat-sibling-to-briefing-tier-3-on-a-different-surface-problem
36
+ # @adr session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule (Session-start briefing surface — Tier 3 budget; line 92's
37
37
  # reusable-pattern note explicitly names "problems index" as a
38
38
  # candidate surface for this triplet)
39
- # @adr ADR-038 (Progressive disclosure — per-row terse budget)
40
- # @adr ADR-013 Rule 6 (non-interactive fail-safe — advisory exit 0)
41
- # @adr ADR-005 (Plugin testing strategy)
42
- # @jtbd JTBD-001 / JTBD-006 / JTBD-101
39
+ # @adr progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule (Progressive disclosure — per-row terse budget)
40
+ # @adr structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 (non-interactive fail-safe — advisory exit 0)
41
+ # @adr plugin-testing-strategy-architecture-rule (Plugin testing strategy)
42
+ # @jtbd enforce-governance-without-slowing-down-user-outcome / progress-the-backlog-while-i-m-away-user-outcome / extend-the-suite-with-new-plugins-user-outcome
43
43
 
44
44
  set -uo pipefail
45
45
 
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env bash
2
- # check-rfc-has-stories.sh — ADR-089 (every RFC has at least one story).
2
+ # check-rfc-has-stories.sh — every-rfc-has-at-least-one-story-architecture-rule (every RFC has at least one story).
3
3
  #
4
4
  # The load-bearing detection half of the manage-rfc `proposed -> accepted` gate:
5
5
  # an RFC must list >=1 story before it can be accepted. Exits non-zero (with a
6
6
  # stderr directive) when the RFC's `stories:` frontmatter is empty (`stories: []`)
7
7
  # or missing; exits 0 when >=1 `STORY-NNN` is listed (inline or block-list).
8
8
  #
9
- # This removes the pre-ADR-089 empty-stories fallback (the "atomic RFC ships with
10
- # stories: [] / JTBD-101 friction guard" shape). An atomic fix is now an RFC with
9
+ # This removes the pre-every-rfc-has-at-least-one-story-architecture-rule empty-stories fallback (the "atomic RFC ships with
10
+ # stories: [] / extend-the-suite-with-new-plugins-user-outcome friction guard" shape). An atomic fix is now an RFC with
11
11
  # exactly one full story, never an empty list.
12
12
  #
13
13
  # Usage: check-rfc-has-stories.sh <rfc-file>
14
14
  # Exit: 0 = >=1 story; 1 = empty/missing stories; 2 = usage / file error.
15
15
  #
16
- # Authority: ADR-089. Driver: P404. Behavioural test: check-rfc-has-stories.bats.
16
+ # Authority: every-rfc-has-at-least-one-story-architecture-rule. Driver: implement-in-the-skills-and-tests-1-story-per-rfc-story-map-story-ratification-problem. Behavioural test: check-rfc-has-stories.bats.
17
17
  set -euo pipefail
18
18
 
19
19
  rfc="${1:-}"
@@ -30,13 +30,13 @@ fi
30
30
  stories_line="$(awk '/^stories:/{print; exit}' "$rfc")"
31
31
 
32
32
  if [ -z "$stories_line" ]; then
33
- echo "check-rfc-has-stories: $rfc has no 'stories:' field — an RFC must list >=1 story (ADR-089). Decompose the fix into >=1 story before accepting." >&2
33
+ echo "check-rfc-has-stories: $rfc has no 'stories:' field — an RFC must list >=1 story (every-rfc-has-at-least-one-story-architecture-rule). Decompose the fix into >=1 story before accepting." >&2
34
34
  exit 1
35
35
  fi
36
36
 
37
37
  # Reject an explicit empty inline list: `stories: []`.
38
38
  if printf '%s' "$stories_line" | grep -qE '^stories:[[:space:]]*\[[[:space:]]*\][[:space:]]*$'; then
39
- echo "check-rfc-has-stories: $rfc has empty 'stories: []' — an RFC must list >=1 story (ADR-089; the empty-stories fallback is removed). An atomic fix is an RFC with exactly one full story." >&2
39
+ echo "check-rfc-has-stories: $rfc has empty 'stories: []' — an RFC must list >=1 story (every-rfc-has-at-least-one-story-architecture-rule; the empty-stories fallback is removed). An atomic fix is an RFC with exactly one full story." >&2
40
40
  exit 1
41
41
  fi
42
42
 
@@ -55,5 +55,5 @@ if awk '
55
55
  exit 0
56
56
  fi
57
57
 
58
- echo "check-rfc-has-stories: $rfc 'stories:' lists no STORY- ids — an RFC must list >=1 story (ADR-089)." >&2
58
+ echo "check-rfc-has-stories: $rfc 'stories:' lists no STORY- ids — an RFC must list >=1 story (every-rfc-has-at-least-one-story-architecture-rule)." >&2
59
59
  exit 1