@windyroad/itil 1.2.0 → 2.0.0-preview.1111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/.agents/plugins/marketplace.json +12 -0
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +42 -0
  4. package/README.md +34 -25
  5. package/agents/hang-off-check.md +34 -34
  6. package/bin/install.mjs +71 -5
  7. package/bin/wr-itil-catchup-scan +4 -4
  8. package/bin/wr-itil-check-deferred-placeholder-staleness +4 -4
  9. package/bin/wr-itil-check-fail-soft-skip-discipline +4 -4
  10. package/bin/wr-itil-check-fix-rfc-trace +4 -4
  11. package/bin/wr-itil-check-locale-discipline +4 -4
  12. package/bin/wr-itil-check-outbound-responses-staleness +4 -4
  13. package/bin/wr-itil-check-problems-readme-budget +4 -4
  14. package/bin/wr-itil-check-rfc-has-stories +4 -4
  15. package/bin/wr-itil-check-rfc-stories-ratified +4 -4
  16. package/bin/wr-itil-check-ticket-jtbd-ratification +4 -4
  17. package/bin/wr-itil-check-upstream-cache-staleness +4 -4
  18. package/bin/wr-itil-check-upstream-responses +4 -4
  19. package/bin/wr-itil-classify-readme-drift +4 -4
  20. package/bin/wr-itil-derive-release-vehicle +4 -4
  21. package/bin/wr-itil-detect-unratified-stories-maps +4 -4
  22. package/bin/wr-itil-effort-tally +4 -4
  23. package/bin/wr-itil-enumerate-postrelease-kv-candidates +4 -4
  24. package/bin/wr-itil-evaluate-relevance +4 -4
  25. package/bin/wr-itil-mark-create-gate +4 -4
  26. package/bin/wr-itil-mark-story-oversight-confirmed +4 -4
  27. package/bin/wr-itil-migrate-problems-layout +4 -4
  28. package/bin/wr-itil-migrate-story-status-mirror +4 -4
  29. package/bin/wr-itil-next-rfc-id +4 -4
  30. package/bin/wr-itil-plugin-exercise-index +4 -4
  31. package/bin/wr-itil-plugin-maturity-populate +4 -4
  32. package/bin/wr-itil-plugin-maturity-render +4 -4
  33. package/bin/wr-itil-plugin-validate-ci-gate +4 -4
  34. package/bin/wr-itil-reconcile-readme +4 -4
  35. package/bin/wr-itil-reconcile-rfcs +4 -4
  36. package/bin/wr-itil-reconcile-stories +4 -4
  37. package/bin/wr-itil-reconcile-story-maps +4 -4
  38. package/bin/wr-itil-render-story-map +4 -4
  39. package/bin/wr-itil-resolve-governance-plugin-dirs +4 -4
  40. package/bin/wr-itil-skill-invocations +4 -4
  41. package/bin/wr-itil-story-map-edit +4 -4
  42. package/bin/wr-itil-story-map-query +4 -4
  43. package/bin/wr-itil-update-jtbd-references-section +4 -4
  44. package/bin/wr-itil-update-problem-references-section +4 -4
  45. package/bin/wr-itil-update-problem-rfcs-section +4 -4
  46. package/bin/wr-itil-update-rfc-commits-section +4 -4
  47. package/bin/wr-itil-update-rfc-references-section +4 -4
  48. package/bin/wr-itil-verify-iter-summary +4 -4
  49. package/hooks/itil-assistant-output-gate.sh +3 -3
  50. package/hooks/itil-assistant-output-review.sh +5 -5
  51. package/hooks/itil-bash-polling-antipattern-detect.sh +11 -11
  52. package/hooks/itil-changeset-discipline.sh +24 -24
  53. package/hooks/itil-claude-space-protection.sh +21 -14
  54. package/hooks/itil-codex-dispatch.sh +164 -0
  55. package/hooks/itil-commit-trailer-transition-advisory.sh +11 -11
  56. package/hooks/itil-correction-detect.sh +8 -8
  57. package/hooks/itil-deferral-cadence-gate.sh +23 -23
  58. package/hooks/itil-fictional-defer-detect.sh +16 -16
  59. package/hooks/itil-fix-title-lifecycle-advisory.sh +11 -11
  60. package/hooks/itil-mid-loop-ask-detect.sh +14 -14
  61. package/hooks/itil-no-implement-draft-gate.sh +18 -18
  62. package/hooks/itil-pending-questions-surface.sh +11 -11
  63. package/hooks/itil-readme-refresh-discipline.sh +27 -27
  64. package/hooks/itil-rfc-oversight-nudge.sh +7 -7
  65. package/hooks/itil-rfc-trailer-advisory.sh +28 -28
  66. package/hooks/itil-runtime-sid-marker.sh +11 -11
  67. package/hooks/itil-story-mirror-migration-nudge.sh +7 -7
  68. package/hooks/lib/block-list.sh +17 -17
  69. package/hooks/lib/changeset-detect.sh +27 -27
  70. package/hooks/lib/claude-space-gate.sh +23 -15
  71. package/hooks/lib/command-detect.sh +12 -12
  72. package/hooks/lib/create-gate.sh +9 -39
  73. package/hooks/lib/detectors.sh +12 -12
  74. package/hooks/lib/readme-refresh-detect.sh +51 -51
  75. package/hooks/lib/runtime-sid.sh +12 -12
  76. package/hooks/lib/session-id.sh +28 -28
  77. package/hooks/lib/session-marker.sh +1 -1
  78. package/hooks/lib/staging-detect.sh +13 -13
  79. package/hooks/manage-problem-enforce-create.sh +16 -27
  80. package/hooks/p057-staging-trap-detect.sh +18 -18
  81. package/hooks/pre-publish-intake-gate.sh +5 -5
  82. package/hooks/staleness-check.sh +6 -6
  83. package/hooks-codex/hooks.json +57 -0
  84. package/lib/check-deferred-placeholder-staleness.sh +10 -10
  85. package/lib/check-outbound-responses-staleness.sh +2 -2
  86. package/lib/check-upstream-cache-staleness.sh +2 -2
  87. package/lib/derive-first-dispatch.sh +19 -19
  88. package/lib/enumerate-postrelease-kv-candidates.sh +18 -18
  89. package/lib/migrate-problems-layout.sh +12 -12
  90. package/lib/story-oversight.sh +27 -27
  91. package/package.json +16 -3
  92. package/scripts/catchup-scan.sh +25 -25
  93. package/scripts/check-fail-soft-skip-discipline.sh +10 -10
  94. package/scripts/check-fix-rfc-trace.sh +8 -8
  95. package/scripts/check-locale-discipline.sh +13 -13
  96. package/scripts/check-problems-readme-budget.sh +12 -12
  97. package/scripts/check-rfc-has-stories.sh +7 -7
  98. package/scripts/check-rfc-rejected-alternatives.sh +11 -11
  99. package/scripts/check-rfc-stories-ratified.sh +9 -9
  100. package/scripts/check-ticket-jtbd-ratification.sh +10 -10
  101. package/scripts/check-upstream-responses.sh +22 -22
  102. package/scripts/classify-readme-drift.sh +13 -13
  103. package/scripts/codex-agent.mjs +104 -0
  104. package/scripts/derive-release-vehicle.sh +23 -23
  105. package/scripts/detect-unoversighted-rfcs.sh +3 -3
  106. package/scripts/detect-unratified-stories-maps.sh +5 -5
  107. package/scripts/effort-tally.sh +10 -10
  108. package/scripts/evaluate-relevance.sh +16 -16
  109. package/scripts/mark-create-gate.sh +4 -4
  110. package/scripts/mark-story-oversight-confirmed.sh +14 -14
  111. package/scripts/migrate-story-status-mirror.sh +6 -6
  112. package/scripts/next-rfc-id.sh +5 -5
  113. package/scripts/plugin-exercise-index.sh +26 -26
  114. package/scripts/plugin-maturity-populate.sh +38 -38
  115. package/scripts/plugin-maturity-render.sh +26 -26
  116. package/scripts/plugin-validate-ci-gate.sh +14 -14
  117. package/scripts/reconcile-readme.sh +23 -23
  118. package/scripts/reconcile-rfcs.sh +13 -13
  119. package/scripts/reconcile-stories.sh +12 -12
  120. package/scripts/reconcile-story-maps.sh +6 -6
  121. package/scripts/render-story-map.mjs +24 -24
  122. package/scripts/render-story-map.sh +3 -3
  123. package/scripts/resolve-governance-plugin-dirs.sh +10 -10
  124. package/scripts/run-check-deferred-placeholder-staleness.sh +3 -3
  125. package/scripts/run-check-outbound-responses-staleness.sh +3 -3
  126. package/scripts/run-check-upstream-cache-staleness.sh +3 -3
  127. package/scripts/run-enumerate-postrelease-kv-candidates.sh +3 -3
  128. package/scripts/run-migrate-problems-layout.sh +3 -3
  129. package/scripts/skill-invocations.sh +29 -29
  130. package/scripts/story-map-edit.mjs +6 -6
  131. package/scripts/story-map-edit.sh +3 -3
  132. package/scripts/story-map-query.mjs +8 -8
  133. package/scripts/story-map-query.sh +3 -3
  134. package/scripts/update-jtbd-references-section.sh +8 -8
  135. package/scripts/update-problem-references-section.sh +12 -12
  136. package/scripts/update-problem-rfcs-section.sh +9 -9
  137. package/scripts/update-rfc-commits-section.sh +7 -7
  138. package/scripts/update-rfc-references-section.sh +3 -3
  139. package/scripts/update-story-references-section.sh +5 -5
  140. package/scripts/verify-iter-summary.sh +3 -3
  141. package/skills/capture-problem/REFERENCE.md +33 -33
  142. package/skills/capture-problem/SKILL.md +108 -108
  143. package/skills/capture-problem/agents/openai.yaml +3 -0
  144. package/skills/capture-rfc/SKILL.md +21 -323
  145. package/skills/capture-rfc/agents/openai.yaml +3 -0
  146. package/skills/capture-story/SKILL.md +65 -65
  147. package/skills/capture-story/agents/openai.yaml +3 -0
  148. package/skills/capture-story-map/SKILL.md +31 -31
  149. package/skills/capture-story-map/agents/openai.yaml +3 -0
  150. package/skills/check-upstream-responses/SKILL.md +38 -38
  151. package/skills/check-upstream-responses/agents/openai.yaml +3 -0
  152. package/skills/close-incident/SKILL.md +25 -25
  153. package/skills/close-incident/agents/openai.yaml +3 -0
  154. package/skills/link-incident/SKILL.md +22 -22
  155. package/skills/link-incident/agents/openai.yaml +3 -0
  156. package/skills/list-incidents/SKILL.md +9 -9
  157. package/skills/list-incidents/agents/openai.yaml +3 -0
  158. package/skills/list-problems/SKILL.md +17 -17
  159. package/skills/list-problems/agents/openai.yaml +3 -0
  160. package/skills/list-stories/SKILL.md +23 -23
  161. package/skills/list-stories/agents/openai.yaml +3 -0
  162. package/skills/list-story-maps/SKILL.md +9 -9
  163. package/skills/list-story-maps/agents/openai.yaml +3 -0
  164. package/skills/manage-incident/SKILL.md +59 -59
  165. package/skills/manage-incident/agents/openai.yaml +3 -0
  166. package/skills/manage-problem/SKILL.md +222 -222
  167. package/skills/manage-problem/agents/openai.yaml +3 -0
  168. package/skills/manage-rfc/SKILL.md +62 -62
  169. package/skills/manage-rfc/agents/openai.yaml +3 -0
  170. package/skills/manage-story/SKILL.md +49 -49
  171. package/skills/manage-story/agents/openai.yaml +3 -0
  172. package/skills/manage-story-map/SKILL.md +30 -30
  173. package/skills/manage-story-map/agents/openai.yaml +3 -0
  174. package/skills/mitigate-incident/SKILL.md +40 -40
  175. package/skills/mitigate-incident/agents/openai.yaml +3 -0
  176. package/skills/reconcile-readme/SKILL.md +28 -28
  177. package/skills/reconcile-readme/agents/openai.yaml +3 -0
  178. package/skills/reconcile-stories/SKILL.md +17 -17
  179. package/skills/reconcile-stories/agents/openai.yaml +3 -0
  180. package/skills/reconcile-story-maps/SKILL.md +11 -11
  181. package/skills/reconcile-story-maps/agents/openai.yaml +3 -0
  182. package/skills/report-upstream/SKILL.md +73 -73
  183. package/skills/report-upstream/agents/openai.yaml +3 -0
  184. package/skills/restore-incident/SKILL.md +28 -28
  185. package/skills/restore-incident/agents/openai.yaml +3 -0
  186. package/skills/review-problems/SKILL.md +129 -129
  187. package/skills/review-problems/agents/openai.yaml +3 -0
  188. package/skills/scaffold-intake/SKILL.md +26 -26
  189. package/skills/scaffold-intake/agents/openai.yaml +3 -0
  190. package/skills/transition-problem/SKILL.md +85 -85
  191. package/skills/transition-problem/agents/openai.yaml +3 -0
  192. package/skills/transition-problems/SKILL.md +69 -69
  193. package/skills/transition-problems/agents/openai.yaml +3 -0
  194. package/skills/update-upstream/SKILL.md +97 -97
  195. package/skills/update-upstream/agents/openai.yaml +3 -0
  196. package/skills/work-problem/SKILL.md +42 -42
  197. package/skills/work-problem/agents/openai.yaml +3 -0
  198. package/skills/work-problems/SKILL.md +327 -327
  199. package/skills/work-problems/agents/openai.yaml +3 -0
  200. package/skills-codex/capture-problem/REFERENCE.md +139 -0
  201. package/skills-codex/capture-problem/SKILL.md +438 -0
  202. package/skills-codex/capture-problem/agents/openai.yaml +3 -0
  203. package/skills-codex/capture-rfc/SKILL.md +45 -0
  204. package/skills-codex/capture-rfc/agents/openai.yaml +3 -0
  205. package/skills-codex/capture-story/SKILL.md +407 -0
  206. package/skills-codex/capture-story/agents/openai.yaml +3 -0
  207. package/skills-codex/capture-story-map/SKILL.md +286 -0
  208. package/skills-codex/capture-story-map/agents/openai.yaml +3 -0
  209. package/skills-codex/check-upstream-responses/SKILL.md +160 -0
  210. package/skills-codex/check-upstream-responses/agents/openai.yaml +3 -0
  211. package/skills-codex/close-incident/SKILL.md +192 -0
  212. package/skills-codex/close-incident/agents/openai.yaml +3 -0
  213. package/skills-codex/link-incident/SKILL.md +173 -0
  214. package/skills-codex/link-incident/agents/openai.yaml +3 -0
  215. package/skills-codex/list-incidents/SKILL.md +92 -0
  216. package/skills-codex/list-incidents/agents/openai.yaml +3 -0
  217. package/skills-codex/list-problems/SKILL.md +126 -0
  218. package/skills-codex/list-problems/agents/openai.yaml +3 -0
  219. package/skills-codex/list-stories/SKILL.md +170 -0
  220. package/skills-codex/list-stories/agents/openai.yaml +3 -0
  221. package/skills-codex/list-story-maps/SKILL.md +104 -0
  222. package/skills-codex/list-story-maps/agents/openai.yaml +3 -0
  223. package/skills-codex/manage-incident/SKILL.md +378 -0
  224. package/skills-codex/manage-incident/agents/openai.yaml +3 -0
  225. package/skills-codex/manage-problem/SKILL.md +1180 -0
  226. package/skills-codex/manage-problem/agents/openai.yaml +3 -0
  227. package/skills-codex/manage-rfc/SKILL.md +314 -0
  228. package/skills-codex/manage-rfc/agents/openai.yaml +3 -0
  229. package/skills-codex/manage-story/SKILL.md +284 -0
  230. package/skills-codex/manage-story/agents/openai.yaml +3 -0
  231. package/skills-codex/manage-story-map/SKILL.md +198 -0
  232. package/skills-codex/manage-story-map/agents/openai.yaml +3 -0
  233. package/skills-codex/mitigate-incident/SKILL.md +239 -0
  234. package/skills-codex/mitigate-incident/agents/openai.yaml +3 -0
  235. package/skills-codex/reconcile-readme/SKILL.md +175 -0
  236. package/skills-codex/reconcile-readme/agents/openai.yaml +3 -0
  237. package/skills-codex/reconcile-stories/SKILL.md +124 -0
  238. package/skills-codex/reconcile-stories/agents/openai.yaml +3 -0
  239. package/skills-codex/reconcile-story-maps/SKILL.md +81 -0
  240. package/skills-codex/reconcile-story-maps/agents/openai.yaml +3 -0
  241. package/skills-codex/report-upstream/SKILL.md +716 -0
  242. package/skills-codex/report-upstream/agents/openai.yaml +3 -0
  243. package/skills-codex/restore-incident/SKILL.md +216 -0
  244. package/skills-codex/restore-incident/agents/openai.yaml +3 -0
  245. package/skills-codex/review-problems/SKILL.md +524 -0
  246. package/skills-codex/review-problems/agents/openai.yaml +3 -0
  247. package/skills-codex/scaffold-intake/SKILL.md +209 -0
  248. package/skills-codex/scaffold-intake/agents/openai.yaml +3 -0
  249. package/skills-codex/scaffold-intake/templates/CONTRIBUTING.md.tmpl +31 -0
  250. package/skills-codex/scaffold-intake/templates/SECURITY.md.tmpl +39 -0
  251. package/skills-codex/scaffold-intake/templates/SUPPORT.md.tmpl +32 -0
  252. package/skills-codex/scaffold-intake/templates/config.yml.tmpl +8 -0
  253. package/skills-codex/scaffold-intake/templates/problem-report.yml.tmpl +114 -0
  254. package/skills-codex/transition-problem/SKILL.md +371 -0
  255. package/skills-codex/transition-problem/agents/openai.yaml +3 -0
  256. package/skills-codex/transition-problems/SKILL.md +310 -0
  257. package/skills-codex/transition-problems/agents/openai.yaml +3 -0
  258. package/skills-codex/update-upstream/SKILL.md +583 -0
  259. package/skills-codex/update-upstream/agents/openai.yaml +3 -0
  260. package/skills-codex/work-problem/SKILL.md +160 -0
  261. package/skills-codex/work-problem/agents/openai.yaml +3 -0
  262. package/skills-codex/work-problems/SKILL.md +58 -0
  263. package/skills-codex/work-problems/agents/openai.yaml +3 -0
  264. package/templates/story-map.css +1 -1
  265. package/bin/wr-itil-mark-rfc-capture-gate +0 -51
  266. package/scripts/mark-rfc-capture-gate.sh +0 -32
@@ -0,0 +1,438 @@
1
+ ---
2
+ name: wr-itil:capture-problem
3
+ description: Lightweight problem-capture skill for aside-invocation during foreground work — minimal duplicate-check, skeleton ticket file, single commit per capture (covers new ticket + inline README refresh per the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem per the "capture-problem → manage-problem same-session halts at Step 0 reconcile (HALT_ROUTE_RECONCILE on deferred-refresh seam)" problem Option 2 amendment 2026-06-05). Defers full duplicate analysis to /wr-itil:review-problems. Use this when the user (or agent mid-iter) wants to capture an observation quickly without disrupting current task flow. For full-intake new-problem creation, use /wr-itil:manage-problem.
4
+ allowed-tools: Read, Write, Edit, Bash, Grep, Glob, request_user_input
5
+ ---
6
+
7
+ <!-- Generated from the runtime-neutral skill source. Do not edit. -->
8
+
9
+ > Codex runtime note: use `request_user_input` only where this contract
10
+ > explicitly requires a human decision. Resolve `<itil-plugin-root>` from
11
+ > this installed `SKILL.md`: it is two directories above the skill
12
+ > directory. Run bundled commands from `<itil-plugin-root>/bin/`; do not
13
+ > search the adopter repository or rely on those commands being on `PATH`.
14
+ > Spawn `wr-itil:hang-off-check` with the native Codex subagent tool, wait
15
+ > for it, and close that same agent.
16
+
17
+
18
+ # Capture Problem Skill
19
+
20
+ Capture a problem ticket quickly during foreground work. Lightweight aside-invocation surface that complements the heavyweight `/wr-itil:manage-problem` flow. See `REFERENCE.md` in this directory for rationale, edge cases, contract trade-offs, and the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule foreground-lightweight-capture amendment.
21
+
22
+ This skill is the foreground-lightweight-capture variant of `/wr-itil:manage-problem`'s new-problem path per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule (the "Ship `/wr-itil:capture-problem` skill — lightweight aside-invocation surface for problem capture during foreground work" problem amendment, 2026-05-03). The deferred background-capture variant named in the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule's original taxonomy remains deferred per the "Problem 088: run-retro cannot see the full session context when invoked as a subagent, subprocess, or from any non-parent-session surface — 's fix is partially blind" problem settlement.
23
+
24
+ ## Output Formatting
25
+
26
+ When referencing problem, JTBD, ADR, or RFC IDs in prose output (stderr advisories, capture-report messages), always include the human-readable title or substance on first mention. Use the format `the ": Enforce Governance Without Slowing Down" user outcome (Enforce Governance Without Slowing Down)`, not bare `the ": Enforce Governance Without Slowing Down" user outcome`.
27
+
28
+ **Brief-before-ID discipline at the Step 1.5b low-confidence interview surface (the "agent surfaces decisions to user using opaque IDs (P-numbers, ADR-numbers, JTBD-numbers) without explaining what they mean — empathy gap" problem).** Per the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem correction the low-confidence path does NOT surface candidate `JTBD-NNN` / `persona-slug` IDs at all — it **interviews** the human about *who* hits the problem and *what job* they are trying to get done, in plain language, so the brief-before-ID discipline is satisfied by construction (no ID is a carrier of meaning). If any option or prose in the interview references an existing job/persona for context, it MUST inline the job statement + the persona's key constraint BEFORE any ID. The user reads the prompt without project filesystem access (mobile clients, accessibility tooling, notification surfaces) and cannot follow links into `docs/jtbd/`. Mirrors the canonical `/wr-architect:create-adr` Step 5 § 5a Rule 3 ("No IDs as explainers"). See also session memory `feedback_brief_before_id.md`.
29
+
30
+ ## When to invoke
31
+
32
+ - **Mid-iter sibling-finding**: agent observes a tangential ticket-worthy issue while working on a different problem and cannot afford the 10-turn `/wr-itil:manage-problem` ceremony.
33
+ - **User-initiated rapid capture**: user says "btw, this is broken too — capture it" during retros, code reviews, or correction conversations.
34
+ - **AFK orchestrator main turn captures**: orchestrator captures user-driven mid-loop observations without breaking the iter cadence.
35
+
36
+ **Use `/wr-itil:manage-problem` instead** when:
37
+ - The user wants to walk the full intake flow (priority discussion, multi-concern split, immediate WSJF placement).
38
+ - The capture is large enough that deferred-investigation placeholders are unhelpful (the description IS the full ticket body).
39
+ - The capture needs to ride alongside an immediate fix (`fix(scope): ... (closes P<NNN>)` shape — manage-problem's Step 7 transition + Step 11 commit handles this; capture-problem does not).
40
+
41
+ ## Rule 6 audit (per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule + the "Structured User Interaction for Governance-Skill Decisions" architecture rule)
42
+
43
+ This skill has **one direction-setting request_user_input surface — the low-confidence persona/JTBD elicitation interview (fired only when derivation is weak; it may span more than one question to elicit who + why), plus the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem human-ratify surface when the elicited who/why warrants a NEW persona/JTBD**. Each potentially-interactive decision is framework-mediated per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule:
44
+
45
+ | Decision | Resolution |
46
+ |----------|-----------|
47
+ | Duplicate-check | Mechanical 3-keyword title-only grep; matches listed in report; capture proceeds regardless. False-positives are cheaper than false-negatives (the "Ship `/wr-itil:capture-problem` skill — lightweight aside-invocation surface for problem capture during foreground work" problem line 24). |
48
+ | Hang-off arbitration (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem Phase 3) | Mechanical pre-filter (≤5 candidates by shared ADR/RFC/SKILL/file signal) + fresh-context `wr-itil:hang-off-check` subagent dispatch (the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule 5th invocation pattern). Verdict-acts: `HANG_OFF: P<NNN>` halts capture + routes orchestrator to amend parent; `PROCEED_NEW` continues + appends rationale to `## Related`. AFK safe-default: ambiguous → PROCEED_NEW per subagent Rule 6 contract. the "Report a Problem Without Pre-Classifying It" user outcome firewall: maintainer-side only. |
49
+ | Priority (Impact × Likelihood) | **Derived at capture** silently from the description per Step 4a (the ": Cost-based WSJF effort — capture time + cost actuals, tally per ticket, retro-driven RMS calibration (tally-first)" architecture rule silent-derivation + the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule grounding/sentinel; the "Inbound-reported problems rank ahead of internally-discovered problems via a sort tier" architecture rule honest-likelihood). No deferred placeholder, no false-low. Category-4 silent-framework per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule. |
50
+ | Effort | **Derived at capture** silently per Step 4a (the ": Cost-based WSJF effort — capture time + cost actuals, tally per ticket, retro-driven RMS calibration (tally-first)" architecture rule t-shirt buckets + the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule grounding/sentinel). No deferred placeholder. |
51
+ | Multi-concern split | Out of scope: capture-problem creates one ticket per invocation. Multi-concern observations route to `/wr-itil:manage-problem` (its Step 4b owns the split). |
52
+ | Empty `$ARGUMENTS` | Halt-with-stderr-directive: print "capture-problem requires a description in $ARGUMENTS — invoke /wr-itil:manage-problem instead for the full intake flow" and exit. AFK orchestrators MUST NOT invoke capture-problem with empty arguments — caller-side contract. |
53
+ | JTBD-trace + persona derivation (I12 derive → interview-on-low-confidence → classify → ratify-creation-only — the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Amendment 2026-06-02 as corrected by the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem 2026-06-29/2026-07-02) | **Derive-first per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category 4 (silent-framework); interview + creation-ratify per category 1 (direction-setting).** Step 1.5b runs lexical detection (`\bJTBD-[0-9]+\b`) + flag pre-resolution (`--jtbd=` / `--persona=`) + cited-JTBD persona derivation. **Derive-success** → silent-proceed with derived values + stderr advisory. **Low-confidence** → **INTERVIEW** the human to elicit the real who/why (substantive non-leading questions, NOT propose an ID) → the agent classifies: elicited job/persona matches an EXISTING artefact → map + proceed autonomously; NO existing fit → human ratifies the **creation** of a new persona/JTBD (the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem) → map + proceed. **A real problem is NEVER discarded over anchoring uncertainty.** Scope-rejection (elicited who/why out of scope) is **external-report-only** at `/wr-itil:manage-problem` ingestion — never here. |
54
+ | AFK low-confidence (`--no-prompt`) — preserve the finding | **Create-with-unconfirmed-anchoring + queue the elicitation per the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem never-discard + the ": Progress the Backlog While I'm Away" user outcome save-and-continue.** When invoked with `--no-prompt` (AFK mode marker) AND derivation fails (no JTBD-NNN citations + no `--persona=` flag + no `--jtbd=` flag, OR cited-JTBD persona-disagreement) → do NOT fire `request_user_input`, do NOT shoehorn a best-fit, do NOT auto-create a new artefact. Capture the ticket with the greppable `(unconfirmed — elicitation queued)` anchoring sentinel + stderr advisory, and queue the elicitation interview for the next interactive session (the AFK orchestrator surfaces it via `outstanding_questions`). the ": Confirm a decision's substance before building dependent work on it" architecture rule is preserved by the existing downstream oversight gates (the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem, the "Story maps and stories carry a drift-invalidated human-oversight marker" architecture rule, the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule I13), not by refusing the capture. AFK orchestrators still SHOULD pre-resolve persona+JTBD via flags to skip the sentinel path entirely. |
55
+
56
+ **the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem / the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Amendment 2026-06-02 — type-classification retired + I12 hard-block replaced with derive-then-ratify**: the maintainer-side type-classification dispatch (technical vs user-business) was REMOVED per twice-confirmed user direction (2026-05-25 the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem base + 2026-06-02 the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule amendment substance — *"I12 hard-block was wrong. Replacement: the persona and jtbd should be derived by the LLM. And if a persona/jtbd cannot be found then it should be proposed for User ratification. If the user rejects the persona or job to be done then that is should be treated as a rejection of the problem; corrections to the persona or job to be done are treated as acceptance and acceptance is treated as acceptance. Applies to ALL problems."*). The redundant type axis was already covered by RFC/Story persona-anchoring per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Phase 4. The original I12 hard-block (type-keyed JTBD-required halt) was REPLACED wholesale in the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Amendment 2026-06-02 with the derive-then-ratify contract codified in Step 1.5b below. The contract applies to ALL problems (no type-keyed gating; the type axis itself is GONE). **the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem supersession (2026-06-29/2026-07-02):** the 2026-06-02 amendment's *"reject of the proposed persona/JTBD = rejection of the problem; no ticket created"* clause (quoted above) is REVERSED — low-confidence now interviews to elicit the real who/why (never proposes an ID), the agent classifies existing-vs-new, the human ratifies only the CREATION of a new persona/JTBD, and a real problem is NEVER discarded over anchoring uncertainty; scope-rejection is external-report-only. See the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem supersession note in Step 1.5b.
57
+
58
+ Per the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6 fail-safe: every decision above resolves without interactive user input in non-interactive contexts. The low-confidence **interview** fires only on derivation-failure (interactive surface) AND only when `--no-prompt` is absent; under `--no-prompt` the AFK path captures with the unconfirmed-anchoring sentinel + queues the elicitation (the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem) — never silently shoehorning a best-fit or discarding the finding.
59
+
60
+ **the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6 carve-out audit (the "AFK iter default when a skill needs to ask a question and request_user_input is unavailable — should queue the question and move to the next iteration (not halt, not silently skip)" problem, 2026-06-06 amendment; corrected by the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem 2026-06-29/2026-07-02)**: the universal AFK default is **queue-and-continue** (queue the decision, continue the loop). The AFK low-confidence path now **conforms** to that default rather than carving out from it: it captures the ticket with the `(unconfirmed — elicitation queued)` anchoring sentinel and queues the elicitation interview — the finding is preserved (the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem never-discard + the ": Progress the Backlog While I'm Away" user outcome "save findings and move to the next problem"), NOT refused. the ": Confirm a decision's substance before building dependent work on it" architecture rule (Confirm decision substance before building dependent work) is still honoured, but by a different tactic than the retired no-ticket halt: the ticket's anchoring is **explicitly unconfirmed** (a greppable sentinel, never a shoehorned best-fit masquerading as confirmed — that would be the "external-comms agent silently goes dormant on the credibility axis — no nudge to author the missing RISK-POLICY section" problem harm), and dependent RFC/story/fix work stays gated on anchoring confirmation via the existing downstream oversight markers — **the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem** (a new persona/JTBD needs human ratification before it exists), **the "Story maps and stories carry a drift-invalidated human-oversight marker" architecture rule** (story maps/stories carry a drift-invalidated oversight marker), and the **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule I13** propose-fix RFC-trace guard. Until the deferred `/wr-itil:work-problems` caller-side wiring lands (route the queued elicitation into the orchestrator's `outstanding_questions` batch — tracked on the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem), that downstream protection rests on those existing markers, not on refusing the capture. (The Empty `$ARGUMENTS` halt remains a genuine caller-contract halt — there is no description to capture.)
61
+
62
+ ## Steps
63
+
64
+ ### 0. README reconciliation preflight (the "`docs/problems/README.md` drifts from filesystem truth across sessions despite (refresh-on-create) and (refresh-on-transition) both Closed" problem)
65
+
66
+ Same as `/wr-itil:manage-problem` Step 0 — diagnose-only check. Halt-and-route on Exit 1 (committed cross-session drift); INLINE_REFRESH carve-out (the "`/wr-itil:manage-problem` Step 0 reconcile halt-on-drift directive doesn't distinguish uncommitted-rename-rooted drift (same-session pending) from committed cross-session drift — should refresh inline rather than halt for the former case" problem) preserved. capture-problem itself does NOT refresh README.md (see Step 6); the preflight is purely a fail-fast on pre-existing drift.
67
+
68
+ ```bash
69
+ <itil-plugin-root>/bin/wr-itil-reconcile-readme docs/problems > /tmp/wr-itil-drift-$$.txt
70
+ reconcile_exit=$?
71
+ if [ "$reconcile_exit" -eq 1 ]; then
72
+ <itil-plugin-root>/bin/wr-itil-classify-readme-drift /tmp/wr-itil-drift-$$.txt docs/problems
73
+ classify_exit=$?
74
+ rm -f /tmp/wr-itil-drift-$$.txt
75
+ # classify_exit 0 (INLINE_REFRESH): proceed (no inline refresh in this skill).
76
+ # classify_exit 1 (HALT_ROUTE_RECONCILE): halt; invoke /wr-itil:reconcile-readme.
77
+ # classify_exit 2 (parse error): conservative halt-and-route.
78
+ fi
79
+ ```
80
+
81
+ ### 1. Parse the description and flags from `$ARGUMENTS`
82
+
83
+ `$ARGUMENTS` may carry up to two leading flags before the free-text description (caller-side pre-resolution per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule silent-proceed shape):
84
+
85
+ | Flag | Effect on Step 1.5b |
86
+ |------|-------------------|
87
+ | `--jtbd=JTBD-NNN[,JTBD-NNN...]` | Pre-resolves the JTBD-trace value. Step 1.5b skips JTBD-trace derivation. Comma-separated list of JTBD IDs (no spaces). |
88
+ | `--persona=<value>` | Pre-resolves the persona value. Step 1.5b skips persona derivation. Value MUST be one of the directory names under `docs/jtbd/*/` (the adopter's real persona corpus — e.g. `maintainer`, `smb-owner` in adopter repos), falling back to the home-repo set `{developer, tech-lead, plugin-developer, plugin-user}` only when no `docs/jtbd/` directories exist. the "capture-problem `--persona` enum hardcoded to home-repo personas; rejects valid adopter personas (+ JTBD-M-NNN predicate gap)" problem — never hardcode the home-repo enum (the "Published skills reference repo-relative script paths — adopter `bash` invocations hard-fail at Step 0" problem/the "capture-problem / capture-rfc / manage-problem Step 2 create-gate marker step sources repo-relative `<itil-plugin-root>/hooks/lib/*.sh` — fails in adopter installs (recurring published-path class: //)" problem adopter-portability). |
89
+ | `--no-prompt` | **AFK mode marker** (REVIVED 2026-06-02 per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Amendment 2026-06-02; behaviour corrected by the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem 2026-06-29/2026-07-02). Suppresses the low-confidence interview. When set AND derivation fails (no JTBD-NNN citations + no `--persona=` flag + no `--jtbd=` flag, OR cited-JTBD persona-disagreement) → capture the ticket with the `(unconfirmed — elicitation queued)` anchoring sentinel + stderr advisory and queue the elicitation (the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem never-discard) — it no longer halts-refuses. AFK orchestrators (`/wr-itil:work-problems` capture-on-correction sub-flow, agent-mid-iter `capture-problem` invocations) SHOULD still pass this flag PLUS pre-resolved `--persona` + `--jtbd` flags to skip the sentinel path entirely. |
90
+
91
+ Strip recognised leading flags from `$ARGUMENTS`; the remainder (after flags) is the free-text description. Unknown leading flags halt-with-stderr-directive: print "capture-problem: unknown flag '<flag>' — recognised flags: --jtbd=JTBD-NNN, --persona=<value>, --no-prompt" and exit.
92
+
93
+ **the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem + the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Amendment 2026-06-02 note**: `--type=technical` and `--type=user-business` are RETIRED (the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem, 2026-06-02 — type-classification axis removed). `--no-prompt` was retired in the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem base alongside the type-axis removal AND is now REVIVED 2026-06-02 per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule amendment's I12 derive-then-ratify contract — its semantic is now the AFK-mode marker for the persona/JTBD request_user_input fallback, NOT the historical type-classification suppress.
94
+
95
+ Empty description (post-flag-strip) halts per the Rule 6 audit above.
96
+
97
+ Derive a kebab-case title slug from the first 8-10 non-stopword tokens of the description (matching the existing `manage-problem` slug derivation pattern).
98
+
99
+ ### 1.5b JTBD-trace + persona dispatch — I12 derive → interview-on-low-confidence → classify (the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Amendment 2026-06-02, corrected by the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem)
100
+
101
+ Per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule § Phase 3 + Phase 4 in-scope amendment (2026-05-13), as amended by the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem (2026-06-02 base — type-classification retired), by the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Amendment 2026-06-02 (I12 hard-block REPLACED with derive-then-ratify; applies to ALL problems; no type-keyed gating), AND by the **the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem correction (user direction 2026-06-29, sharpened 2026-07-02)** — the low-confidence path is now **interview-to-elicit-who/why**, NOT propose-candidate-IDs-for-ratification; and a real problem is **never discarded** over anchoring uncertainty. Fires UNCONDITIONALLY. Both `jtbd_trace_value` and `persona_value` are REQUIRED on every captured ticket.
102
+
103
+ **The corrected contract (one principle, both fields):**
104
+
105
+ 1. The agent **derives** persona + JTBD from the description.
106
+ 2. **Confident** → map to the existing persona/JTBD and **proceed autonomously** (no human — the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-4 silent-framework).
107
+ 3. **Not confident** → do **NOT** shoehorn into the nearest existing ID, and do **NOT** ask *"is it JTBD-XXXX?"*. **Interview** the human (`request_user_input`, the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 1 structured form; may be more than one question) with substantive, non-leading questions about *who* hits this and *what they are trying to get done* — requirements elicitation of the real persona/job, **not** ratification of a guessed ID (this is *more* brief-before-ID-compliant than the old prompt — the "agent surfaces decisions to user using opaque IDs (P-numbers, ADR-numbers, JTBD-numbers) without explaining what they mean — empathy gap" problem — since no ID is surfaced at all).
108
+ 4. From the elicited who/why the **agent classifies**: matches an **existing** persona/JTBD → map and proceed (autonomous — the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule boundary applies only to *creation*, not mapping); **no existing fit** → a **new** persona/JTBD is warranted → route the **creation** to the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem human-ratify surface (`/wr-jtbd:update-guide` then `/wr-jtbd:confirm-jobs-and-personas`); on ratification, map to the new ID and proceed.
109
+
110
+ The human is involved only for **substance** — the interview when derivation is weak, and ratifying the **creation** of a genuinely new persona/JTBD — never to bless an ID. **A real problem is NEVER discarded over anchoring uncertainty**; anchoring uncertainty is resolved by elicitation, not by rejecting the problem. Scope-rejection (deciding the elicited who/why is out of scope to support) is an **external-report-only** decision handled at `/wr-itil:manage-problem` ingestion — maintainer-side captures here always anchor to an existing or a new job. This is the same `covered → agent proceeds / uncovered → human ratifies a new artefact` boundary the "RFC-first: a problem's fix implements its RFC; no implementation without a pre-existing RFC" architecture rule draws for the fix-approach axis, applied to the who/why axis.
111
+
112
+ > **the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem supersession note (user direction 2026-06-29 / 2026-07-02).** This reverses the 2026-06-02 the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule amendment substance that framed *"REJECT of the proposed persona/JTBD = rejection of the problem; no ticket created."* That framing shoehorned problems into the nearest ID and discarded legitimate problems over anchoring uncertainty. The reversal is deliberate and user-directed, NOT drift. The corresponding **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule body amendment** and the **the "RFC-first: a problem's fix implements its RFC; no implementation without a pre-existing RFC" architecture rule additive symmetric-escalation note** are **queued on the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem** for the interactive ratification drain (per the "User direction is not substance ratification — agent must brief-and-ratify AFTER changes are complete (sibling-class to on the user-direction code path)" problem — user direction is not itself ADR-body-substance ratification); until they land, this SKILL leads and the ADR bodies follow — the same governed trade-off as the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem type-axis retirement (see the `## Related` note below). The AFK caller-side wiring in `/wr-itil:work-problems` (route the queued elicitation into its `outstanding_questions` batch) is likewise queued on the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem.
113
+
114
+ **Resolve `jtbd_trace_value`** (an ORDERED list of JTBD IDs) via the following derive → interview-on-low-confidence → classify dispatch:
115
+
116
+ 1. **If `--jtbd=JTBD-NNN[,JTBD-NNN...]` was set in Step 1**: parse comma-separated list; assign to `jtbd_trace_value`; do NOT run the lexical detector; do NOT fire `request_user_input` (silent-framework per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category 4). Caller pre-resolved.
117
+ 2. **Else** run the **lexical JTBD-trace detector** against the description: `grep -oE '\bJTBD-[0-9]+\b' | sort -u`. If ≥1 match found, set `jtbd_trace_value` to the matched IDs (de-duplicated, sorted ascending) and emit stderr advisory: `capture-problem: derived jtbd-trace=<id-list> from description JTBD-NNN citations; re-invoke with --jtbd= to override`. Do NOT fire `request_user_input` (silent-framework).
118
+ 3. **Else (no flag, no lexical detection — low-confidence path)**: do **NOT** shoehorn a best-fit JTBD and do **NOT** propose candidate `JTBD-NNN` IDs for ratification. **Interview** the human via `request_user_input` (may span who + why in one dispatch shared with the persona resolution below) with substantive, non-leading questions about *what job* the affected user is trying to get done. From the elicited answer the **agent classifies**:
119
+ - **Elicited job matches an existing JTBD** → set `jtbd_trace_value` to that ID and proceed (autonomous mapping — no further ratification; the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule human-oversight boundary applies only to *creation*).
120
+ - **No existing JTBD fits** → a new JTBD is warranted → route the **creation** to the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem human-ratify surface (`/wr-jtbd:update-guide` then `/wr-jtbd:confirm-jobs-and-personas`); on ratification, set `jtbd_trace_value` to the new ID and proceed.
121
+ - **The problem is never discarded** over anchoring uncertainty. (Scope-rejection — deciding the elicited who/why is out of scope to support — is an external-report-only decision at `/wr-itil:manage-problem` ingestion, never here.)
122
+ 4. **AFK (the `--no-prompt` branch) — preserve the finding, queue the elicitation**: if `--no-prompt` was set in Step 1 AND control reaches step 3 (no flag + no lexical detection) → SKIP the `request_user_input`, do **NOT** shoehorn a best-fit ID, and do **NOT** auto-create a new JTBD. Set `jtbd_trace_value` to the greppable unconfirmed-anchoring sentinel `(unconfirmed — elicitation queued)`, capture the ticket, and **queue the persona/JTBD elicitation interview** for the next interactive session (the AFK orchestrator surfaces it via its `outstanding_questions` batch). Emit stderr advisory `capture-problem: JTBD low-confidence under AFK; ticket captured with unconfirmed anchoring; elicitation queued — do not build dependent RFC/story/fix work until anchoring is confirmed`. The ticket IS created (the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem never-discard + the ": Progress the Backlog While I'm Away" user outcome save-and-continue); the ": Confirm a decision's substance before building dependent work on it" architecture rule's "don't build on unconfirmed substance" is preserved by the existing downstream oversight gates (the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem new-persona/JTBD ratification; the "Story maps and stories carry a drift-invalidated human-oversight marker" architecture rule story-oversight; the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule I13 propose-fix RFC-trace guard), NOT by refusing the capture.
123
+
124
+ **Resolve `persona_value`** (a scalar persona value — validated against the **adopter's persona corpus**: the directory names under `docs/jtbd/*/`, falling back to the home-repo set `{developer, tech-lead, plugin-developer, plugin-user}` only when no `docs/jtbd/` directories exist; the "capture-problem `--persona` enum hardcoded to home-repo personas; rejects valid adopter personas (+ JTBD-M-NNN predicate gap)" problem, never hardcode the home-repo enum — the "Published skills reference repo-relative script paths — adopter `bash` invocations hard-fail at Step 0" problem/the "capture-problem / capture-rfc / manage-problem Step 2 create-gate marker step sources repo-relative `<itil-plugin-root>/hooks/lib/*.sh` — fails in adopter installs (recurring published-path class: //)" problem adopter-portability) via the following derive → interview-on-low-confidence → classify dispatch:
125
+
126
+ 1. **If `--persona=<value>` was set in Step 1**: validate `<value>` against the persona corpus (the `docs/jtbd/*/` directory names, or the home-repo fallback set when no jtbd dirs exist — e.g. `ls -d docs/jtbd/*/ | xargs -n1 basename`); halt-with-directive if invalid; otherwise assign and proceed silently. Caller pre-resolved.
127
+ 2. **Else if `jtbd_trace_value` is non-empty AND cited JTBDs agree on a single persona**: derive `persona_value` from the cited JTBDs' `persona:` (and optionally `secondary-persona:`) frontmatter; emit stderr advisory: `capture-problem: derived persona=<value> from cited JTBD <id> frontmatter`; proceed silently.
128
+ 3. **Else (no flag + (no cited JTBDs OR cited-JTBD persona-disagreement) — low-confidence / ambiguity path)**: do **NOT** shoehorn a best-fit persona and do **NOT** propose candidate persona IDs for ratification. **Interview** the human via `request_user_input` (share the dispatch with the JTBD-trace interview above — one elicitation covers *who* + *what job*) with substantive, non-leading questions about *who* actually hits this problem. From the elicited answer the **agent classifies**:
129
+ - **Elicited persona matches an existing persona** (a `docs/jtbd/*/` directory) → assign `persona_value` to it and proceed (autonomous mapping — the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule boundary is creation-only).
130
+ - **No existing persona fits** → a new persona is warranted → route the **creation** to the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem human-ratify surface (`/wr-jtbd:update-guide` then `/wr-jtbd:confirm-jobs-and-personas`); on ratification assign `persona_value` to the new persona and proceed.
131
+ - **The problem is never discarded** over persona uncertainty. Scope-rejection remains external-report-only (`/wr-itil:manage-problem` ingestion).
132
+ 4. **AFK (the `--no-prompt` branch) — preserve the finding, queue the elicitation**: if `--no-prompt` was set in Step 1 AND control reaches step 3 → SKIP the `request_user_input`, do **NOT** shoehorn a best-fit persona, and do **NOT** auto-create a new persona. Set `persona_value` to the greppable unconfirmed-anchoring sentinel `(unconfirmed — elicitation queued)`, capture the ticket, and queue the elicitation interview for the next interactive session. Emit stderr advisory `capture-problem: persona low-confidence under AFK; ticket captured with unconfirmed anchoring; elicitation queued — do not build dependent RFC/story/fix work until anchoring is confirmed`. The ticket IS created (the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem never-discard); the ": Confirm a decision's substance before building dependent work on it" architecture rule preserved via the existing downstream oversight gates, not by refusing the capture.
133
+
134
+ **the "Report a Problem Without Pre-Classifying It" user outcome scope preservation**: this dispatch fires on the maintainer-side `/wr-itil:capture-problem` only. Plugin-user-side `.github/ISSUE_TEMPLATE/problem-report.yml` MUST NOT prompt for JTBD trace or persona — preserves the "Report a Problem Without Pre-Classifying It" user outcome firewall per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule P4.3 maintainer-side / plugin-user-side asymmetry clarifier. Triage during `/wr-itil:manage-problem` ingestion assigns both fields from the reporter's symptom signals (per the "Report a Problem Without Pre-Classifying It" user outcome maintainer-side-complement extension, amended 2026-06-02 to remove the type-axis residue).
135
+
136
+ **the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule authority taxonomy**: silent-framework (category 4) on the derive-success paths (flag pre-resolution, lexical detection, cited-JTBD agreement) AND on the agent's existing-vs-new classification of the elicited who/why (mechanical framework resolution — the agent maps the elicited job to an existing artefact without a consent gate); **direction-setting (category 1)** on the low-confidence **interview** (requirements elicitation of the real persona/job) and on the human ratification of the **creation** of a new persona/JTBD (per the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem) — NOT a taste preference between equally-valid options, and NOT ratification of a guessed ID (the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem).
137
+
138
+ ### 2. Minimal-grep duplicate check (3-keyword title-only) + hang-off-check subagent dispatch (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem Phase 3 amendment, 2026-05-31)
139
+
140
+ **Sub-step 2a — title-only grep (pre-existing minimal duplicate check)**
141
+
142
+ Extract up to **3 distinct kebab-cased non-stopword keywords** from the description. Grep the **filenames** of `docs/problems/*.md` AND `docs/problems/<state>/*.md` (NOT bodies — title-only is the conservative threshold per architect verdict on Q1; dual-tolerant per the ": docs/problems/ flat layout migration — per-state subdirs + adopter auto-migration" release design migration window):
143
+
144
+ ```bash
145
+ match_count=$(ls docs/problems/*.md docs/problems/*/*.md 2>/dev/null \
146
+ | grep -ciE 'kw1|kw2|kw3' || true)
147
+ ```
148
+
149
+ The **3-keyword cap** is a hard-coded constant. Do NOT make it env-overridable — the conservative threshold rationale (the "Ship `/wr-itil:capture-problem` skill — lightweight aside-invocation surface for problem capture during foreground work" problem line 24) is structural to the design, not a tunable knob.
150
+
151
+ **Title-only**: file bodies are intentionally NOT scanned. Body-content matches would either (a) over-prompt (capture-problem has no request_user_input to surface them) or (b) get silently swallowed. Title-only matches preserve the conservative-threshold contract.
152
+
153
+ If matches are found: list them in the final report. **Do NOT halt or branch.** Capture proceeds. The user can resolve duplicates at the next `/wr-itil:review-problems` invocation (or invoke `/wr-itil:manage-problem` directly if the duplicate-check shape needs a structured branch).
154
+
155
+ **Sub-step 2b — hang-off-check via fresh-context subagent (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem Phase 3; the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule 5th invocation pattern)**
156
+
157
+ The 3-keyword title-only grep at sub-step 2a is conservative: it catches narrow shape-overlap on titles but misses the wider class of hang-off candidates — parent tickets where the new capture's scope belongs as an Investigation Tasks expansion / Phase N section rather than as a sibling ticket. The wrongly-captured the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem sibling of the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem on 2026-05-31 is the canonical regression: the main agent (mid-iter, with rich session context) pattern-matched the existing capture flow and missed that the new spec belonged inside the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem as Phase 3.
158
+
159
+ Sub-step 2b adds a **mechanical pre-filter + fresh-context subagent dispatch** that closes this gap without re-introducing the main agent's session-context bias. The subagent runs in isolation (no parent-session context) and emits a structured verdict the SKILL acts on deterministically.
160
+
161
+ **Mechanical pre-filter** — grep `docs/problems/open/*.md` + `docs/problems/verifying/*.md` BODIES for tokens shared with the description: any `ADR-NNN` reference, `RFC-NNN` reference, `JTBD-NNN` reference, SKILL path (`/wr-<plugin>:<skill>` or `packages/<plugin>/skills/<skill>/`), file path (`packages/...`, `docs/...`, `.github/...`, `bin/...`, `scripts/...`), or named feature word the description cites. Collect candidates that share **≥1** signal.
162
+
163
+ ```bash
164
+ # Extract candidate signals from the description (post-flag-strip).
165
+ adr_refs=$(echo "$description" | grep -oE 'ADR-[0-9]{3}' | sort -u)
166
+ rfc_refs=$(echo "$description" | grep -oE 'RFC-[0-9]{3}' | sort -u)
167
+ skill_refs=$(echo "$description" | grep -oE '/wr-[a-z-]+:[a-z-]+' | sort -u)
168
+ file_refs=$(echo "$description" | grep -oE '(packages|docs|\.github|bin|scripts)/[a-zA-Z0-9_./-]+' | sort -u)
169
+ signals="$adr_refs"$'\n'"$rfc_refs"$'\n'"$skill_refs"$'\n'"$file_refs"
170
+ signals=$(echo "$signals" | grep -v '^$' | sort -u)
171
+
172
+ # If no signals extractable from description, skip the dispatch entirely
173
+ # (the title-only grep at 2a is the only duplicate check this capture gets).
174
+ [ -z "$signals" ] && SKIP_HANG_OFF_CHECK=1
175
+
176
+ # Otherwise: pre-filter candidates from open/ + verifying/ that share ≥1 signal.
177
+ candidates=()
178
+ if [ -z "$SKIP_HANG_OFF_CHECK" ]; then
179
+ for f in docs/problems/open/*.md docs/problems/verifying/*.md; do
180
+ [ -f "$f" ] || continue
181
+ for sig in $signals; do
182
+ if grep -qF "$sig" "$f"; then
183
+ candidates+=("$f")
184
+ break
185
+ fi
186
+ done
187
+ done
188
+ fi
189
+ ```
190
+
191
+ **Candidate-cap short-circuit (latency-bound per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule + the ": Enforce Governance Without Slowing Down" user outcome's 60s flow budget)**: if `${#candidates[@]} -gt 5`, **skip the subagent dispatch** and record the candidate list in the captured ticket's `## Related` section for review-time re-evaluation by `/wr-itil:review-problems`. Wide candidate sets blow the lightweight-capture latency budget; the safe default is "skip + defer to cluster pass."
192
+
193
+ **Empty-candidates short-circuit**: if `${#candidates[@]} -eq 0` (no shared signals), skip the dispatch and proceed to the marker step. The mechanical pre-filter found nothing to arbitrate.
194
+
195
+ **the "Report a Problem Without Pre-Classifying It" user outcome firewall** — sub-step 2b fires on maintainer-side `/wr-itil:capture-problem` invocations ONLY. Plugin-user-side `.github/ISSUE_TEMPLATE/problem-report.yml` MUST NOT carry an equivalent dispatch (plugin-user descriptions do not carry the same authorial intent; a plugin-user describing their friction in maintainer vocabulary could plausibly trigger a wrong-parent HANG_OFF). Triage during `/wr-itil:manage-problem` ingestion stays user-judgement per the "Report a Problem Without Pre-Classifying It" user outcome. Mirrors the Step 1.5b JTBD-trace firewall above.
196
+
197
+ **AFK safe-default**: the hang-off-check subagent verdict is non-interactive by construction (no `request_user_input`), and ambiguous-multi-parent cases collapse to `PROCEED_NEW` per the subagent's Rule 6 contract. This satisfies the ": Progress the Backlog While I'm Away" user outcome's "Decisions normally requiring my input are resolved using safe defaults" without dependency on the retired `--no-prompt` flag.
198
+
199
+ **Dispatch** — when the candidate set is non-empty and ≤5, delegate to `wr-itil:hang-off-check` via the native Codex subagent tool with a structured input payload:
200
+
201
+ ```
202
+ SURFACE: capture-problem-step-2b
203
+
204
+ <new-capture>
205
+ <description verbatim, post-flag-strip>
206
+ </new-capture>
207
+
208
+ <candidates>
209
+ P<NNN1> | <title1> | <path1> | shared-signals: <signal1, signal2, ...>
210
+ P<NNN2> | <title2> | <path2> | shared-signals: <signal1, signal3, ...>
211
+ ...
212
+ </candidates>
213
+ ```
214
+
215
+ The subagent reads the candidate ticket bodies in full as needed (via its own Read tool), reasons about absorb-vs-proceed, and returns one of:
216
+
217
+ - `HANG_OFF: P<NNN>` with **Rationale**, **Signals matched**, **Where to absorb** sections.
218
+ - `PROCEED_NEW` with **Rationale** and **Per-candidate explanation** for each surfaced candidate.
219
+
220
+ **Act on verdict:**
221
+
222
+ - **HANG_OFF: P<NNN>**: **halt** capture-problem. Emit a structured halt directive to the calling orchestrator agent naming (a) the parent ticket file path, (b) the new scope to amend in, (c) the `Where to absorb` directive from the subagent verdict. The orchestrator agent owns the parent-ticket edit + commit per the standard ticket-edit flow (do NOT amend the parent ticket from inside capture-problem — capture-problem creates new tickets; ticket-body amendments are manage-problem's surface). Record the hang-off decision + rationale in stderr for the audit trail.
223
+
224
+ - **PROCEED_NEW**: continue to the marker step below. Capture the subagent's rationale + per-candidate explanation in a transient note (stderr) and append it to the new ticket's `## Related` section so the next reviewer sees what was considered. This is the audit-trail contract per the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule grounding + the "Restore Service Fast with an Audit Trail" user outcome audit-trail completeness.
225
+
226
+ **After the grep + (optional) hang-off-check completes**, write the per-session create-gate marker so the `PreToolUse:Write` hook (the "Agent bypasses `/wr-itil:manage-problem` Step 2 duplicate-check by writing tickets directly to `docs/problems/`" problem) permits the subsequent Write of the new ticket file under `docs/problems/open/`. Per **the "create-gate marker race between concurrent Codex sessions via shared runtime-sid file" problem / the "Capture the runtime stdin session_id via a PreToolUse hook so the create-gate marker binds to the same SID the runtime hook will see" architecture rule Option C**, write it under EVERY recent candidate session SID (not just one) so a concurrent orchestrator+subprocess race cannot land the marker under the wrong UUID:
227
+
228
+ ```bash
229
+ <itil-plugin-root>/bin/wr-itil-mark-create-gate
230
+ ```
231
+
232
+ `<itil-plugin-root>/bin/wr-itil-mark-create-gate` is the "Plugin-bundled scripts invoked from SKILL.md resolve via `bin/` on `$PATH`" architecture rule `$PATH` shim that internalises the former inline `source <itil-plugin-root>/hooks/lib/{session-id,create-gate}.sh` + `get_candidate_session_ids | mark_step2_complete_candidates`. It resolves those `hooks/lib` siblings RELATIVE TO THE SCRIPT, not cwd (the "capture-problem / capture-rfc / manage-problem Step 2 create-gate marker step sources repo-relative `<itil-plugin-root>/hooks/lib/*.sh` — fails in adopter installs (recurring published-path class: //)" problem/the ": Adopter-safe path resolution in shipped SKILLs ( — 24 repo-relative references)" release design) — so it works in adopter installs. NEVER `source packages/...` repo-relative from a SKILL; those paths only resolve in the source monorepo, not where the plugin is installed.
233
+
234
+ The marker is shared between `manage-problem` and `capture-problem` per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule amendment — same `/tmp/manage-problem-grep-${SESSION_ID}` path, idempotent across cross-skill ordering. Internally the command enumerates the `get_current_session_id` pick (the "`/wr-itil:manage-problem` Step 2 substep 7 session-id discovery is brittle — agent has no env var, must scrape marker filenames" problem) plus every recent `/tmp/<system>-announced-<UUID>` UUID within a 24h mtime window, and writes the marker under each — so whichever SID the hook reads from the Write's stdin, a matching marker exists. This closes the "create-gate marker race between concurrent Codex sessions via shared runtime-sid file" problem create-gate race that fires when the orchestrator main turn captures a ticket while a backgrounded iter subprocess holds the per-machine runtime-sid marker (last-writer-wins). The candidate set is bounded to recent same-machine markers — not a global fail-open (the "Agent bypasses `/wr-itil:manage-problem` Step 2 duplicate-check by writing tickets directly to `docs/problems/`" problem audit invariant holds: each marker still records that THIS session ran the duplicate-check grep). See `/wr-itil:manage-problem` Step 2 substep 7 for the full mechanism.
235
+
236
+ ### 3. Compute the next ID
237
+
238
+ Same the "Problem 056: Ticket-creator next-ID lookup greps blob SHAs, producing wrong `origin_max` values" problem-safe local_max + origin_max formula as `/wr-itil:manage-problem` Step 3:
239
+
240
+ ```bash
241
+ # Dual-tolerant ticket enumeration (the ": docs/problems/ flat layout migration — per-state subdirs + adopter auto-migration" release design migration window). Both
242
+ # halves of the OR contribute to next-ID compute — flat-layout 104 +
243
+ # per-state 204 BOTH appear in `local_max` so the next-ID compute
244
+ # never re-allocates an already-taken ID. Architect finding 2 (the ": docs/problems/ flat layout migration — per-state subdirs + adopter auto-migration" release design
245
+ # T2) — capture-problem's next-ID surface is a separate the "Problem-ticket directory layout — per-state subdirectories under `docs/problems/`" architecture rule
246
+ # contract from generic enumeration; missing the per-state half
247
+ # regresses ID allocation. The `git ls-tree -r` recursive flag
248
+ # extends the same coverage to the origin tree.
249
+ local_max=$(ls docs/problems/*.md docs/problems/*/*.md 2>/dev/null | sed 's|.*/||' | grep -oE '^[0-9]+' | sort -n | tail -1)
250
+ origin_max=$(git ls-tree -r --name-only origin/main docs/problems/ 2>/dev/null | sed 's|.*/||' | grep -oE '^[0-9]+' | sort -n | tail -1)
251
+ next=$(printf '%03d' $(( 10#$(echo -e "${local_max:-0}\n${origin_max:-0}" | sort -n | tail -1) + 1 )))
252
+ ```
253
+
254
+ Log the renumber decision in the operation report if origin and local diverged.
255
+
256
+ ### 4. Skeleton-fill the ticket
257
+
258
+ **File path**: `docs/problems/open/<NNN>-<kebab-title>.md` (per the "Problem-ticket directory layout — per-state subdirectories under `docs/problems/`" architecture rule per-state-subdir layout)
259
+
260
+ **Template** (deferred-placeholder pattern — flag every section the capture didn't fill):
261
+
262
+ ```markdown
263
+ # Problem <NNN>: <Title>
264
+
265
+ **Status**: Open
266
+ **Reported**: <YYYY-MM-DD>
267
+ **Priority**: <Severity = Impact × Likelihood> (<band>) — Impact: <1-5> × Likelihood: <1-5> — derived at capture from the description per Step 4a
268
+ **Origin**: internal
269
+ **Effort**: <S|M|L|XL> — derived at capture per Step 4a
270
+ **JTBD**: <jtbd_trace_value_as_comma_separated_list_OR_omit_line_when_empty>
271
+ **Persona**: <persona_value_OR_omit_line_when_empty>
272
+
273
+ ## Description
274
+
275
+ <full description from $ARGUMENTS, with leading recognised flags stripped>
276
+
277
+ ## Symptoms
278
+
279
+ (deferred to investigation)
280
+
281
+ ## Workaround
282
+
283
+ (deferred to investigation)
284
+
285
+ ## Impact Assessment
286
+
287
+ - **Who is affected**: (deferred to investigation)
288
+ - **Frequency**: (deferred to investigation)
289
+ - **Severity**: (deferred to investigation)
290
+ - **Analytics**: (deferred to investigation)
291
+
292
+ ## Root Cause Analysis
293
+
294
+ ### Investigation Tasks
295
+
296
+ - [ ] Investigate root cause
297
+ - [ ] Create reproduction test
298
+
299
+ ## Dependencies
300
+
301
+ - **Blocks**: (none)
302
+ - **Blocked by**: (none)
303
+ - **Composes with**: (none)
304
+
305
+ ## Related
306
+
307
+ (captured via /wr-itil:capture-problem; expand at next investigation)
308
+ ```
309
+
310
+ **Rate at capture, do not defer (the "Repo conflates a "named re-entry point" with a self-firing cadence — deferrals not transitively reachable from an automatic trigger rot" problem / the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule amendment 2026-06-24).** The Priority (Impact × Likelihood) and Effort fields are **derived at capture** per Step 4a below — a real best-effort rating, ALWAYS. No `(deferred — re-rate…)` placeholder and **no "not estimated" / "no prior data" marker** — those are deferrals wearing a different hat (user correction 2026-06-24: *"that's just another deferral"*). The old deferred-placeholder default was the single largest uncadenced-deferral rot generator (the "Repo conflates a "named re-entry point" with a self-firing cadence — deferrals not transitively reachable from an automatic trigger rot" problem): nothing self-fired `review-problems`, and the `Likelihood: 1` false-low buried every capture at the bottom of WSJF. Estimation under uncertainty produces an estimate, not a deferral: a thin description still gets a real number (rough is fine). `/wr-itil:review-problems` re-rates the whole backlog when it runs — captures need no per-ticket re-rate flag.
311
+
312
+ ### 4a. Derive the rating at capture (the "Repo conflates a "named re-entry point" with a self-firing cadence — deferrals not transitively reachable from an automatic trigger rot" problem / the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule amendment; the ": Cost-based WSJF effort — capture time + cost actuals, tally per ticket, retro-driven RMS calibration (tally-first)" architecture rule + the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule + the "Inbound-reported problems rank ahead of internally-discovered problems via a sort tier" architecture rule)
313
+
314
+ Derive Priority and Effort from the description **silently** — NO `request_user_input` (the ": Cost-based WSJF effort — capture time + cost actuals, tally per ticket, retro-driven RMS calibration (tally-first)" architecture rule item 1 silent-derivation, category-4 silent-framework per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule; preserves the lightweight 3-4-turn capture cost shape). This is one inference over text the agent has already read, NOT the `/wr-itil:manage-problem` ceremony.
315
+
316
+ 1. **Impact (1-5)** and **Likelihood (1-5)** — read the description against `RISK-POLICY.md`'s impact bands and assess how often / how broadly the harm manifests. `Severity = Impact × Likelihood`; `Priority` band follows the standard matrix. Likelihood is **honest field-risk only** — never inflate it to lift WSJF rank (the "Inbound-reported problems rank ahead of internally-discovered problems via a sort tier" architecture rule).
317
+ 2. **Effort (S/M/L/XL)** — derive from the described scope (files touched, cross-package, migration-heavy → larger), per the ": Cost-based WSJF effort — capture time + cost actuals, tally per ticket, retro-driven RMS calibration (tally-first)" architecture rule's t-shirt buckets.
318
+ 3. **Always a real value (the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule grounding without deferral)** — when a comparable prior ticket informs the estimate, cite it inline (e.g. `— cf. P<NNN>`). When no comparable prior exists, **still commit to a real best-effort number** grounded in the description's own signals — do NOT append "not estimated" / "no prior data" or any other re-rate flag (that is a deferral; user correction 2026-06-24). A rough estimate from a thin description is honest estimation; a marker that says "I didn't really estimate this" is the rot this brick removes.
319
+
320
+ Write the derived values into the template's `**Priority**` and `**Effort**` lines (replacing the `<…>` placeholders). Every captured ticket leaves Step 4a with a real Impact × Likelihood and a real Effort bucket — never a placeholder, never a deferral marker.
321
+
322
+ ### 5. Write the file
323
+
324
+ Single `Write` to `docs/problems/open/<NNN>-<kebab-title>.md` (per the "Problem-ticket directory layout — per-state subdirectories under `docs/problems/`" architecture rule per-state-subdir layout). The "Agent bypasses `/wr-itil:manage-problem` Step 2 duplicate-check by writing tickets directly to `docs/problems/`" problem PreToolUse hook permits the Write because Step 2 set the marker.
325
+
326
+ ### 6. Commit per the "Governance Skills Commit Their Own Completed Work" architecture rule — single commit, inline README refresh (the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem)
327
+
328
+ **the "capture-problem → manage-problem same-session halts at Step 0 reconcile (HALT_ROUTE_RECONCILE on deferred-refresh seam)" problem / Option 2 amendment (2026-06-05).** This step previously skipped the README refresh and emitted a `RISK_BYPASS: capture-deferred-readme` trailer to clear the "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 README-refresh gate. The user-directed Option 2 resolution (recorded 2026-05-31 on the "capture-problem → manage-problem same-session halts at Step 0 reconcile (HALT_ROUTE_RECONCILE on deferred-refresh seam)" problem) kills the deferred-README-refresh contract: capture-problem now stages `docs/problems/README.md` inline, mirroring `/wr-itil:manage-problem` Step 5 the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem (refresh-on-create) + the "`docs/problems/README.md` line 3 narrative-blob accumulator bloat — sibling to (briefing tier 3) on a different surface" problem (last-reviewed rotation). The trailer is dropped from the commit; the allow-list entry in `<itil-plugin-root>/hooks/lib/readme-refresh-detect.sh::_README_REFRESH_BYPASS_TRAILERS` is retained as inert dead code (minimal-change discipline — future adopters that registered against the token continue to work). Authority: the "capture-problem → manage-problem same-session halts at Step 0 reconcile (HALT_ROUTE_RECONCILE on deferred-refresh seam)" problem Option 2 user direction + the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule amendment + the "Governance Skills Commit Their Own Completed Work" architecture rule bypass-token-table amendment (same single coherent commit).
329
+
330
+ #### README.md refresh on new ticket (the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem)
331
+
332
+ After writing the new `.open.md` file at Step 5, regenerate `docs/problems/README.md` to insert the new ticket's row into the WSJF Rankings, and stage the refreshed README in the same commit as the new ticket. The mechanism is **inline at this execution site per the "transition-problem SKILL Step 7 Last-reviewed rotation silently skipped across iters" problem** — not deferred via cross-reference — so a single-pass agent reading Step 6 does not silently skip the archive step (the canonical the "transition-problem SKILL Step 7 Last-reviewed rotation silently skipped across iters" problem silent-skip regression).
333
+
334
+ **Mechanism**: use the same rendering rules as `/wr-itil:manage-problem` Step 5 the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem / Step 7 the "Problem 062: `manage-problem` does not refresh `docs/problems/README.md` on single-ticket transitions; fast-path cache goes stale silently" problem (glob `docs/problems/*.open.md` / `*.known-error.md` / `*.verifying.md` / `*.parked.md` AND the per-state-subdir layout `docs/problems/open/*.md` / `docs/problems/known-error/*.md` / `docs/problems/verifying/*.md` / `docs/problems/parked/*.md`; rank open/known-error by WSJF; list verifyings in the Verification Queue ordered by Released date ASC per the "docs/problems/README.md Verification Queue rendered newest-first contradicts section header "Ranked by release age, oldest first"" problem; list parkeds in the Parked section). The refresh is a **render, not a re-rank** — existing WSJF values on the other ticket files are trusted per the "Problem 062: `manage-problem` does not refresh `docs/problems/README.md` on single-ticket transitions; fast-path cache goes stale silently" problem's established discipline. Only the new ticket's own (deferred-placeholder) WSJF is consumed from its freshly-written file. **WSJF Rankings tier + tie-break sort** (the "`docs/problems/README.md` WSJF Rankings table row order doesn't match `/wr-itil:work-problems`'s tie-break selection — users assume the orchestrator is broken" problem + the "Inbound-reported problems rank ahead of internally-discovered problems via a sort tier" architecture rule) and **Verification Queue sort direction** (the "docs/problems/README.md Verification Queue rendered newest-first contradicts section header "Ranked by release age, oldest first"" problem) and **Likely-verified cell shape** (the "VQ `Likely verified?` column uses age-based heuristic (≥14 days = yes) instead of session-observed evidence — sibling proxy-for-evidence anti-pattern to" problem) all follow the canonical render rules — see `/wr-itil:manage-problem` Step 5 the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem block for the full prose; drift here re-opens those tickets.
335
+
336
+ **the "`docs/problems/README.md` line 3 narrative-blob accumulator bloat — sibling to (briefing tier 3) on a different surface" problem last-reviewed rotation** — inline at this execution site (not deferred to a § subsection) per the "transition-problem SKILL Step 7 Last-reviewed rotation silently skipped across iters" problem silent-skip discipline. MUST execute IN ORDER:
337
+
338
+ 1. **Read** line 3 of `docs/problems/README.md`: `awk 'NR==3' docs/problems/README.md`.
339
+ 2. **Append-if-non-empty (BEFORE step 3, not after)** — if line 3 is non-empty AND not a same-session same-verb near-duplicate of the new fragment, append the existing line 3 verbatim to `docs/problems/README-history.md` under a `## YYYY-MM-DD` heading (creating the heading on first append for that date; subsequent same-day appends nest under the existing heading). Run this BEFORE the Edit-tool rewrite in step 3 — Edit's replace pattern destroys the displaced content otherwise.
340
+ 3. **Rewrite** line 3 of `docs/problems/README.md` with the new fragment of form `> Last reviewed: YYYY-MM-DD **P<NNN> captured** — <one-line title> (lightweight aside via /wr-itil:capture-problem)`. Soft cap ≤ 1024 bytes per fragment; hard ceiling 5120 bytes per the "Session-start briefing surface — SessionStart hook over tiered directory + indexed README" architecture rule Tier 3 envelope.
341
+ 4. **Stage all three** — `git add docs/problems/open/<NNN>-<kebab-title>.md docs/problems/README.md docs/problems/README-history.md` so the same single commit per the "Governance Skills Commit Their Own Completed Work" architecture rule captures the new ticket + refreshed README + (when line-3 displaced) history. Omit `README-history.md` from the stage list when no line-3 displacement occurred (no untracked diff). Canonical rationale anchor: `/wr-itil:manage-problem` § Last-reviewed line discipline (the "`docs/problems/README.md` line 3 narrative-blob accumulator bloat — sibling to (briefing tier 3) on a different surface" problem) subsection.
342
+
343
+ ```bash
344
+ git add docs/problems/open/<NNN>-<kebab-title>.md docs/problems/README.md
345
+ # If line-3 was rotated above, also:
346
+ git add docs/problems/README-history.md
347
+ ```
348
+
349
+ Satisfy the commit gate per the "Governance Skills Commit Their Own Completed Work" architecture rule — same two-path pattern as manage-problem Step 11:
350
+
351
+ - **Primary**: delegate to subagent type `wr-risk-scorer:pipeline` via the native Codex subagent tool.
352
+ - **Fallback**: invoke `/wr-risk-scorer:assess-release` via the installed skill invocation when the subagent type is unavailable in the current tool surface.
353
+
354
+ Land the commit in one Bash call so the risk assessment cannot leave a partially re-staged index:
355
+
356
+ ```bash
357
+ git add -- docs/problems/open/<NNN>-<kebab-title>.md docs/problems/README.md
358
+ if git diff --cached --quiet --exit-code; then exit 1; fi
359
+ git commit -m "docs(problems): capture P<NNN> <title>"
360
+ # Add docs/problems/README-history.md to the git add list when it changed.
361
+ ```
362
+
363
+ The `capture` verb in the message is the audit signal that this ticket landed via the lightweight aside path (vs. `open` for manage-problem's full intake). The "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 README-refresh-discipline hook now allows the commit naturally because the README is staged — no `RISK_BYPASS` trailer needed.
364
+
365
+ ### 7. Report
366
+
367
+ After the commit, report:
368
+
369
+ - The new ticket file path and ID.
370
+ - The list of duplicate matches found (if any). If matches found, name them and remind the user to merge at next `/wr-itil:review-problems` if appropriate.
371
+ - **Trailing pointer (conditional shape per the "`/wr-itil:review-problems` not auto-fired when needed — user has to remember to run it" problem)**: invoke `<itil-plugin-root>/bin/wr-itil-check-deferred-placeholder-staleness "$PWD"` to read the deferred-placeholder + README-cadence staleness signal. The pointer shape switches on the helper's five-outcome enum:
372
+
373
+ ```bash
374
+ preflight_reason="$(<itil-plugin-root>/bin/wr-itil-check-deferred-placeholder-staleness "$PWD")"
375
+ ```
376
+
377
+ See `/wr-itil:work-problems` SKILL.md Step 0c for the canonical contract on the two-axis trigger (count ≥ 3 ungrounded-rating tickets — the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule `not estimated` sentinel — AND README age > 7 days); the threshold constants live in the helper. <!-- DEFERRED-PLACEHOLDER-STALENESS-CONTRACT-SOURCE: <itil-plugin-root>/lib/check-deferred-placeholder-staleness.sh -->
378
+
379
+ | `preflight_reason` | Trailing-pointer shape |
380
+ |---------------------------------------------------|--------------------------------------------------------------------------------------------------------|
381
+ | `no-deferred-placeholders` / `below-threshold ...` / `fresh-readme ...` | Default (low-priority) pointer: *"Run `/wr-itil:review-problems` next to re-rate the ungrounded (`not estimated — no prior data`) ratings."* (README is now refreshed inline at Step 6 per the "capture-problem → manage-problem same-session halts at Step 0 reconcile (HALT_ROUTE_RECONCILE on deferred-refresh seam)" problem Option 2 — the pointer no longer names a README-refresh action in the default shape.) |
382
+ | `no-readme count=<N>` | **Highlighted (actionable) pointer**: *"⚠ `<N>` ungrounded-rating ticket(s) (the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule `not estimated` sentinel) have accumulated AND `docs/problems/README.md` is missing/malformed — run `/wr-itil:review-problems` NOW to rebuild the README and re-rate placeholders."* (Fires only when README is genuinely missing/malformed despite this skill's inline refresh — a drift class the helper still surfaces.) |
383
+ | `stale-readme count=<N> age=<X>s threshold=<Y>s` | **Highlighted (actionable) pointer**: *"⚠ `<N>` ungrounded-rating ticket(s) (the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule `not estimated` sentinel) have accumulated AND the WSJF Rankings cadence is `<X>` days stale (> 7-day threshold) — run `/wr-itil:review-problems` NOW to re-rate placeholders."* (Inline refresh at Step 6 freshens the README mtime on every capture, so this shape now fires only when captures are absent for > 7 days — a real cadence-stale signal, not capture-driven drift.) |
384
+
385
+ **Why conditional, not auto-dispatch** (the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule + the ": Enforce Governance Without Slowing Down" user outcome): capture-problem is intentionally lightweight per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule the "Ship `/wr-itil:capture-problem` skill — lightweight aside-invocation surface for problem capture during foreground work" problem amendment. Auto-dispatching review-problems from capture would re-introduce the ~10-turn ceremony the lightweight aside is engineered to avoid. The conditional pointer surfaces the signal "ungrounded-rating backlog has grown AND the cadence axis hit threshold" when both axes fire. The user picks when to absorb the re-rate cost.
386
+
387
+ **Fail-soft**: any error in the helper invocation MUST NOT block the report — fall back to the default pointer shape.
388
+
389
+ The trailing pointer is **not optional** — it is the user-visible signal for ungrounded-rating re-rating cadence (the "Repo conflates a "named re-entry point" with a self-firing cadence — deferrals not transitively reachable from an automatic trigger rot" problem re-point: the count is now the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule `not estimated` sentinels, not blanket deferred placeholders). The conditional highlight (the "`/wr-itil:review-problems` not auto-fired when needed — user has to remember to run it" problem) escalates the signal when the ungrounded-rating backlog AND the cadence axis both hit threshold. Drift here re-opens the "`/wr-itil:review-problems` not auto-fired when needed — user has to remember to run it" problem.
390
+
391
+ <!-- @jtbd the ": Enforce Governance Without Slowing Down" user outcome (Enforce Governance Without Slowing Down — conditional highlight escalates the signal without forcing a flow break) -->
392
+
393
+ ## Composition with manage-problem
394
+
395
+ | Concern | manage-problem | capture-problem |
396
+ |---------|----------------|-----------------|
397
+ | Duplicate-check | Wide-net grep + request_user_input branch on matches | 3-keyword title-only grep, list-only (no branch) |
398
+ | Multi-concern split | Step 4b request_user_input | Out of scope (one ticket per invocation) |
399
+ | Skeleton-fill | Full-intake; request_user_input for missing fields | Deferred-placeholder pattern; low-confidence persona/JTBD → interview-to-elicit-who/why (never propose an ID; never discard the problem) |
400
+ | Type-tag prompt | RETIRED (the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem, 2026-06-02) | RETIRED (the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem, 2026-06-02) — the technical/user-business axis was removed as redundant with RFC/Story persona-anchoring per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Phase 4 |
401
+ | JTBD-trace + persona | Step 4-equivalent ingestion path | Step 1.5b derive → interview → classify dispatch (the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Amendment 2026-06-02 as corrected by the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem) — flag pre-resolution (`--jtbd=` / `--persona=`) silent-proceeds; lexical detection of JTBD-NNN citations silent-proceeds; cited-JTBD persona derivation silent-proceeds; low-confidence → INTERVIEW to elicit who/why (not propose an ID) → agent classifies existing:map+proceed / no-fit:human-ratifies-CREATION (the ": JTBD + persona human-oversight marker + `/wr-jtbd:confirm-jobs-and-personas` drain (sibling of )" architecture rule/the "New Jobs To Be Done and new personas need human-oversight confirmation (sibling of )" problem); problem NEVER discarded over anchoring; AFK `--no-prompt` → capture with unconfirmed-anchoring sentinel + queue elicitation |
402
+ | request_user_input authority | Multiple branches (deviation-approval / direction-setting / taste / mechanical) | Direction-setting (the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category 1) on the low-confidence interview + on the new-artefact creation-ratify; silent-framework (category 4) on derive-success paths AND on the agent's existing-vs-new classification of the elicited who/why |
403
+ | README refresh | the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem inline (regenerate + stage in same commit) | the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem inline (regenerate + stage in same commit) — the "capture-problem → manage-problem same-session halts at Step 0 reconcile (HALT_ROUTE_RECONCILE on deferred-refresh seam)" problem Option 2 amendment 2026-06-05; previously deferred to next `/wr-itil:review-problems` |
404
+ | Status transitions | Step 7 owns Open → Known Error → Verifying → Closed | Out of scope (creation only) |
405
+ | Commit grain | One commit per intake (or per split-concern set) | One commit per capture |
406
+ | Use case | Full-intake new problem; user wants to walk the flow | Aside-invocation; capture-and-continue |
407
+
408
+ The two skills share the `/tmp/manage-problem-grep-${SESSION_ID}` create-gate marker per the "Agent bypasses `/wr-itil:manage-problem` Step 2 duplicate-check by writing tickets directly to `docs/problems/`" problem — calling either skill's Step 2 grep + mark sequence permits new ticket Writes for the rest of the session, regardless of which skill landed first.
409
+
410
+ ## Related
411
+
412
+ - **the "Ship `/wr-itil:capture-problem` skill — lightweight aside-invocation surface for problem capture during foreground work" problem** (`docs/problems/closed/155-ship-capture-problem-skill.md`) — driver ticket.
413
+ - **the "Problem 014: No lightweight aside invocation for governance skills (problems, retros, ADRs)" problem** (`docs/problems/open/014-aside-invocation-for-governance-skills.md`) — parent / master tracker.
414
+ - **the "Problem 078: Assistant does not offer to capture a problem ticket when the user delivers strong-signal correction" problem** — capture-on-correction OFFER pattern; depends on capture-problem shipping.
415
+ - **the "Agent bypasses `/wr-itil:manage-problem` Step 2 duplicate-check by writing tickets directly to `docs/problems/`" problem** — manage-problem create-gate hook; capture-problem composes with the same marker.
416
+ - **the "capture-problem → manage-problem same-session halts at Step 0 reconcile (HALT_ROUTE_RECONCILE on deferred-refresh seam)" problem** (`docs/problems/verifying/199-...md`) — Option 2 amendment 2026-06-05: kill the deferred-README-refresh contract; Step 6 now stages README inline per the "Problem 094: `/wr-itil:manage-problem` does not refresh `docs/problems/README.md` on ticket creation" problem. User direction recorded 2026-05-31 in the ticket. This SKILL change rides with the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule + the "Governance Skills Commit Their Own Completed Work" architecture rule amendments in the same coherent commit.
417
+ - **the "README-refresh hook conflicts with capture-problem SKILL's deferred-README-refresh contract — hook wins; SKILL needs update OR hook needs carve-out" problem** (closed) — the "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 README-refresh-discipline hook conflicted with this skill's previous deferred-README-refresh contract. The prior workaround was the `RISK_BYPASS: capture-deferred-readme` allow-list token. Superseded by the "capture-problem → manage-problem same-session halts at Step 0 reconcile (HALT_ROUTE_RECONCILE on deferred-refresh seam)" problem Option 2 (2026-06-05) — capture-problem now stages README inline and the trailer is no longer emitted. The allow-list entry in `<itil-plugin-root>/hooks/lib/readme-refresh-detect.sh::_README_REFRESH_BYPASS_TRAILERS` is retained as inert dead code (minimal-change discipline; adopter compatibility).
418
+ - **the "hook does not recognise `RISK_BYPASS: adr-031-migration` trailer — blocks Step 0a auto-migrate" problem** — the RISK_BYPASS-trailer allow-list mechanism in `readme-refresh-detect.sh`. Still in force for the `adr-031-migration` token; the `capture-deferred-readme` entry is now inert (no live emitter) but registered for adopter compatibility.
419
+ - **the "Problem tickets strain as fixes decompose into multiple coordinated changes — need an RFC framework that ties all changes back to problems (and unifies technical with user/business problems)" problem** (`docs/problems/known-error/170-problem-tickets-strain-as-fixes-decompose-into-multiple-coordinated-changes-need-rfc-framework.md`) — RFC framework driver; Slice 4 B7.T3 / item 8c historically authored the type-classification prompt at Step 1.5 (RETIRED by the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem, 2026-06-02).
420
+ - **the "Agent-side I2 (no type-branching) coverage gap — SKILL.md type-branching invariant not behaviourally testable until skill-invocation harness lands" problem** — agent-side I2 (no type-branching) coverage gap on the SKILL.md surface. the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem retires the type axis altogether; the regression guard is preserved under `<itil-plugin-root>/scripts/test/no-type-regression-guard.bats` (asserting the `**Type**:` field is GONE from skeleton templates).
421
+ - **the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem** (`docs/problems/.../287-remove-technical-user-business-type-classification-from-problems-redundant-with-rfc-persona-anchoring.md`) — the user direction (twice-confirmed 2026-05-25 + 2026-06-02) that retired Step 1.5 Type classification; the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule amendment substance (I12 replacement, Phase-4 rework) queued for user re-confirmation per the ": Confirm a decision's substance before building dependent work on it" architecture rule.
422
+ - **the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule** (`docs/decisions/032-governance-skill-invocation-patterns.proposed.md`) — foreground-lightweight-capture variant amendment (the "Ship `/wr-itil:capture-problem` skill — lightweight aside-invocation surface for problem capture during foreground work" problem); 5th invocation pattern amendment (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem Phase 3, 2026-05-31) codifies the hang-off-check sub-step 2b dispatch as the canonical fresh-context-subagent-as-decision-arbiter shape.
423
+ - **the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem** (`docs/problems/.../346-...md`) — backlog-flow-control master ticket; Phase 3 deliverable lands the hang-off-check dispatch at sub-step 2b above.
424
+ - **the ": backlog flow control multi-phase" release design** (`docs/rfcs/the ": backlog flow control multi-phase" release design-...proposed.md`) — traces the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem Phases 1+2+3 per the "Every fix goes through an RFC" architecture rule unconditional Problem→RFC trace.
425
+ - **`<itil-plugin-root>/agents/hang-off-check.md`** — the fresh-context subagent invoked by sub-step 2b; reads only the structured input payload; emits HANG_OFF: P<NNN> or PROCEED_NEW with rationale + signals + absorb directive.
426
+ - **the "Progressive disclosure + once-per-session budget for UserPromptSubmit governance prose" architecture rule** — progressive-disclosure pattern (SKILL.md + REFERENCE.md split).
427
+ - **the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule** — decision-delegation contract. Persona derivation (Step 1.5b) is **derive-first**: silent-framework per category 4 when cited JTBDs agree on persona; taste per category 5 fallback only on cited-JTBD-persona disagreement. JTBD-trace itself is purely category 4 (lexical detection or `--jtbd=` flag pre-resolution). The retired Step 1.5 Type classification was a derive-first dispatch too (RETIRED by the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem, 2026-06-02).
428
+ - **the "`/wr-itil:capture-problem` asks a classification question (technical vs user-business) that it can answer itself from the description's observable evidence" problem** — `/wr-itil:capture-problem` historical: asked a classification question (type) it could answer itself; the Step 1.5 derive-first refactor (lexical-signal classifier + stderr advisory) shipped the fix in 2026-05-15. the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem then retired the entire surface in 2026-06-02 as the classification axis itself was redundant with RFC/Story persona-anchoring.
429
+ - **the "Plugin-bundled scripts invoked from SKILL.md resolve via `bin/` on `$PATH`" architecture rule** — bin/ on PATH; capture-problem reuses the existing `<itil-plugin-root>/bin/wr-itil-reconcile-readme` shim.
430
+ - **the "Behavioural-tests-default for skill testing" architecture rule** — behavioural-tests-default for skill testing; SKILL.md I2 surface coverage gap is named, not silent (the "Agent-side I2 (no type-branching) coverage gap — SKILL.md type-branching invariant not behaviourally testable until skill-invocation harness lands" problem + the "Behavioural-tests-default for skill testing" architecture rule § Surface 2).
431
+ - **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule** (`docs/decisions/060-...accepted.md`) — body currently encodes the type-tag schema (Decision Outcome item 1, I2 type-uniformity, I12 hard-block, Phase-4 persona+jtbd machinery keyed on `type:user-business`) AND the 2026-06-02 amendment's REJECT=discard clause. the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem retires the SKILL implementation of the type clauses unilaterally per twice-confirmed user direction; **the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem (2026-06-29/2026-07-02) reverses the REJECT=discard clause to interview-on-low-confidence + never-discard + ratify-creation-only** (see the Step 1.5b supersession note). Both ADR body amendment substances (the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem type rework; the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem I12 reshape) plus the **the "RFC-first: a problem's fix implements its RFC; no implementation without a pre-existing RFC" architecture rule additive symmetric covered→agent / uncovered→human-ratifies-new-persona/JTBD escalation note** are queued for user re-confirmation per the ": Confirm a decision's substance before building dependent work on it" architecture rule/the "User direction is not substance ratification — agent must brief-and-ratify AFTER changes are complete (sibling-class to on the user-direction code path)" problem. Until they land, the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule/the "RFC-first: a problem's fix implements its RFC; no implementation without a pre-existing RFC" architecture rule bodies and SKILL implementation are intentionally inconsistent — the same governed SKILL-leads-ADR-follows trade-off the user accepted for the "Remove the technical/user-business type classification from problems — redundant with RFC/Story persona-anchoring (amends )" problem.
432
+ - **the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem** (`docs/problems/open/401-capture-persona-jtbd-shoehorns-or-discards-instead-of-interviewing.md`) — the driver: the old propose-candidate-IDs + REJECT=discard flow shoehorned problems into the nearest persona/JTBD and discarded legitimate problems over anchoring uncertainty. This SKILL amendment lands the corrected interview-based shape; the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule/the "RFC-first: a problem's fix implements its RFC; no implementation without a pre-existing RFC" architecture rule body amendments + the `/wr-itil:work-problems` AFK caller-side wiring (route the queued elicitation into `outstanding_questions`) remain tracked on the "Capture/RFC persona-JTBD anchoring shoehorns (or discards the problem) instead of interviewing the human to elicit the real who/why" problem's Investigation Tasks.
433
+ - **the "Report a Problem Without Pre-Classifying It" user outcome** (`docs/jtbd/plugin-user/the "Report a Problem Without Pre-Classifying It" user outcome-...md`) — plugin-user no-pre-classification persona constraint; the Step 1.5b maintainer-side scope guard preserves the firewall on the JTBD-trace + persona axis. The type-axis firewall is moot (axis retired).
434
+ - `<itil-plugin-root>/skills/manage-problem/SKILL.md` — heavyweight intake counterpart.
435
+ - `<itil-plugin-root>/skills/review-problems/SKILL.md` — re-rates the deferred placeholders + refreshes README.md.
436
+ - `<itil-plugin-root>/scripts/test/no-type-regression-guard.bats` — pure-bash regression guard that the `**Type**:` field stays GONE from skeleton templates + ticket bodies. Replaces the historical `i2-no-type-branching.bats` (which asserted no-control-flow-branch-on-type; with the type axis retired, the branch-protection invariant is vacuous, but the field-absence regression guard preserves the audit trail per architect-review verdict 2026-06-02).
437
+
438
+ $ARGUMENTS
@@ -0,0 +1,3 @@
1
+ interface:
2
+ display_name: "WR ITIL: Capture Problem"
3
+ short_description: "Record a problem ticket with traceable evidence and risk."