Skip to content

planning:design-handoff lists ADR candidates without applying the admission test to each #7659

Closed

Description

@kyle-sexton

Problem

/planning:design-handoff's handoff summary asks for "ADR candidates: each resolved decision that is costly to undo, not obvious from the code, and chosen over a live alternative." In a real run the model listed four candidates without applying that test to each one. When the user asked whether they were real, two failed on inspection:

The two that held up (a security boundary for tunnel exposure; a terms-of-use policy for who may drive Claude) were mixed in with the two that did not, so the user had to do the filtering.

Cause (judgment): the bullet states the three criteria as a description of candidates, not as a test the model must show. Nothing asks for per-criterion evidence or allows "none" as an answer, so the step reads as "list some decisions".

Proposed change

In the handoff summary's ADR-candidates step:

  • For each candidate, state the three criteria as pass/fail with one line of evidence each (what makes it costly to undo; why the code does not show it; the live alternative that was rejected, from design-threads.md).
  • List only candidates that pass all three; "None" is a valid and expected outcome.
  • Optionally list near-misses under a separate line, each naming the criterion it fails.

Acceptance

  • An eval case where the design threads hold one ADR-worthy decision and two routine ones: the handoff lists exactly one candidate, with evidence for all three criteria, and names the other two as failing.
  • An eval case with no ADR-worthy decision: the handoff says "None".
  • Existing design-handoff evals show no loss.

No related issue: found while running /planning:design-handoff on a planning-plugin restructure.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 16, 2026
  2. github-actions commented on Oct 16, 2026

    @github-actions
    Contributor

    Thanks for the detailed report. Understood: /planning:design-handoff's ADR-candidates step states the three admission criteria (costly to undo, not obvious from the code, chosen over a live alternative) as a description rather than a per-candidate pass/fail test, so the model lists candidates without filtering out ones that fail the test — as happened with the two false positives you caught. The proposed fix (per-criterion evidence, "None" as a valid outcome, optional near-misses) and the two acceptance eval cases look like enough to scope a fix from.

    I didn't find an existing open issue covering this exact gap; #3817 touches design-handoff's completeness check but is closed and addresses a different aspect. Nothing else appears missing from the report.

    Automated triage. A maintainer reviews it.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 16, 2026
  4. kyle-sexton commented on Oct 18, 2026

    @kyle-sexton
    MemberAuthor

    Agent Brief

    Type: Bug
    Summary: Make /planning:design-handoff test each ADR candidate against its three criteria and allow 'None'.

    Current behavior:
    The handoff summary lists 'ADR candidates' as each resolved decision that is costly to undo, not obvious from the code, and chosen over a live alternative. The criteria read as a description, so a run lists routine decisions beside real ones and the user filters them.

    Desired behavior:
    For each candidate the summary gives the three criteria as pass or fail with one line of evidence each: what makes it costly to undo, why the code does not show it, and the rejected live alternative from design-threads.md. Only candidates passing all three are listed; 'None' is a valid outcome. Near-misses may be listed on a separate line, each naming the criterion it fails. The offer to invoke /architecture:record-decision applies only to listed candidates.

    Key interfaces:

    • The design-handoff summary's ADR-candidates step.
    • Its eval set (evals.json) and fixtures.

    Acceptance criteria:

    • The ADR-candidates step requires per-criterion pass/fail evidence and allows 'None' (read from the diff).
    • A new eval case with a fixture holding one ADR-worthy decision and two routine ones expects exactly one listed candidate with evidence for all three criteria and the other two named as failing.
    • A new eval case with a fixture holding no ADR-worthy decision expects the handoff to say 'None'.
    • A planning changelog fragment is added and scripts/check-changelog-fragments.sh exits 0.

    Out of scope:

    • Running the evals and the no-loss check on existing cases (paid eval run, after merge).
    • /architecture:record-decision and the interview skill.

    This was generated by AI during backlog shaping. Held, not admitted: this brief is drafted and checked, but the issue lane would stop on it today. It is admitted, by adding agent-ready, once the lane can run the skill-quality check scripts (Automation Lanes' PR #7912). Held under the owner's 2026-10-18 lane-narrowing course correction.

  5. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    and removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions