Repository navigation
Description
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 toacknowledgedordeferred. - Its
references/receipts.md("The five dispositions", :5) definesdeferredat :15 (with a mandatoryRevisit 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:1040restrictsresolve-note --dispositionto["incorporated", "acknowledged", "declined", "superseded"], and the receipt validation incheckaccepts 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.mdcovers the other not-yet-implemented commands these skills rely on (lease,status --live,item,ids,render, …) but has no fallback for adeferreddisposition.
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
deferredend to end (resolve-notechoices, thecheckvalidation set,planning/workflow/records.mdif it enumerates dispositions, and tests), including theRevisit when:reason convention; or - the skill and
receipts.mdrevert 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).
- the tool gains
- Every disposition named in the
notes-reconcileskill can be written withresolve-noteand then passescheck --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.mdgains an interim fallback entry fordeferredso an S3 worker is never without a sanctioned path.
Activity
dezren39 commentedon Oct 26, 2026
Intake review
.agents/skills/notes-reconcile/SKILL.md(:3, :40) still prescribes five dispositions includingdeferred, whilescripts/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:31already definesDISPOSITIONSwith all five — the live path and the packagecheckpath disagree, which sharpens the fix: unify on the five inresearch_workflow.py(and theresolve-notechoices) rather than inventing a third list.deferredreceipts carry a mandatoryRevisit when:trigger per the skill'sreceipts.md; validation should require it for deferred entries so they don't become a silent drop box.deferredto the check-side set + CLI choices, add a fixture exercising each of the five throughresolve-note→check --require-resolved, and (per the last acceptance criterion) add the interimtool-fallbacks.mdentry 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, opencodec792e04fe0).dezren39 commentedon Nov 1, 2026
🤖 Agent note · picked up
deferredreceipt disposition that research_workflow.py rejects; route or close with evidence.dezren39 commentedon Nov 1, 2026
🤖 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.mdstill prescribes five dispositions — frontmatter (line 3) and step 4 (line 40) listincorporated, acknowledged, declined, deferred, superseded, and direct unowned-file notes toacknowledgedordeferred.references/receipts.md("The five dispositions") still definesdeferredwith the mandatoryRevisit when: <event>reason trigger.scripts/research_workflow.pycheck_packagevalidates each resolution's disposition against the four-set{"incorporated", "acknowledged", "declined", "superseded"}(~line 856) and fails anything else withinvalid receiver disposition/target/reason. A package containing a skill-prescribeddeferredreceipt can never passcheck --require-resolved— the skill's own step-5 done criterion.planning/workflow/records.md(~line 301) documents the gap as current tool behaviour: "deferredis not accepted and nothing recordsscanned." That is a limitation note, not a design ruling againstdeferred.resolve-notesubcommand (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 promoteddeferredto 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 asacknowledged/declinedpermanently 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):
scripts/research_workflow.py: acceptdeferredin the check validation set; fordeferredentries, require the reason to carry theRevisit when:trigger receipts.md mandates.deferredwith a valid trigger, anddeferredwithout one failing — throughcheck --require-resolved.scannedrecord gap noted in records.md (separate concern, not filed here).14 remaining items
dezren39 commentedon Nov 1, 2026
🤖 Agent note · parked — PR opened, awaiting CI
deferredaccepted in the check validation set (concept-file resolution blocks) with a mandatoryRevisit when:trigger in the reason, the same trigger enforced in the live receipt path (check_receipt— resolve-note writer + receipts reader), records.md limitation corrected, and tests for every disposition throughcheck --require-resolved(deferred with trigger passes on both paths; without a trigger it is refused/fails).queue/4813-492-deferred-disposition@e9bf4ae0f, laptop worktree~/git/fleet/4813)research_workflow.py checkok:true.Merge pull request #3289 from developing-today/queue/4813-492-deferre…
dezren39 commentedon Nov 1, 2026
🤖 Agent note · done — fixed & merged
id world forkCLI + provenance inspect (F12.2 remainder) (#556) #3291); the two failing push-event runs are the unrelated jules daily workflows.deferredis now accepted end to end with the mandatoryRevisit when:trigger enforced on both the check and live receipt paths.