@windyroad/itil 2.4.1 → 2.4.2-preview.1239
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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/review-problems/SKILL.md +1 -1
- package/skills/work-problems/SKILL.md +26 -0
- package/skills/work-problems/evals/evals.json +17 -3
- package/skills-codex/review-problems/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -286,7 +286,7 @@ The `## Inbound Upstream Reports` README section (the "Inbound upstream-report d
|
|
|
286
286
|
|
|
287
287
|
#### 4.5 AFK-loop behaviour
|
|
288
288
|
|
|
289
|
-
When invoked from `/wr-itil:work-problems` as a `claude -p` pre-flight subprocess (the Step 0b inbound-discovery pre-flight dispatch; AFK-by-construction per the Step 5 dispatch constraint + the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule subprocess isolation), Step 4.5 runs silently per the mechanical-stage carve-out. The only user-attention surface during AFK is the existing external-comms gate UX (a known interrupt class per the "External-comms gate — voice-tone + risk/leak evaluators on shared PreToolUse surface" architecture rule amended); per-branch `AskUserQuestion` would re-introduce the friction the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem was engineered to remove.
|
|
289
|
+
When invoked from `/wr-itil:work-problems` as a `claude -p` pre-flight subprocess (the Step 0b inbound-discovery pre-flight dispatch; AFK-by-construction per the Step 5 dispatch constraint + the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule subprocess isolation), Step 4.5 runs silently per the mechanical-stage carve-out. The only user-attention surface during AFK is the existing external-comms gate UX (a known interrupt class per the "External-comms gate — voice-tone + risk/leak evaluators on shared PreToolUse surface" architecture rule amended); per-branch `AskUserQuestion` would re-introduce the friction the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem was engineered to remove. Being gated this way is **not** being out-of-scope: the verdict / acknowledgement / pushback comments this step owns are dispatchable during an AFK pre-flight and MUST NOT be declined as "external comms is outside this pass's scope" — see `/wr-itil:work-problems` § External-comms scope in AFK / pre-flight for the authorised set and the one restrained shape (the "Agent self-limits external-comms as "out of scope" in AFK / pre-flight contexts — strands dispatchable lifecycle/ack/upstream-report obligations the framework authorises to proceed" problem).
|
|
290
290
|
|
|
291
291
|
### 4.6. Relevance-close pass (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem / the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem / the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule Phase 1 + Phase 2)
|
|
292
292
|
|
|
@@ -1175,8 +1175,34 @@ When `AskUserQuestion` is unavailable or the user is AFK, the skill (and the del
|
|
|
1175
1175
|
| Unexpected dirty state between iterations | Halt the loop. Report the `git status --porcelain` output, the last iteration's reported outcome, and the divergence — per the "Problem 036: work-problems orchestrator does not verify commit-landing between iterations" problem (Step 6.75). Run Step 2.5b before emitting the halt summary if ≥1 accumulated user-answerable skip from prior iters (the "`/wr-itil:work-problems` failure-handling halt paths bypass Step 2.5's interactive-default routing for accumulated user-answerable design questions" problem). Do NOT attempt non-interactive recovery of the dirty state itself. |
|
|
1176
1176
|
| Iter committed cleanly + claim contradicts on-disk ADR Confirmation state (the "AFK iter subprocesses can over-claim completion in their ITERATION_SUMMARY — orchestrator trusts the claim but on-disk state contradicts it" problem) | Halt the loop with `outcome: halted-iter-over-claim`. Include the `wr-itil-verify-iter-summary` stdout (the `OVER-CLAIM: ADR-NNN has N unchecked Confirmation item(s)...` lines) as the divergence detail. Run Step 2.5b before emitting the halt summary if ≥1 accumulated user-answerable skip from prior iters. Do NOT auto-correct the iter's claim — the orchestrator cannot retroactively make a false claim true; the user adjudicates on return (re-dispatch / accept partial / amend). Per the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6 + the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule subprocess-boundary trust contract + the "AFK iter subprocesses can over-claim completion in their ITERATION_SUMMARY — orchestrator trusts the claim but on-disk state contradicts it" problem (Step 6.75 verify-iter-claims sub-step). |
|
|
1177
1177
|
| External root cause detected at Open → Known Error, or at park with `upstream-blocked` reason | **Auto-invoke `/wr-itil:report-upstream`** via the manage-problem Step 6 external-root-cause detection AFK fallback (per the "Cross-project problem-reporting contract — `report-upstream` skill in `@windyroad/itil`" architecture rule 2026-06-04 (the "Agent waits for human to initiate upstream report instead of filing on detect — feedback delay class" problem) amendment). The report-upstream skill composes the draft then scores the prose via `wr-risk-scorer:external-comms` (the "External-comms gate — voice-tone + risk/leak evaluators on shared PreToolUse surface" architecture rule); below-appetite → sends (public-issue Step 5 / comment Step 5c / security Step 6 per classification); above-appetite → risk-reduces (open-ended LLM judgement per leaf (a)) then re-scores → sends-or-queues to `## Queued Upstream Report` (leaf (c)). Security routing per leaf (b): upstream-with-`SECURITY.md` + below-appetite → files via declared channel; upstream-without-`SECURITY.md` → external-comms-gated impact assessment. Queue does NOT halt (the "AFK iter default when a skill needs to ask a question and AskUserQuestion is unavailable — should queue the question and move to the next iteration (not halt, not silently skip)" problem). Tickets already carrying the stable `- **Upstream report pending** -- external dependency identified; invoke /wr-itil:report-upstream when ready` marker from prior sessions are detected via the already-noted grep check and routed to the report-upstream invocation; the marker shape is retained as the detection substrate (ASCII `--` per the "work-problems SKILL.md AFK-fallback marker wording uses em-dash, forces consumer-side whitespace surgery" problem — em-dash variant is the legacy form, still matched by the already-noted check for backward compatibility). Per the "Problem 063: manage-problem does not trigger /wr-itil:report-upstream when root cause is external" problem (amended 2026-06-04) + the "Agent waits for human to initiate upstream report instead of filing on detect — feedback delay class" problem + the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6. |
|
|
1178
|
+
| External-comms obligation met during a pre-flight or an AFK iteration (inbound report awaiting a verdict / acknowledgement; local transition of a ticket we filed upstream; external root cause found) | **In scope — dispatch it.** Compose it through the owning skill and let the "External-comms gate — voice-tone + risk/leak evaluators on shared PreToolUse surface" architecture rule gate score the prose: low-risk silent-passes, above-appetite queues (`outstanding_questions` / `## Queued Upstream Report`, the "AFK iter default when a skill needs to ask a question and AskUserQuestion is unavailable — should queue the question and move to the next iteration (not halt, not silently skip)" problem — the queue does not halt). Never decline it as "external comms is outside this pass's scope" — being gated is not being out-of-scope. The single withheld shape is the "Inbound-reported tickets never receive fix-released verdict on originating issue" problem's held batch back-fill cadence. See § External-comms scope in AFK / pre-flight below. Per the "External-comms gate — voice-tone + risk/leak evaluators on shared PreToolUse surface" architecture rule + the "Cross-project problem-reporting contract — `report-upstream` skill in `@windyroad/itil`" architecture rule + the "Inbound upstream-report discovery + assessment pipeline (peer of )" architecture rule + the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 6 + the "Agent self-limits external-comms as "out of scope" in AFK / pre-flight contexts — strands dispatchable lifecycle/ack/upstream-report obligations the framework authorises to proceed" problem. |
|
|
1178
1179
|
| Mid-loop ask between iters in the orchestrator's main turn | Forbidden except at framework-prescribed user-interaction points (Step 0 session-continuity / fetch-failure halt; Step 2.5 / 2.5b loop-end emit; Step 6.5 above-appetite Rule 5 halt; Step 6.5 CI-failure / release:watch halt; Step 6.75 dirty-for-unknown-reason halt). The loop's purpose is **progress + accumulation**; mechanical-stage transitions between iters are framework-resolved and MUST NOT prompt the user. Per the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule framework-resolution boundary + the "Structured User Interaction for Governance-Skill Decisions" architecture rule Rule 1 (as amended by the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule) + the "`/wr-itil:work-problems` orchestrator defaults to subprocess dispatch even when the user is observably interactive — loses real-time presence advantage" problem. |
|
|
1179
1180
|
|
|
1181
|
+
### External-comms scope in AFK / pre-flight — the "Agent self-limits external-comms as "out of scope" in AFK / pre-flight contexts — strands dispatchable lifecycle/ack/upstream-report obligations the framework authorises to proceed" problem
|
|
1182
|
+
|
|
1183
|
+
**Being gated is not being out-of-scope.** The external-comms gate (the "External-comms gate — voice-tone + risk/leak evaluators on shared PreToolUse surface" architecture rule) exists precisely so that low-risk outbound prose *proceeds without stopping for anyone* — `wr-risk-scorer:external-comms` § PASS Output states that policy-authorised drafts proceed silently. An agent that meets an external-comms obligation mid-pass and declines it as "an external-comms action outside this pre-flight's scope" has read the guard as a wall, and the obligation is stranded with nothing left to pick it up. User correction 2026-07-26: **"External comms is NOT out of pre-flight scope."**
|
|
1184
|
+
|
|
1185
|
+
The cost is measured, not hypothetical (2026-09-19): of 53 converted inbound reports, **41 have never been acknowledged**, and the oldest has been silent for **75 days**; **24 lifecycle updates are owed to reporters right now**, 23 of them to inbound reporters. Every one of those is a promise the "Report a Problem Without Pre-Classifying It" user outcome makes on our behalf — that a submitted report gets an acknowledgement and eventually a verdict — and this reasoning error is what breaks it.
|
|
1186
|
+
|
|
1187
|
+
**Authorised — dispatch, do not defer.** Each of these rides the external-comms gate and silent-passes on a low-risk verdict. Only an above-appetite verdict queues, and queuing does not halt the loop:
|
|
1188
|
+
|
|
1189
|
+
| Obligation met mid-pass | Skill that owns the dispatch |
|
|
1190
|
+
|---|---|
|
|
1191
|
+
| An inbound report needs a verdict, acknowledgement, duplicate cross-reference, or pushback comment | `/wr-itil:review-problems` Step 4.5e (and Step 4b for the fix-released-via-upgrade shape) |
|
|
1192
|
+
| An external root cause is identified at Open → Known Error, or a ticket parks as `upstream-blocked` | `/wr-itil:report-upstream`, auto-invoked via the manage-problem Step 6 AFK fallback (the "Cross-project problem-reporting contract — `report-upstream` skill in `@windyroad/itil`" architecture rule as amended by the "Agent waits for human to initiate upstream report instead of filing on detect — feedback delay class" problem) |
|
|
1193
|
+
| A ticket we filed upstream transitions locally — root cause confirmed, fix released, or closed | `/wr-itil:update-upstream` for that one ticket |
|
|
1194
|
+
| We need to know whether anyone replied upstream | `/wr-itil:check-upstream-responses` — read-only externally, so it never trips the gate at all |
|
|
1195
|
+
|
|
1196
|
+
**Restrained — do not auto-fire.** Exactly one outbound shape is withheld, and the restraint is correct: a **cadenced batch back-fill** that would post a backlog of owed comments onto other people's issues — and close them — without the maintainer starting it. That batch mode was ratified as user-initiated only; auto-firing it would reverse ratified substance, so it stays queued for the maintainer (the "Inbound-reported tickets never receive fix-released verdict on originating issue" problem). **The restraint is on the backlog, not on the batch size.** Draining that same owed backlog one comment per iteration is firing the held cadence one comment at a time, and it stays held — a standing debt does not become authorised by being dispatched slowly. It is not a licence to decline the per-ticket obligations in the table above.
|
|
1197
|
+
|
|
1198
|
+
**The test** is about *when the obligation arose*, not about who owns it. When an external-comms action comes up mid-pass, ask: **did this obligation arise in this pass?** A transition happening now, a report being assessed now, a root cause found now — those are in scope. Compose it, let the gate score it, dispatch on low-risk, queue on above-appetite.
|
|
1199
|
+
|
|
1200
|
+
A **standing debt** — comments owed from earlier passes, sitting unsent — is the "Inbound-reported tickets never receive fix-released verdict on originating issue" problem's held batch, however few you dispatch per iteration. Owning-skill authority does not convert it: `/wr-itil:update-upstream` owns each of those comments for its one ticket, and each is still held. The owner test alone would answer yes to all of them, which is exactly the salami-slice this rule exists to prevent.
|
|
1201
|
+
|
|
1202
|
+
Nothing here is withheld because a pre-flight or an AFK iteration "is not about external comms" — the only withheld shape is the held cadence, and it is withheld because a human ratified it that way.
|
|
1203
|
+
|
|
1204
|
+
Sibling-class ancestor: **the "Agent treats conditionally-deferred work (deferred-pending-X-graduation) as permanently out of scope — prematurely transitions parent ticket when X graduates" problem** (closed) — treating conditionally-deferred work as permanently out-of-scope. Same read-a-guard-as-a-wall error at a different decision surface.
|
|
1205
|
+
|
|
1180
1206
|
### Mid-loop ask discipline (orchestrator main turn) — the "`/wr-itil:work-problems` orchestrator defaults to subprocess dispatch even when the user is observably interactive — loses real-time presence advantage" problem
|
|
1181
1207
|
|
|
1182
1208
|
The orchestrator MUST NOT call `AskUserQuestion` between iterations except at the framework-prescribed user-interaction halt points listed below. The loop's purpose is **progress + accumulation** — progress every ticket the agent can advance autonomously, accumulate user-answerable questions as a side-effect, and surface the accumulated batch only at a halt point. This rule applies whether the user is observably present or not, because **presence-detection is unreliable** and is not the goal — the user may answer one question and disappear for hours; the orchestrator's job is to keep advancing the backlog and stage the user-interaction surface for whenever the user actually returns. Treat the user as transient.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"evals": [
|
|
4
4
|
{
|
|
5
5
|
"id": 1,
|
|
6
|
-
"prompt": "work through my problems while I'm away
|
|
6
|
+
"prompt": "work through my problems while I'm away \u2014 I'll be AFK for a bit so just grind through whatever you can",
|
|
7
7
|
"expected_output": "Works highest-WSJF problems in sequence, reports progress per iteration, outputs ALL_DONE when nothing is left",
|
|
8
8
|
"files": [],
|
|
9
9
|
"expectations": [
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"id": 2,
|
|
20
|
-
"prompt": "grind the problem backlog for me
|
|
20
|
+
"prompt": "grind the problem backlog for me \u2014 do as many as you can without asking me anything",
|
|
21
21
|
"expected_output": "Same loop behavior but triggered by different phrasing. Should still work WSJF-ordered, skip interactive decisions, report progress.",
|
|
22
22
|
"files": [],
|
|
23
23
|
"expectations": [
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"id": 3,
|
|
33
|
-
"prompt": "I need to step out
|
|
33
|
+
"prompt": "I need to step out \u2014 can you work through the open problems? Start with the highest priority ones. Don't wait for me on anything, just make the best call you can.",
|
|
34
34
|
"expected_output": "Runs review if cache is stale, then loops through problems. Demonstrates the review-first-then-work pattern and handles edge cases.",
|
|
35
35
|
"files": [],
|
|
36
36
|
"expectations": [
|
|
@@ -40,6 +40,20 @@
|
|
|
40
40
|
"Git conflicts cause the loop to stop with a clear report",
|
|
41
41
|
"Final output includes Remaining Backlog section showing what's left"
|
|
42
42
|
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": 4,
|
|
46
|
+
"prompt": "I'm heading out \u2014 work the backlog. One of the top tickets is only closeable once the person who reported it upstream gets told the fix shipped, and the inbound-discovery pre-flight is stale so it'll run first.",
|
|
47
|
+
"expected_output": "Dispatches the per-ticket external-comms obligations it meets (inbound acknowledgement / verdict, upstream lifecycle update) through the gate rather than declining them as out-of-scope for a pre-flight or AFK pass; does not auto-fire the held batch back-fill cadence.",
|
|
48
|
+
"files": [],
|
|
49
|
+
"expectations": [
|
|
50
|
+
"The per-ticket external-comms obligation is dispatched through its owning skill, not deferred",
|
|
51
|
+
"The obligation is NOT declined with reasoning that external comms is outside the scope of a pre-flight or AFK pass",
|
|
52
|
+
"A low-risk gate verdict proceeds silently; an above-appetite verdict is queued rather than halting the loop",
|
|
53
|
+
"The ticket blocked only on that dispatch is not held as non-dispatchable once the dispatch succeeds",
|
|
54
|
+
"No batch back-fill of comments is posted across a backlog of third-party issues unattended",
|
|
55
|
+
"Any withheld outbound action is withheld by naming the ratified hold, not by a self-invented out-of-scope judgement"
|
|
56
|
+
]
|
|
43
57
|
}
|
|
44
58
|
]
|
|
45
59
|
}
|
|
@@ -297,7 +297,7 @@ The `## Inbound Upstream Reports` README section (the "Inbound upstream-report d
|
|
|
297
297
|
|
|
298
298
|
#### 4.5 AFK-loop behaviour
|
|
299
299
|
|
|
300
|
-
When invoked from `/wr-itil:work-problems` as a `native Codex subagent` pre-flight subprocess (the Step 0b inbound-discovery pre-flight dispatch; AFK-by-construction per the Step 5 dispatch constraint + the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule subprocess isolation), Step 4.5 runs silently per the mechanical-stage carve-out. The only user-attention surface during AFK is the existing external-comms gate UX (a known interrupt class per the "External-comms gate — voice-tone + risk/leak evaluators on shared PreToolUse surface" architecture rule amended); per-branch `request_user_input` would re-introduce the friction the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem was engineered to remove.
|
|
300
|
+
When invoked from `/wr-itil:work-problems` as a `native Codex subagent` pre-flight subprocess (the Step 0b inbound-discovery pre-flight dispatch; AFK-by-construction per the Step 5 dispatch constraint + the "Governance skill invocation patterns — foreground + background with deferred-question resumption" architecture rule subprocess isolation), Step 4.5 runs silently per the mechanical-stage carve-out. The only user-attention surface during AFK is the existing external-comms gate UX (a known interrupt class per the "External-comms gate — voice-tone + risk/leak evaluators on shared PreToolUse surface" architecture rule amended); per-branch `request_user_input` would re-introduce the friction the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem was engineered to remove. Being gated this way is **not** being out-of-scope: the verdict / acknowledgement / pushback comments this step owns are dispatchable during an AFK pre-flight and MUST NOT be declined as "external comms is outside this pass's scope" — see `/wr-itil:work-problems` § External-comms scope in AFK / pre-flight for the authorised set and the one restrained shape (the "Agent self-limits external-comms as "out of scope" in AFK / pre-flight contexts — strands dispatchable lifecycle/ack/upstream-report obligations the framework authorises to proceed" problem).
|
|
301
301
|
|
|
302
302
|
### 4.6. Relevance-close pass (the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem / the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem / the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule Phase 1 + Phase 2)
|
|
303
303
|
|