@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,41 +1,41 @@
1
1
  #!/bin/bash
2
- # wr-itil — PreToolUse:Bash gate (ADR-096 / P404). A story in `draft` is NEVER
2
+ # wr-itil — PreToolUse:Bash gate (a-story-cannot-be-implemented-while-in-draft-implementation-requires-accepted-architecture-rule / implement-in-the-skills-and-tests-1-story-per-rfc-story-map-story-ratification-problem). A story in `draft` is NEVER
3
3
  # implementable. Blocks a `git commit` whose `Refs: STORY-NNN` trailer names a
4
4
  # story still in docs/stories/draft/ — implementation requires `accepted` (where
5
- # the INVEST + RFC-trace gates + ADR-090 ratification fire). Capture commits are
5
+ # the INVEST + RFC-trace gates + story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule ratification fire). Capture commits are
6
6
  # exempt (they CREATE the draft story). Bootstrap-exempt commits bypass
7
- # (ADR-060 A4). Degrades to a no-op on abnormal paths — characterised, not
7
+ # (problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule A4). Degrades to a no-op on abnormal paths — characterised, not
8
8
  # authorised; see the header note below.
9
9
  #
10
10
  # This is the enforcement locus the architect named as the ONLY one that catches
11
- # the exact P404 bypass — a direct implementing commit against a draft story,
11
+ # the exact implement-in-the-skills-and-tests-1-story-per-rfc-story-map-story-ratification-problem bypass — a direct implementing commit against a draft story,
12
12
  # whether from the orchestrator or by hand.
13
13
  #
14
- # It ALSO enforces the ADR-090 ratification ADR-096 names but never implemented
15
- # (P465): a commit against an `accepted`/`in-progress` story is blocked unless
14
+ # It ALSO enforces the story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule ratification a-story-cannot-be-implemented-while-in-draft-implementation-requires-accepted-architecture-rule names but never implemented
15
+ # (the-story-accepted-gate-names-ratification-but-no-surface-enforces-it-problem): a commit against an `accepted`/`in-progress` story is blocked unless
16
16
  # that story is ratified. This half is UNCONDITIONAL — a pure tightening, no
17
- # config, no opt-in — because putting an ADR-090-mandated check behind a flag
18
- # would be the decision conflict. Under ADR-103 the approval surface is the story
17
+ # config, no opt-in — because putting an story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule-mandated check behind a flag
18
+ # would be the decision conflict. Under a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule the approval surface is the story
19
19
  # MAP: a story carries no oversight marker of its own, and is approved when every
20
20
  # map in its `story-maps:` field is ratified.
21
21
  #
22
22
  # Bypass: BYPASS_NO_IMPLEMENT_DRAFT=1.
23
23
  #
24
- # @adr ADR-096 (no-implement-while-draft) ADR-060 (lifecycle)
25
- # ADR-095 (sibling capture-time gates) ADR-052 (bats)
26
- # ADR-090 (drift-invalidated ratification) ADR-103 (map is the approval surface)
27
- # @problem P404 P465 P456
24
+ # @adr a-story-cannot-be-implemented-while-in-draft-implementation-requires-accepted-architecture-rule (no-implement-while-draft) problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule (lifecycle)
25
+ # story-map-membership-and-story-content-completeness-are-enforced-at-capture-architecture-rule (sibling capture-time gates) behavioural-tests-default-for-skill-testing-architecture-rule (bats)
26
+ # story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule (drift-invalidated ratification) a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule (map is the approval surface)
27
+ # @problem implement-in-the-skills-and-tests-1-story-per-rfc-story-map-story-ratification-problem the-story-accepted-gate-names-ratification-but-no-surface-enforces-it-problem afk-iter-cannot-progress-a-ratified-known-error-when-the-fix-vehicle-rfc-has-empty-stories-problem
28
28
  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
29
29
  # shellcheck source=lib/command-detect.sh
30
30
  source "$SCRIPT_DIR/lib/command-detect.sh" 2>/dev/null || exit 0
31
31
  # Degrades to a no-op on a missing lib. NOT authorised by any in-force decision:
32
- # ADR-013 (Structured user interaction for governance-skill decisions) Rule 6
32
+ # structured-user-interaction-for-governance-skill-decisions-architecture-rule (Structured user interaction for governance-skill decisions) Rule 6
33
33
  # governs a skill that cannot reach AskUserQuestion, and its Continue clause
34
34
  # reads "Do NOT silently fail-soft-skip". This posture is CHARACTERISED, not
35
35
  # endorsed — see "the gate degrades to a no-op when its predicate lib is
36
36
  # missing" in hooks/test/. Both source guards are terminal and both precede
37
37
  # every check, so a missing lib — either one — degrades to no gate at all.
38
- # Open question queued at P369.
38
+ # Open question queued at plugin-removes-hook-file-but-adopter-session-still-invokes-it-via-stale-binding-architect-compendium-refresh-discipline-sh-case-2026-06-17-problem.
39
39
  # shellcheck source=../lib/story-oversight.sh
40
40
  source "$SCRIPT_DIR/../lib/story-oversight.sh" 2>/dev/null || exit 0
41
41
 
@@ -82,10 +82,10 @@ while IFS= read -r id; do
82
82
  [ -n "$id" ] || continue
83
83
  shopt -s nullglob; draftfiles=(./docs/stories/draft/${id}-*.md); shopt -u nullglob
84
84
  if [ ${#draftfiles[@]} -gt 0 ]; then
85
- deny "BLOCKED (ADR-096 / P404): this commit references ${id} via a Refs: trailer, but ${id} is still in draft. A draft story cannot be implemented — accept it first via /wr-itil:manage-story ${id} accepted (it runs the INVEST + RFC-trace gates + ratification), then re-commit. Bypass: BYPASS_NO_IMPLEMENT_DRAFT=1."
85
+ deny "BLOCKED (a-story-cannot-be-implemented-while-in-draft-implementation-requires-accepted-architecture-rule / implement-in-the-skills-and-tests-1-story-per-rfc-story-map-story-ratification-problem): this commit references ${id} via a Refs: trailer, but ${id} is still in draft. A draft story cannot be implemented — accept it first via /wr-itil:manage-story ${id} accepted (it runs the INVEST + RFC-trace gates + ratification), then re-commit. Bypass: BYPASS_NO_IMPLEMENT_DRAFT=1."
86
86
  fi
87
87
 
88
- # ADR-090 ratification at the implementation locus (P465). ADR-096's Decision
88
+ # story-maps-and-stories-carry-a-drift-invalidated-human-oversight-marker-architecture-rule ratification at the implementation locus (the-story-accepted-gate-names-ratification-but-no-surface-enforces-it-problem). a-story-cannot-be-implemented-while-in-draft-implementation-requires-accepted-architecture-rule's Decision
89
89
  # Outcome claims no unratified story can ever be implemented; nothing enforced
90
90
  # it until here. Scoped to accepted/in-progress — done/archived stories are
91
91
  # past implementation and are not gated.
@@ -95,10 +95,10 @@ while IFS= read -r id; do
95
95
  [ ${#livefiles[@]} -gt 0 ] || continue
96
96
  story="${livefiles[0]}"
97
97
 
98
- # ADR-103: a story's approval is its story MAP's. The story itself carries no
98
+ # a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule: a story's approval is its story MAP's. The story itself carries no
99
99
  # oversight marker, so there is one question to ask and one place to fix it.
100
100
  if ! story_is_approved "$story"; then
101
- deny "BLOCKED (ADR-103 / ADR-096 / P465): this commit references ${id}, but ${id} is not approved. A story is approved by its story map: every map in its \`story-maps:\` field must be ratified, and ${id} either names no map or names one that is unratified or has drifted since it was ratified. Ratify the map via /wr-itil:manage-story-map <MAP-ID> ratify, then re-commit. Bypass: BYPASS_NO_IMPLEMENT_DRAFT=1."
101
+ deny "BLOCKED (a-release-row-is-the-rfc-and-the-map-is-the-approval-surface-architecture-rule / a-story-cannot-be-implemented-while-in-draft-implementation-requires-accepted-architecture-rule / the-story-accepted-gate-names-ratification-but-no-surface-enforces-it-problem): this commit references ${id}, but ${id} is not approved. A story is approved by its story map: every map in its \`story-maps:\` field must be ratified, and ${id} either names no map or names one that is unratified or has drifted since it was ratified. Ratify the map via /wr-itil:manage-story-map <MAP-ID> ratify, then re-commit. Bypass: BYPASS_NO_IMPLEMENT_DRAFT=1."
102
102
  fi
103
103
  done <<< "$STORIES"
104
104
 
@@ -1,25 +1,25 @@
1
1
  #!/bin/bash
2
- # wr-itil — SessionStart hook (P157, ADR-032 P157 amendment, ADR-040 precedent)
2
+ # wr-itil — SessionStart hook (ship-pending-questions-surface-hook-auto-surface-accumulated-outstanding-questions-from-afk-run-state-outstanding-questions-jsonl-at-session-start-when-user-returns-interactive-problem, governance-skill-invocation-patterns-foreground-background-with-deferred-question-resumption-architecture-rule ship-pending-questions-surface-hook-auto-surface-accumulated-outstanding-questions-from-afk-run-state-outstanding-questions-jsonl-at-session-start-when-user-returns-interactive-problem amendment, session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule precedent)
3
3
  #
4
4
  # Surfaces accumulated `outstanding_questions` entries from the AFK loop's
5
5
  # session-level queue file at .afk-run-state/outstanding-questions.jsonl
6
6
  # when the user starts a new interactive session. The queue is populated
7
7
  # between iters by /wr-itil:work-problems Step 5 / Step 2.5 / Step 2.5b
8
- # (P135 Phase 3 + ADR-044 6-class taxonomy schema).
8
+ # (decision-delegation-contract-agents-over-apply-rule-1-s-interactive-default-to-framework-resolved-decisions-codify-the-framework-resolution-boundary-afk-loop-s-batched-questions-as-deliverable-lazy-askuserquestion-measurement-problem Phase 3 + decision-delegation-contract-when-agents-act-on-the-framework-vs-ask-the-user-architecture-rule 6-class taxonomy schema).
9
9
  #
10
10
  # Without this hook, accumulated questions persist across session boundaries
11
11
  # unread when an AFK loop halts before its Step 2.5 / Step 2.5b emit fires
12
12
  # (manual stop, quota exhaustion, network failure). With this hook, the
13
13
  # accumulated queue surfaces deterministically on session start; the agent
14
- # fires AskUserQuestion in batches (<=4 per call per ADR-013 Rule 1) on the
14
+ # fires AskUserQuestion in batches (<=4 per call per structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 1) on the
15
15
  # user's first interactive turn and rewrites the queue file to remove
16
16
  # resolved entries.
17
17
  #
18
18
  # Wired from packages/itil/hooks/hooks.json SessionStart array with
19
- # matcher "startup" (per ADR-040 Option A). Silent exit if queue is missing,
20
- # empty, or whitespace-only per ADR-040 Mechanism step 1.
19
+ # matcher "startup" (per session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule Option A). Silent exit if queue is missing,
20
+ # empty, or whitespace-only per session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule Mechanism step 1.
21
21
  #
22
- # AFK-iter cross-context-leak prevention (ADR-032 line 127): when invoked
22
+ # AFK-iter cross-context-leak prevention (governance-skill-invocation-patterns-foreground-background-with-deferred-question-resumption-architecture-rule line 127): when invoked
23
23
  # inside a /wr-itil:work-problems iter subprocess (which inherits the
24
24
  # orchestrator's queue file), the orchestrator's Step 5 dispatch block sets
25
25
  # WR_SUPPRESS_PENDING_QUESTIONS=1 before each `claude -p` spawn. The hook
@@ -38,11 +38,11 @@ fi
38
38
 
39
39
  QUEUE_FILE="${CLAUDE_PROJECT_DIR:-.}/.afk-run-state/outstanding-questions.jsonl"
40
40
 
41
- # Silent-on-no-content per ADR-040 Mechanism step 1.
41
+ # Silent-on-no-content per session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule Mechanism step 1.
42
42
  [ -f "$QUEUE_FILE" ] || exit 0
43
43
  [ -s "$QUEUE_FILE" ] || exit 0
44
44
 
45
- # ADR-044 6-class taxonomy precedence — lower rank value = higher priority.
45
+ # decision-delegation-contract-when-agents-act-on-the-framework-vs-ask-the-user-architecture-rule 6-class taxonomy precedence — lower rank value = higher priority.
46
46
  # Strings match the JSONL schema in work-problems SKILL.md Step 5 verbatim.
47
47
  rank_for_category() {
48
48
  case "$1" in
@@ -85,7 +85,7 @@ ENTRIES_TSV=$(
85
85
 
86
86
  ENTRY_COUNT=$(printf '%s\n' "$ENTRIES_TSV" | wc -l | tr -d ' ')
87
87
 
88
- # Emit additionalContext on stdout (ADR-040 plain-stdout shape per
88
+ # Emit additionalContext on stdout (session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule plain-stdout shape per
89
89
  # session-start-briefing.sh precedent).
90
90
  {
91
91
  echo "PENDING QUESTIONS FROM PRIOR AFK LOOP — accumulated outstanding_questions"
@@ -93,7 +93,7 @@ ENTRY_COUNT=$(printf '%s\n' "$ENTRIES_TSV" | wc -l | tr -d ' ')
93
93
  echo ""
94
94
  echo "These are direction / deviation-approval / one-time-override / silent-framework"
95
95
  echo "/ taste / correction-followup observations queued by /wr-itil:work-problems"
96
- echo "iters per ADR-044 6-class taxonomy. Surface them via AskUserQuestion batched"
96
+ echo "iters per decision-delegation-contract-when-agents-act-on-the-framework-vs-ask-the-user-architecture-rule 6-class taxonomy. Surface them via AskUserQuestion batched"
97
97
  echo "<=4 per call (sequential when >4) on the user's first interactive turn,"
98
98
  echo "ranked deviation-approval > direction > one-time-override > silent-framework"
99
99
  echo "> taste > correction-followup. After resolving each entry, remove the"
@@ -117,7 +117,7 @@ ENTRY_COUNT=$(printf '%s\n' "$ENTRIES_TSV" | wc -l | tr -d ' ')
117
117
  echo ""
118
118
  if [ "$ENTRY_COUNT" -gt 4 ]; then
119
119
  echo "Note: ${ENTRY_COUNT} entries exceeds the AskUserQuestion <=4 per-call"
120
- echo "cap (ADR-013 Rule 1). Fire sequential calls — first 4 highest-ranked"
120
+ echo "cap (structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 1). Fire sequential calls — first 4 highest-ranked"
121
121
  echo "first, then the next batch, until the queue is drained."
122
122
  fi
123
123
  } 2>/dev/null
@@ -1,8 +1,8 @@
1
1
  #!/bin/bash
2
- # P165: PreToolUse:Bash hook — denies `git commit` invocations whose
2
+ # readme-refresh-enforcement-gap-iter-subprocess-commits-can-land-a-verifying-md-rename-without-staging-the-corresponding-verification-queue-row-in-docs-problems-readme-md-problem: PreToolUse:Bash hook — denies `git commit` invocations whose
3
3
  # staged set includes a `docs/problems/<state>/NNN-*.md` ticket change
4
4
  # but does NOT also stage a `docs/problems/README.md` refresh. Hook-
5
- # level enforcement replaces the declarative-only P094 / P062 contract
5
+ # level enforcement replaces the declarative-only problem-094-wr-itil-manage-problem-does-not-refresh-docs-problems-readme-md-on-ticket-creation-problem / problem-062-manage-problem-does-not-refresh-docs-problems-readme-md-on-single-ticket-transitions-fast-path-cache-goes-stale-silently-problem contract
6
6
  # in manage-problem SKILL.md Step 5 / Step 7 — iter subprocess commits
7
7
  # previously could ship a `.verifying.md` rename or Status edit without
8
8
  # the corresponding Verification Queue / WSJF Rankings row update in
@@ -12,14 +12,14 @@
12
12
  # Detection delegates to `lib/readme-refresh-detect.sh::detect_readme_refresh_required`.
13
13
  # When the helper returns 1, this hook emits PreToolUse deny JSON with
14
14
  # the offending ticket path inline and the literal `git add
15
- # docs/problems/README.md` recovery command, satisfying ADR-013
15
+ # docs/problems/README.md` recovery command, satisfying structured-user-interaction-for-governance-skill-decisions-architecture-rule
16
16
  # Rule 1's "deny redirects to a recovery path" contract via the
17
17
  # mechanical-recovery shape (no skill wrapper required — staging the
18
18
  # README is a single command).
19
19
  #
20
- # Allow paths (exit 0 silently per ADR-045 Pattern 1):
20
+ # Allow paths (exit 0 silently per hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule Pattern 1):
21
21
  # - tool_name != "Bash" (only Bash invocations are gated)
22
- # - command does not invoke (P268: leading-executable check
22
+ # - command does not invoke (hook-substring-matches-git-commit-anywhere-in-bash-command-not-just-actual-git-commit-invocations-problem: leading-executable check
23
23
  # `git commit` as its leading- via `lib/command-detect.sh`
24
24
  # effective command — replaces prior substring match
25
25
  # that misfired on grep/sed/cat
@@ -32,23 +32,23 @@
32
32
  # - parse failure on stdin (mirrors create-gate.sh fail-open)
33
33
  #
34
34
  # References:
35
- # ADR-005 — plugin testing strategy (hook bats live under hooks/test/).
36
- # ADR-009 — gate marker lifecycle (this hook deliberately does NOT
35
+ # plugin-testing-strategy-architecture-rule — plugin testing strategy (hook bats live under hooks/test/).
36
+ # gate-marker-lifecycle-ttl-drift-not-stop-hook-reset-architecture-rule — gate marker lifecycle (this hook deliberately does NOT
37
37
  # use markers; detection is per-invocation deterministic
38
- # — same precedent as P125 + P141).
39
- # ADR-013 Rule 1 — deny redirects with mechanical recovery.
40
- # ADR-014 — single-commit grain (the contract this hook enforces).
41
- # ADR-022 — `.verifying.md` lifecycle status.
42
- # ADR-038 — progressive disclosure / deny-message terseness budget.
43
- # ADR-045 — hook injection budget (Pattern 1 silent-on-pass; deny
38
+ # — same precedent as staging-trap-recurs-despite-documentation-hook-level-enforcement-candidate-problem + afk-iter-packages-plugin-commits-without-changesets-orchestrator-main-turn-back-fill-is-fragile-recovery-hook-level-enforcement-preferable-problem).
39
+ # structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 1 — deny redirects with mechanical recovery.
40
+ # governance-skills-commit-their-own-completed-work-architecture-rule — single-commit grain (the contract this hook enforces).
41
+ # problem-lifecycle-add-a-verification-pending-status-between-known-error-and-closed-architecture-rule — `.verifying.md` lifecycle status.
42
+ # progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule — progressive disclosure / deny-message terseness budget.
43
+ # hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule — hook injection budget (Pattern 1 silent-on-pass; deny
44
44
  # band ≤300 bytes for this hook).
45
- # P062 — parent (README refresh on transition contract).
46
- # P094 — parent (README refresh on creation contract).
47
- # P118 — sibling reconcile-readme recovery path.
48
- # P125 — sibling staging-trap hook (same enforcement-layer shape).
49
- # P141 — sibling changeset-discipline hook (same shape).
50
- # P165 — this hook.
51
- # P268 — leading-executable-token command-detect helper.
45
+ # problem-062-manage-problem-does-not-refresh-docs-problems-readme-md-on-single-ticket-transitions-fast-path-cache-goes-stale-silently-problem — parent (README refresh on transition contract).
46
+ # problem-094-wr-itil-manage-problem-does-not-refresh-docs-problems-readme-md-on-ticket-creation-problem — parent (README refresh on creation contract).
47
+ # docs-problems-readme-md-drifts-from-filesystem-truth-across-sessions-despite-refresh-on-create-and-refresh-on-transition-both-closed-problem — sibling reconcile-readme recovery path.
48
+ # staging-trap-recurs-despite-documentation-hook-level-enforcement-candidate-problem — sibling staging-trap hook (same enforcement-layer shape).
49
+ # afk-iter-packages-plugin-commits-without-changesets-orchestrator-main-turn-back-fill-is-fragile-recovery-hook-level-enforcement-preferable-problem — sibling changeset-discipline hook (same shape).
50
+ # readme-refresh-enforcement-gap-iter-subprocess-commits-can-land-a-verifying-md-rename-without-staging-the-corresponding-verification-queue-row-in-docs-problems-readme-md-problem — this hook.
51
+ # hook-substring-matches-git-commit-anywhere-in-bash-command-not-just-actual-git-commit-invocations-problem — leading-executable-token command-detect helper.
52
52
 
53
53
  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
54
54
  # shellcheck source=lib/readme-refresh-detect.sh
@@ -85,14 +85,14 @@ except:
85
85
  # `lib/command-detect.sh::command_invokes_git_commit`, which strips
86
86
  # common prefix shapes (leading whitespace, env-var assignments,
87
87
  # `cd <path> &&`) and checks whether the residual leading token pair
88
- # is literally `git commit`. P268: replaced the prior substring match
88
+ # is literally `git commit`. hook-substring-matches-git-commit-anywhere-in-bash-command-not-just-actual-git-commit-invocations-problem: replaced the prior substring match
89
89
  # `*"git commit"*` that misfired on non-commit Bash whose argument
90
90
  # vectors merely mentioned the phrase (grep/sed/cat-heredoc/echo).
91
91
  command_invokes_git_commit "$COMMAND" || exit 0
92
92
 
93
93
  # Run detection. Helper echoes offending ticket path on stdout when
94
94
  # detected; returns 1 in that case. Returns 0 (allow) on no-trap,
95
- # bypass env, a registered RISK_BYPASS commit-message trailer (P265
95
+ # bypass env, a registered RISK_BYPASS commit-message trailer (hook-does-not-recognise-risk-bypass-adr-031-migration-trailer-blocks-step-0a-auto-migrate-problem
96
96
  # `$COMMAND` is threaded in so the helper can inspect the trailer), or
97
97
  # fail-open (non-git tree, parse error).
98
98
  TRAPPED_TICKET=$(detect_readme_refresh_required "$COMMAND" 2>/dev/null) && exit 0
@@ -100,7 +100,7 @@ TRAPPED_TICKET=$(detect_readme_refresh_required "$COMMAND" 2>/dev/null) && exit
100
100
  # Extract the leading ticket-ID digits from the basename so the deny
101
101
  # names the ticket as `P<NNN>` rather than the full descriptive path
102
102
  # (problem tickets carry long slugs; embedding the full path can
103
- # exceed ADR-045 deny-band 300 bytes). `git status` reveals the exact
103
+ # exceed hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule deny-band 300 bytes). `git status` reveals the exact
104
104
  # staged path for recovery; the deny only needs to name the ticket
105
105
  # distinctly.
106
106
  BASENAME="${TRAPPED_TICKET##*/}"
@@ -111,14 +111,14 @@ case "$TICKET_NUM" in
111
111
  esac
112
112
 
113
113
  # Trap detected — emit deny with terse recovery.
114
- # Voice-tone budget per ADR-045 deny-band ≤300 bytes total. Names the
114
+ # Voice-tone budget per hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule deny-band ≤300 bytes total. Names the
115
115
  # offending ticket ID, the literal recovery command, the BYPASS env
116
- # var escape with correct propagation syntax (P231 / P173), and the
117
- # P165 cite. Inline-prefix `VAR=1 git commit ...` does NOT propagate
116
+ # var escape with correct propagation syntax (readme-refresh-discipline-hook-deny-message-advertises-bypass-readme-refresh-gate-1-inline-prefix-that-does-not-propagate-to-the-pretooluse-hook-recurrence-of-at-a-new-surface-problem / bypass-gate-env-vars-do-not-propagate-from-bash-subshell-to-pretooluse-hook-context-problem), and the
117
+ # readme-refresh-enforcement-gap-iter-subprocess-commits-can-land-a-verifying-md-rename-without-staging-the-corresponding-verification-queue-row-in-docs-problems-readme-md-problem cite. Inline-prefix `VAR=1 git commit ...` does NOT propagate
118
118
  # from a Bash subshell to PreToolUse hooks; the env field of
119
119
  # `.claude/settings.json` (or shell `export` before `claude` launch)
120
120
  # is the working path.
121
- REASON="BLOCKED: P165. ${TICKET_ID} needs README refresh: git add docs/problems/README.md. Bypass: BYPASS_README_REFRESH_GATE=1 via .claude/settings.json env (P173)."
121
+ REASON="BLOCKED: readme-refresh-enforcement-gap-iter-subprocess-commits-can-land-a-verifying-md-rename-without-staging-the-corresponding-verification-queue-row-in-docs-problems-readme-md-problem. ${TICKET_ID} needs README refresh: git add docs/problems/README.md. Bypass: BYPASS_README_REFRESH_GATE=1 via .claude/settings.json env (bypass-gate-env-vars-do-not-propagate-from-bash-subshell-to-pretooluse-hook-context-problem)."
122
122
 
123
123
  cat <<EOF
124
124
  {
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env bash
2
- # wr-itil — SessionStart hook (P378/RFC-030; ADR-066/068 oversight-nudge clone)
2
+ # wr-itil — SessionStart hook (rfc-lifecycle-is-not-self-maintaining-it-leans-on-human-memory-problem/rfc-lifecycle-self-maintenance-release-design; human-oversight-marker-wr-architect-review-decisions-drain-for-recorded-decisions-architecture-rule/068 oversight-nudge clone)
3
3
  #
4
4
  # Surfaces a one-line nudge when RFCs lack the human-oversight marker, so the
5
5
  # user can ratify them via /wr-itil:manage-rfc <RFC-NNN> (the accepted
6
6
  # transition ratifies RFC scope). Sibling of architect-oversight-nudge.sh
7
- # (ADR-066) and jtbd-oversight-nudge.sh (ADR-068); same class-B SessionStart
8
- # shape as the ADR-040 session-start surface — so ratification is auto-surfaced
9
- # every session instead of leaning on the user's memory (P378).
7
+ # (human-oversight-marker-wr-architect-review-decisions-drain-for-recorded-decisions-architecture-rule) and jtbd-oversight-nudge.sh (jtbd-persona-human-oversight-marker-wr-jtbd-confirm-jobs-and-personas-drain-sibling-of-architecture-rule); same class-B SessionStart
8
+ # shape as the session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule session-start surface — so ratification is auto-surfaced
9
+ # every session instead of leaning on the user's memory (rfc-lifecycle-is-not-self-maintaining-it-leans-on-human-memory-problem).
10
10
  #
11
11
  # Detection is token-cheap: delegates to detect-unoversighted-rfcs.sh (a grep
12
12
  # over docs/rfcs/ frontmatter — no body reads, no per-RFC LLM call). Silent
13
13
  # when the unoversighted count is zero (steady state once ratified).
14
14
  #
15
15
  # AFK self-suppress: shares the suite-wide WR_SUPPRESS_OVERSIGHT_NUDGE guard
16
- # with the architect + jtbd oversight nudges (ADR-068 § shared cross-plugin
16
+ # with the architect + jtbd oversight nudges (jtbd-persona-human-oversight-marker-wr-jtbd-confirm-jobs-and-personas-drain-sibling-of-architecture-rule § shared cross-plugin
17
17
  # contracts). AFK orchestrators export it once and every oversight nudge
18
18
  # self-suppresses — so this interactive ratify nudge never fires into an
19
- # absent-user subprocess (JTBD-006 friction guard). Only the literal "1"
20
- # suppresses. Silent-on-zero; fail-open; ADR-040 ≤2KB budget (one line).
19
+ # absent-user subprocess (progress-the-backlog-while-i-m-away-user-outcome friction guard). Only the literal "1"
20
+ # suppresses. Silent-on-zero; fail-open; session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule ≤2KB budget (one line).
21
21
 
22
22
  set -uo pipefail
23
23
 
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
- # P170: PostToolUse:Bash hook — detects `git commit` invocations whose
2
+ # 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: PostToolUse:Bash hook — detects `git commit` invocations whose
3
3
  # HEAD commit message carries a `Refs: RFC-<NNN>` trailer (the
4
- # commit-message RFC trailer convention introduced by ADR-060 Phase 1
4
+ # commit-message RFC trailer convention introduced by problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule Phase 1
5
5
  # item 12 + finding 8). For each such trailer, the hook checks whether
6
6
  # the driving problem ticket(s) `## RFCs` reverse-trace section lists
7
7
  # the RFC; emits a stderr advisory when stale.
@@ -14,14 +14,14 @@
14
14
  # `Refs: RFC-<NNN>` trailers but were authored OUTSIDE the RFC skills
15
15
  # and therefore did not run the inline refresh.
16
16
  #
17
- # Advisory-only per architect Q2 verdict + ADR-014 single-commit grain:
17
+ # Advisory-only per architect Q2 verdict + governance-skills-commit-their-own-completed-work-architecture-rule single-commit grain:
18
18
  # the hook NEVER auto-fixes (no follow-up commit; no working-tree edit
19
19
  # after the commit lands). It emits a stderr advisory pointing the
20
20
  # user at `/wr-itil:manage-rfc <RFC-NNN>` to refresh the reverse-trace
21
21
  # in a subsequent commit, OR at `wr-itil-reconcile-rfcs docs/rfcs
22
22
  # docs/problems` to verify drift in batch.
23
23
  #
24
- # Allow paths (silent-on-pass per ADR-045 Pattern 1):
24
+ # Allow paths (silent-on-pass per hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule Pattern 1):
25
25
  # - tool_name != "Bash" (only Bash invocations gated)
26
26
  # - command lacks `git commit` (non-commit Bash bypasses)
27
27
  # - BYPASS_RFC_TRAILER_ADVISORY=1 (env-var escape)
@@ -34,10 +34,10 @@
34
34
  # Multi-`Refs:` malformed-per-finding-8 advisory: when HEAD's commit
35
35
  # message carries multiple `Refs: RFC-<NNN>` trailer lines, the hook
36
36
  # emits a malformed-per-finding-8 advisory directing the user to split
37
- # the commit (one commit advances at most one RFC per ADR-060 finding
37
+ # the commit (one commit advances at most one RFC per problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule finding
38
38
  # 8). The split itself is user-side work; the hook flags only.
39
39
  #
40
- # Failmode (per ADR-013 Rule 6 fail-open): on parse error in the
40
+ # Failmode (per structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 fail-open): on parse error in the
41
41
  # trailer, on a Refs: trailer pointing to a non-existent RFC file
42
42
  # (could be a capture-rfc invocation in flight), on `git interpret-trailers`
43
43
  # failure — exit 0 silently. The reconcile-rfcs.sh batch surface
@@ -45,37 +45,37 @@
45
45
  # Confirmation criterion 3.
46
46
  #
47
47
  # Cost: one git invocation per `git commit` Bash call (~30-60ms). No
48
- # marker (per-invocation deterministic; mirrors P125 staging-detect.sh
49
- # and P141 itil-changeset-discipline.sh precedent).
48
+ # marker (per-invocation deterministic; mirrors staging-trap-recurs-despite-documentation-hook-level-enforcement-candidate-problem staging-detect.sh
49
+ # and afk-iter-packages-plugin-commits-without-changesets-orchestrator-main-turn-back-fill-is-fragile-recovery-hook-level-enforcement-preferable-problem itil-changeset-discipline.sh precedent).
50
50
  #
51
51
  # Command-shape detection delegates to
52
52
  # `lib/command-detect.sh::command_invokes_git_commit`, which strips
53
53
  # common prefix shapes (leading whitespace, env-var assignments,
54
54
  # `cd <path> &&`) and checks whether the residual leading token pair
55
- # is literally `git commit`. P274: replaced the prior substring match
55
+ # is literally `git commit`. itil-rfc-trailer-advisory-sh-hook-substring-matches-git-commit-anywhere-in-bash-command-sibling-problem: replaced the prior substring match
56
56
  # `*"git commit"*` that misfired on non-commit Bash whose argument
57
57
  # vectors merely mentioned the phrase (grep / sed / cat-heredoc /
58
58
  # echo / `git log --grep`).
59
59
  #
60
60
  # References:
61
- # ADR-005 — plugin testing strategy (hook bats live under hooks/test/).
62
- # ADR-013 Rule 6 — fail-open on missing inputs / parse errors.
63
- # ADR-014 — single-commit grain (this hook never auto-fixes via
61
+ # plugin-testing-strategy-architecture-rule — plugin testing strategy (hook bats live under hooks/test/).
62
+ # structured-user-interaction-for-governance-skill-decisions-architecture-rule Rule 6 — fail-open on missing inputs / parse errors.
63
+ # governance-skills-commit-their-own-completed-work-architecture-rule — single-commit grain (this hook never auto-fixes via
64
64
  # follow-up commit; advisory-only).
65
- # ADR-017 — shared-code sync pattern (command-detect.sh canonical at
65
+ # shared-code-duplicated-into-per-package-lib-kept-in-sync-by-script-ci-drift-check-architecture-rule — shared-code sync pattern (command-detect.sh canonical at
66
66
  # packages/shared/hooks/lib/).
67
- # ADR-038 — progressive disclosure / advisory band ≤300 bytes.
68
- # ADR-045 — hook injection budget; Pattern 1 silent-on-pass.
69
- # ADR-051 — load-bearing-from-the-start (drift detection ships at
67
+ # progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule — progressive disclosure / advisory band ≤300 bytes.
68
+ # hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule — hook injection budget; Pattern 1 silent-on-pass.
69
+ # windyroad-plugin-readmes-anchor-on-jtbd-job-ids-with-load-bearing-commit-hook-prose-woven-framing-architecture-rule — load-bearing-from-the-start (drift detection ships at
70
70
  # the same time as the convention; never deferred).
71
- # ADR-052 — behavioural-tests default; bats live alongside.
72
- # ADR-060 — Phase 1 item 12 + Confirmation criterion 3.
73
- # P170 — driving problem ticket.
74
- # P081 — behavioural tests preferred over structural greps.
75
- # P125 — sibling per-invocation no-marker hook precedent.
76
- # P141 — sibling commit-time gate hook precedent.
77
- # P268 — shared `command_invokes_git_commit` helper.
78
- # P274 — sibling-hook refactor: substring-match → helper here.
71
+ # behavioural-tests-default-for-skill-testing-architecture-rule — behavioural-tests default; bats live alongside.
72
+ # problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule — Phase 1 item 12 + Confirmation criterion 3.
73
+ # 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 — driving problem ticket.
74
+ # problem-081-structural-source-content-tests-are-wasteful-tdd-agent-should-reject-them-and-require-behavioural-tests-framework-stub-enhancements-problem — behavioural tests preferred over structural greps.
75
+ # staging-trap-recurs-despite-documentation-hook-level-enforcement-candidate-problem — sibling per-invocation no-marker hook precedent.
76
+ # afk-iter-packages-plugin-commits-without-changesets-orchestrator-main-turn-back-fill-is-fragile-recovery-hook-level-enforcement-preferable-problem — sibling commit-time gate hook precedent.
77
+ # hook-substring-matches-git-commit-anywhere-in-bash-command-not-just-actual-git-commit-invocations-problem — shared `command_invokes_git_commit` helper.
78
+ # itil-rfc-trailer-advisory-sh-hook-substring-matches-git-commit-anywhere-in-bash-command-sibling-problem — sibling-hook refactor: substring-match → helper here.
79
79
 
80
80
  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
81
81
  # shellcheck source=lib/command-detect.sh
@@ -106,7 +106,7 @@ except:
106
106
  print('')
107
107
  " 2>/dev/null || echo "")
108
108
 
109
- # Only fire on actual `git commit` invocations. P274: delegates to the
109
+ # Only fire on actual `git commit` invocations. itil-rfc-trailer-advisory-sh-hook-substring-matches-git-commit-anywhere-in-bash-command-sibling-problem: delegates to the
110
110
  # shared `command_invokes_git_commit` helper for leading-executable
111
111
  # semantics (was substring match prone to grep/sed/echo false positives).
112
112
  command_invokes_git_commit "$COMMAND" || exit 0
@@ -138,7 +138,7 @@ TRAILERS=$(printf '%s\n' "$COMMIT_MSG" | git interpret-trailers --parse 2>/dev/n
138
138
  # Multi-Refs: malformed-per-finding-8 advisory.
139
139
  TRAILER_COUNT=$(printf '%s\n' "$TRAILERS" | wc -l | tr -d ' ')
140
140
  if [ "$TRAILER_COUNT" -gt 1 ]; then
141
- echo "P170 ADVISORY: HEAD commit carries ${TRAILER_COUNT} Refs: RFC trailers (malformed-per-finding-8 — one commit advances at most one RFC per ADR-060). Recovery: split the commit; rerun /wr-itil:manage-rfc on each RFC. Bypass: BYPASS_RFC_TRAILER_ADVISORY=1." >&2
141
+ echo "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 ADVISORY: HEAD commit carries ${TRAILER_COUNT} Refs: RFC trailers (malformed-per-finding-8 — one commit advances at most one RFC per problem-rfc-story-framework-with-mandatory-problem-trace-and-unified-problem-ontology-architecture-rule). Recovery: split the commit; rerun /wr-itil:manage-rfc on each RFC. Bypass: BYPASS_RFC_TRAILER_ADVISORY=1." >&2
142
142
  exit 0
143
143
  fi
144
144
 
@@ -209,6 +209,6 @@ done
209
209
  # No drift → silent.
210
210
  [ -n "$STALE_PIDS" ] || exit 0
211
211
 
212
- # Emit advisory (per ADR-045 ≤300 byte band; stderr; exit 0).
213
- echo "P170 ADVISORY: HEAD commit ${RFC_ID} trailer; problem(s) ${STALE_PIDS} ## RFCs section stale (skill-side refresh missed). Recovery: /wr-itil:manage-rfc ${RFC_ID} OR wr-itil-reconcile-rfcs docs/rfcs docs/problems. Bypass: BYPASS_RFC_TRAILER_ADVISORY=1." >&2
212
+ # Emit advisory (per hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule ≤300 byte band; stderr; exit 0).
213
+ echo "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 ADVISORY: HEAD commit ${RFC_ID} trailer; problem(s) ${STALE_PIDS} ## RFCs section stale (skill-side refresh missed). Recovery: /wr-itil:manage-rfc ${RFC_ID} OR wr-itil-reconcile-rfcs docs/rfcs docs/problems. Bypass: BYPASS_RFC_TRAILER_ADVISORY=1." >&2
214
214
  exit 0
@@ -1,12 +1,12 @@
1
1
  #!/bin/bash
2
- # P142 / ADR-050: runtime-SID instrumentation PreToolUse hook.
2
+ # phase-4-get-current-session-id-helper-system-priority-bug-subprocess-sids-win-mtime-selection-over-orchestrator-sid-problem / capture-the-runtime-stdin-session-id-via-a-pretooluse-hook-so-the-create-gate-marker-binds-to-the-same-sid-the-runtime-hook-will-see-architecture-rule: runtime-SID instrumentation PreToolUse hook.
3
3
  #
4
4
  # Captures the runtime stdin `session_id` from Claude Code's PreToolUse
5
5
  # JSON payload and writes it to a per-machine, per-user, per-project
6
6
  # marker file. The `get_current_session_id` helper (lib/session-id.sh)
7
7
  # reads this marker as the authoritative current-session UUID, replacing
8
8
  # the Phase 3 mtime-based announce-marker selection that misfired in
9
- # orchestrator main turns AFTER subprocess dispatch (P142 ticket).
9
+ # orchestrator main turns AFTER subprocess dispatch (phase-4-get-current-session-id-helper-system-priority-bug-subprocess-sids-win-mtime-selection-over-orchestrator-sid-problem ticket).
10
10
  #
11
11
  # Why a NEW PreToolUse hook (not an extension of an existing one):
12
12
  # - manage-problem-enforce-create.sh already runs on PreToolUse:Write,
@@ -15,8 +15,8 @@
15
15
  # ensures the marker is in place by the time enforce-create reads.
16
16
  # - The architect-enforce-edit / jtbd-enforce-edit / tdd-enforce hooks
17
17
  # are owned by sibling plugins; cross-plugin coupling is rejected
18
- # per ADR-017 (shared-code-sync).
19
- # - A standalone, single-purpose hook is the cleanest fit for ADR-045
18
+ # per shared-code-duplicated-into-per-package-lib-kept-in-sync-by-script-ci-drift-check-architecture-rule (shared-code-sync).
19
+ # - A standalone, single-purpose hook is the cleanest fit for hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule
20
20
  # Pattern 1 (silent-on-pass, side-effect-only).
21
21
  #
22
22
  # Matcher: PreToolUse:Bash|Write|Edit|Read covers the tool calls that
@@ -25,7 +25,7 @@
25
25
  # Read is included for completeness — every tool call that fires a
26
26
  # PreToolUse hook contributes a fresh marker).
27
27
  #
28
- # ADR-045 Pattern 1 binding: this hook MUST emit 0 bytes on stdout.
28
+ # hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule Pattern 1 binding: this hook MUST emit 0 bytes on stdout.
29
29
  # Adding stdout output would burn the per-tool-call context budget.
30
30
  # All side effects are filesystem writes; observability is via the
31
31
  # marker file itself.
@@ -37,12 +37,12 @@
37
37
  # announce-marker priority logic.
38
38
  #
39
39
  # References:
40
- # ADR-050 — runtime-SID instrumentation surface (this hook).
41
- # ADR-048 — gate-misfire recovery (superseded by ADR-050).
42
- # ADR-045 — hook injection budget; Pattern 1 binding.
43
- # ADR-038 — announce-marker contract (cold-path fallback consumer).
44
- # P142 — the ticket this hook closes.
45
- # P124 — Phase 3 helper this hook complements.
40
+ # 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 — runtime-SID instrumentation surface (this hook).
41
+ # documented-recovery-from-gate-misfire-is-the-prescribed-surface-not-bypass-architecture-rule — gate-misfire recovery (superseded by 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).
42
+ # hook-injection-budget-policy-for-pretooluse-and-posttooluse-hooks-architecture-rule — hook injection budget; Pattern 1 binding.
43
+ # progressive-disclosure-once-per-session-budget-for-userpromptsubmit-governance-prose-architecture-rule — announce-marker contract (cold-path fallback consumer).
44
+ # phase-4-get-current-session-id-helper-system-priority-bug-subprocess-sids-win-mtime-selection-over-orchestrator-sid-problem — the ticket this hook closes.
45
+ # wr-itil-manage-problem-step-2-substep-7-session-id-discovery-is-brittle-agent-has-no-env-var-must-scrape-marker-filenames-problem — Phase 3 helper this hook complements.
46
46
 
47
47
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
48
48
  # shellcheck source=lib/runtime-sid.sh
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # wr-itil — SessionStart hook (P474 / RFC-059 / STORY-054).
2
+ # wr-itil — SessionStart hook (oversight-hash-treats-the-status-body-mirror-as-substance-so-an-accept-transition-self-invalidates-its-own-ratification-problem / lifecycle-state-is-not-duplicated-inside-hashed-story-content-release-design / lifecycle-transitions-preserve-a-story-s-ratification-delivery-story).
3
3
  #
4
4
  # Surfaces a one-line nudge when any story still carries the `**Status**:` body
5
5
  # line that duplicates its frontmatter `status:`. That duplicate is why an accept
@@ -12,27 +12,27 @@
12
12
  # adopter's repo — as a control it depends entirely on someone remembering. A
13
13
  # maintenance action with no automatic trigger does not happen, so artefacts
14
14
  # predating the fix would keep the defect indefinitely while newly captured
15
- # stories were immune. JTBD-009 already sanctions this shape: "Idempotency is
15
+ # stories were immune. migrate-adopter-artefacts-when-a-plugin-layout-evolves-user-outcome already sanctions this shape: "Idempotency is
16
16
  # what makes the speculative invocation safe — and what makes the skill safe to
17
17
  # wire into bootstrap / install flows."
18
18
  #
19
- # NUDGE ONLY — this hook MUST NOT run the migration. JTBD-009's ratified
19
+ # NUDGE ONLY — this hook MUST NOT run the migration. migrate-adopter-artefacts-when-a-plugin-layout-evolves-user-outcome's ratified
20
20
  # "Foreground-synchronous + self-committed" outcome is explicit that the
21
21
  # developer reviews the rewritten artefacts before they ship, so migrating
22
22
  # unattended would breach a ratified outcome rather than serve it.
23
23
  #
24
- # Names the ADR-049 PATH shim, never a repo-relative `packages/...` path — the
24
+ # Names the plugin-bundled-scripts-invoked-from-skill-md-resolve-via-bin-on-path-architecture-rule PATH shim, never a repo-relative `packages/...` path — the
25
25
  # latter resolves only in the source monorepo, which is exactly the blind spot
26
- # source-repo dogfooding hides (P151/P153/P219/P317).
26
+ # source-repo dogfooding hides (published-skills-reference-repo-relative-script-paths-adopter-bash-invocations-hard-fail-at-step-0-problem/published-skills-enumerate-repo-relative-directories-adopter-sessions-get-zero-byte-attribution-rows-from-missing-trees-problem/manage-problem-skill-md-uses-repo-relative-script-path-that-fails-for-plugin-installed-users-problem/capture-problem-capture-rfc-manage-problem-step-2-create-gate-marker-step-sources-repo-relative-packages-itil-hooks-lib-sh-fails-in-adopter-installs-recurring-published-path-class-problem).
27
27
  #
28
28
  # Detection is token-cheap: one grep over story filenames, no body reads beyond
29
29
  # the match, no LLM call. Silent when clean (the steady state after migrating),
30
- # fail-open, one line, within the ADR-040 ≤2KB budget.
30
+ # fail-open, one line, within the session-start-briefing-surface-sessionstart-hook-over-tiered-directory-indexed-readme-architecture-rule ≤2KB budget.
31
31
  #
32
32
  # AFK self-suppress: shares the suite-wide WR_SUPPRESS_OVERSIGHT_NUDGE guard
33
33
  # with the architect / jtbd / itil-rfc oversight nudges, so an orchestrator
34
34
  # exports it once and every nudge self-suppresses rather than firing at an
35
- # absent user (JTBD-006 friction guard). Only the literal "1" suppresses.
35
+ # absent user (progress-the-backlog-while-i-m-away-user-outcome friction guard). Only the literal "1" suppresses.
36
36
 
37
37
  set -uo pipefail
38
38
 
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
- # P123: shared block-list helper for the inbound-report block mechanism.
3
- # Per ADR-046 §v1 implementation contract — audit-log-only.
2
+ # blocked-user-list-mechanism-for-inbound-report-management-refuse-future-tickets-from-clearly-malicious-reporters-problem: shared block-list helper for the inbound-report block mechanism.
3
+ # Per blocked-reporters-persistence-per-repo-hashed-id-audit-log-first-architecture-rule §v1 implementation contract — audit-log-only.
4
4
  #
5
5
  # Functions:
6
6
  # is_blocked(<reporter-id-hash>)
@@ -17,16 +17,16 @@
17
17
  # Helper does NOT compute hashes. Caller supplies an opaque hex string;
18
18
  # the helper validates SHA-256-width hex shape (64 chars, [0-9a-f]).
19
19
  # Rationale (architect verdict, this iter): keeping the helper GitHub-
20
- # agnostic means non-GitHub channel adoption (out-of-scope per ADR-046
20
+ # agnostic means non-GitHub channel adoption (out-of-scope per blocked-reporters-persistence-per-repo-hashed-id-audit-log-first-architecture-rule
21
21
  # §Reassessment) wouldn't require helper changes — only the hashing
22
22
  # step on the caller side would differ.
23
23
  #
24
24
  # Persistence:
25
25
  # $BLOCK_LIST_FILE — default `docs/blocked-reporters.json`. JSON array
26
- # of hash strings. Tracked in git per ADR-046.
26
+ # of hash strings. Tracked in git per blocked-reporters-persistence-per-repo-hashed-id-audit-log-first-architecture-rule.
27
27
  # $AUDIT_LOG_FILE — default `docs/blocked-reporters.audit.jsonl`.
28
28
  # One JSON object per line (append-only). Five-field
29
- # shape per ADR-046 Q2: type, reporter_id_hash,
29
+ # shape per blocked-reporters-persistence-per-repo-hashed-id-audit-log-first-architecture-rule Q2: type, reporter_id_hash,
30
30
  # evidence_ticket, timestamp, author.
31
31
  #
32
32
  # Both file paths are relative to the caller's CWD so test fixtures
@@ -39,20 +39,20 @@
39
39
  # cycle for append).
40
40
  #
41
41
  # References:
42
- # ADR-005 — plugin testing strategy (helper bats live alongside).
43
- # ADR-014 — governance skills commit their own work (this helper is
44
- # called by future P079 / report-upstream consumers; their
42
+ # plugin-testing-strategy-architecture-rule — plugin testing strategy (helper bats live alongside).
43
+ # governance-skills-commit-their-own-completed-work-architecture-rule — governance skills commit their own work (this helper is
44
+ # called by future problem-079-no-inbound-sync-of-upstream-reported-problems-reports-filed-via-the-intake-templates-never-surface-in-the-local-backlog-problem / report-upstream consumers; their
45
45
  # commits include the block-list mutation).
46
- # ADR-017 — shared-code-sync pattern (helper ships ahead of consumers).
47
- # ADR-022 — verification-pending status (P123 ships audit-log-only,
46
+ # shared-code-duplicated-into-per-package-lib-kept-in-sync-by-script-ci-drift-check-architecture-rule — shared-code-sync pattern (helper ships ahead of consumers).
47
+ # problem-lifecycle-add-a-verification-pending-status-between-known-error-and-closed-architecture-rule — verification-pending status (blocked-user-list-mechanism-for-inbound-report-management-refuse-future-tickets-from-clearly-malicious-reporters-problem ships audit-log-only,
48
48
  # transitions to verifying; full enforcement in future iters).
49
- # ADR-029 — diagnose before implement (ADR-046 is the diagnosis).
50
- # ADR-030 — repo-local skills / per-repo artefact precedent.
51
- # ADR-037 — skill testing strategy (this is hook-shared-helper, not
49
+ # diagnose-before-implement-structured-hypothesis-evidence-red-for-the-right-reason-gate-architecture-rule — diagnose before implement (blocked-reporters-persistence-per-repo-hashed-id-audit-log-first-architecture-rule is the diagnosis).
50
+ # repo-local-skills-for-project-specific-workflow-tooling-architecture-rule — repo-local skills / per-repo artefact precedent.
51
+ # skill-testing-strategy-contract-assertion-bats-companion-to-architecture-rule — skill testing strategy (this is hook-shared-helper, not
52
52
  # skill content; bats partition under hooks/test/).
53
- # ADR-046 — blocked-reporters persistence (proposed → accepted with
53
+ # blocked-reporters-persistence-per-repo-hashed-id-audit-log-first-architecture-rule — blocked-reporters persistence (proposed → accepted with
54
54
  # this iter); §v1 implementation contract names this helper.
55
- # P123 — primary ticket.
55
+ # blocked-user-list-mechanism-for-inbound-report-management-refuse-future-tickets-from-clearly-malicious-reporters-problem — primary ticket.
56
56
 
57
57
  # Default paths — caller's CWD relative. Override for tests by exporting
58
58
  # BLOCK_LIST_FILE / AUDIT_LOG_FILE before sourcing.
@@ -62,7 +62,7 @@
62
62
  # SHA-256 hex width (64 chars). Helper rejects any input that doesn't
63
63
  # match this shape — per architect verdict, we don't allow alternate
64
64
  # hash widths in v1 (single-shape contract is simpler to reason about
65
- # and the JTBD-101 "decide once, encode it" pattern wins here).
65
+ # and the extend-the-suite-with-new-plugins-user-outcome "decide once, encode it" pattern wins here).
66
66
  _BLOCK_LIST_HASH_RE='^[0-9a-f]{64}$'
67
67
 
68
68
  # Validate that a string is SHA-256-width hex. Returns 0 on match.
@@ -80,7 +80,7 @@ _block_list_ensure_file() {
80
80
  fi
81
81
  }
82
82
 
83
- # Append one JSONL audit-log entry. Five-field shape per ADR-046 Q2.
83
+ # Append one JSONL audit-log entry. Five-field shape per blocked-reporters-persistence-per-repo-hashed-id-audit-log-first-architecture-rule Q2.
84
84
  # `evidence_ticket` carries the reason string for unblock entries
85
85
  # (type-tagged; the unblock reason reuses the same slot).
86
86
  _block_list_audit_append() {