@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.
- package/.agents/plugins/marketplace.json +12 -0
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +42 -0
- package/README.md +34 -25
- package/agents/hang-off-check.md +34 -34
- package/bin/install.mjs +71 -5
- package/bin/wr-itil-catchup-scan +4 -4
- package/bin/wr-itil-check-deferred-placeholder-staleness +4 -4
- package/bin/wr-itil-check-fail-soft-skip-discipline +4 -4
- package/bin/wr-itil-check-fix-rfc-trace +4 -4
- package/bin/wr-itil-check-locale-discipline +4 -4
- package/bin/wr-itil-check-outbound-responses-staleness +4 -4
- package/bin/wr-itil-check-problems-readme-budget +4 -4
- package/bin/wr-itil-check-rfc-has-stories +4 -4
- package/bin/wr-itil-check-rfc-stories-ratified +4 -4
- package/bin/wr-itil-check-ticket-jtbd-ratification +4 -4
- package/bin/wr-itil-check-upstream-cache-staleness +4 -4
- package/bin/wr-itil-check-upstream-responses +4 -4
- package/bin/wr-itil-classify-readme-drift +4 -4
- package/bin/wr-itil-derive-release-vehicle +4 -4
- package/bin/wr-itil-detect-unratified-stories-maps +4 -4
- package/bin/wr-itil-effort-tally +4 -4
- package/bin/wr-itil-enumerate-postrelease-kv-candidates +4 -4
- package/bin/wr-itil-evaluate-relevance +4 -4
- package/bin/wr-itil-mark-create-gate +4 -4
- package/bin/wr-itil-mark-story-oversight-confirmed +4 -4
- package/bin/wr-itil-migrate-problems-layout +4 -4
- package/bin/wr-itil-migrate-story-status-mirror +4 -4
- package/bin/wr-itil-next-rfc-id +4 -4
- package/bin/wr-itil-plugin-exercise-index +4 -4
- package/bin/wr-itil-plugin-maturity-populate +4 -4
- package/bin/wr-itil-plugin-maturity-render +4 -4
- package/bin/wr-itil-plugin-validate-ci-gate +4 -4
- package/bin/wr-itil-reconcile-readme +4 -4
- package/bin/wr-itil-reconcile-rfcs +4 -4
- package/bin/wr-itil-reconcile-stories +4 -4
- package/bin/wr-itil-reconcile-story-maps +4 -4
- package/bin/wr-itil-render-story-map +4 -4
- package/bin/wr-itil-resolve-governance-plugin-dirs +4 -4
- package/bin/wr-itil-skill-invocations +4 -4
- package/bin/wr-itil-story-map-edit +4 -4
- package/bin/wr-itil-story-map-query +4 -4
- package/bin/wr-itil-update-jtbd-references-section +4 -4
- package/bin/wr-itil-update-problem-references-section +4 -4
- package/bin/wr-itil-update-problem-rfcs-section +4 -4
- package/bin/wr-itil-update-rfc-commits-section +4 -4
- package/bin/wr-itil-update-rfc-references-section +4 -4
- package/bin/wr-itil-verify-iter-summary +4 -4
- package/hooks/itil-assistant-output-gate.sh +3 -3
- package/hooks/itil-assistant-output-review.sh +5 -5
- package/hooks/itil-bash-polling-antipattern-detect.sh +11 -11
- package/hooks/itil-changeset-discipline.sh +24 -24
- package/hooks/itil-claude-space-protection.sh +21 -14
- package/hooks/itil-codex-dispatch.sh +164 -0
- package/hooks/itil-commit-trailer-transition-advisory.sh +11 -11
- package/hooks/itil-correction-detect.sh +8 -8
- package/hooks/itil-deferral-cadence-gate.sh +23 -23
- package/hooks/itil-fictional-defer-detect.sh +16 -16
- package/hooks/itil-fix-title-lifecycle-advisory.sh +11 -11
- package/hooks/itil-mid-loop-ask-detect.sh +14 -14
- package/hooks/itil-no-implement-draft-gate.sh +18 -18
- package/hooks/itil-pending-questions-surface.sh +11 -11
- package/hooks/itil-readme-refresh-discipline.sh +27 -27
- package/hooks/itil-rfc-oversight-nudge.sh +7 -7
- package/hooks/itil-rfc-trailer-advisory.sh +28 -28
- package/hooks/itil-runtime-sid-marker.sh +11 -11
- package/hooks/itil-story-mirror-migration-nudge.sh +7 -7
- package/hooks/lib/block-list.sh +17 -17
- package/hooks/lib/changeset-detect.sh +27 -27
- package/hooks/lib/claude-space-gate.sh +23 -15
- package/hooks/lib/command-detect.sh +12 -12
- package/hooks/lib/create-gate.sh +9 -39
- package/hooks/lib/detectors.sh +12 -12
- package/hooks/lib/readme-refresh-detect.sh +51 -51
- package/hooks/lib/runtime-sid.sh +12 -12
- package/hooks/lib/session-id.sh +28 -28
- package/hooks/lib/session-marker.sh +1 -1
- package/hooks/lib/staging-detect.sh +13 -13
- package/hooks/manage-problem-enforce-create.sh +16 -27
- package/hooks/p057-staging-trap-detect.sh +18 -18
- package/hooks/pre-publish-intake-gate.sh +5 -5
- package/hooks/staleness-check.sh +6 -6
- package/hooks-codex/hooks.json +57 -0
- package/lib/check-deferred-placeholder-staleness.sh +10 -10
- package/lib/check-outbound-responses-staleness.sh +2 -2
- package/lib/check-upstream-cache-staleness.sh +2 -2
- package/lib/derive-first-dispatch.sh +19 -19
- package/lib/enumerate-postrelease-kv-candidates.sh +18 -18
- package/lib/migrate-problems-layout.sh +12 -12
- package/lib/story-oversight.sh +27 -27
- package/package.json +16 -3
- package/scripts/catchup-scan.sh +25 -25
- package/scripts/check-fail-soft-skip-discipline.sh +10 -10
- package/scripts/check-fix-rfc-trace.sh +8 -8
- package/scripts/check-locale-discipline.sh +13 -13
- package/scripts/check-problems-readme-budget.sh +12 -12
- package/scripts/check-rfc-has-stories.sh +7 -7
- package/scripts/check-rfc-rejected-alternatives.sh +11 -11
- package/scripts/check-rfc-stories-ratified.sh +9 -9
- package/scripts/check-ticket-jtbd-ratification.sh +10 -10
- package/scripts/check-upstream-responses.sh +22 -22
- package/scripts/classify-readme-drift.sh +13 -13
- package/scripts/codex-agent.mjs +104 -0
- package/scripts/derive-release-vehicle.sh +23 -23
- package/scripts/detect-unoversighted-rfcs.sh +3 -3
- package/scripts/detect-unratified-stories-maps.sh +5 -5
- package/scripts/effort-tally.sh +10 -10
- package/scripts/evaluate-relevance.sh +16 -16
- package/scripts/mark-create-gate.sh +4 -4
- package/scripts/mark-story-oversight-confirmed.sh +14 -14
- package/scripts/migrate-story-status-mirror.sh +6 -6
- package/scripts/next-rfc-id.sh +5 -5
- package/scripts/plugin-exercise-index.sh +26 -26
- package/scripts/plugin-maturity-populate.sh +38 -38
- package/scripts/plugin-maturity-render.sh +26 -26
- package/scripts/plugin-validate-ci-gate.sh +14 -14
- package/scripts/reconcile-readme.sh +23 -23
- package/scripts/reconcile-rfcs.sh +13 -13
- package/scripts/reconcile-stories.sh +12 -12
- package/scripts/reconcile-story-maps.sh +6 -6
- package/scripts/render-story-map.mjs +24 -24
- package/scripts/render-story-map.sh +3 -3
- package/scripts/resolve-governance-plugin-dirs.sh +10 -10
- package/scripts/run-check-deferred-placeholder-staleness.sh +3 -3
- package/scripts/run-check-outbound-responses-staleness.sh +3 -3
- package/scripts/run-check-upstream-cache-staleness.sh +3 -3
- package/scripts/run-enumerate-postrelease-kv-candidates.sh +3 -3
- package/scripts/run-migrate-problems-layout.sh +3 -3
- package/scripts/skill-invocations.sh +29 -29
- package/scripts/story-map-edit.mjs +6 -6
- package/scripts/story-map-edit.sh +3 -3
- package/scripts/story-map-query.mjs +8 -8
- package/scripts/story-map-query.sh +3 -3
- package/scripts/update-jtbd-references-section.sh +8 -8
- package/scripts/update-problem-references-section.sh +12 -12
- package/scripts/update-problem-rfcs-section.sh +9 -9
- package/scripts/update-rfc-commits-section.sh +7 -7
- package/scripts/update-rfc-references-section.sh +3 -3
- package/scripts/update-story-references-section.sh +5 -5
- package/scripts/verify-iter-summary.sh +3 -3
- package/skills/capture-problem/REFERENCE.md +33 -33
- package/skills/capture-problem/SKILL.md +108 -108
- package/skills/capture-problem/agents/openai.yaml +3 -0
- package/skills/capture-rfc/SKILL.md +21 -323
- package/skills/capture-rfc/agents/openai.yaml +3 -0
- package/skills/capture-story/SKILL.md +65 -65
- package/skills/capture-story/agents/openai.yaml +3 -0
- package/skills/capture-story-map/SKILL.md +31 -31
- package/skills/capture-story-map/agents/openai.yaml +3 -0
- package/skills/check-upstream-responses/SKILL.md +38 -38
- package/skills/check-upstream-responses/agents/openai.yaml +3 -0
- package/skills/close-incident/SKILL.md +25 -25
- package/skills/close-incident/agents/openai.yaml +3 -0
- package/skills/link-incident/SKILL.md +22 -22
- package/skills/link-incident/agents/openai.yaml +3 -0
- package/skills/list-incidents/SKILL.md +9 -9
- package/skills/list-incidents/agents/openai.yaml +3 -0
- package/skills/list-problems/SKILL.md +17 -17
- package/skills/list-problems/agents/openai.yaml +3 -0
- package/skills/list-stories/SKILL.md +23 -23
- package/skills/list-stories/agents/openai.yaml +3 -0
- package/skills/list-story-maps/SKILL.md +9 -9
- package/skills/list-story-maps/agents/openai.yaml +3 -0
- package/skills/manage-incident/SKILL.md +59 -59
- package/skills/manage-incident/agents/openai.yaml +3 -0
- package/skills/manage-problem/SKILL.md +222 -222
- package/skills/manage-problem/agents/openai.yaml +3 -0
- package/skills/manage-rfc/SKILL.md +62 -62
- package/skills/manage-rfc/agents/openai.yaml +3 -0
- package/skills/manage-story/SKILL.md +49 -49
- package/skills/manage-story/agents/openai.yaml +3 -0
- package/skills/manage-story-map/SKILL.md +30 -30
- package/skills/manage-story-map/agents/openai.yaml +3 -0
- package/skills/mitigate-incident/SKILL.md +40 -40
- package/skills/mitigate-incident/agents/openai.yaml +3 -0
- package/skills/reconcile-readme/SKILL.md +28 -28
- package/skills/reconcile-readme/agents/openai.yaml +3 -0
- package/skills/reconcile-stories/SKILL.md +17 -17
- package/skills/reconcile-stories/agents/openai.yaml +3 -0
- package/skills/reconcile-story-maps/SKILL.md +11 -11
- package/skills/reconcile-story-maps/agents/openai.yaml +3 -0
- package/skills/report-upstream/SKILL.md +73 -73
- package/skills/report-upstream/agents/openai.yaml +3 -0
- package/skills/restore-incident/SKILL.md +28 -28
- package/skills/restore-incident/agents/openai.yaml +3 -0
- package/skills/review-problems/SKILL.md +129 -129
- package/skills/review-problems/agents/openai.yaml +3 -0
- package/skills/scaffold-intake/SKILL.md +26 -26
- package/skills/scaffold-intake/agents/openai.yaml +3 -0
- package/skills/transition-problem/SKILL.md +85 -85
- package/skills/transition-problem/agents/openai.yaml +3 -0
- package/skills/transition-problems/SKILL.md +69 -69
- package/skills/transition-problems/agents/openai.yaml +3 -0
- package/skills/update-upstream/SKILL.md +97 -97
- package/skills/update-upstream/agents/openai.yaml +3 -0
- package/skills/work-problem/SKILL.md +42 -42
- package/skills/work-problem/agents/openai.yaml +3 -0
- package/skills/work-problems/SKILL.md +327 -327
- package/skills/work-problems/agents/openai.yaml +3 -0
- package/skills-codex/capture-problem/REFERENCE.md +139 -0
- package/skills-codex/capture-problem/SKILL.md +438 -0
- package/skills-codex/capture-problem/agents/openai.yaml +3 -0
- package/skills-codex/capture-rfc/SKILL.md +45 -0
- package/skills-codex/capture-rfc/agents/openai.yaml +3 -0
- package/skills-codex/capture-story/SKILL.md +407 -0
- package/skills-codex/capture-story/agents/openai.yaml +3 -0
- package/skills-codex/capture-story-map/SKILL.md +286 -0
- package/skills-codex/capture-story-map/agents/openai.yaml +3 -0
- package/skills-codex/check-upstream-responses/SKILL.md +160 -0
- package/skills-codex/check-upstream-responses/agents/openai.yaml +3 -0
- package/skills-codex/close-incident/SKILL.md +192 -0
- package/skills-codex/close-incident/agents/openai.yaml +3 -0
- package/skills-codex/link-incident/SKILL.md +173 -0
- package/skills-codex/link-incident/agents/openai.yaml +3 -0
- package/skills-codex/list-incidents/SKILL.md +92 -0
- package/skills-codex/list-incidents/agents/openai.yaml +3 -0
- package/skills-codex/list-problems/SKILL.md +126 -0
- package/skills-codex/list-problems/agents/openai.yaml +3 -0
- package/skills-codex/list-stories/SKILL.md +170 -0
- package/skills-codex/list-stories/agents/openai.yaml +3 -0
- package/skills-codex/list-story-maps/SKILL.md +104 -0
- package/skills-codex/list-story-maps/agents/openai.yaml +3 -0
- package/skills-codex/manage-incident/SKILL.md +378 -0
- package/skills-codex/manage-incident/agents/openai.yaml +3 -0
- package/skills-codex/manage-problem/SKILL.md +1180 -0
- package/skills-codex/manage-problem/agents/openai.yaml +3 -0
- package/skills-codex/manage-rfc/SKILL.md +314 -0
- package/skills-codex/manage-rfc/agents/openai.yaml +3 -0
- package/skills-codex/manage-story/SKILL.md +284 -0
- package/skills-codex/manage-story/agents/openai.yaml +3 -0
- package/skills-codex/manage-story-map/SKILL.md +198 -0
- package/skills-codex/manage-story-map/agents/openai.yaml +3 -0
- package/skills-codex/mitigate-incident/SKILL.md +239 -0
- package/skills-codex/mitigate-incident/agents/openai.yaml +3 -0
- package/skills-codex/reconcile-readme/SKILL.md +175 -0
- package/skills-codex/reconcile-readme/agents/openai.yaml +3 -0
- package/skills-codex/reconcile-stories/SKILL.md +124 -0
- package/skills-codex/reconcile-stories/agents/openai.yaml +3 -0
- package/skills-codex/reconcile-story-maps/SKILL.md +81 -0
- package/skills-codex/reconcile-story-maps/agents/openai.yaml +3 -0
- package/skills-codex/report-upstream/SKILL.md +716 -0
- package/skills-codex/report-upstream/agents/openai.yaml +3 -0
- package/skills-codex/restore-incident/SKILL.md +216 -0
- package/skills-codex/restore-incident/agents/openai.yaml +3 -0
- package/skills-codex/review-problems/SKILL.md +524 -0
- package/skills-codex/review-problems/agents/openai.yaml +3 -0
- package/skills-codex/scaffold-intake/SKILL.md +209 -0
- package/skills-codex/scaffold-intake/agents/openai.yaml +3 -0
- package/skills-codex/scaffold-intake/templates/CONTRIBUTING.md.tmpl +31 -0
- package/skills-codex/scaffold-intake/templates/SECURITY.md.tmpl +39 -0
- package/skills-codex/scaffold-intake/templates/SUPPORT.md.tmpl +32 -0
- package/skills-codex/scaffold-intake/templates/config.yml.tmpl +8 -0
- package/skills-codex/scaffold-intake/templates/problem-report.yml.tmpl +114 -0
- package/skills-codex/transition-problem/SKILL.md +371 -0
- package/skills-codex/transition-problem/agents/openai.yaml +3 -0
- package/skills-codex/transition-problems/SKILL.md +310 -0
- package/skills-codex/transition-problems/agents/openai.yaml +3 -0
- package/skills-codex/update-upstream/SKILL.md +583 -0
- package/skills-codex/update-upstream/agents/openai.yaml +3 -0
- package/skills-codex/work-problem/SKILL.md +160 -0
- package/skills-codex/work-problem/agents/openai.yaml +3 -0
- package/skills-codex/work-problems/SKILL.md +58 -0
- package/skills-codex/work-problems/agents/openai.yaml +3 -0
- package/templates/story-map.css +1 -1
- package/bin/wr-itil-mark-rfc-capture-gate +0 -51
- package/scripts/mark-rfc-capture-gate.sh +0 -32
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wr-itil:list-stories
|
|
3
|
-
description: List INVEST-shaped story tickets from docs/stories/ as a markdown table. Read-only display — no edits, no interaction. Optional `--rfc RFC-<NNN>` filter to surface a specific RFC's ordered story list per
|
|
3
|
+
description: List INVEST-shaped story tickets from docs/stories/ as a markdown table. Read-only display — no edits, no interaction. Optional `--rfc RFC-<NNN>` filter to surface a specific RFC's ordered story list per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Phase 2.
|
|
4
4
|
allowed-tools: Read, Bash, Grep, Glob
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# List Stories
|
|
8
8
|
|
|
9
|
-
Display the story corpus from `docs/stories/` as a markdown table. Read-only view of the story tier per
|
|
9
|
+
Display the story corpus from `docs/stories/` as a markdown table. Read-only view of the story tier per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Phase 2; this skill does not edit, transition, close, or create stories. For those operations, use the dedicated skills (`/wr-itil:capture-story`, `/wr-itil:manage-story`).
|
|
10
10
|
|
|
11
|
-
Mirrors the `/wr-itil:list-problems` precedent (
|
|
11
|
+
Mirrors the `/wr-itil:list-problems` precedent (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem phased-landing split per the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule amended Skill Granularity rule: one skill per distinct user intent). The list-stories surface separates the read-only view from the heavyweight `/wr-itil:manage-story list` subcommand route (which is itself a candidate for phased-landing split in a future slice).
|
|
12
12
|
|
|
13
13
|
## Scope
|
|
14
14
|
|
|
@@ -16,26 +16,26 @@ Stories live under `docs/stories/<state>/STORY-<NNN>-<slug>.md` in lifecycle sub
|
|
|
16
16
|
|
|
17
17
|
- `docs/stories/draft/*.md` — draft (captured via `/wr-itil:capture-story`; pre-INVEST-acceptance)
|
|
18
18
|
- `docs/stories/accepted/*.md` — accepted (INVEST-shape verified per I10; pre-implementation)
|
|
19
|
-
- `docs/stories/in-progress/*.md` — in-progress (implementation underway; auto-transitioned from accepted on first `Refs: STORY-<NNN>` commit AFTER the capture commit per
|
|
19
|
+
- `docs/stories/in-progress/*.md` — in-progress (implementation underway; auto-transitioned from accepted on first `Refs: STORY-<NNN>` commit AFTER the capture commit per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 292)
|
|
20
20
|
- `docs/stories/done/*.md` — done (acceptance-criteria all-ticked + linked RFC closes; auto-transitioned from in-progress)
|
|
21
21
|
- `docs/stories/archived/*.md` — archived (closed without completion; manual transition)
|
|
22
22
|
|
|
23
|
-
Per
|
|
23
|
+
Per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule I11 invariant (Phase 2 deferred): stories MUST NOT carry a WSJF field. Legacy RFC files retain their ordered frontmatter `stories:` array. Under the "A release row is the RFC, and the map is the approval surface" architecture rule, newer RFCs are release rows and their story sequence comes from the row's cards on the map, NOT from per-story WSJF.
|
|
24
24
|
|
|
25
25
|
## Argument grammar
|
|
26
26
|
|
|
27
|
-
**Positional (optional)**: `--rfc RFC-<NNN>` flag-style filter. When provided, the display lists ONLY stories that trace to the named RFC, IN THE ORDER specified by the RFC's frontmatter `stories:` array per
|
|
27
|
+
**Positional (optional)**: `--rfc RFC-<NNN>` flag-style filter. When provided, the display lists ONLY stories that trace to the named RFC, IN THE ORDER specified by the RFC's frontmatter `stories:` array per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 259. Without the flag, all stories across all lifecycle states are listed grouped by state.
|
|
28
28
|
|
|
29
29
|
```
|
|
30
30
|
/wr-itil:list-stories # All stories, grouped by lifecycle state
|
|
31
|
-
/wr-itil:list-stories --rfc
|
|
31
|
+
/wr-itil:list-stories --rfc the ": docs/problems/ flat layout migration — per-state subdirs + adopter auto-migration" release design # Only stories under the ": docs/problems/ flat layout migration — per-state subdirs + adopter auto-migration" release design, in execution order
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
## Steps
|
|
35
35
|
|
|
36
36
|
### 1. Check `docs/stories/README.md` cache freshness
|
|
37
37
|
|
|
38
|
-
Reuse the same `git log`-based freshness test as `/wr-itil:list-problems` Step 1 (per
|
|
38
|
+
Reuse the same `git log`-based freshness test as `/wr-itil:list-problems` Step 1 (per the "Problem 031: `manage-problem work` incorrectly determines cache is fresh" problem — filesystem mtime is unreliable in worktrees and fresh checkouts):
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
41
|
readme_commit=$(git log -1 --format=%H -- docs/stories/README.md 2>/dev/null)
|
|
@@ -108,7 +108,7 @@ For each `STORY-<NNN>` in the ordered list, resolve to a file under `docs/storie
|
|
|
108
108
|
|
|
109
109
|
Omit empty sections rather than rendering empty headers. The Estimated Effort column is omitted from the Draft section because effort is deferred at capture and only required at accepted per I10 INVEST Estimable.
|
|
110
110
|
|
|
111
|
-
**The `Approved by` column (
|
|
111
|
+
**The `Approved by` column (the "A release row is the RFC, and the map is the approval surface" architecture rule, Accepted + In Progress sections only).** A story carries no oversight field; approval is its map's. Name the ratified map that approves it, since that is what the human actually looked at, and leave the column empty when no map in the story's `story-maps:` field is ratified. Derive it with `story_is_approved` — never by reading a `human-oversight:` line off the story, which no longer exists.
|
|
112
112
|
|
|
113
113
|
**Filtered mode** (`--rfc RFC-<NNN>`) — render a single ordered table:
|
|
114
114
|
|
|
@@ -124,13 +124,13 @@ Omit empty sections rather than rendering empty headers. The Estimated Effort co
|
|
|
124
124
|
...
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
The Order column makes the execution sequence visible — critical for the working-the-problem flow per
|
|
127
|
+
The Order column makes the execution sequence visible — critical for the working-the-problem flow per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 314 ("read frontmatter `stories:` array (ordered) → pick first not-done story").
|
|
128
128
|
|
|
129
129
|
### 4. Trailing suggestions
|
|
130
130
|
|
|
131
131
|
After the table(s), print one short pointer depending on output:
|
|
132
132
|
|
|
133
|
-
- **Filtered mode + first not-done story exists**: `Run /wr-itil:work-problem to advance the next story under RFC-<NNN> (STORY-<NNN> — <title>).` (Note: working-the-problem traversal per
|
|
133
|
+
- **Filtered mode + first not-done story exists**: `Run /wr-itil:work-problem to advance the next story under RFC-<NNN> (STORY-<NNN> — <title>).` (Note: working-the-problem traversal per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 300-320 lands in Slice 13.)
|
|
134
134
|
- **Filtered mode + all stories done**: `All stories under RFC-<NNN> are done. Run /wr-itil:manage-rfc <RFC-<NNN>> verifying to transition the RFC.`
|
|
135
135
|
- **Unfiltered mode + Draft section non-empty**: `Run /wr-itil:manage-story <STORY-<NNN>> accepted to advance a draft through INVEST gates.`
|
|
136
136
|
- **Unfiltered mode + only Done section non-empty**: `No active stories. Run /wr-itil:capture-story to draft a new story.`
|
|
@@ -141,18 +141,18 @@ After the table(s), print one short pointer depending on output:
|
|
|
141
141
|
|
|
142
142
|
## Related
|
|
143
143
|
|
|
144
|
-
- **
|
|
145
|
-
- **
|
|
146
|
-
- **
|
|
147
|
-
- **
|
|
148
|
-
- **
|
|
149
|
-
- **
|
|
150
|
-
- **
|
|
151
|
-
- **
|
|
152
|
-
- **
|
|
153
|
-
- **
|
|
154
|
-
- **
|
|
155
|
-
- **
|
|
144
|
+
- **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule** — Problem-RFC-Story framework + Phase 2 amendment 2026-05-12 (story tier).
|
|
145
|
+
- **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 259** — RFC frontmatter `stories:` ORDERED array (execution sequence).
|
|
146
|
+
- **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 294** — `/wr-itil:list-stories` skill description with `--rfc RFC-<NNN>` filter.
|
|
147
|
+
- **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule lines 300-320** — working-the-problem flow (Slice 13 lands the traversal).
|
|
148
|
+
- **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 253** — I11 no-WSJF-leak invariant (Phase 2).
|
|
149
|
+
- **the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem** — phased-landing split precedent (list-problems split from manage-problem list).
|
|
150
|
+
- **the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule amended** — Skill Granularity rule.
|
|
151
|
+
- **the "Problem lifecycle — add a Verification Pending status between Known Error and Closed" architecture rule** — lifecycle conventions (story lifecycle mirrors problem lifecycle).
|
|
152
|
+
- **the "Skill testing strategy — contract-assertion bats companion to" architecture rule** — contract-assertion bats pattern.
|
|
153
|
+
- **the "Problem 031: `manage-problem work` incorrectly determines cache is fresh" problem** — git-history freshness check rationale.
|
|
154
|
+
- **the ": Decompose a Fix Into Coordinated Changes" user outcome** — Decompose a Fix Into Coordinated Changes. The list view supports the working-the-problem flow that operationalises the ": Decompose a Fix Into Coordinated Changes" user outcome's "first-class entity" Desired Outcome.
|
|
155
|
+
- **the ": Progress the Backlog While I'm Away" user outcome** — Progress the Backlog While I'm Away. Filtered mode (`--rfc`) feeds the AFK orchestrator's per-RFC iter dispatch (Slice 13).
|
|
156
156
|
- `packages/itil/skills/list-problems/SKILL.md` — direct precedent shape.
|
|
157
157
|
- `packages/itil/skills/list-incidents/SKILL.md` — sibling list-* skill at the incident tier.
|
|
158
158
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wr-itil:list-story-maps
|
|
3
|
-
description: List story-map artefacts from docs/story-maps/ as a markdown table. Read-only display — no edits, no interaction. Renders <meta> block data (problems / rfcs / jtbd / status) from each HTML map per
|
|
3
|
+
description: List story-map artefacts from docs/story-maps/ as a markdown table. Read-only display — no edits, no interaction. Renders <meta> block data (problems / rfcs / jtbd / status) from each HTML map per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule § Phase 2 encoding amendment 2026-05-12.
|
|
4
4
|
allowed-tools: Read, Bash, Grep, Glob
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# List Story Maps
|
|
8
8
|
|
|
9
|
-
Display the story-map corpus from `docs/story-maps/` as a markdown table. Read-only view per
|
|
9
|
+
Display the story-map corpus from `docs/story-maps/` as a markdown table. Read-only view per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule Phase 2; does not edit, transition, or create maps.
|
|
10
10
|
|
|
11
|
-
Mirrors `/wr-itil:list-stories` precedent (
|
|
11
|
+
Mirrors `/wr-itil:list-stories` precedent (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem phased-landing split per the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule). I5 invariant: story-maps MUST NOT carry WSJF (no Story Rankings table — maps are planning artefacts, not work items per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 145).
|
|
12
12
|
|
|
13
13
|
## Scope
|
|
14
14
|
|
|
@@ -68,7 +68,7 @@ Render lifecycle-grouped sections:
|
|
|
68
68
|
(same shape; sections omitted when empty)
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
NO WSJF column per I5. NO ranking table per the "story-maps are planning artefacts, not work items" principle (
|
|
71
|
+
NO WSJF column per I5. NO ranking table per the "story-maps are planning artefacts, not work items" principle (the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 145).
|
|
72
72
|
|
|
73
73
|
### 4. Trailing suggestions
|
|
74
74
|
|
|
@@ -82,12 +82,12 @@ Does not modify, rename, or commit files. Cache-stale path performs live scan on
|
|
|
82
82
|
|
|
83
83
|
## Related
|
|
84
84
|
|
|
85
|
-
- **
|
|
86
|
-
- **
|
|
87
|
-
- **
|
|
85
|
+
- **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule** — Problem-RFC-Story framework; Phase 2 amendment lines 145-189 (story-map tier spec).
|
|
86
|
+
- **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 145** — story-maps are planning artefacts; no WSJF (I5).
|
|
87
|
+
- **the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule lines 381-435** — HTML encoding schema; `<meta>` block parse target.
|
|
88
88
|
- **`docs/story-maps/README.md`** — story-map directory index.
|
|
89
89
|
- **`/wr-itil:list-stories`** — sibling read-only display at the story tier.
|
|
90
|
-
- **`/wr-itil:list-problems`** — sibling at the problem tier (
|
|
91
|
-
- **
|
|
90
|
+
- **`/wr-itil:list-problems`** — sibling at the problem tier (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem precedent).
|
|
91
|
+
- **the ": Decompose a Fix Into Coordinated Changes" user outcome** — Decompose a Fix Into Coordinated Changes.
|
|
92
92
|
|
|
93
93
|
$ARGUMENTS
|
|
@@ -60,7 +60,7 @@ Prefer **reversible** mitigations over forward fixes:
|
|
|
60
60
|
|
|
61
61
|
Record every attempt, successful or not.
|
|
62
62
|
|
|
63
|
-
**Mitigation SELECTION is agent-owned — do NOT defer "which mitigation" to the user (
|
|
63
|
+
**Mitigation SELECTION is agent-owned — do NOT defer "which mitigation" to the user (the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule framework-mediated surface; category-4 silent-framework family).** Choosing *which* mitigation to attempt — traversing the ladder above, backed by cited evidence, within risk appetite — is the agent's call, not a user-authority decision. The framework already resolved it (the ladder is the selection mechanism, the evidence-first gate is the quality bar, RISK-POLICY appetite is the bound). Do NOT surface "which mitigation should I attempt?" via `AskUserQuestion` **or** a prose-ask ("I'll wait for your direction on which mitigation to attempt"). Authority: the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 5; the "Restore Service Fast with an Audit Trail" user outcome ("reversible mitigations are preferred"); user direction 2026-05-10 — *"mitigations don't belong to me. You are empowered."* (the "Agent defers mitigation selection to user during active incident — surfaces mitigation choice as user-authority when SKILL contract empowers agent-driven reversible mitigations" problem). Genuine user-authority surfaces are unchanged: the evidence-gate bypass (the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-2, Step 6) and the risk-above-appetite commit (category-3, Step 14). Mitigation execution is delegated to `/wr-itil:mitigate-incident` (Step 7), which carries the same empowerment annotation.
|
|
64
64
|
|
|
65
65
|
## Severity, not WSJF
|
|
66
66
|
|
|
@@ -82,11 +82,11 @@ Determine the operation from `$ARGUMENTS`:
|
|
|
82
82
|
- If arguments start with `I<NNN>` or a bare number → this is an update
|
|
83
83
|
- Otherwise → declare a new incident
|
|
84
84
|
|
|
85
|
-
#### Deprecated-argument forwarders (
|
|
85
|
+
#### Deprecated-argument forwarders (the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule amended + the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem)
|
|
86
86
|
|
|
87
|
-
Per
|
|
87
|
+
Per the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule's amended Skill Granularity section, word-argument subcommands that name distinct user intents are being split into their own named skills. During the deprecation window, this skill's Step 1 parser retains the legacy argument routes as **thin-router forwarders** that re-invoke the new named skill via the Skill tool AND emit a one-line systemMessage with the canonical deprecation notice so the user learns the new invocation shape.
|
|
88
88
|
|
|
89
|
-
**Forwarder for `list`** (
|
|
89
|
+
**Forwarder for `list`** (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 5 — new skill `/wr-itil:list-incidents`):
|
|
90
90
|
|
|
91
91
|
When `$ARGUMENTS` contains the word `list` as a top-level argument (not inside an incident body edit), delegate to `/wr-itil:list-incidents` via the Skill tool and emit this systemMessage verbatim:
|
|
92
92
|
|
|
@@ -94,15 +94,15 @@ When `$ARGUMENTS` contains the word `list` as a top-level argument (not inside a
|
|
|
94
94
|
|
|
95
95
|
The forwarder does NOT re-implement the list logic locally — it invokes the Skill tool with `wr-itil:list-incidents` and returns the new skill's output verbatim. Duplicating the scan logic would harden the deprecation window into a permanent fork.
|
|
96
96
|
|
|
97
|
-
**Forwarder for `<I###> mitigate <action>`** (
|
|
97
|
+
**Forwarder for `<I###> mitigate <action>`** (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 6a — new skill `/wr-itil:mitigate-incident`):
|
|
98
98
|
|
|
99
99
|
When `$ARGUMENTS` matches the shape `<I###> mitigate <action>` (an incident ID followed by the literal word `mitigate` followed by a free-text action), delegate to `/wr-itil:mitigate-incident <I###> <action>` via the Skill tool and emit this systemMessage verbatim:
|
|
100
100
|
|
|
101
101
|
> `/wr-itil:manage-incident <I###> mitigate <action> is deprecated; use /wr-itil:mitigate-incident <I###> <action> directly. This forwarder will be removed in @windyroad/itil's next major version.`
|
|
102
102
|
|
|
103
|
-
The forwarder does NOT re-implement the mitigation logic locally — it invokes the Skill tool with `wr-itil:mitigate-incident`, passes `<I###> <action>` through as the data parameters, and returns the new skill's output verbatim. Duplicating the rename + evidence-gate + timeline-append logic would harden the deprecation window into a permanent fork. The data-parameter shape `<I###> <action>` is permitted under
|
|
103
|
+
The forwarder does NOT re-implement the mitigation logic locally — it invokes the Skill tool with `wr-itil:mitigate-incident`, passes `<I###> <action>` through as the data parameters, and returns the new skill's output verbatim. Duplicating the rename + evidence-gate + timeline-append logic would harden the deprecation window into a permanent fork. The data-parameter shape `<I###> <action>` is permitted under the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule amended — only the verb word `mitigate` is being split out.
|
|
104
104
|
|
|
105
|
-
**Forwarder for `<I###> restored`** (
|
|
105
|
+
**Forwarder for `<I###> restored`** (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 6b — new skill `/wr-itil:restore-incident`):
|
|
106
106
|
|
|
107
107
|
When `$ARGUMENTS` matches the shape `<I###> restored` (an incident ID followed by the literal word `restored`), delegate to `/wr-itil:restore-incident <I###>` via the Skill tool and emit this systemMessage verbatim:
|
|
108
108
|
|
|
@@ -110,7 +110,7 @@ When `$ARGUMENTS` matches the shape `<I###> restored` (an incident ID followed b
|
|
|
110
110
|
|
|
111
111
|
The forwarder does NOT re-implement the restore logic locally — it invokes the Skill tool with `wr-itil:restore-incident`, passes `<I###>` through as the data parameter, and returns the new skill's output verbatim. Duplicating the rename + verification-signal prompt + manage-problem handoff logic would harden the deprecation window into a permanent fork.
|
|
112
112
|
|
|
113
|
-
**Forwarder for `<I###> close`** (
|
|
113
|
+
**Forwarder for `<I###> close`** (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 6c — new skill `/wr-itil:close-incident`):
|
|
114
114
|
|
|
115
115
|
When `$ARGUMENTS` matches the shape `<I###> close` (an incident ID followed by the literal word `close`), delegate to `/wr-itil:close-incident <I###>` via the Skill tool and emit this systemMessage verbatim:
|
|
116
116
|
|
|
@@ -118,24 +118,24 @@ When `$ARGUMENTS` matches the shape `<I###> close` (an incident ID followed by t
|
|
|
118
118
|
|
|
119
119
|
The forwarder does NOT re-implement the close logic locally — it invokes the Skill tool with `wr-itil:close-incident`, passes `<I###>` through as the data parameter, and returns the new skill's output verbatim. Duplicating the linked-problem gate + rename logic would harden the deprecation window into a permanent fork.
|
|
120
120
|
|
|
121
|
-
**Forwarder for `<I###> link P<MMM>`** (
|
|
121
|
+
**Forwarder for `<I###> link P<MMM>`** (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 6d — new skill `/wr-itil:link-incident`):
|
|
122
122
|
|
|
123
123
|
When `$ARGUMENTS` matches the shape `<I###> link P<MMM>` (an incident ID followed by the literal word `link` followed by a problem ID), delegate to `/wr-itil:link-incident <I###> P<MMM>` via the Skill tool and emit this systemMessage verbatim:
|
|
124
124
|
|
|
125
125
|
> `/wr-itil:manage-incident <I###> link P<MMM> is deprecated; use /wr-itil:link-incident <I###> P<MMM> directly. This forwarder will be removed in @windyroad/itil's next major version.`
|
|
126
126
|
|
|
127
|
-
The forwarder does NOT re-implement the link logic locally — it invokes the Skill tool with `wr-itil:link-incident`, passes `<I###> P<MMM>` through as the data parameters, and returns the new skill's output verbatim. Duplicating the problem-file-lookup + Linked Problem section write logic would harden the deprecation window into a permanent fork. The data-parameter shape `<I###> P<MMM>` is permitted under
|
|
127
|
+
The forwarder does NOT re-implement the link logic locally — it invokes the Skill tool with `wr-itil:link-incident`, passes `<I###> P<MMM>` through as the data parameters, and returns the new skill's output verbatim. Duplicating the problem-file-lookup + Linked Problem section write logic would harden the deprecation window into a permanent fork. The data-parameter shape `<I###> P<MMM>` is permitted under the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule amended — only the verb word `link` is being split out.
|
|
128
128
|
|
|
129
|
-
### 2. For new incidents: Check for duplicates FIRST (
|
|
129
|
+
### 2. For new incidents: Check for duplicates FIRST (the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-1 direction-setting)
|
|
130
130
|
|
|
131
131
|
Before creating, search `docs/incidents/` for active (non-closed) incidents with overlapping symptoms or scope. The user may already have an incident open for this outage.
|
|
132
132
|
|
|
133
133
|
1. Extract keywords from the description (e.g., "500 errors", "checkout", "login").
|
|
134
134
|
2. `grep -l` the keywords across `docs/incidents/*.{investigating,mitigating,restored}.md`.
|
|
135
|
-
3. If matches are found, present them via `AskUserQuestion` (this is the
|
|
135
|
+
3. If matches are found, present them via `AskUserQuestion` (this is the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule **category-1 (direction-setting)** surface — only the user knows whether the new symptoms describe the same outage as an existing ticket; the framework cannot resolve semantic similarity deterministically). Construct the call as:
|
|
136
136
|
- `header: "Active incidents found"`
|
|
137
137
|
- `multiSelect: false`
|
|
138
|
-
- `question` body (plain prose, no parenthetical option-letters and no prose-ask phrasing per
|
|
138
|
+
- `question` body (plain prose, no parenthetical option-letters and no prose-ask phrasing per the "Structured User Interaction for Governance-Skill Decisions" architecture rule Confirmation criterion #1; the structured `options[]` below replaces both): `"I found active incidents that may be related: I003 (checkout 500s, mitigating), I007 (login slowness, investigating). Choose how to proceed:"`
|
|
139
139
|
- `options[]`:
|
|
140
140
|
1. `Update an existing incident` — description: "Switch to the update flow for the chosen incident ID; you'll name the ID in the next step."
|
|
141
141
|
2. `Declare a new incident anyway` — description: "Proceed to Step 3 (assign next ID) and treat this as a distinct event."
|
|
@@ -154,34 +154,34 @@ next=$(printf 'I%03d' $((10#${last:-0} + 1)))
|
|
|
154
154
|
echo "$next"
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
-
### 4. For new incidents: Gather information (
|
|
157
|
+
### 4. For new incidents: Gather information (the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem derive-first; the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-4 silent-framework on derivable fields; category-1 direction-setting fallback only on Scope)
|
|
158
158
|
|
|
159
|
-
**Shared dispatch helper**: this surface invokes `packages/itil/lib/derive-first-dispatch.sh` for the canonical slug derivation (Title), RISK-POLICY matrix lookup (Severity), and I2-isomorphic stderr advisory format. The helper is sourced by `/wr-itil:capture-problem`, `/wr-itil:manage-incident`, and `/wr-itil:manage-problem`; drift in the advisory shape re-opens
|
|
159
|
+
**Shared dispatch helper**: this surface invokes `packages/itil/lib/derive-first-dispatch.sh` for the canonical slug derivation (Title), RISK-POLICY matrix lookup (Severity), and I2-isomorphic stderr advisory format. The helper is sourced by `/wr-itil:capture-problem`, `/wr-itil:manage-incident`, and `/wr-itil:manage-problem`; drift in the advisory shape re-opens the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem. Surface-specific signal definitions (severity impact / likelihood regex lists, start-time evidence sources) stay inline below — the helper owns the mechanism, not the per-surface signals (architect verdict 2026-05-15 the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem Phase 2a-iii-A: "Helper must preserve per-surface signal definitions; only the dispatch mechanism is shared").
|
|
160
160
|
|
|
161
161
|
**Derive-first dispatch.** Incident declarations carry observable evidence in the user's prose, the working tree, `RISK-POLICY.md`, and the wall-clock — the framework can resolve most fields without firing `AskUserQuestion`. Only **Scope** is genuinely user-judgment (semantic blast-radius the framework cannot infer); only **Scope** retains the AskUserQuestion gate.
|
|
162
162
|
|
|
163
|
-
The
|
|
163
|
+
The "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem inverse-the "Problem 078: Assistant does not offer to capture a problem ticket when the user delivers strong-signal correction" problem trap (`docs/problems/known-error/132-...md`) is the load-bearing motivation: the I001 declaration regression fired a 4-question AskUserQuestion with 3 of 4 sub-questions being lazy classifications (Title kebab-derivable, Severity matrix-derivable, Start time git-log-derivable). This dispatch closes that regression on the manage-incident surface and mirrors `/wr-itil:capture-problem` Step 1.5's worked-example pattern (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 derive-first refactor).
|
|
164
164
|
|
|
165
165
|
Resolve each field via the following dispatch. **The order is load-bearing** — every field except Scope resolves silently with a stderr advisory citing the source; Scope alone fires `AskUserQuestion` as the genuine category-1 surface.
|
|
166
166
|
|
|
167
|
-
| Field | Dispatch |
|
|
167
|
+
| Field | Dispatch | the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category |
|
|
168
168
|
|-------|----------|------------------|
|
|
169
169
|
| **Title** | Derive silently. Kebab-case the first 8-10 non-stopword tokens of the user's prose description (same slug derivation as `/wr-itil:capture-problem` Step 1.4 and `/wr-itil:manage-problem` Step 4). Emit stderr advisory: `manage-incident: derived title='<slug>' from description; re-invoke or rename the file if the slug is wrong`. Do NOT fire AskUserQuestion. | category-4 silent-framework |
|
|
170
170
|
| **Symptoms** | Pull from user prose verbatim — the description text IS the symptoms surface for declaration. Place into the `## Observations` section template at Step 5. Do NOT fire AskUserQuestion. | category-4 silent-framework |
|
|
171
171
|
| **Start time** | Derive silently, three sources in priority order: (a) explicit timestamp in description (regex `\b\d{4}-\d{2}-\d{2}([ T]\d{2}:\d{2})?\b`, or relative form `"<N> (minutes|hours|days) ago"` resolved against current wall-clock); (b) if the description cites a specific file or directory, run `git log --diff-filter=A --follow -- <path> \| tail -1` for first-touch evidence; (c) otherwise default to current wall-clock UTC. Emit stderr advisory: `manage-incident: start-time derived as <ts> from <source>; cite an additional evidence anchor in the Timeline section if symptoms began earlier`. Do NOT fire AskUserQuestion. | category-4 silent-framework |
|
|
172
|
-
| **Severity** | Derive silently when evidence maps to a clear `RISK-POLICY.md` Impact × Likelihood cell. Cross-reference description signals against the matrix: (a) impact signals (service disruption keywords like `down` / `degraded` / `unavailable` → high; latency / throughput keywords → moderate; cosmetic / typo keywords → low); (b) likelihood signals (`reproducible` / `every request` → high; `intermittent` / `flaky` → medium; `one-off` / `single user` → low); (c) named anchors (held-cluster age cited → use that age to map cell; scorer state cited → use the cited band). When the cross-reference produces a single clear cell, set it silently and emit stderr advisory: `manage-incident: severity derived as <score> (<label>) from RISK-POLICY matrix + evidence: <evidence list>; re-invoke or update if mis-rated`. **Ambiguous-evidence fallback** (no mappable signal in description, or signals point to conflicting cells): fire AskUserQuestion with the Impact (1-5) × Likelihood (1-5) options as the genuine
|
|
173
|
-
| **Scope** | Retain AskUserQuestion. Scope is the user-judgment surface — only the user knows whether downstream-adopter-risk is in scope, whether mobile is affected, whether the blast radius extends past the cited symptoms. The framework cannot resolve semantic scope deterministically (same reasoning as Step 2 duplicate-check). Construct the call with `header: "Incident scope"`, `multiSelect: false` if a closed enum applies or free-text capture otherwise. This is the canonical
|
|
172
|
+
| **Severity** | Derive silently when evidence maps to a clear `RISK-POLICY.md` Impact × Likelihood cell. Cross-reference description signals against the matrix: (a) impact signals (service disruption keywords like `down` / `degraded` / `unavailable` → high; latency / throughput keywords → moderate; cosmetic / typo keywords → low); (b) likelihood signals (`reproducible` / `every request` → high; `intermittent` / `flaky` → medium; `one-off` / `single user` → low); (c) named anchors (held-cluster age cited → use that age to map cell; scorer state cited → use the cited band). When the cross-reference produces a single clear cell, set it silently and emit stderr advisory: `manage-incident: severity derived as <score> (<label>) from RISK-POLICY matrix + evidence: <evidence list>; re-invoke or update if mis-rated`. **Ambiguous-evidence fallback** (no mappable signal in description, or signals point to conflicting cells): fire AskUserQuestion with the Impact (1-5) × Likelihood (1-5) options as the genuine the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule **category-5 (taste)** fallback surface. The fallback is genuine ambiguity, NOT defaults. | category-4 silent-framework (derivable); category-5 fallback (ambiguous) |
|
|
173
|
+
| **Scope** | Retain AskUserQuestion. Scope is the user-judgment surface — only the user knows whether downstream-adopter-risk is in scope, whether mobile is affected, whether the blast radius extends past the cited symptoms. The framework cannot resolve semantic scope deterministically (same reasoning as Step 2 duplicate-check). Construct the call with `header: "Incident scope"`, `multiSelect: false` if a closed enum applies or free-text capture otherwise. This is the canonical the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule **category-1 (direction-setting)** surface — *"only the user knows the goals that haven't been written down yet."* | category-1 direction-setting |
|
|
174
174
|
|
|
175
175
|
**Inferred fields (no ask, no advisory needed)**:
|
|
176
176
|
|
|
177
177
|
- **Reported**: today's date (UTC)
|
|
178
178
|
- **Status**: always "Investigating" for new incidents
|
|
179
179
|
|
|
180
|
-
**Stderr advisory contract**: each derived field emits a SINGLE line to stderr (NOT stdout, NOT in the ticket body) per the capture-problem Step 1.5 pattern. The advisory text shape is I2-isomorphic — identical sentence structure across fields beyond substituted values + source names. Embedding the advisory in stdout would risk machine-readers parsing it as a ticket-body line; embedding it in the ticket body would violate
|
|
180
|
+
**Stderr advisory contract**: each derived field emits a SINGLE line to stderr (NOT stdout, NOT in the ticket body) per the capture-problem Step 1.5 pattern. The advisory text shape is I2-isomorphic — identical sentence structure across fields beyond substituted values + source names. Embedding the advisory in stdout would risk machine-readers parsing it as a ticket-body line; embedding it in the ticket body would violate the "Add `manage-incident` Skill to `wr-itil` Plugin" architecture rule's required-section schema. Stderr is the correct channel — visible to interactive maintainers in the terminal; invisible to ticket consumers; loggable by orchestrators that capture subprocess stderr.
|
|
181
181
|
|
|
182
|
-
**
|
|
182
|
+
**the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule cost-source grounding**: each derived field cites its source in the advisory (description token sequence for Title; explicit-regex / `git log` / wall-clock for Start time; RISK-POLICY matrix cell + named evidence for Severity). The `re-invoke or update if mis-rated` clause carries the reversibility marker the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule mandates for ungrounded outputs.
|
|
183
183
|
|
|
184
|
-
**AFK fail-safe (
|
|
184
|
+
**AFK fail-safe (the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6)**: under AFK orchestration, all derivable fields resolve without interactive input; only Scope's AskUserQuestion can block. The orchestrator should halt-with-stderr citing which field needed input rather than guess (Scope is genuinely user-judgment per the ": Progress the Backlog While I'm Away" user outcome's "Problems requiring my judgment ... are queued for my return, not guessed at"). manage-incident is rarely AFK-invoked because incidents are interactive by design (the "Restore Service Fast with an Audit Trail" user outcome), so the halt-on-Scope path is the expected behaviour, not a regression.
|
|
185
185
|
|
|
186
186
|
### 5. For new incidents: Write the incident file
|
|
187
187
|
|
|
@@ -219,7 +219,7 @@ Resolve each field via the following dispatch. **The order is load-bearing** —
|
|
|
219
219
|
*(none yet — added on restore transition)*
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
-
### 6. For updates: Edit the existing file (evidence gate is
|
|
222
|
+
### 6. For updates: Edit the existing file (evidence gate is the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-2 deviation-approval)
|
|
223
223
|
|
|
224
224
|
Find the file by ID:
|
|
225
225
|
|
|
@@ -227,13 +227,13 @@ Find the file by ID:
|
|
|
227
227
|
ls docs/incidents/<I###>-*.md 2>/dev/null
|
|
228
228
|
```
|
|
229
229
|
|
|
230
|
-
Append new observations, hypotheses, or timeline entries. **Every hypothesis must cite evidence.** If the user proposes a hypothesis without evidence, fire the **3-option evidence gate** — same shape as `/wr-itil:mitigate-incident` Step 3, for cross-skill cool-headed-commitment consistency. This is the
|
|
230
|
+
Append new observations, hypotheses, or timeline entries. **Every hypothesis must cite evidence.** If the user proposes a hypothesis without evidence, fire the **3-option evidence gate** — same shape as `/wr-itil:mitigate-incident` Step 3, for cross-skill cool-headed-commitment consistency. This is the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule **category-2 (deviation-approval)** surface: the "Add `manage-incident` Skill to `wr-itil` Plugin" architecture rule's evidence-first rule is the existing decision; "Record anyway" is the user-approved deviation in this specific case. The user is the right authority for the bypass shape.
|
|
231
231
|
|
|
232
232
|
Construct the `AskUserQuestion` call as:
|
|
233
233
|
|
|
234
234
|
- `header: "Evidence gate"`
|
|
235
235
|
- `multiSelect: false`
|
|
236
|
-
- `question` body: `"Hypothesis '<one-line summary>' has no cited evidence reference. Per
|
|
236
|
+
- `question` body: `"Hypothesis '<one-line summary>' has no cited evidence reference. Per the "Add `manage-incident` Skill to `wr-itil` Plugin" architecture rule evidence-first rule, every hypothesis must cite a log / repro / diff / metric reference. Choose how to proceed:"`
|
|
237
237
|
- `options[]`:
|
|
238
238
|
1. `Add evidence now` — description: "Provide the evidence reference (log line, dashboard URL, repro steps, diff hash, etc.); the hypothesis lands with the cited evidence."
|
|
239
239
|
2. `Record anyway with audit-trail bypass` — description: "Land the hypothesis without cited evidence; agent appends `[<timestamp> UTC] Evidence-gate bypassed by user — reason: <justification>` to the incident file's `## Audit trail` section."
|
|
@@ -241,19 +241,19 @@ Construct the `AskUserQuestion` call as:
|
|
|
241
241
|
|
|
242
242
|
On option 2 (bypass), append the `Evidence-gate bypassed by user — reason: <justification>` line to the `## Audit trail` section of the incident file before writing the hypothesis. If the section does not exist, create it. The bypass-marker prose is fixed verbatim so post-incident review can locate every bypassed gate via grep.
|
|
243
243
|
|
|
244
|
-
### 7. For mitigate: delegate to `/wr-itil:mitigate-incident` (
|
|
244
|
+
### 7. For mitigate: delegate to `/wr-itil:mitigate-incident` (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 6a)
|
|
245
245
|
|
|
246
246
|
The `mitigate` subcommand is now hosted by the `/wr-itil:mitigate-incident` skill. This step exists as a thin-router forwarder — the Step 1 parser recognises the `<I###> mitigate <action>` shape and delegates via the Skill tool. This body is intentionally empty of implementation logic; the canonical documentation of the rename, Status update, evidence-gate pre-flight, and Mitigation attempts append lives in `/wr-itil:mitigate-incident`.
|
|
247
247
|
|
|
248
248
|
Do not re-implement the rename or the evidence gate here — delegate. See "Deprecated-argument forwarders" under Step 1 for the canonical systemMessage.
|
|
249
249
|
|
|
250
|
-
### 8. For restore: delegate to `/wr-itil:restore-incident` (
|
|
250
|
+
### 8. For restore: delegate to `/wr-itil:restore-incident` (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 6b)
|
|
251
251
|
|
|
252
252
|
The `restored` subcommand is now hosted by the `/wr-itil:restore-incident` skill. This step exists as a thin-router forwarder — the Step 1 parser recognises the `<I###> restored` shape and delegates via the Skill tool. This body is intentionally empty of implementation logic; the canonical documentation of the pre-flight checks, rename, Status update, Timeline append, and manage-problem handoff lives in `/wr-itil:restore-incident`.
|
|
253
253
|
|
|
254
254
|
Do not re-implement the rename or the problem handoff here — delegate. See "Deprecated-argument forwarders" under Step 1 for the canonical systemMessage.
|
|
255
255
|
|
|
256
|
-
### 9. For close: delegate to `/wr-itil:close-incident` (
|
|
256
|
+
### 9. For close: delegate to `/wr-itil:close-incident` (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 6c)
|
|
257
257
|
|
|
258
258
|
The `close` subcommand is now hosted by the `/wr-itil:close-incident` skill. This step exists as a thin-router forwarder — the Step 1 parser recognises the `<I###> close` shape and delegates via the Skill tool. This body is intentionally empty of implementation logic; the canonical documentation of the Linked-Problem gate (accepting `.known-error.md`, `.verifying.md`, and `.closed.md`), the No Problem bypass, and the rename lives in `/wr-itil:close-incident`.
|
|
259
259
|
|
|
@@ -263,7 +263,7 @@ Do not re-implement the close gate or the rename here — delegate. See "Depreca
|
|
|
263
263
|
|
|
264
264
|
Read all `.investigating.md`, `.mitigating.md`, and `.restored.md` files in `docs/incidents/`. Extract ID, title, severity, and status. Sort by severity (highest first). Display as a markdown table.
|
|
265
265
|
|
|
266
|
-
### 11. For link: delegate to `/wr-itil:link-incident` (
|
|
266
|
+
### 11. For link: delegate to `/wr-itil:link-incident` (the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem split slice 6d)
|
|
267
267
|
|
|
268
268
|
The `link` subcommand is now hosted by the `/wr-itil:link-incident` skill. This step exists as a thin-router forwarder — the Step 1 parser recognises the `<I###> link P<MMM>` shape and delegates via the Skill tool. This body is intentionally empty of implementation logic; the canonical documentation of the problem-file lookup and the `## Linked Problem` section write (including the retroactive-link-from-No-Problem case) lives in `/wr-itil:link-incident`.
|
|
269
269
|
|
|
@@ -287,7 +287,7 @@ After any operation, verify:
|
|
|
287
287
|
- **Evidence discipline**: every Hypothesis has a cited evidence reference
|
|
288
288
|
- **Linked Problem** section present and consistent (or **No Problem** with justification) once the incident reaches Restored
|
|
289
289
|
|
|
290
|
-
### 14. Report (risk-above-appetite commit is
|
|
290
|
+
### 14. Report (risk-above-appetite commit is the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-3 one-time-override)
|
|
291
291
|
|
|
292
292
|
After any operation, report:
|
|
293
293
|
|
|
@@ -297,23 +297,23 @@ After any operation, report:
|
|
|
297
297
|
- For restore: the linked problem ID (or "No Problem" note)
|
|
298
298
|
- Any quality-check warnings
|
|
299
299
|
|
|
300
|
-
Commit the completed work per
|
|
300
|
+
Commit the completed work per the "Governance Skills Commit Their Own Completed Work" architecture rule (governance skills commit their own work):
|
|
301
301
|
1. `git add` all created/modified files for this operation
|
|
302
|
-
2. Delegate to `wr-risk-scorer:pipeline` (subagent_type: `wr-risk-scorer:pipeline`) to assess the staged changes and create a bypass marker. If the subagent type is not available in the current tool set (e.g. this skill is running inside a spawned subagent), invoke `/wr-risk-scorer:assess-release` via the Skill tool instead — per
|
|
302
|
+
2. Delegate to `wr-risk-scorer:pipeline` (subagent_type: `wr-risk-scorer:pipeline`) to assess the staged changes and create a bypass marker. If the subagent type is not available in the current tool set (e.g. this skill is running inside a spawned subagent), invoke `/wr-risk-scorer:assess-release` via the Skill tool instead — per the "On-Demand Assessment Skills for Governance Plugins" architecture rule it wraps the same pipeline subagent.
|
|
303
303
|
3. `git commit -m "<message>"` using the convention for the operation type:
|
|
304
304
|
- New incident: `docs(incidents): open I<NNN> <title>`
|
|
305
305
|
- Incident mitigated: `docs(incidents): I<NNN> mitigated — <mitigation summary>`
|
|
306
306
|
- Incident restored: `docs(incidents): I<NNN> restored — <action>`
|
|
307
307
|
- Incident closed: `docs(incidents): close I<NNN>`
|
|
308
|
-
4. If commit risk is above appetite: this is **framework-mediated, NOT a category-3 one-time-override ask** (
|
|
308
|
+
4. If commit risk is above appetite: this is **framework-mediated, NOT a category-3 one-time-override ask** (the "Skills, agents, and hooks override RISK-POLICY appetite instead of applying it" problem/the ": Apply RISK-POLICY appetite faithfully across all surfaces" release design amendment 2026-06-24 — there is no incident carve-out). Per **the "Auto-apply scorer remediations to reach within appetite — open action-class vocabulary" architecture rule Rule 1b (incident-context scoring)**: an active incident is a risk being realised (Likelihood already 5), so the incident-response change is scored against that live realised-risk baseline — weighing P(the change increases impact) vs P(it reduces impact & likelihood / restores service) + P(it introduces a new incident). If net risk-reducing, it takes the risk-reducing path (the `reducing` bypass — `RISK_BYPASS: reducing`) and proceeds, no ask. This is *better* for restore-service-fast (the "Restore Service Fast with an Audit Trail" user outcome): a genuine hotfix clears via scoring with no consent gate mid-outage. If the change is NOT net-reducing, auto-remediate per the "Auto-apply scorer remediations to reach within appetite — open action-class vocabulary" architecture rule Rule 1 or halt per Rule 5. **MUST NOT commit above appetite; MUST NOT `AskUserQuestion` "commit anyway".** If `AskUserQuestion` is unavailable, the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6 fail-safe applies — skip the commit and report the uncommitted state.
|
|
309
309
|
|
|
310
|
-
### 15. Auto-release when changesets are queued (
|
|
310
|
+
### 15. Auto-release when changesets are queued (the "Governance skills auto-release when changesets are queued" architecture rule)
|
|
311
311
|
|
|
312
|
-
**Skip this step if the skill is running inside an AFK orchestrator.** Orchestrators handle release cadence themselves per
|
|
312
|
+
**Skip this step if the skill is running inside an AFK orchestrator.** Orchestrators handle release cadence themselves per the "Inter-iteration release cadence for AFK loops" architecture rule (Step 6.5). When in doubt, defer to the orchestrator by skipping this step.
|
|
313
313
|
|
|
314
314
|
Otherwise, after the commit in step 14 lands, drain the release queue so the fix actually lands on npm without requiring manual user action.
|
|
315
315
|
|
|
316
|
-
**Mechanism — delegate, do not re-implement scoring (per
|
|
316
|
+
**Mechanism — delegate, do not re-implement scoring (per the "On-Demand Assessment Skills for Governance Plugins" architecture rule):**
|
|
317
317
|
|
|
318
318
|
1. Invoke the release scorer. Two paths are valid:
|
|
319
319
|
- **Primary**: delegate to subagent type `wr-risk-scorer:pipeline` via the Agent tool.
|
|
@@ -321,7 +321,7 @@ Otherwise, after the commit in step 14 lands, drain the release queue so the fix
|
|
|
321
321
|
2. Read the returned `RISK_SCORES: commit=X push=Y release=Z` line.
|
|
322
322
|
3. **Drain condition**: if `push` and `release` are both within appetite (≤ 4/25, "Low" band per `RISK-POLICY.md`), AND `.changeset/` is non-empty, proceed to the drain action. Otherwise, skip the drain and report the unreleased state.
|
|
323
323
|
|
|
324
|
-
**Drain action (non-interactive, policy-authorised per
|
|
324
|
+
**Drain action (non-interactive, policy-authorised per the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6):**
|
|
325
325
|
|
|
326
326
|
1. Run `npm run push:watch` (push + wait for CI to pass).
|
|
327
327
|
2. If `.changeset/` remains non-empty after push (i.e. a release PR is pending), run `npm run release:watch` (merge the release PR + wait for npm publish).
|
|
@@ -329,39 +329,39 @@ Otherwise, after the commit in step 14 lands, drain the release queue so the fix
|
|
|
329
329
|
|
|
330
330
|
**Failure handling**: If `release:watch` fails (CI failure, publish failure), stop and report the failure clearly. Do not retry non-interactively — the user must intervene.
|
|
331
331
|
|
|
332
|
-
**Above-appetite branch (per
|
|
332
|
+
**Above-appetite branch (per the "Auto-apply scorer remediations to reach within appetite — open action-class vocabulary" architecture rule)**: If push or release risk is above appetite (≥ 5/25), the skill MUST auto-apply scorer remediations incrementally until residual risk converges within appetite, OR halt the skill per the "Auto-apply scorer remediations to reach within appetite — open action-class vocabulary" architecture rule Rule 5 if the scorer cannot produce a convergent plan. **The skill MUST NOT release above appetite under any circumstance.** The skill MUST NOT call `AskUserQuestion` as a shortcut out of the auto-apply loop.
|
|
333
333
|
|
|
334
|
-
**Auto-apply mechanism (
|
|
334
|
+
**Auto-apply mechanism (the "Auto-apply scorer remediations to reach within appetite — open action-class vocabulary" architecture rule Rule 2):**
|
|
335
335
|
|
|
336
336
|
1. Parse the scorer's `RISK_REMEDIATIONS:` block.
|
|
337
337
|
2. Read the descriptions. Decide what to do. The agent MAY follow a scorer suggestion, adapt it, or do something else entirely. There is no requirement to rank all suggestions upfront or iterate through them in order.
|
|
338
|
-
3. **Verification Pending carve-out (
|
|
339
|
-
4. Apply the chosen action using standard primitives (git, Edit, Bash). Each auto-apply is its own commit (
|
|
338
|
+
3. **Verification Pending carve-out (the "Auto-apply scorer remediations to reach within appetite — open action-class vocabulary" architecture rule Rule 2b)**: skip remediations that target a commit attached to a `.verifying.md` ticket.
|
|
339
|
+
4. Apply the chosen action using standard primitives (git, Edit, Bash). Each auto-apply is its own commit (the "Auto-apply scorer remediations to reach within appetite — open action-class vocabulary" architecture rule Rule 3 — non-AFK has no iteration wrapper to amend into); each commit goes through architect + JTBD + risk-scorer gates per the "Governance Skills Commit Their Own Completed Work" architecture rule.
|
|
340
340
|
5. Re-score via the same delegation path as step 1 above.
|
|
341
341
|
6. **Loop**: within appetite → drain per the Drain action above. Still above → continue working to reduce risk. The agent reads the new remediations and decides what to do next. Loop. Exhausted → Rule 5 halt.
|
|
342
342
|
|
|
343
343
|
**Rule 5 halt (non-AFK mode)**: halt the skill. Emit the terminal report naming the final `RISK_SCORES:`, the Auto-apply trail, any Verification Pending ticket IDs implicated, and a one-line scorer-gap note. The user resolves interactively.
|
|
344
344
|
|
|
345
|
-
`push:watch` and `release:watch` are policy-authorised actions when residual risk is within appetite per RISK-POLICY.md, so no `AskUserQuestion` is required for the drain itself (
|
|
345
|
+
`push:watch` and `release:watch` are policy-authorised actions when residual risk is within appetite per RISK-POLICY.md, so no `AskUserQuestion` is required for the drain itself (the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 5). Auto-apply actions under Rules 2–7 are also policy-authorised per the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 5.
|
|
346
346
|
|
|
347
347
|
## Related
|
|
348
348
|
|
|
349
|
-
- **
|
|
350
|
-
- **
|
|
351
|
-
- **
|
|
352
|
-
- **
|
|
353
|
-
- **
|
|
354
|
-
- **
|
|
355
|
-
- **
|
|
356
|
-
- **
|
|
357
|
-
- **
|
|
358
|
-
- **
|
|
359
|
-
- **
|
|
360
|
-
- **
|
|
361
|
-
- **
|
|
362
|
-
- **
|
|
363
|
-
- **
|
|
364
|
-
- **
|
|
365
|
-
- **
|
|
349
|
+
- **the "alignment audit — sweep all unaudited skills/hooks/agents/ADRs/JTBDs/READMEs against the framework-resolution boundary (master ticket)" problem** (`docs/problems/136-adr-044-alignment-audit-master.open.md`) — the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule alignment audit master. This skill is the third high-ask SKILL audited under Phase 2 (after work-problem singular and mitigate-incident).
|
|
350
|
+
- **the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule** (`docs/decisions/044-decision-delegation-contract.proposed.md`) — Decision-Delegation Contract. The skill's AskUserQuestion surfaces align with the 6-class authority taxonomy: Step 2 duplicate-check is **category-1 (direction-setting)**; Step 4 is **category-4 (silent-framework)** on Title / Symptoms / Start time / Severity-when-evidence-present + **category-1 (direction-setting)** on Scope + **category-5 (taste)** fallback on Severity-on-ambiguity (the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem derive-first refactor 2026-05-15 re-classified Step 4 from "single cat-1 declaration" to "derive-first dispatch with cat-1 / cat-5 fallback only"); Step 6 evidence-gate is **category-2 (deviation-approval)**; Step 14 risk-above-appetite is **category-3 (one-time-override)**; the **Mitigation preference** ladder's mitigation-SELECTION surface is **framework-mediated / category-4 silent-framework family** — agent-owned, no AskUserQuestion and no prose-ask (the "Agent defers mitigation selection to user during active incident — surfaces mitigation choice as user-authority when SKILL contract empowers agent-driven reversible mitigations" problem declarative-layer fix; see "Mitigation preference").
|
|
351
|
+
- **the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem** (`docs/problems/known-error/132-agents-over-ask-in-interactive-sessions-conflating-mechanical-stages-with-user-interactive-stages.md`) — Agents over-ask in interactive sessions (inverse-the "Problem 078: Assistant does not offer to capture a problem ticket when the user delivers strong-signal correction" problem). Step 4 derive-first refactor closes the 2026-05-06 I001 declaration regression where 3 of 4 sub-questions were lazy classifications. Composes with 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 (capture-problem Step 1.5 derive-first refactor — the in-tree worked-example precedent).
|
|
352
|
+
- **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** (`docs/problems/...`) — capture-problem Step 1.5 derive-first refactor. Step 4 mirrors the same dispatch shape (silent classifier + stderr advisory + AskUserQuestion only on ambiguity).
|
|
353
|
+
- **the "Structured User Interaction for Governance-Skill Decisions" architecture rule amended Rule 1** (`docs/decisions/013-structured-user-interaction-for-governance-decisions.proposed.md`) — structured user interaction; narrowed in the "Decision-delegation contract — agents over-apply Rule 1's interactive default to framework-resolved decisions; codify the framework-resolution boundary + AFK loop's batched-questions-as-deliverable + lazy-AskUserQuestion measurement" problem to defer to the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule for framework-resolution boundary. All four surfaces retain `AskUserQuestion` as genuine user-authority surfaces under categories enumerated in the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule.
|
|
354
|
+
- **the "Structured User Interaction for Governance-Skill Decisions" architecture rule Confirmation criterion #1** — `grep -inE "Options:.*\(a\)\|Your call:\|which would you like\|which way?"` returns zero matches. Step 2's prior prompt body violated this with `Would you like to (a) update...` phrasing; the "alignment audit — sweep all unaudited skills/hooks/agents/ADRs/JTBDs/READMEs against the framework-resolution boundary (master ticket)" problem Phase 2 refactor (2026-04-28) closed the regression by lifting options into the `AskUserQuestion` `options[]` mechanism.
|
|
355
|
+
- **the "Add `manage-incident` Skill to `wr-itil` Plugin" architecture rule** (`docs/decisions/011-manage-incident-skill.proposed.md`) — incident lifecycle; evidence-first workflow; reversible-mitigation preference; Sev 4-5 lightweight path. Step 6's evidence-gate refactor (2026-04-28) extends the "Add `manage-incident` Skill to `wr-itil` Plugin" architecture rule's evidence-first rule with the documented `Record anyway` audit-trail bypass that mitigate-incident already used (cool-headed-commitment consistency across the two incident skills).
|
|
356
|
+
- **the "Governance Skills Commit Their Own Completed Work" architecture rule** — governance skills commit their own work. Step 14 unchanged.
|
|
357
|
+
- **the "On-Demand Assessment Skills for Governance Plugins" architecture rule** — release scorer delegation pattern. Step 15 unchanged.
|
|
358
|
+
- **the "Inter-iteration release cadence for AFK loops" architecture rule** + **the "Governance skills auto-release when changesets are queued" architecture rule** — release cadence. Step 15 unchanged.
|
|
359
|
+
- **the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule** — cost-source grounding. Step 6's audit-trail bypass note preserves grounding by capturing the user's justification at deviation time.
|
|
360
|
+
- **the "Auto-apply scorer remediations to reach within appetite — open action-class vocabulary" architecture rule** — auto-apply scorer remediations. Step 15 above-appetite branch unchanged.
|
|
361
|
+
- **the "Problem 071: Argument-based skill subcommands are not discoverable in Claude Code autocomplete" problem** — skill-split origin (slice 6 — manage-incident is the host with thin-router forwarders for `list`, `mitigate`, `restored`, `close`, `link`).
|
|
362
|
+
- **the "Problem 081: Structural source-content tests are wasteful — TDD agent should reject them and require behavioural tests (+ framework / stub enhancements)" problem** — structural-grep retrofit; the `manage-incident-adr-044-contract.bats` companion test file carries the `tdd-review: structural-permitted` marker as the bridge until the "Problem 081: Structural source-content tests are wasteful — TDD agent should reject them and require behavioural tests (+ framework / stub enhancements)" problem Phase 2 retrofit lands.
|
|
363
|
+
- **the ": Enforce Governance Without Slowing Down" user outcome** (`docs/jtbd/developer/the ": Enforce Governance Without Slowing Down" user outcome-enforce-governance.proposed.md`) — Surface 1 refactor preserves the duplicate-check governance gate while removing the prose-ask compliance gap; Surfaces 2 + 3 + 4 retain genuine consent-gate-for-the-genuinely-direction-setting / deviation-approval / one-time-override.
|
|
364
|
+
- **the "Extend the Suite with New Plugins" user outcome** (`docs/jtbd/plugin-developer/the "Extend the Suite with New Plugins" user outcome-extend-suite.proposed.md`) — Step 6 evidence-gate refactor brings manage-incident into pattern parity with mitigate-incident's slice-6a evidence-gate. Adopters get one consistent evidence-gate pattern across both incident skills.
|
|
365
|
+
- **the "Restore Service Fast with an Audit Trail" user outcome** (`docs/jtbd/tech-lead/the "Restore Service Fast with an Audit Trail" user outcome-restore-service-fast.proposed.md`) — Step 6 explicit `Record anyway` bypass strengthens the audit-trail outcome (implicit-bypass becomes explicit-bypass-with-permanent-trail) without weakening the cool-headed-commitment outcome (`Add evidence` remains the friction-free default; bypass requires conscious second choice).
|
|
366
366
|
|
|
367
367
|
$ARGUMENTS
|