Skip to content

feat(planning): every /planning:interview recommendation shows its evidence, not bare judgment #6728

Description

@kyle-sexton

Problem

/planning:interview allows Basis: judgment on a non-consequential recommendation ("When no codebase signal exists, a non-consequential question may be recommended from conventions, labeled Basis: judgment", skills/interview/SKILL.md "Recommended answers"). In practice that lets a recommendation arrive with no facts behind it, and the operator cannot see why it fits them.

Requested behavior

Every recommendation carries the facts it rests on and how they combine:

  • each fact with its source: a file:line, a URL fetched this session, a session-transcript finding, or tool output
  • one line on why those facts together lead to this answer for this user
  • when only judgment is available, research before asking, or ask with the recommendation withheld and name the evidence that would settle it (the existing Withheld: shape)

Acceptance criteria

  • Basis: judgment alone is no longer a valid basis for an interview recommendation
  • The per-question shape in SKILL.md and context/recommendation-basis.md shows an evidence list plus a one-line inference
  • The page surface's basis field carries the same evidence list

🤖 Generated with Claude Code

https://claude.ai/code/session_01LGDKQK7XJf6kz6EZDzbKwM

Done when

Scope per the 2026-10-13 decision record: interview files only; the shared context/recommendation-basis.md stays unchanged; the attended digest-recompute gate is gone, so the run recomputes both pinned digests itself.

  • git grep -n 'Basis: judgment' -- plugins/planning/skills/interview/SKILL.md plugins/planning/skills/interview/context/loop.md prints nothing.
  • The per-question shape in plugins/planning/skills/interview/SKILL.md shows an evidence list (each fact with its source) plus a one-line inference, and a question with only judgment available is researched first or asked with a Withheld: line.
  • git diff --quiet origin/main -- plugins/planning/context/recommendation-basis.md exits 0.
  • bash plugins/planning/tests/interview-defenses.test.sh exits 0 with the Stance and loop.md Step 2 digests recomputed.
  • bash plugins/skill-quality/scripts/check-skill.sh plugins/planning/skills exits 0.

Activity

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

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Small
    Complexity: Medium
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Decision recorded. The owner approved applying independently verified recommendations on 2026-10-12.

    • Drop Basis: judgment as a valid interview basis, replacing it with an evidence list plus a one-line inference? → Yes, as the issue asks
    • Can the Stance-section digest in interview-defenses.test.sh be recomputed in an attended session for this change? → Yes, attended recompute
    • Drop Basis: judgment as a valid interview basis? → Yes for /planning:interview only: tighten SKILL.md:175 and loop.md:67 to an evidence list plus a one-line inference, and leave the shared context/recommendation-basis.md unchanged.
      [quote truncated; the full decision is at the link]

    #6728 (comment)

    That decision settles the open questions. I read the work as follows. Interview recommendations must list their facts with sources plus a one-line inference. Basis: judgment goes away in the interview skill files only. The shared recommendation-basis file stays unchanged. The two pinned digests are recomputed in the run, as the Done-when section says.

    Automated triage, applied by the lanes App.

  3. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 10, 2026
  4. kyle-sexton commented on Oct 11, 2026

    @kyle-sexton
    MemberAuthor

    Handoff note for whoever picks this up next. The overnight Claude run has stopped, and Kyle is moving issue work to Cursor.

    Where a branch is listed it is pushed, so it can be taken over as is. A draft PR shows a red ci-status by design until it is marked ready.


    Generated by Claude Code

  5. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 12, 2026
  6. kyle-sexton commented on Oct 13, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded. The owner approved applying independently verified recommendations on 2026-10-12.

    • Drop Basis: judgment as a valid interview basis, replacing it with an evidence list plus a one-line inference? → Yes, as the issue asks
      Basis: plugins/planning/skills/interview/SKILL.md:175 (current judgment allowance); plugins/planning/skills/interview/context/loop.md:67 (Withheld: line); AGENTS.md Team standards (judgment allowed)
    • Can the Stance-section digest in interview-defenses.test.sh be recomputed in an attended session for this change? → Yes, attended recompute
      Basis: fix(planning): word interview questions so yes accepts the recommendation #7036 body ("none of the six with-arm traces read it"; maintainer approved recomputing the digest, attended, 2026-10-11)
    • Drop Basis: judgment as a valid interview basis? → Yes for /planning:interview only: tighten SKILL.md:175 and loop.md:67 to an evidence list plus a one-line inference, and leave the shared context/recommendation-basis.md unchanged. Changing the shared contract is a separate cross-plugin convention decision. (added by verification)
      Basis: scripts/cross-plugin-source-registry.txt:116-121; plugins/planning/context/recommendation-basis.md:25-31; md5 identical across planning/debugging/work-items copies (origin/main)
    • Digest recompute scope → Attended recompute of both the SKILL.md Stance digest and the loop.md Step 2 digest. (added by verification)
      Basis: plugins/planning/tests/interview-defenses.test.sh:498-502 and :634 (origin/main)

    The owner asks that interview recommendations always list their facts and a one-line inference, ending bare Basis: judgment. No PR; the 2026-10-11 handoff skipped it for lack of a recorded decision, and the rule sits in the digest-pinned Stance section that #7036 also edited.

    Verification notes:

    • Q1 'Yes, as the issue asks' includes the issue's acceptance criterion to change context/recommendation-basis.md. That file is a synced cross-plugin copy (13 plugins ship it, byte-identical; canonical plugins/discipline/context/recommendation-basis.md; drift-checked via scripts/cross-plugin-source-registry.txt:116-121), and its three outcomes include judgment (lines 25-31), matching the org convention and team standards. Editing planning's copy fails the drift check; editing the canonical changes 13 plugins' contract, which is cross-plugin, not C3. The record's own 'why' (a stricter interview rule does not contradict the floor) only holds if the change stays in interview files.
    • Q2 names only the Stance digest. loop.md:67 (Frontier rounds, item 4, which also permits Basis: judgment) sits inside the pinned 'loop.md Step 2 section' (interview-defenses.test.sh:634), so that digest needs an attended recompute too.
    • SKILL.md:175 is inside the pinned Stance section (SKILL.md:90 to 315; test.sh:498-502), as the record says.

    Verified by an independent fresh-context check (refuted, risk low): gh issue view 6728 (handoff 2026-10-11: skipped, no owner decision); plugins/planning/skills/interview/SKILL.md:170-178 and section headings; plugins/planning/skills/interview/context/loop.md:62-70 and headings; plugins/planning/context/recommendation-basis.md; scripts/cross-plugin-source-registry.txt:116-121; plugins/planning/tests/interview-defenses.test.sh pin_section list

    Admission to an agent lane stays with the work-class rules and owner ratification.

  7. removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 24, 2026
  8. kyle-sexton commented on Oct 24, 2026

    @kyle-sexton
    MemberAuthor

    Released by the owner's HITL session (2026-10-24, C12): it waited only on a removed gate. Intake triage re-runs on it to set its fields, then admission takes it.

  9. github-actions commented on Oct 25, 2026

    @github-actions
    Contributor

    The triage sweep dispatched intake triage for this issue (attempt 1 of 2).

  10. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    admission-deferredReady for the issue lane; work-unblock admits it when queued work is under the queued cap
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    admission-deferredReady for the issue lane; work-unblock admits it when queued work is under the queued cap
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 25, 2026
  11. melodic-automation-lanes commented on Oct 25, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped partway through this issue and needs a person.

    Why, in the run's own words:

    The interview text change is finished, but two sha256 digests in plugins/planning/tests/interview-defenses.test.sh now fail: 'SKILL.md Stance section is unchanged' and 'loop.md Step 2 section is unchanged'. Those digests have to be re-pinned before the test passes. The test file says recomputing a pin is attended-only (an unattended run reports the pin and stops), and plugins/planning/tests/repin.sh refuses to write unless stdin and stdout are a terminal. This lane also cannot run bash or sha256sum on the checkout. A person should run, in their own terminal: bash plugins/planning/tests/repin.sh 'SKILL.md Stance section is unchanged' 'Every recommendation shows an evidence list and an Inference line; a bare judgment basis is no longer valid' and bash plugins/planning/tests/repin.sh 'loop.md Step 2 section is unchanged' 'Frontier-rounds step 4 requires the evidence list and Inference line; no convention-only recommending'. The issue body's 'Done when' says the attended digest-recompute gate is gone and the run recomputes both digests itself. That gate is still in the test file and in repin.sh, and issue text cannot waive a gate, so I'm reporting that claim as a finding and did not act on it.

    What the run says it did not do:

    • bash plugins/planning/tests/interview-defenses.test.sh: not run (this lane cannot run bash on the checkout). It will fail on the two digest pins named in reason until a person re-pins them with repin.sh, which is attended-only by the test file's own rule.
    • bash plugins/skill-quality/scripts/check-skill.sh plugins/planning/skills: not run. This lane cannot run bash on the checkout, and check-affected skipped changed-skills because it runs the checked tree's own code.
    • CI-only checks (purged-em-dashes, line-citations, evals-quality and the rest that check-affected lists as CI only) are left to the PR's CI. New em dashes are only inside the SKILL.md per-question code fence.

    Partial work is on the branch work-resolve-issue/issue-6728-40195223906-1. A retry continues from it while it is not behind the default branch, and otherwise starts fresh from the default branch; delete the branch first to always start fresh.

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40195223906

    To retry, remove needs-human and add agent-ready again.

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

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions