Skip to content

feat(planning): wayfind absorbs the wayfinder decisions and accept list - #12524

Closed
melodic-automation-lanes[bot] wants to merge 2 commits into
mainfrom
work-resolve-issue/issue-12477-41523574219-1
Closed

melodic-automation-lanes[bot] wants to merge 2 commits into
mainfrom
work-resolve-issue/issue-12477-41523574219-1

Conversation

@melodic-automation-lanes

Copy link
Copy Markdown
Contributor

Refs: #12477

Summary

Opened by the work-resolve-issue lane. The run's own summary:

/planning:wayfind now follows the owner's flow, research, shared-files and picking decisions (Q531-Q533, D108) and every item on the Topic 10 "Wayfind" accept list. Two new settings in docs/conventions/planning.yaml back them: wayfind_research_start (default auto) and wayfind_hitl_concurrency (default 1). The interview size threshold (done-when item 2) is left open because its default must come from measured past interviews, and that data is not reachable from this lane. Means chosen on evidence: the Q533 'context branch' is the existing dossier branch (source-control dossier_branch_prefix, which /work-items:work already names for an owning item's docs and notes), so the map gets one dossier/<key>-<slug> branch, linked from Notes and deleted on close. The Q532 'in CI a label starts it' uses the labels chart sets with a human present (wayfind: research without needs-human), so no new label has to be provisioned. A PLAN destination now closes to /work-items:decompose, since Q531 limits closure to prd, decompose or work.

Conflicts with Matt's wayfinder (upstream SKILL.md and docs/engineering/wayfinder.md at main, read 2026-11-02), each with its disposition and reason:

  1. Upstream is user-invoked only (disable-model-invocation: true). Kept ours: model-invoked, because the interview names wayfind as an escalation the model suggests (Q531).
  2. Upstream lets Notes override 'plan by default'. Rejected: accept item 'Keep no Notes override of plan, don't do'.
  3. Upstream maps and tickets carry only wayfinder: labels, never a triage label. Kept ours: the container label shared with decompose, plus needs-human, which keeps human items off every autonomous frontier (D108: one readiness engine).
  4. Upstream ticket types are research/prototype/grilling/task, with grilling the default. Kept ours: research/interview/design/prototype/task, because of the interview vocabulary rule and because design items route to /planning:design.
  5. Upstream sets HITL or AFK by ticket type. Changed to D108: needs-human only for intent or vision questions, on any type.
  6. Upstream sizes a ticket to a 100K-token session. Rejected the figure: one session's work, with no token figure (accept item).
  7. Upstream chart spawns research subagents for every new research ticket. Changed to Q532: auto-start only when research is the only next step, otherwise confirm in interactive sessions, and labels start it in CI (setting wayfind_research_start).
  8. Upstream pushes a research/<name> branch per research ticket, with no PR. Changed to Q533: one dossier branch per map, linked from the issue and deleted when the map closes.
  9. Upstream falls back to a local-markdown tracker or its setup skill. Kept ours: wayfind needs the work-items seam and stops without it (ADR 0060 provider abstraction; the existing row rejects upstream's tracker seam).
  10. Upstream chart grills breadth-first to name the destination. Changed to Q531: chart reads an interview ledger, or offers /planning:i

Remaining work

  • /planning:interview suggests wayfind past a size threshold: add the threshold as a setting resolved through the convention home (#7571), with its default taken from a recorded measurement of past interviews (rounds or open questions of efforts that did and did not span more than one session); the PR

Not verified

  • Done-when item 2 (/planning:interview suggests wayfind past a size threshold whose default comes from a recorded measurement of past interviews) is not implemented. The measurement needs past interview ledgers and session records showing which efforts spanned more than one session. Those live in own
  • The wayfind eval cases (skill evals and the wayfind-closed-plan-destination contract case) were not executed: this lane has no eval runner. No before/after eval run backs the changed behavior. The changes replace behavior per the owner's decisions rather than cutting it, but a person or CI should ru
  • 'decision map' remains in the planning plugin.json description and the wayfind metadata summary. Both feed generated catalogs, one under .claude/skills, which this lane cannot write, so changing them would desync the generators. It also remains outside the wayfind files: interview/context/compositio
  • docs/upstream/mattpocock-skills.md wayfinder row was not updated with the new dispositions (one dossier branch per map supersedes part of the research/<name> rejection reason; the conflict list above). It is a separate area, left for the upstream re-audit.
  • Tidy not run: the change is over the tidy cutoffs (12 changed files including the fragment, about 540 changed lines, against limits of 10 files and 300 lines).
  • check-changed-skills warnings left: SKILL.md is about 5646 tokens, over the 5000 router cap; the description is 468 chars, over the 419 warn level.
  • Untracked dotfiles in the checkout root (.bashrc, .bash_profile, .gitconfig, .idea, .mcp.json, .profile, .ripgreprc, .vscode, .zprofile, .zshrc) were not created by this run and are not part of the change.

Fix

  • plugins/planning/skills/wayfind/SKILL.md: rewritten around the decisions. New sections: Flow, Settings, Readiness, Shared files, Refer by name / link by URL. Chart gains an interview offer and a destination-confirmation step, and wires edges in a second pass. Work loads the map at low resolution, pi
  • plugins/planning/skills/wayfind/context/map-anatomy.md: Destination template (confirmed, bounded, five kinds); Notes lists the skills to consult and the dossier branch; type table without a mode column, plus a needs-human rule for intent or vision; URL-linked index lines; invariant 4 covers the doss
  • plugins/planning/skills/wayfind/context/tracker-mechanics.md: absolute-URL rule; items created without cross-references, then a second pass for edges and references; frontier read at low resolution in creation order; HITL slot count before a claim; new map-close summary.
  • plugins/planning/schemas/planning.schema.json: wayfind_research_start (auto|confirm, default auto) and wayfind_hitl_concurrency (integer >= 1, default 1).
  • plugins/planning/reference/config.md: key rows for the two settings, with their basis.
  • plugins/planning/README.md: wayfind row and intro use 'map of decision items' and the new closure targets.
  • plugins/planning/skills/wayfind/evals/evals.json: cases 1, 6 and 10 made explicit chart runs; case 10 expects the preloaded interview offer; cases 3 and 11 confirm a destination; 'decision map' wording removed; new cases 12-17 (bare run proposes chart, destination confirmed first, second-pass real-i
  • plugins/planning/evals/wayfind-closed-plan-destination/prompt.md: expects /work-items:decompose for a plan destination.
  • plugins/planning/evals/wayfind-closed-plan-destination/graders/names-decompose-step.md (renamed from names-plan-step.md): regex now matches /work-items:decompose or 'decompose the map into', with the same negation guard.
  • plugins/planning/evals/wayfind-closed-plan-destination/samples/names-decompose-step.json (renamed from names-plan-step.json): pass and fail samples for the new grader, including the old design-then-plan hand-off as a fail.
  • .changes/planning/work-resolve-issue-issue-12477-41523574219-1-ef8a5f4e.md: minor-bump fragment.

Verification

The runner ran each check from the base copy against 3bb5c6a:

  • scripts/check-changelog-fragments.sh --check: passed
  • scripts/check-changed-skills.sh --merge-base: passed

The run reports:

  • read https: //raw.githubusercontent.com/mattpocock/skills/main/skills/engineering/wayfinder/SKILL.md: upstream wayfinder rules (user-invoked only; wayfinder:map and wayfinder:<type> labels only; types research/prototype/grilling/task; 100K-token ticket size; Notes may override plan-by-default;
  • read https: //raw.githubusercontent.com/mattpocock/skills/main/docs/engineering/wayfinder.md: wayfinder is for multi-session planning; a cleared map goes to to-spec, then to-tickets; scope the map to a bounded destination; prototype early
  • check-changelog-fragments: all 142 fragments valid
  • check-changed-skills: wayfind PASS, 0 errors, 6 warnings (size and growth warnings, no Gotchas surface)
  • check-affected: 11 passed, 7 skipped, after fixing one validate-plugins failure (spaced pipe in argument-hint)
  • check-evals-quality on plugins/planning/skills/wayfind/evals/evals.json: PASS, 0 warnings
  • fresh-context review subagent over the whole diff: 11 findings. Fixed: eval prompts the new router and interview offer would block, seed item created before destination confirmation, bare #<n> in tracker text, research counted in the HITL cap, named-item handling, needs-human scope wording, Q5
  • The lane run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41523574219

Left out: the items under Not verified.

Related

#12477

Lane-Activity: work-resolve-issue/resolve-issue
@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

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

Security review: PR #12524, incremental since 3bb5c6af

No security issues found.

I read every hunk of the incremental diff in both files in scope:

  • plugins/planning/skills/wayfind/SKILL.md: the "No interview yet" bullet in chart step 1 now comes after the no-fog bail-out instead of before it. It also gains the condition "only once the bail-out has not fired". The text of the offer is otherwise the same: it still offers /planning:interview with a preload and charts on a "no" only when the user still asks for a map.
  • plugins/planning/skills/wayfind/evals/evals.json: case 6 now expects the request to go to /work-items:decompose. It also expects that /planning:interview is not offered first, because the bail-out fires before the offer.

Neither file matches a listed trusted path, and no plugin manifest changed, so there are no manifest items.

What I checked

  • Instruction-surface lens. The change narrows when the interview offer fires. That offer guides workflow; it does not protect anything. It does not stop an agent from acting for the user or from taking a destructive, credentialed or outward-facing action. The rules the earlier round relied on are untouched by this delta: "Never resolve a HITL item by standing in for the human", filtering needs-human items out of the non-interactive frontier, and chart refusing non-interactive sessions. Nothing removed matches a protected class.
  • Trust boundaries. The delta adds no token scope, trusted actor, untrusted-text path into a credentialed lane, or new skill invocation. /planning:interview was already invoked from this bullet before the change.
  • Embedded text. The PR context file holds no directive aimed at this lane.
  • Prior findings. This lane's only earlier post is a summary with no findings, so nothing carries over. The round cap does not apply (0 of 3 rounds).

Spend (not a finding): none. The change edits only skill text and an eval case.

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: 1 inline finding(s) on 3bb5c6af5b35e6a477f35324478bd5c116b04ab0; the summary is in this lane's pull request comment.

claude-lane: claude-review

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

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

Code review (incremental): PR #12524, from 3bb5c6af to c62c93e5

Scope: I read the whole incremental change in both files in scope: plugins/planning/skills/wayfind/SKILL.md and plugins/planning/skills/wayfind/evals/evals.json. The other 9 changed files have not changed since 3bb5c6af, and the earlier round reviewed them. This is round 2 of a cap of 3, so the cap does not apply. No plugin manifest changed in this increment.

Earlier finding is fixed (discussion_r4448391018): it said the no-fog bail-out no longer ran before the interview offer.

  • SKILL.md: the "No interview yet" bullet now comes after the no-fog bail-out (chart step 1, L155-159). It also states its own guard: "only once the bail-out has not fired". Both the reading order and the stated rule now put the bail-out first.
  • Eval case 6: its expectation is narrowed to /work-items:decompose (or /work-items). A new check says the skill must not offer /planning:interview first, so an eval now covers the ordering.
  • Eval case 10 (new-effort-goes-to-interview-first) still holds under the new order. Its prompt ("a rewrite of our search indexing pipeline… it just feels big") is both too big and foggy, so the bail-out does not fire and the interview offer is still reached.

No new findings.

What I did and did not check: I checked the change by reading the files only; I ran no evals or checks. The PR body says check-changelog-fragments and check-changed-skills passed; I did not run them, so that claim is unverified.

Usage: this increment adds one expectation to an existing eval case. Running the evals spends prepaid model usage only. No hold.

@melodic-automation-lanes

melodic-automation-lanes Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor Author

Unattended merge: native auto-merge leaves this pull request unarmed at head c62c93e5a61368cf90885658e9e0958d8c972b11. The lanes clear this reason on their own; the next scheduled run judges it again.

a pr-unblock lane stopped its head (pr-unblock/fix-ci is failure), which ci-status fails in the
  merge queue

Lane-Activity: pr-unblock/address-feedback
Lane-Thread: PRRT_kwDOTCGFQM6y4xIA
@melodic-automation-lanes

Copy link
Copy Markdown
Contributor Author

pr-unblock / address-feedback finished round 1 of max 4 on c62c93e.

@melodic-automation-lanes

melodic-automation-lanes Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor Author

The pr-unblock lane stopped fix-ci on this pull request: the lane could fix a failing check only by weakening a required check, and the head has no fresh fixer round left (it ran one, or an earlier lane stop already spent its same-head retry), so a session builder takes it. The lane labels it needs-session for a session builder, who makes the change this lane cannot, and the run ends in a failing pr-unblock/fix-ci status on the head the lane gated.

When a retry on this head can change the outcome, the lane runs one on its own, up to its per-head cap, and edits this comment if it stops again; a run that does not stop clears the status. When no retry can (a review thread the lane does not take or settle, or a failing check after the retries are spent), a person resolves the threads or gets the checks green, then dispatches the workflow below: that run finds the cause gone and clears the status. On a pull request the lanes App opened, the dispatchers start that run once per stop; on any other, a person does. A new commit to the branch starts clean.

To run it again on this head now, dispatch the pr-unblock workflow:

gh workflow run pr-unblock.yml -R melodic-software/claude-code-plugins -f pr-number=12524 -f activity=fix-ci

@melodic-automation-lanes melodic-automation-lanes Bot added the needs-session A pr-unblock stop a session builder takes: a change the lane cannot make. Not an owner stop. label Nov 2, 2026
@kyle-sexton kyle-sexton added the do-not-merge Hard merge gate: do not merge while applied. label Nov 3, 2026
@kyle-sexton

Copy link
Copy Markdown
Member

Hold: superseded by #12574, an owner-login replacement that merges this head into main and fixes the next-graph stage-skip lint failure with a declared wayfind -> decompose edge (owner Q531, #12477). Releases when: #12574 merges, then this PR is closed.

@kyle-sexton

Copy link
Copy Markdown
Member

Superseded by #12574, which merged with this branch's changes and the review fixes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge Hard merge gate: do not merge while applied. needs-session A pr-unblock stop a session builder takes: a change the lane cannot make. Not an owner stop.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant