@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
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wr-itil:work-problem
|
|
3
|
+
description: Pick the highest-WSJF open or known-error problem ticket and work it — investigate, implement, commit, and release per the standard manage-problem workflow. Selection is framework-mediated (WSJF + documented tie-break ladder per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule); singular variant; distinct from /wr-itil:work-problems (plural AFK orchestrator). Use this when the user asks to "work the next problem", "work the top of the queue", or "grind through one ticket".
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, request_user_input, Skill, Agent
|
|
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
|
+
# Work Problem — Pick-and-Run
|
|
19
|
+
|
|
20
|
+
Pick the highest-WSJF ticket from the current backlog and work it end-to-end. This is the **singular** entry point — one ticket per invocation. Selection is **framework-mediated** per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule's Framework-Mediated Surface (Prioritisation row): the agent applies the "Inbound-reported problems rank ahead of internally-discovered problems via a sort tier" architecture rule tier partition (Critical-bypass → Inbound-reported → Internal) then the WSJF formula + documented within-tier tie-break ladder mechanically, and reports the chosen ticket + its tier + the rung that decided. The user retains direct override via `/wr-itil:work-problem <NNN>` invocation and via mid-flow correction (the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category 6).
|
|
21
|
+
|
|
22
|
+
This skill is the "Problem 071: Argument-based skill subcommands are not discoverable in Codex autocomplete" problem phased-landing split of `/wr-itil:manage-problem work` per the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule amended Skill Granularity rule: one skill per distinct user intent. The original `/wr-itil:manage-problem work` subcommand route remains as a thin-router forwarder during the deprecation window but is scheduled for removal in `@windyroad/itil`'s next major version.
|
|
23
|
+
|
|
24
|
+
## Name distinction (work-problem vs work-problems)
|
|
25
|
+
|
|
26
|
+
- **`/wr-itil:work-problem`** (singular, this skill) — one ticket per invocation. Framework-mediated selection (WSJF + tie-break ladder). Intended for a user who wants to dispatch the next-highest ticket and then stop. User-override path: `/wr-itil:work-problem <NNN>` to pin a specific ticket.
|
|
27
|
+
- **`/wr-itil:work-problems`** (plural, AFK orchestrator) — loops through the backlog by WSJF, delegating each iteration to this skill (via the native Codex subagent tool, per the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule + the "Problem 077: work-problems Step 5 does not delegate iterations to a subagent, so context pressure accumulates in the orchestrator's main turn" problem). Intended for AFK batch runs; non-interactive selection; stops only when nothing actionable remains.
|
|
28
|
+
|
|
29
|
+
Both names coexist intentionally per the "Problem 071: Argument-based skill subcommands are not discoverable in Codex autocomplete" problem's out-of-scope note on the naming coexistence. The plural orchestrator uses this skill as its per-iteration unit.
|
|
30
|
+
|
|
31
|
+
## Scope
|
|
32
|
+
|
|
33
|
+
**In scope:**
|
|
34
|
+
- Read `docs/problems/README.md` when fresh; otherwise delegate the refresh to `/wr-itil:review-problems` first (never re-implement the re-scoring logic locally — same anti-fork discipline as the list-problems cache path).
|
|
35
|
+
- Pick the highest-priority ticket via the framework-mediated selection: first by the "Inbound-reported problems rank ahead of internally-discovered problems via a sort tier" architecture rule **tier** (Tier 0 Critical-bypass [Severity Very High ≥17 OR security-classified OR incident-linked] → Tier 1 Inbound-reported [`**Origin**: inbound-reported`] → Tier 2 Internal), then within the highest non-empty tier by the tie-break ladder (Known Error > Open; smaller effort first; older reported date; ticket number ascending) per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule Framework-Mediated Surface. Report the chosen ticket + its tier + the rung that decided. No `request_user_input` fires for selection.
|
|
36
|
+
- Honour the user-override path `/wr-itil:work-problem <NNN>` — when the user names a ticket directly, skip the ladder and proceed to Step 3 with the named ticket.
|
|
37
|
+
- Delegate the actual work to `/wr-itil:manage-problem <NNN>` via the installed skill invocation so the investigation / known-error transition / fix / closure flow stays hosted on a single authoritative workflow (the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule thin-router discipline applied to the work path).
|
|
38
|
+
- Scope-expansion prompt (the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 1; the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-2 deviation-approval surface) when the selected ticket's effort grows during work — same three-option structure as `/wr-itil:manage-problem`'s Working a Problem section.
|
|
39
|
+
|
|
40
|
+
**Out of scope:**
|
|
41
|
+
- Batch looping over multiple tickets — that's `/wr-itil:work-problems` (plural). This skill runs exactly one ticket per invocation.
|
|
42
|
+
- Backlog re-ranking / Verification Queue prompt / README.md refresh — that's `/wr-itil:review-problems`. This skill reads the ranking; it does not rewrite it.
|
|
43
|
+
- Ticket creation — that's `/wr-itil:manage-problem` (no-args form).
|
|
44
|
+
- Status transitions other than those driven by the delegated `/wr-itil:manage-problem <NNN>` flow.
|
|
45
|
+
|
|
46
|
+
## Steps
|
|
47
|
+
|
|
48
|
+
### 1. Ensure the ranking is fresh
|
|
49
|
+
|
|
50
|
+
Check the `docs/problems/README.md` cache with the same git-history-based freshness test as `/wr-itil:list-problems` and `/wr-itil:review-problems` (per the "Problem 031: `manage-problem work` incorrectly determines cache is fresh" problem — filesystem mtime is unreliable in worktrees and fresh checkouts, so git history is the authoritative staleness signal):
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
readme_commit=$(git log -1 --format=%H -- docs/problems/README.md 2>/dev/null)
|
|
54
|
+
if [ -z "$readme_commit" ] || \
|
|
55
|
+
git log --oneline "${readme_commit}..HEAD" -- 'docs/problems/*.md' 'docs/problems/*/*.md' ':!docs/problems/README.md' 2>/dev/null | grep -q .; then
|
|
56
|
+
# Pathspec pair `'docs/problems/*.md' 'docs/problems/*/*.md'` is the
|
|
57
|
+
# the ": docs/problems/ flat layout migration — per-state subdirs + adopter auto-migration" release design dual-tolerant transitional shape — covers BOTH the flat
|
|
58
|
+
# layout (`docs/problems/<NNN>-<title>.<state>.md`) AND the per-state
|
|
59
|
+
# subdir layout (`docs/problems/<state>/<NNN>-<title>.md`). T6 drops
|
|
60
|
+
# the flat half post-T5 verification.
|
|
61
|
+
echo "stale"
|
|
62
|
+
fi
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- **Cache fresh** (no output): read `docs/problems/README.md` and use the cached WSJF Rankings table for Step 2.
|
|
66
|
+
- **Cache stale** (prints "stale") or `README.md` missing: **delegate to `/wr-itil:review-problems`** via the installed skill invocation to refresh the ranking before proceeding. Do NOT re-implement the re-scoring logic here — that would fork the review path and break the "Problem 062: `manage-problem` does not refresh `docs/problems/README.md` on single-ticket transitions; fast-path cache goes stale silently" problem's canonical-cache-writer contract. The review skill's Step 4 verification prompt runs on this refresh path (the "Problem 048: manage-problem does not surface Fix Released problems as verification candidates when the fix path has been exercised" problem Candidate 1: Verification Queue prompts always fire so pending verifications don't accumulate off-ledger).
|
|
67
|
+
|
|
68
|
+
### 2. Select the ticket (framework-mediated)
|
|
69
|
+
|
|
70
|
+
Read the WSJF Rankings table from the now-fresh `docs/problems/README.md`. Apply the framework's tie-break ladder mechanically to pick the next ticket — selection is **framework-mediated** per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule's Framework-Mediated Surface (Prioritisation row). The agent picks, reports the choice + the tie-break rung that decided, and proceeds. **No `request_user_input` fires for selection** — the WSJF formula + tie-break ladder already resolve the decision.
|
|
71
|
+
|
|
72
|
+
**User-override path** — when the user invokes `/wr-itil:work-problem <NNN>` (ticket ID supplied as an argument, e.g. `/wr-itil:work-problem 042`), skip the ladder entirely and proceed to Step 3 with the named ticket. This is the documented escape hatch for the user to bypass the framework-mediated selection. Mid-flow correction (the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category 6 / the "Problem 078: Assistant does not offer to capture a problem ticket when the user delivers strong-signal correction" problem surface) is the long-tail catcher when the agent's pick was wrong in a way the framework couldn't anticipate.
|
|
73
|
+
|
|
74
|
+
**Tie-break ladder** (applied in order; same logic the plural orchestrator's Step 3 uses, per the "Problem 077: work-problems Step 5 does not delegate iterations to a subagent, so context pressure accumulates in the orchestrator's main turn" problem + the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule):
|
|
75
|
+
|
|
76
|
+
1. **WSJF score** (descending) — highest WSJF wins.
|
|
77
|
+
2. **Status** — Known Error before Open. Verification Pending tickets are not in this queue (handled by `/wr-itil:review-problems` Step 4 verification prompt).
|
|
78
|
+
3. **Effort** — smaller effort first (S < M < L < XL).
|
|
79
|
+
4. **Reported date** — older reported date wins (FIFO discipline for tied tickets at this rung).
|
|
80
|
+
5. **Ticket number** — ascending (final deterministic break).
|
|
81
|
+
|
|
82
|
+
When a single ticket is the strict top, rungs 2-5 are not consulted. When multiple tickets are tied at the top, walk down the ladder until a rung decides.
|
|
83
|
+
|
|
84
|
+
**Report shape (the "Restore Service Fast with an Audit Trail" user outcome audit-trail)** — after picking, the agent reports the chosen ticket + the rung that decided, with citations to the WSJF inputs. Example: *"Selected the "Problem 042: Changesets does not sync plugin manifest version" problem: <title> (WSJF 12.0; tied with the "Problem 057: `git mv` + Edit + `git add` staging-ordering trap drops content edits from the commit" problem at WSJF; tie-break rung: 'Known Error > Open' — the "Problem 042: Changesets does not sync plugin manifest version" problem is Known Error, the "Problem 057: `git mv` + Edit + `git add` staging-ordering trap drops content edits from the commit" problem is Open)"*. This citation makes the selection reproducible from the README state at the time of the report and is the audit surface the "Restore Service Fast with an Audit Trail" user outcome requires.
|
|
85
|
+
|
|
86
|
+
**No prose-ask fallback** — never present the selection as prose "(a)/(b)/(c)" or "which would you like?" (regression guard for the "Structured User Interaction for Governance-Skill Decisions" architecture rule Confirmation grep). Selection is mechanical; the agent picks and reports.
|
|
87
|
+
|
|
88
|
+
**No AFK / interactive split** — selection is mechanical in both interactive and AFK modes. The prior asymmetry between AFK (mechanical) and interactive (`request_user_input`-driven) was the lazy-deferral surface the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule was written to close; converging both modes to the same algorithm is the alignment. The plural orchestrator (`/wr-itil:work-problems`) Step 3 also uses this ladder, so all entry surfaces resolve to one selection algorithm (no AFK-vs-interactive divergence to maintain).
|
|
89
|
+
|
|
90
|
+
### 3. Delegate the work to `/wr-itil:manage-problem <NNN>`
|
|
91
|
+
|
|
92
|
+
Invoke `/wr-itil:manage-problem <NNN>` via the installed skill invocation with the selected ticket's ID as the argument. The delegated skill runs the full Working a Problem flow appropriate to the ticket's status:
|
|
93
|
+
|
|
94
|
+
- **Open ticket**: investigate root cause; document findings; create reproduction test; identify workaround; auto-transition to Known Error when root cause + workaround are documented; if the fix is small, proceed straight into implementation.
|
|
95
|
+
- **Known Error**: traverse problem `## Fix Strategy` → referenced RFCs → each RFC's frontmatter `stories:` array (ordered per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule line 259) → pick first not-done story (status `accepted` or `in-progress`, skipping `done`). **Per the "A story cannot be implemented while in draft — implementation requires accepted" architecture rule a `draft` story is NOT silently skipped**: if the first not-done story is `draft`, refuse-and-route — surface `accept STORY-<NNN> via /wr-itil:manage-story <NNN> accepted first (it runs the INVEST + RFC-trace gates + ratification)` and (under AFK) queue it to `outstanding_questions` rather than skipping past it or implementing it (the itil-no-implement-draft-gate blocks the implementing commit regardless) → implement the picked story scope. An empty `stories: []` is a legacy/back-fill state (per **the "Every RFC has at least one story" architecture rule** every RFC has ≥1 story — the empty-stories atomic fallback is removed): back-fill a story onto the RFC, don't fall back to a per-RFC atomic dispatch. No-RFC Fix Strategy (Phase 1-shape legacy problems) falls back to direct fix implementation. Each commit carries `Refs: STORY-<NNN>` (or `Refs: RFC-<NNN>` for cross-cutting RFC work with no single story / `Refs: P<NNN>` for legacy direct path). Stories auto-transition `accepted → in-progress` on the first implementing commit (draft → in-progress REMOVED per the "A story cannot be implemented while in draft — implementation requires accepted" architecture rule — a draft story is blocked from implementation); auto-transition `in-progress → done` on all-criteria-ticked + linked RFC closed. When all stories under all referenced RFCs are done, include the Known Error → Verification Pending `git mv` in the final commit per the "Problem lifecycle — add a Verification Pending status between Known Error and Closed" architecture rule. The full traversal contract lives in `/wr-itil:manage-problem` § Working a Problem → Known Error subsection (post-Phase-2 rewrite per the "Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology" architecture rule lines 300-320).
|
|
96
|
+
|
|
97
|
+
**Why delegate rather than re-implement:** the full investigation / transition / fix / release pipeline is a long-lived, policy-governed flow that must stay on a single authoritative workflow. Re-hosting it on a sibling skill would fork the ownership contract and compound maintenance cost. The split skill (this file) owns the *selection* of the next ticket; `/wr-itil:manage-problem <NNN>` owns the *execution*.
|
|
98
|
+
|
|
99
|
+
### 4. Scope-expansion check (the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 1; the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-2 deviation-approval)
|
|
100
|
+
|
|
101
|
+
If the delegated `/wr-itil:manage-problem <NNN>` reports that the ticket's effort expanded during investigation or architect review (e.g. S → L, or L → XL), fire the standard scope-change `request_user_input` prompt. **Effort growth IS the contradicting evidence** against the WSJF score that ranked this ticket at the top — this is the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule **category-2 (deviation-approval)** surface. The 3-option vocabulary below is the work-item-tactical analog of the framework-tactical 5-option vocabulary (Approve+amend / Approve+supersede / Approve+one-time / Reject / Defer); the user is the right authority for the shape, so the `request_user_input` is genuine, not lazy.
|
|
102
|
+
|
|
103
|
+
- Option 1: `Continue with expanded scope` — keep working this ticket at its new size.
|
|
104
|
+
- Option 2: `Update problem and re-rank` — save findings to the problem file, re-score WSJF, and re-run the framework-mediated selection to surface the new top of queue.
|
|
105
|
+
- Option 3: `Pick a different problem` — park this one and work something else.
|
|
106
|
+
|
|
107
|
+
Use `header: "Scope change"` and `multiSelect: false`. This is the same structure `/wr-itil:manage-problem`'s Working a Problem section documents; the split lifts it without modification.
|
|
108
|
+
|
|
109
|
+
**AFK / non-interactive branch (the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6)**: same fallback as `/wr-itil:work-problems` — save findings + the new Effort/WSJF lines to the ticket file and skip to the next iteration. The orchestrator owns the re-selection loop.
|
|
110
|
+
|
|
111
|
+
### 5. Post-work housekeeping
|
|
112
|
+
|
|
113
|
+
After the delegated `/wr-itil:manage-problem <NNN>` completes:
|
|
114
|
+
|
|
115
|
+
1. If the ticket status changed (Open → Known Error, Known Error → Verification Pending), the delegated skill already committed the change per the "Governance Skills Commit Their Own Completed Work" architecture rule + the "Problem lifecycle — add a Verification Pending status between Known Error and Closed" architecture rule and updated `docs/problems/README.md` per the "Problem 062: `manage-problem` does not refresh `docs/problems/README.md` on single-ticket transitions; fast-path cache goes stale silently" problem. This skill does NOT re-commit or re-refresh; it reports what happened.
|
|
116
|
+
2. Report the outcome: ticket ID, action taken (investigated / transitioned / fix-released), commit SHA(s), and next-recommended action (typically "run `/wr-itil:work-problem` again for the next ticket" or "stop — all actionable tickets worked").
|
|
117
|
+
3. **Do NOT loop automatically.** This is the singular skill. If the user wants to continue, they invoke `/wr-itil:work-problem` again, or switch to `/wr-itil:work-problems` (plural) for the AFK orchestrator loop.
|
|
118
|
+
|
|
119
|
+
## Ownership boundary
|
|
120
|
+
|
|
121
|
+
`work-problem` (singular) owns:
|
|
122
|
+
- Reading the WSJF Rankings from `docs/problems/README.md`.
|
|
123
|
+
- Applying the framework-mediated tie-break ladder for selection (the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule Prioritisation row).
|
|
124
|
+
- Reporting the chosen ticket + the tie-break rung that decided (the "Restore Service Fast with an Audit Trail" user outcome audit-trail).
|
|
125
|
+
- Honouring the user-override path `/wr-itil:work-problem <NNN>` (skip the ladder; proceed with the named ticket).
|
|
126
|
+
- Delegating one execution iteration to `/wr-itil:manage-problem <NNN>`.
|
|
127
|
+
- Firing the scope-expansion `request_user_input` on effort drift (the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule category-2 deviation-approval surface).
|
|
128
|
+
|
|
129
|
+
`work-problem` does NOT:
|
|
130
|
+
- Fire `request_user_input` for the ticket selection itself — selection is framework-mediated per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule.
|
|
131
|
+
- Refresh the README.md cache directly — defers to `/wr-itil:review-problems`.
|
|
132
|
+
- Loop over multiple tickets — that's `/wr-itil:work-problems` (plural).
|
|
133
|
+
- Commit the ranking refresh or the per-ticket work — delegated skills commit per the "Governance Skills Commit Their Own Completed Work" architecture rule.
|
|
134
|
+
|
|
135
|
+
## Goal anchor for headless runs (the "agent ends the work-problems loop (emits ALL_DONE) prematurely while actionable Tier-2 backlog remains, by rationalising the remainder as out-of-scope / interactive-gated" problem / the "AFK loops anchor completion with the native `/goal` external evaluator" architecture rule)
|
|
136
|
+
|
|
137
|
+
A headless single-ticket run can anchor its completion with Codex's native `/goal` external evaluator (≥ v2.1.139), so a fresh model — not the working agent — judges whether the ticket genuinely reached an end state: `native Codex subagent "/goal Run /wr-itil:work-problem to work the top ticket. Complete when the report printed in the conversation shows a committed outcome (with commit SHA) or a recorded blocker for the selected ticket."` (No turn-bound: trust the goal — the loop stops only at its real end states: a committed outcome, a recorded blocker, or quota exhaustion.) There is no programmatic mid-session surface for setting a goal (probed 2026-07-06, v2.1.201) — interactive users type `/goal` themselves; the skill proceeds identically either way. The plural orchestrator's anchor contract (canonical condition, printed-evidence rule, one-directional semantics) lives at `/wr-itil:work-problems` Step 0e.
|
|
138
|
+
|
|
139
|
+
## Related
|
|
140
|
+
|
|
141
|
+
- **the "Problem 071: Argument-based skill subcommands are not discoverable in Codex autocomplete" problem** (`docs/problems/071-argument-based-skill-subcommands-are-not-discoverable.open.md`) — originating ticket. This skill is phase 3 of the "Problem 071: Argument-based skill subcommands are not discoverable in Codex autocomplete" problem phased-landing plan (list-problems was phase 1; review-problems was phase 2).
|
|
142
|
+
- **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 Phase 2 first audit target (work-problem singular).
|
|
143
|
+
- **the "Rename `wr-problem` Plugin to `wr-itil`" architecture rule amended** (`docs/decisions/010-rename-wr-problem-to-wr-itil.proposed.md` — Skill Granularity section) — canonical skill-split naming + forwarder contract + `deprecated-arguments: true` frontmatter flag.
|
|
144
|
+
- **the "Structured User Interaction for Governance-Skill Decisions" architecture rule amended** (`docs/decisions/013-structured-user-interaction-for-governance-decisions.proposed.md`) — Rule 1 amended 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-request_user_input 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. Step 4 scope-expansion is the only Rule-1 surface this skill retains; Rule 6 covers Step 4's AFK fallback.
|
|
145
|
+
- **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; this skill's Step 2 selection is framework-mediated per the ADR's Prioritisation row. Step 4 scope-expansion is a category-2 (deviation-approval) surface per the ADR's 6-class taxonomy.
|
|
146
|
+
- **the "Governance Skills Commit Their Own Completed Work" architecture rule** — governance skills commit their own work. The delegated `/wr-itil:manage-problem <NNN>` owns the per-ticket commit; this skill does not re-commit.
|
|
147
|
+
- **the "Inter-iteration release cadence for AFK loops" architecture rule** — release cadence. AFK orchestrator owns release cadence; this skill does NOT auto-release.
|
|
148
|
+
- **the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule** — governance skill invocation patterns. `/wr-itil:work-problems` delegates iterations via the native Codex subagent tool; this singular skill is the canonical execution unit.
|
|
149
|
+
- **the "Skill testing strategy — contract-assertion bats companion to" architecture rule** (`docs/decisions/037-skill-testing-strategy.proposed.md`) — contract-assertion bats pattern applied to this skill.
|
|
150
|
+
- **the "Problem 031: `manage-problem work` incorrectly determines cache is fresh" problem** — git-history freshness check rationale (mtime unreliable in worktrees). Applies to the README cache this skill reads.
|
|
151
|
+
- **the "Problem 062: `manage-problem` does not refresh `docs/problems/README.md` on single-ticket transitions; fast-path cache goes stale silently" problem** — `/wr-itil:review-problems` is the canonical README.md cache writer. This skill defers to it for refreshes.
|
|
152
|
+
- **the "Problem 077: work-problems Step 5 does not delegate iterations to a subagent, so context pressure accumulates in the orchestrator's main turn" problem** — `/wr-itil:work-problems` Step 5 delegates iterations via the native Codex subagent tool. The delegated subagent invokes this skill's execution unit per iteration.
|
|
153
|
+
- **the ": Enforce Governance Without Slowing Down" user outcome** (`docs/jtbd/developer/the ": Enforce Governance Without Slowing Down" user outcome-enforce-governance.proposed.md`) — discoverable surface via `/wr-itil:` autocomplete. Users type `/wr-itil:work-problem` rather than remembering the `manage-problem work` subcommand.
|
|
154
|
+
- **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`) — one skill per distinct user intent.
|
|
155
|
+
- `<itil-plugin-root>/skills/manage-problem/SKILL.md` — hosts the thin-router forwarder for the deprecated `manage-problem work` form; also the delegated execution target for each ticket.
|
|
156
|
+
- `<itil-plugin-root>/skills/review-problems/SKILL.md` — sibling refresh skill; this skill defers to it when the cache is stale.
|
|
157
|
+
- `<itil-plugin-root>/skills/list-problems/SKILL.md` — sibling read-only display skill; same cache read contract.
|
|
158
|
+
- `<itil-plugin-root>/skills/work-problems/SKILL.md` — plural AFK orchestrator; uses this skill as its per-iteration execution unit.
|
|
159
|
+
|
|
160
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wr-itil:work-problems
|
|
3
|
+
description: Drain the ITIL problem backlog in WSJF order using native Codex subagents, governed commits, pushes, and releases.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- Generated from the runtime-neutral skill source. Do not edit. -->
|
|
7
|
+
|
|
8
|
+
> Codex runtime note: use `request_user_input` only where this contract
|
|
9
|
+
> explicitly requires a human decision. Resolve `<itil-plugin-root>` from
|
|
10
|
+
> this installed `SKILL.md`: it is two directories above the skill
|
|
11
|
+
> directory. Run bundled commands from `<itil-plugin-root>/bin/`; do not
|
|
12
|
+
> search the adopter repository or rely on those commands being on `PATH`.
|
|
13
|
+
> Spawn `wr-itil:hang-off-check` with the native Codex subagent tool, wait
|
|
14
|
+
> for it, and close that same agent.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# Work Problems in Codex
|
|
18
|
+
|
|
19
|
+
Continuously work the highest-priority actionable problem until the backlog is drained, the user stops, or a real governance dependency requires human direction. Use Codex's native subagent tools. Never invoke `codex exec`, start a nested Codex CLI, or implement process/PID polling.
|
|
20
|
+
|
|
21
|
+
## Preflight
|
|
22
|
+
|
|
23
|
+
1. If `docs/problems/` is absent, direct the user to `/wr-itil:scaffold-intake` and stop.
|
|
24
|
+
2. Run the installed ITIL maintenance commands required by the repository, including layout migration, README reconciliation, catch-up scanning, stale upstream-cache checks, and unresolved-response checks. Resolve them from the plugin's bundled `bin/`; do not use source-repository paths.
|
|
25
|
+
3. Preserve unrelated working-tree changes. Revert only changes created by a failed preflight.
|
|
26
|
+
4. If the task has a persistent Codex goal, keep it active until this drain reaches a genuine terminal state. A slow tool or subagent is not a blocker.
|
|
27
|
+
|
|
28
|
+
## Loop
|
|
29
|
+
|
|
30
|
+
1. Read the problem index and current ticket files. Select the highest WSJF problem in the highest non-empty actionable tier. Use the documented tie-break rules.
|
|
31
|
+
2. Skip tickets whose required JTBD, decision, risk, or story-map oversight is unconfirmed. Record one structured outstanding question for each genuinely user-answerable dependency; do not ask mid-loop.
|
|
32
|
+
3. Run the relevance and stop-condition checks. Before declaring `ALL_DONE`, run the repository's unconditional pre-completion gates and rescan the backlog.
|
|
33
|
+
4. Spawn one native Codex subagent for the selected ticket. Give it the exact checkout, ticket, applicable decisions, and this contract:
|
|
34
|
+
- invoke `/wr-itil:manage-problem` for the ticket and follow its lifecycle rules;
|
|
35
|
+
- make only in-scope changes and preserve unrelated work;
|
|
36
|
+
- run focused tests and the required architecture/risk checks;
|
|
37
|
+
- create the required changeset for shippable plugin behavior;
|
|
38
|
+
- commit the completed iteration, but do not push or release;
|
|
39
|
+
- return one `ITERATION_SUMMARY` JSON object containing ticket, action, commits, tests, risks, outstanding questions, and remaining work.
|
|
40
|
+
5. Wait for that same subagent. Do not cancel, replace, retry, or fan out merely because Cruise or normal model execution makes the call slow. When it completes, consume its summary and close it.
|
|
41
|
+
6. Validate the summary with `<itil-plugin-root>/bin/wr-itil-verify-iter-summary`. If the subagent failed after changing the checkout, inspect and safely complete or revert only its own partial work before continuing.
|
|
42
|
+
7. Run inter-iteration verification. If the iteration produced committed shippable work, complete the repository's governed push and release cadence when risk is within appetite. Above-appetite risk is a remediation instruction: reduce scope or split the change; never ask the user to approve risk above appetite.
|
|
43
|
+
8. Report only material progress, then rescan and repeat.
|
|
44
|
+
|
|
45
|
+
## Fix Proposal Rule
|
|
46
|
+
|
|
47
|
+
A fix proposal is a release row on an existing story map, never a new file under `docs/rfcs/`. The row has an identity from `<itil-plugin-root>/bin/wr-itil-next-rfc-id`, at least one story card, and a story whose `problems:` list names the driving problem. Creating a new map, activity column, job, or uncovered architectural choice requires a queued human decision rather than a silent edit.
|
|
48
|
+
|
|
49
|
+
## Questions and Stop Conditions
|
|
50
|
+
|
|
51
|
+
- Batch outstanding questions at loop end with `request_user_input`, no more than four per call. Brief substance before IDs.
|
|
52
|
+
- Continue past skipped tickets when another actionable ticket exists.
|
|
53
|
+
- Stop only for an explicit user stop, a fully drained backlog, a governance dependency that blocks every remaining ticket, or an unrecoverable tool/repository failure.
|
|
54
|
+
- Never describe a delayed native tool or subagent as unavailable, hung, or blocked without an actual error or terminal failure.
|
|
55
|
+
|
|
56
|
+
## Final Report
|
|
57
|
+
|
|
58
|
+
Report completed and skipped tickets, commits, tests, push/release outcomes, remaining backlog, and outstanding design questions. Preserve the distinction between committed, pushed, released, and production-verified states.
|
package/templates/story-map.css
CHANGED
|
@@ -48,7 +48,7 @@ body { font-family: system-ui, sans-serif; color: var(--fg); background: var(--b
|
|
|
48
48
|
h1 { font-size: 1.5rem; margin: 0 0 .5rem; }
|
|
49
49
|
p { max-width: 74ch; }
|
|
50
50
|
/* The underline is the channel; the colour is not. Reference links render
|
|
51
|
-
INSIDE runs of prose ("closes
|
|
51
|
+
INSIDE runs of prose ("closes the "Ship quota-pacing surface to prevent weekly-quota exhaustion — advisory or blocking nudge when burn rate exceeds sustainable pace, so users retain Claude tokens for non-Claude-Code surfaces (chat, cowork) for the full week" problem, the "Governance tooling emits U+2014 em-dashes in generated output, breaking adopter no-em-dash Edit/Write hooks" problem", "Traces: the ": Capture the problem in seconds, mid-flow" delivery story"), and those
|
|
52
52
|
runs sit in --muted containers (.t-ref, .s-problems, .traces) — so the real
|
|
53
53
|
comparison is --focus against --muted: 1.58:1 light and 1.09:1 dark, against
|
|
54
54
|
the 3:1 that technique G183 wants before colour alone may carry a link. In
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Generated by scripts/sync-shim-wrappers.sh from
|
|
3
|
-
# packages/shared/lib/shim-wrapper-template.sh. DO NOT EDIT individual
|
|
4
|
-
# shim files in packages/*/bin/wr-* directly; edit the template + run
|
|
5
|
-
# `npm run sync:shim-wrappers` to regenerate.
|
|
6
|
-
#
|
|
7
|
-
# Resolution (ADR-080):
|
|
8
|
-
# 1. If the wrapper's parent dir is semver-shaped, treat as installed-
|
|
9
|
-
# cache execution and resolve to the highest-version sibling's
|
|
10
|
-
# scripts/ entry below.
|
|
11
|
-
# 2. Otherwise (parent dir is e.g. `architect`), treat as source-
|
|
12
|
-
# monorepo execution and dispatch to own scripts/. The source-repo-
|
|
13
|
-
# guard `exec` is the anchor parsed by
|
|
14
|
-
# packages/retrospective/scripts/check-tarball-shipped-shims.sh.
|
|
15
|
-
# 3. If the cache parent contains zero semver-shaped siblings, exit
|
|
16
|
-
# 127 with a stderr message naming the cache parent (per SQ-080-2).
|
|
17
|
-
#
|
|
18
|
-
# @adr ADR-080 (highest-version-wins shim wrapper plugin scaffold)
|
|
19
|
-
# @adr ADR-049 (plugin-bundled scripts resolve via bin/ on $PATH — amended)
|
|
20
|
-
# @problem P343 (mid-session staleness window)
|
|
21
|
-
|
|
22
|
-
set -euo pipefail
|
|
23
|
-
|
|
24
|
-
SHIM_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
25
|
-
OWN_VERSION_DIR="$(dirname "$SHIM_DIR")"
|
|
26
|
-
OWN_VERSION_NAME="$(basename "$OWN_VERSION_DIR")"
|
|
27
|
-
CACHE_PARENT="$(dirname "$OWN_VERSION_DIR")"
|
|
28
|
-
|
|
29
|
-
SEMVER_RE='^[0-9]+\.[0-9]+\.[0-9]+([-+][0-9A-Za-z.-]+)?$'
|
|
30
|
-
|
|
31
|
-
# Source-repo guard: own parent dir is NOT semver → dispatch to own scripts/.
|
|
32
|
-
if ! [[ "$OWN_VERSION_NAME" =~ $SEMVER_RE ]]; then
|
|
33
|
-
exec "$SHIM_DIR/../scripts/mark-rfc-capture-gate.sh" "$@"
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
# Cache execution: pick the highest-semver sibling under CACHE_PARENT.
|
|
37
|
-
HIGHEST=""
|
|
38
|
-
while IFS= read -r dir; do
|
|
39
|
-
name="$(basename "$dir")"
|
|
40
|
-
[[ "$name" =~ $SEMVER_RE ]] || continue
|
|
41
|
-
if [[ -z "$HIGHEST" ]] || [[ "$(printf '%s\n%s\n' "$HIGHEST" "$name" | sort -V | tail -1)" == "$name" ]]; then
|
|
42
|
-
HIGHEST="$name"
|
|
43
|
-
fi
|
|
44
|
-
done < <(find "$CACHE_PARENT" -mindepth 1 -maxdepth 1 -type d 2>/dev/null)
|
|
45
|
-
|
|
46
|
-
if [[ -z "$HIGHEST" ]]; then
|
|
47
|
-
printf 'wr-shim: no cached versions in %s\n' "$CACHE_PARENT" >&2
|
|
48
|
-
exit 127
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
exec "$CACHE_PARENT/$HIGHEST/scripts/mark-rfc-capture-gate.sh" "$@"
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# wr-itil — write the RFC-tier create-gate marker (P119) under every candidate
|
|
3
|
-
# session SID (P260 / ADR-050 Option C). Adopter-safe sibling of
|
|
4
|
-
# wr-itil-mark-create-gate (P317 / RFC-009): resolves its libs relative to the
|
|
5
|
-
# script location, not cwd. SKILLs (capture-rfc / manage-rfc) invoke it by name
|
|
6
|
-
# via the `wr-itil-mark-rfc-capture-gate` PATH shim (ADR-049) before writing a
|
|
7
|
-
# docs/rfcs/RFC-*.proposed.md file.
|
|
8
|
-
#
|
|
9
|
-
# The RFC tier has no `_candidates` helper in create-gate.sh (only the single
|
|
10
|
-
# `mark_rfc_capture_complete`), so this script loops the candidate set itself —
|
|
11
|
-
# the RFC-tier analogue of `mark_step2_complete_candidates`.
|
|
12
|
-
set -uo pipefail
|
|
13
|
-
|
|
14
|
-
LIB="$(cd "$(dirname "${BASH_SOURCE[0]}")/../hooks/lib" 2>/dev/null && pwd)" || {
|
|
15
|
-
echo "wr-itil-mark-rfc-capture-gate: cannot locate hooks/lib next to the script" >&2
|
|
16
|
-
exit 2
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
# shellcheck source=/dev/null
|
|
20
|
-
source "$LIB/session-id.sh"
|
|
21
|
-
# shellcheck source=/dev/null
|
|
22
|
-
source "$LIB/create-gate.sh"
|
|
23
|
-
|
|
24
|
-
count=0
|
|
25
|
-
while IFS= read -r sid; do
|
|
26
|
-
[ -n "$sid" ] || continue
|
|
27
|
-
mark_rfc_capture_complete "$sid"
|
|
28
|
-
count=$((count + 1))
|
|
29
|
-
done < <(get_candidate_session_ids)
|
|
30
|
-
|
|
31
|
-
# Fail-closed parity with mark_step2_complete_candidates: non-zero if no SID.
|
|
32
|
-
[ "$count" -gt 0 ]
|