Skip to content

feat: intake reconcile mode — flag shipped-but-stale backlog prompts #52

Description

@Jammy2211

Overview

Adds intake reconcile — the fourth backlog mode (census → dashboard → formalise → reconcile). Motivation: a prompt's Status: header is not a reliable completeness signal — formalise preserves an existing Status: verbatim, so shipped work can still read Status: planned (found on the PyAutoHeart M0–M5 release-validation cluster, all shipped via PyAutoHeart #23#26 yet still planned). Reconcile makes the manual audit that caught this repeatable: it cross-references every backlog prompt against Mind-local shipped-state records and prints a confidence-ranked suspect list for a human to retire. It is always read-only — it never moves, deletes, or edits a file.

Plan

  • intake reconcile [prefix] — read-only even under --apply (stderr note); --json supported.
  • Four Mind-local signals per backlog prompt:
    • referenced — prompt path/basename appears in a complete.md entry (prompt: / Restore prompt: / follow-up-prompt: lines); matching line shown verbatim; follow-up/restore/parked/remain wording downgrades to likely-open.
    • issued-duplicate — same basename already exists in issued/.
    • topic-overlap — token-Jaccard between prompt basename+title and complete.md section headers above a tuned threshold.
    • stale-status — hand-set Status: values (e.g. planned) that formalise deliberately preserves.
  • Ranked output: referenced / issued-duplicate first, then topic-overlap by score, then stale-status-only; footer notes that retiring stays human and target-repo git log / merged PRs are the final verification (out of scope for v1).
  • Docs: intake AGENTS.md modes table, INTAKE_TAXONOMY.md §6, skills/intake/intake.md.
Detailed implementation plan

Affected Repositories

  • PyAutoBrain (primary — agent code + docs; PyAutoMind is read, not written)

Branch Survey

Repository Current Branch Dirty?
./PyAutoBrain main clean
./PyAutoMind main clean

Suggested branch: feature/intake-reconcile

Implementation Steps

  1. agents/conductors/intake/_intake.py_tokens(s) helper (word tokens minus stopwords) + reconcile(mind, prefix=""): reuse census() records; per record collect findings from the four signals; parse complete.md once (section headers via ^## , path-ref lines via substring on path variants: full path, path sans work-type folder, basename); issued/ basenames set; confidence ranking referenced/issued-duplicate → topic-overlap (score desc) → stale-status-only.
  2. emit_reconcile(res) — ranked human report with evidence lines; footer: "retiring is human; verify against the target repo's git log / merged PRs before moving to issued/".
  3. main()reconcile subcommand with optional path-prefix; read-only always (--apply → stderr note, still read-only); --json emits the full result.
  4. intake.shreconcile in the known-subcommand case + help header (adjust the help sed range).
  5. Docs — modes table in AGENTS.md, INTAKE_TAXONOMY.md §6 extension, skills/intake/intake.md backlog-view bullet.

Key Files

Testing

Fixture Mind with synthetic complete.md + issued/ exercising each signal independently (referenced via prompt:, follow-up-downgraded reference, issued duplicate, topic overlap, stale status, clean prompt → no finding). Live run expectation from the manual audit: 3 known follow-up references, ~7 topic overlaps, copilot_auto_review stale-status — all correctly surfaced for human review. Regression on classify/ideas/census/dashboard/formalise; bash -n + py_compile.

Original Prompt

Click to expand starting prompt

Add a reconcile mode to the PyAutoBrain intake agent

Type: feature
Target: PyAutoBrain
Repos:

  • PyAutoBrain
  • PyAutoMind
    Difficulty: small
    Autonomy: supervised
    Priority: low
    Status: formalised

Add a reconcile mode to the PyAutoBrain intake agent. It audits the PyAutoMind backlog for prompts describing already-shipped work whose status has gone stale, because a prompt's Status header is not a reliable completeness signal (formalise preserves an existing Status verbatim, so a shipped task can still read Status: planned). For each backlog prompt, cross-reference against complete.md prompt-path references and section headers, issued/ basenames, and optionally the target repo git log / merged PRs, then report a confidence-ranked list of suspected-complete prompts for a human to retire — never move or delete files automatically. Complements census/dashboard/formalise. Touches intake agent code in PyAutoBrain and reads PyAutoMind.

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