Skip to content

wave-2 workflow: PR #488 notes-reconcile prescribes a deferred receipt disposition the tool rejects (resolve-note choices and check both allow only four) #492

Closed

Description

@dezren39

Finding

PR #488's deepened notes-reconcile skill prescribes a fifth note disposition, deferred, that the workflow tool does not accept anywhere — so a worker following the skill cannot complete step 5 for a deferred note.

  • PR docs(repo): deepen concept-research, notes-reconcile and issue-handoff skills #488 (head 67c183f), .agents/skills/notes-reconcile/SKILL.md: the frontmatter description (line 3) and step 4 (line 40) list five dispositions — incorporated, acknowledged, declined, deferred, superseded — and step 4 directs notes about files the receiver does not own to acknowledged or deferred.
  • Its references/receipts.md ("The five dispositions", :5) defines deferred at :15 (with a mandatory Revisit when: <event> trigger in the reason) and repeats the unowned-file guidance at :19.
  • The tool on current main (d20fe86), unchanged in this respect by PR feat(repo): research workflow items, ids and render commands #490: scripts/research_workflow.py:1040 restricts resolve-note --disposition to ["incorporated", "acknowledged", "declined", "superseded"], and the receipt validation in check accepts only the same four (scripts/research_workflow.py:826).
  • PR docs: deepen research-workflow, request-intake and research-prepare skills #489's references/tool-fallbacks.md covers the other not-yet-implemented commands these skills rely on (lease, status --live, item, ids, render, …) but has no fallback for a deferred disposition.

Evidence (verified at PR #490 head 2b0cbbc, which carries the current tool)

$ python3 -I scripts/research_workflow.py resolve-note --package <pkg> --note x.md \
    --disposition deferred --target main.md --reason "test"
research_workflow.py resolve-note: error: argument --disposition: invalid choice: 'deferred'
(choose from 'incorporated', 'acknowledged', 'declined', 'superseded')   → exit 2

Hand-writing the receipt instead does not help: check fails it with invalid receiver disposition/target/reason (the :826 set). Yet PR #488 step 5's Done criterion is check --package <pkg> --require-resolved exits 0 — unreachable for any package with a note the skill says to defer.

Why it matters

deferred is not an edge case in the skill's own design: it is the prescribed disposition for a valid note that must wait, and specifically for notes asking for changes in files the receiver does not own (another concept, design.md, AGENTS.md) — a routine S3 situation. A worker hitting it must either mislabel the receipt acknowledged/declined (losing the revisit trigger the receipts format requires, and misrecording the note's outcome in an immutable receipt) or stall. The pre-PR488 skill text mentioned "deferred" only in prose; PR #488 promotes it to a first-class, step-level disposition without the tool side landing.

Acceptance criteria

  • The skill and the tool name the same disposition set. Either:
    • the tool gains deferred end to end (resolve-note choices, the check validation set, planning/workflow/records.md if it enumerates dispositions, and tests), including the Revisit when: reason convention; or
    • the skill and receipts.md revert to the four tool-supported dispositions and express "valid but not now" through one of them (stating which, and where the revisit trigger is recorded instead).
  • Every disposition named in the notes-reconcile skill can be written with resolve-note and then passes check --require-resolved (a test or fixture exercising each named disposition).
  • If the tool route is chosen and cannot land with the skill, PR docs: deepen research-workflow, request-intake and research-prepare skills #489's tool-fallbacks.md gains an interim fallback entry for deferred so an S3 worker is never without a sanctioned path.

Activity

  1. added
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    effort/sSmall: expected under 2 hours of work
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 26, 2026
  2. dezren39 commented on Oct 26, 2026

    @dezren39
    MemberAuthor

    Intake review

    • Still live, verified on current main: .agents/skills/notes-reconcile/SKILL.md (:3, :40) still prescribes five dispositions including deferred, while scripts/research_workflow.py (~:854) still validates receipt dispositions against the four-value set {incorporated, acknowledged, declined, superseded}. Related and partially overlapping: scripts/research_workflow_live.py:31 already defines DISPOSITIONS with all five — the live path and the package check path disagree, which sharpens the fix: unify on the five in research_workflow.py (and the resolve-note choices) rather than inventing a third list.
    • Risks: deferred receipts carry a mandatory Revisit when: trigger per the skill's receipts.md; validation should require it for deferred entries so they don't become a silent drop box.
    • Suggested approach: add deferred to the check-side set + CLI choices, add a fixture exercising each of the five through resolve-note → check --require-resolved, and (per the last acceptance criterion) add the interim tool-fallbacks.md entry if the tool change cannot land with the skill.

    — Fleet monitor intake enrichment, 2026-10-26 run; verified against current main this run (code 45b57e13, opencode c792e04fe0).

  3. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 1, 2026
  5. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Triage verdict — CONFIRMED on current main, tool-side route pinned (queue task 2111, lane E)

    Re-verified on current main ed3a285 (filed against d20fe86 / PR #490 head; PR #488 is MERGED, so the skill text is live):

    • .agents/skills/notes-reconcile/SKILL.md still prescribes five dispositions — frontmatter (line 3) and step 4 (line 40) list incorporated, acknowledged, declined, deferred, superseded, and direct unowned-file notes to acknowledged or deferred. references/receipts.md ("The five dispositions") still defines deferred with the mandatory Revisit when: <event> reason trigger.
    • The tool still rejects it: scripts/research_workflow.py check_package validates each resolution's disposition against the four-set {"incorporated", "acknowledged", "declined", "superseded"} (~line 856) and fails anything else with invalid receiver disposition/target/reason. A package containing a skill-prescribed deferred receipt can never pass check --require-resolved — the skill's own step-5 done criterion.
    • planning/workflow/records.md (~line 301) documents the gap as current tool behaviour: "deferred is not accepted and nothing records scanned." That is a limitation note, not a design ruling against deferred.
    • One surface changed since filing: the tool's CLI no longer exposes a resolve-note subcommand (subcommands are now init/check/status/ready/note; receipts are resolution blocks the check reads from concept files). The disposition-set defect is unaffected, but the fix packet must audit the current writer path and every disposition enumeration (research_workflow.py, research_workflow_items.py, research_workflow_live.py, vocabulary.md, stages.md, templates) rather than only the filed line numbers.

    Route pinned — the TOOL gains deferred (the skill does not revert). Rationale: PR #488 deliberately promoted deferred to a first-class disposition because it carries semantics none of the four has (valid, not now, with a revisit trigger), and receipts are immutable — forcing workers to mislabel a deferral as acknowledged/declined permanently falsifies the record and loses the trigger. The tool side is the small side: one validation set plus trigger enforcement.

    Fix scope (enqueued as a follow-up small_fix task):

    1. scripts/research_workflow.py: accept deferred in the check validation set; for deferred entries, require the reason to carry the Revisit when: trigger receipts.md mandates.
    2. Audit and align every other disposition enumeration in the tool and planning docs (records.md incl. its line-301 limitation note, vocabulary.md, stages.md, templates, research_workflow_items.py, research_workflow_live.py).
    3. A test/fixture exercising every disposition the skill names — including deferred with a valid trigger, and deferred without one failing — through check --require-resolved.
    4. Out of scope: changing the skill's five dispositions; the scanned record gap noted in records.md (separate concern, not filed here).
  6. 14 remaining items

  7. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked — PR opened, awaiting CI

  8. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    queue/claimedQueue worker lifecycle state
    and removed
    queue/claimedQueue worker lifecycle state
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 1, 2026
  9. added a commit that references this issue on Nov 1, 2026
  10. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done — fixed & merged

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

effort/sSmall: expected under 2 hours of workkind/bugSomething isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/humanFiled directly by a humantask/small-fixQueue packet kind: bounded fix with reproduction and targeted tests

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions