Repository navigation
fix(planning): interview page batch for eleven page issues - #7182
Draft
kyle-sexton wants to merge 12 commits into
Draft
kyle-sexton wants to merge 12 commits into
kyle-sexton wants to merge 12 commits into
Conversation
…viewed (#5801) A reply or revise that changes the recommendation now needs the revised alternatives or keepAlternatives (CLI --keep-alternatives), and is refused with neither. reply takes alternatives with rec, so an answer and a full revision land in one op. The history line records whether the alternatives were rewritten or kept. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
The Decide list's Rec row carried only the recommendation's first sentence, with the rest in a hover tooltip. It now shows the full text, unclamped, at desktop and phone widths; the Accept all list keeps its one-sentence preview. Adds the ui_page browser suite, which later page fixes extend. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…seen (#5916) A rec change with no why stored the fallback sentence as its reason, so the banner printed the phrase twice. It now stores revised: true (and the page reads old fallback data the same way). The full banner shows on the first open after the latest revision; later visits show a Revised chip with Previous kept, until the next revision. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…roup-order (#5914) revise takes group (CLI --group) to move a question between existing groups in place, logging a history line and warning on stale group summaries. A new group-order op reorders the groups; every id once. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
The Rec option now shows the whole recommendation, so the medium-width check that an option title clamps to two lines reads the first option that is not the Rec one. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…stion (#5922) The server returns upstreamStale, every stale ancestor nearest first with ties by id, derived per response and never written. The rail chip and the banner name those ids instead of the direct prerequisites; the banner links them and says what clears the state, and the dimmed row reads as waiting rather than locked. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…xt (#5917) The rail's "needs Qn" chips now sit in one wrapped row under the title, and a met prerequisite carries a check mark with an "answered" accessible label, so met and unmet differ by more than colour. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…nd count reviews (#5908) The stale banner words each prerequisite for its own case: "was decided after you answered this" when it had no decision before this answer, "changed" when an earlier decision was replaced. The header meter adds "N to review", the Review filter's own count, and opens that filter. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…endation is unchanged (#5910) A kept accept gets no Reconfirm row once the question's own recommendation was revised after it (a history line with pageSeq at or after the accept's seq, or a newer rev for a terminal record), so the user picks Rec with the revised text or another choice. The shortcut help and the page protocol say so. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…stale (#5909) A decision save compares the stale and upstream-pending sets before and after its refresh. When it made questions stale, the toast names them and counts what waits on them, the page selects the first in dependency order (switching Show to Review when the filter hides it), and n visits the others before the usual next-needing order. The ui_page phases 4 and 5 added here also cover #5908, #5910 and the two-level case of #5922. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…#5817) The Thread no longer drops the entry shown in the latest-reply box, so every Claude reply stays in time order next to the event it answers, and a reply in the same second as that event sorts after it. ui_page phases 6 and 7 ask, reply from the shell, ask again and reload. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
…ct box grows (#5913) The detail pane's body row has a 45% minimum and the answer panel scrolls inside the rest; grow() caps the note against the pane. ui_page phase 8 checks a 600-word note and an open conflict box at 1280x800 and fails on the previous layout (body share 0.25 and 0.06). The skipped browser check count is updated for the new ui_page phases. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
Contributor
Author
|
The lanes run once the PR is marked ready. That flip waits for Kyle, because it also starts the review lanes. Until then, the local runs listed under Verification in the PR body are the signal. Generated by Claude Code |
This was referenced Oct 11, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Kyle · project thread
Closes #5801
Closes #5815
Closes #5916
Closes #5914
Closes #5922
Closes #5917
Closes #5908
Closes #5910
Closes #5909
Closes #5817
Closes #5913
Refs: #5911 (not started: work stopped before it)
Summary
This is a batch of
/planning:interviewpage fixes. There is one commit per issue, and each commit subject names its issue. All changes are inplugins/planningand share one changelog fragment (bump: minor).replyorrevisecould change the recommendation and leave the alternatives unchecked.alternativesorkeepAlternatives: true(CLI--keep-alternatives). Otherwise it is refused.replyalso acceptsalternatives, and the history line recordsrewrittenorkept.whynow storesrevised: true. Once the user has opened the question since the revision, the banner shrinks to a "Revised" chip.revise --groupmoves a question in place and logs a history line. The newgroup-orderop reorders groups.upstreamStalefield that is never persisted. The banner links them with a reconfirm hint, and the row reads as waiting, not locked.aarms Rec instead.nvisits the rest first.Fix
round.pygainsrequire_alt_reviewandchecked_alts.op_replyandop_reviseuse them, and there is a new CLI flag. The ops and questions schemas are updated, along withsurface.mdandREADME.md. Existing rec-change call sites in tests and the harness now pass--keep-alternatives.choicesOfgives the Rec row the full recommendation text, and a CSS rule unclamps the Rec row. A follow-up test commit points the ui_a two-line clamp check at a non-Rec option.revisedstores thewhyortrue, and the schema allows a string or boolean. The page hasrecRev, a per-questionrevSeenin browser storage, and the.revchip.op_revisetakesgroupand checks it exists. It warns on stale group summaries. The newop_group_orderrequires every group id exactly once. The schema,surface.mdandREADME.mdare updated.server.py:derive_statesnow also returns stale ancestors per upstream-pending question (breadth-first, nearest first, ties by id).read_stateexposes them asupstreamStale.waitOn()helper feeds the chip and the banner, and a.qbtn.waitingstyle replaces the dim..needsrowwrapper and a.metmarkicon withrole="img"andaria-label.firstDecided()drives the per-prerequisite banner wording. A#revBtnmeter count uses the Review filter's predicate.reconfirmOfreturns null for a kept accept when a rec-change history line (pageSeq) is at or after the accept's seq, or has a newer rev for a terminal record. The shortcut help and thesurface.mdUpstream changed paragraph are updated.send()compares stale and upstream-pending sets before and after its refresh. It sorts the newly stale questions by dependency depth and switches the filter when needed.nextNeedingserves the queued stale questions first.historyOf, a reply in the same second as the event it answers now sorts after that event.main.detailrows areminmax(45%,1fr) minmax(0,auto).section.answerscrolls.grow()caps the note against the pane.Overlap with draft PR #7036 (
fix/6946-interview-yes-accepts-rec): none. That PR only touchesplugins/planning/skills/interview/SKILL.mdand its own.changesfragment, and this PR changes neither file.Verification
python3 -m unittest test_round test_schema test_serverpassed (401 tests, 1 skipped) after the planning: let Claude move a question to another group and set the group order #5914 commit. The newTestUpstreamStaleNamesTheCause(planning: name the stale ancestor, not the direct parents, when the interview page marks a question upstream-pending #5922) andTestRecChangeMarksUpstreamwere rerun after planning: name the stale ancestor, not the direct parents, when the interview page marks a question upstream-pending #5922. Later commits change only the page and its tests.scripts/run-ruff.sh format/checkis clean onplugins/planning/surface.node --checkpasses on the page script after each change.surface.test.shwas last run in full after planning: lay out multiple "needs" chips in one row and mark met prerequisites in text #5917 (before planning: say "decided after you answered" on a stale question and show the review count in the meter #5908): PASS=491, FAIL=2.rootandserver.pycontains the word "root". It fails the same way on pristine main (479/1), so it is an environment artifact.aria-labelicon.#thread, which the old de-duplicating filter removed.scripts/check-changelog-fragments.sh --checkand--check-required origin/mainboth pass.TMPDIR=/tmp/claude-0/ivs.Related
needs-human(a work-loop C3 ratification gate), and planning: let Claude move a question to another group and set the group order #5914 also needs Kyle's attend-queue approval. The labels were left for Kyle.🤖 Generated with Claude Code
https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR
Generated by Claude Code