Skip to content

feat(planning): interview points at wayfind past a measured question count - #12757

Merged
kyle-sexton merged 4 commits into
mainfrom
feat/12477-wayfind-threshold
Nov 3, 2026
Merged

kyle-sexton merged 4 commits into
mainfrom
feat/12477-wayfind-threshold

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

Closes #12477

session: lane-2

Summary

Finishes #12477: /planning:interview points at /planning:wayfind once its register holds more than wayfind_suggest_questions questions. #12574 delivered the first done-when item (the flow, research, shared-files and picking decisions, the accept list, and the conflict list with Matt's wayfinder).

Fix

  • Setting. wayfind_suggest_questions, default 27, resolved through the convention home (reference/config.md, schemas/planning.schema.json). It has no userConfig layer, like answer_audit_rounds.
  • Suggestion. skills/interview/context/routing.md gains the count check. It is a pointer: the interview asks its next question in the same message and starts nothing.
  • Eval. New case interview-wayfind-size-suggestion.

Verification

This change adds to the interview skill and cuts nothing, so the before/after eval requirement for skill-body cuts does not apply.

Measure: questions registered in an interview's first session, against whether the effort spanned more than one session (a later session continued the ledger, followed a handoff, or landed the PR).

Data: 26 efforts from local transcripts, 2026-09-27 to 2026-10-28: 17 multi-session and 9 single-session.

Result: the groups do not separate. Multi-session efforts ran 6 to 98 questions (median 32) and single-session 8 to 27 (median 14), AUC 0.80; other labels of "spanned" gave 0.64, 0.82 and 0.94.

Suggest at Multi-session reached Single-session reached Share of efforts
15 or more 15/17 4/9 73%
25 or more 11/17 3/9 54%
28 or more (chosen) 10/17 0/9 38%
50 or more 3/17 0/9 12%

Chosen value: 27, labeled judgment. It is the largest single-session count, so it errs toward not suggesting and misses 7 of 17 multi-session efforts by design. 0 of 9 is a small sample (exact 95% upper limit about 34%). No interview invoked wayfind in its own session, so this shows a span of sessions, not that wayfind would have helped. One operator, about one month.

Checks: static check-affected.sh passed; interview-defenses.test.sh PASS=178 FAIL=0; /evals:validate on plugins/planning/evals reported 0 FAIL. One Sonnet smoke run of the new case gave the count against the value, named /planning:wayfind chart, asked the next question in the same message and did not start wayfind; it was one run, not a measured pass. No paid measured pass ran.

Open locally: check-skill.sh plugins/planning/skills fails on the setup skill's setup-apply.test.sh on this host (96 failures, with or without this branch's schema and config; cause UNVERIFIED). This change does not touch that skill; CI's check-skills decides.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_01VQb9Pzf47aw4gsMAyk98Wn

kyle-sexton and others added 3 commits November 3, 2026 00:26
/planning:interview now suggests /planning:wayfind chart once, without
holding the round, when the ledger's register holds more questions than
wayfind_suggest_questions. The setting resolves through the convention
home with no userConfig layer. Its default of 27 is labeled judgment:
first-session question counts from 26 past efforts did not separate
those that spanned more than one session from those that did not, so it
sits at the largest single-session count and errs toward not suggesting.

This adds to the skill body and cuts nothing, so no before/after eval
pass applies. Eval case interview-wayfind-size-suggestion covers it.

Refs: #12477

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VQb9Pzf47aw4gsMAyk98Wn
A boundary where the context zone and the question count both fire gave
two answers. The count's pointer recommends nothing, so the workflow
recommendation stands beside it.

Refs: #12477

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VQb9Pzf47aw4gsMAyk98Wn
@kyle-sexton
kyle-sexton marked this pull request as ready for review November 3, 2026 06:18
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-03T06:19:59.327112Z 8264b1e Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review reviewed 9c3ff83a434aa93921ddfcaa616dc2d8da472912: read 4 of 4 changed file(s); 0 finding(s), 0 as inline comments.

Security review: PR #12757 (incremental, 8264b1e → 9c3ff83)

I found no security issues in this push.

I read every hunk of all 4 files on the incremental list:

  • plugins/planning/evals/interview-wayfind-size-suggestion/case.yaml (new). It names scaffold.sh as the case's scaffold script. It has no other fields.
  • plugins/planning/evals/interview-wayfind-size-suggestion/scaffold.sh (new). It is a fixed bash script: set -euo pipefail, a quoted heredoc (<<'MD', so nothing in it expands), and a seq 1 31 loop with printf. It writes one relative path, .work/billing-consolidation/interview-checklist.md, inside the eval's working directory. It reads no environment variables, arguments, network or outside input, so no injection or path-traversal surface exists.
  • plugins/planning/evals/interview-wayfind-size-suggestion/prompt.md. The prompt now points at the seeded ledger, and scaffold is added to the tags. allowed_tools stays [Read, Glob, Grep, Skill], so the tool grant is not widened.
  • plugins/planning/skills/interview/context/routing.md. Wording change only: the question-count trigger is described as a pointer, and the "recommend, never switch on your own" rule now names the fog and context-zone triggers.
    • Instruction-surface lens. "Never switch on your own" is kept. The count pointer still starts nothing. The changed rule only decides when the interview suggests another planning skill, and it protects nothing in a protected class: no destructive action, credentials, posting or permissions.
    • Register not consulted. I did not read the protected-class register (docs/contracts/instruction-exception-register/README.md). I judged the change by what breaks when the old rule is absent, and nothing does.

Other checks:

  • Trusted paths. No file in this push matches a trusted-path glob.
  • Trust controls. The push touches no trust control: not the trusted-trigger check, the token scope, the kill switch, the token broker, the merge holds or .github/actions/.
  • Plugin manifests. The push changes no plugin.json or marketplace.json, so no manifest lines apply.
  • Embedded text. The PR context file contains no instructions aimed at this lane.
  • Prior finding. This lane's earlier post had no line anchor and was a clean "no issues" summary, so nothing carries forward.

Spend: running the eval case (runs: 3, max_turns: 12, plus the scaffold step) uses prepaid API credit. That is not a hold.

critical-findings: 0

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 2 inline finding(s) on 8264b1e1f9115920ff5a1774f919d0453f89c399; the summary is in this lane's pull request comment.

claude-lane: claude-review

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

claude-review reviewed 9c3ff83a434aa93921ddfcaa616dc2d8da472912: read 4 of 4 changed file(s); 0 finding(s), 0 as inline comments.

Code review: PR #12757, incremental from 8264b1e1 to 9c3ff83a

No findings. I read every hunk of the 4 files this push changed:

  • plugins/planning/evals/interview-wayfind-size-suggestion/case.yaml
  • plugins/planning/evals/interview-wayfind-size-suggestion/prompt.md
  • plugins/planning/evals/interview-wayfind-size-suggestion/scaffold.sh
  • plugins/planning/skills/interview/context/routing.md

For context I also read the head copy of routing.md, the interview-discuss-sets-discussing case (the pattern the earlier finding pointed to), the checklist template, and the register checks in check-open-questions.sh.

Earlier findings from this lane

Both were resolved with an owner decision, and this push fixes each one.

  1. The pointer clashed with the trigger rules (routing.md). Fixed.
    • The lead-in now separates the two triggers from the pointer: "The first two triggers each have their own recommendation; the third is a pointer".
    • The closing paragraph names the fog and context-zone triggers, and "say nothing" now makes an exception for the question-count pointer.
    • The decline rule now reads "the other of those two triggers", which is no longer ambiguous.
    • This matches the bullet's own text: it "recommends nothing", and it is skipped once a wayfind recommendation has been made.
  2. The eval had no ledger file. Fixed.
    • case.yaml names scaffold.sh in the same shape as the existing scaffolded interview case.
    • The scaffold writes 31 ## Open-question register rows, and the prompt now resumes the interview from that ledger. The count the grader checks (31 against 27) now comes from the file the rule says to count.
    • The scaffold tag is added.
    • Q32 has no row yet, which fits routing.md's note that a new branch gets its row only when it is asked.
    • The scaffold's round labels (n % 6 + 1) cover rounds 1 to 6 with no gap, so they pass the --procedure contiguous-round check (check-open-questions.sh L1051-1062). The IDs Q1 to Q31 also run without a gap.

Closing issue #12477

The earlier review's notes still apply. This push makes the only test behind done-when 2 ("/planning:interview suggests wayfind past the size threshold") sturdier. The owner's report of a Sonnet smoke run against the scaffolded ledger is the owner's claim; I have not checked it.

Verification

I ran nothing; this lane has no shell.

No plugin manifest changed in this push, so there are no manifest lines. No embedded instructions were found in the PR context, settled threads, or prior findings.

Spend: this push does not change the eval case's cost. It is still 3 runs of up to 12 turns, paid from prepaid API credit, whenever the planning evals are run.

@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 3, 2026
Merged via the queue into main with commit 65c49f5 Nov 3, 2026
91 of 94 checks passed
@kyle-sexton
kyle-sexton deleted the feat/12477-wayfind-threshold branch November 3, 2026 08:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

planning: wayfind absorbs the wayfinder

1 participant