Skip to content

wr-itil: outstanding_questions queue entries carry no decision-revision pin — stale entries outlive amendments #338

Description

@tompahoward

Description

Entries in the work-problems ADR-044 loop-end queue (.afk-run-state/outstanding-questions.jsonl) reference decisions by bare ID (e.g. existing_decision: "ADR-060 § Bypass mechanism line 158") with no revision pin — no commit SHA, no amendment-date snapshot. A deviation-approval entry queued against one revision of a decision can therefore survive an amendment that changes or retires the very mechanism it cited, and be surfaced at a later loop-end for adjudication against a revision that no longer matches. In the observed case a 2026-06-02 entry cited a bypass-trailer encoding that a 2026-06-08 amendment retired entirely; at 2026-06-10 loop-end the user adjudicated the stale framing against a mechanism that no longer existed. The mismatch was caught only by accident (a fresh-context subagent happened to read the current ADR text during a downstream capture).

Symptoms

  • Loop-end outstanding_questions entries are presented for adjudication with framing that may no longer match the cited decision's current revision.
  • Without an accidental fresh read, a rework decision contradicting the CURRENT decision text can be produced.

Workaround

Rely on incidental fresh reads of the cited decision during unrelated work. No systematic guard.

Affected plugin / component

@windyroad/itilwork-problems SKILL (Step 5 outstanding_questions schema + Step 2.5 surfacing pass).

Frequency

Latent on every queued deviation/direction entry that outlives an amendment to its cited decision; observed once with user-visible impact (2026-06-10).

Versions

  • Local plugin: @windyroad/itil (cache 0.57.1)
  • Upstream package: @windyroad/itil (not detected — monorepo)
  • Claude Code CLI: 2.1.201 (Claude Code)
  • Node: v22.17.1
  • OS: Darwin 25.3.0 x86_64

Evidence

  • Queued 2026-06-02 against a bypass-trailer encoding; retired by a 2026-06-08 amendment; adjudicated stale at 2026-06-10 loop-end.

Fix direction (either or both)

  • (a) Queue entries record the cited decision file's git blob SHA / last-amendment date at queue time; the Step 2.5 surfacing pass compares against current state and prefixes the question with "NOTE: decision amended since this was queued" on mismatch.
  • (b) Step 2.5's ranking step re-reads each cited decision before presenting and drops/flags entries whose cited section no longer exists.

Cross-reference

Reported from a downstream adopter's docs/problems/ (tracked locally as P092).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions