Repository navigation
fix(planning): interview page visual audit follow-ups to #5569 #5795
Description
Follow-up to #5569 (closed; its follow-ups are #5710, #5712 to #5716 and #5723). Found in an overnight read-only pass over a live interview page (desktop 1440x900, mobile 390x844, light and dark, 200% zoom) on 2026-10-02, by the session "How We Made Claude AI Faster". Question ids refer to that session's page; Q5 to Q87 were later archived and replaced, but every item below is page behavior, not question content. Each item names where, what happens, and what was expected.
Read-only pass over the /planning:interview page (planning 0.59.3, 87 questions, 35 live, 52 archived). Headless Chromium at 1440x900, 1280x720, 390x844 and 720x450 at devicePixelRatio 2 (equals 200% zoom), light and dark. No answer, note or other write was sent. Hold and stale states were rendered by rewriting the GET /api/state response in the local browser only.
21 new findings: 2 High, 6 Medium, 13 Low. Findings already in this thread are left out; the last section lists the ones that still reproduce.
High
Mobile and zoomed layouts: tapping a question appears to do nothing
390x844, and desktop at 200% zoom (any viewport under about 800 CSS px). The whole rail (87 cards, 7,654 px tall at 390) sits above the detail pane, which starts at y=8,165. Scroll stays at 0 after a tap on a question, Summary or a Rounds card. The only way in is the small "Question list" icon, which hides the rail. Expected: a tap on a card scrolls to or switches to the detail pane. This supersedes the "3-card inner scroll box" description in #5569 (comment), which no longer matches.
Source quotes are collapsed by default
All viewports. Every "Source text" blockquote and the full alternatives sit in a closed "Details: what we know, alternatives" row below the recommendation and commitments. The user sees the recommendation and Decide first, not the quote. Expected: quote first and open, so the user can see why the question is asked (the rule the user stated). #5569 (comment) proposes source-first as a skill default; the collapsed rendering is not reported.
Medium
Decide list: hidden options with no scroll cue
1440x900 and 1280x720. #choices is a 234 px nested scroller. On an 8-option question, alternative (c), Own answer, Defer and Hedged accept are below the fold (at 1280x720, 5 of 8 rows are hidden). Expected: show all rows, or show a visible scroll cue. The ellipsis part is item (g) in #5569 (comment).
Groups view mixes archived and live cards
All viewports, default Groups rail. 52 archived cards (grey chip only, same size as live ones) sit between the 35 live cards: Measurement lists 14 archived before its 7 live, Loop 18 before 9. The Rounds view collapses closed rounds, but it is not the default. Expected: archived cards collapsed or last in each group.
Archived and superseded questions keep live controls
All viewports. Q5 shows the full question and 8 enabled radios under "Superseded by Q35 ... Answer that one instead". Q35 is archived too and points to Q61, so the live question is two hops away. Expected: controls disabled, banner links straight to the live question (the end of the chain). See also gap G4 in the second comment.
Live questions share a rail title with their archived predecessor
All viewports, rail, Tree, Visuals map. 14 live questions (Q62, Q63, Q64, Q66, Q67, Q74, Q77 to Q81, Q83, Q85, Q86) carry the same short title as the archived question they replace. The short title still reads as the old yes/no ("Require a correlation record on every ratchet?"), while the real question is now "What should the shipped default be for ...?". Expected: the short title matches the live question.
Activity "Needs you" lists Claude-side bookkeeping
Desktop, Activity panel. "NEEDS YOU (21)" holds "Note reply saved", "Added Q61 ... Q86", and one run-on paragraph for "Revised Q65 ...: title, short, recommendation, alternatives; revised Q66 ..." over 12 questions. The Q4 reconfirm and the 27 open questions are not marked as the real needs. In a fresh browser every entry is unseen, so this may be "since last visit"; the label still reads as an action list. The split asked for in #5569 (comment) shipped, but the list holds items with no user action. Expected: only items that need the user's input.
Low
Archive reason is one batch sentence on all 52 archived cards
All viewports. "Each is replaced by the question 30 numbers higher (Q5 ... by Q35 ... Q30 by Q60)" with id chips inside the prose, two lines of chips per card, nothing specific to the question. Expected: one line naming this question's replacement.
Answered filter and Pending filter hide state without explanation
Desktop. Answered lists Q3 inside the auto-collapsed "Evidence policy ... 0 open / 1" group (chevron closed, nothing says an answered question is inside). Pending shows "No questions match this filter." while the old question stays in the detail pane. Expected: expand groups that hold matches; say what Pending means. The empty Pending case is item (j) in #5569 (comment).
Backticks show literally in Decide rows
All viewports, 22 live questions (Q61 to Q86). "(a) Ship never as the default" in the Decide list and alternatives, while the recommendation card renders the same text as code. Expected: alternative rows render inline code.
9 of 85 repo "Source text" anchors point at the wrong lines
All viewports. The cited line range on blob/main no longer holds the quoted text: Q16 and Q72 (work/SKILL.md L215), Q19, Q49, Q75 (performance verify/SKILL.md L166-171), Q36 and Q62 (ci.yml L2432-2435; protect/SKILL.md L78-80). The files are right; the other 76 anchors match. Expected: link to a commit SHA, not main, or re-check anchors when the question is posted.
About 60 file paths are plain text, not links
All viewports, recommendations, commitments, alternatives. For example, Q61 commitments name plugins/performance/.claude-plugin/plugin.json and skills/goal/SKILL.md. Expected: repo paths link to the file, like issue numbers should.
Flyouts cover the Decide panel; Notes is one 7,625 px column
Desktop 1440. Notes and Activity cover the right half of the Decide panel (note box, Ask Claude, Rephrase cut off) unless the user presses Pin. Notes holds 10 Claude notes plus the user's, long replies in full, with no collapse and no jump to the newest. Expected: a jump to latest and collapsed older notes.
Two light-theme contrast misses
Desktop light. Notes timestamps and separator dots are 4.28:1 on the blue note background; the "Rec" label in the selected Decide row is 4.49:1. The AA target is 4.5:1. Dark theme passes. The muted-text fix in #5622 did not cover these.
Mobile touch targets are 30 px
390 wide, Decide. Save, Ask Claude, Rephrase, Research this and Clear are 30 px high; radios are 13 px in 31 to 52 px rows. This meets the WCAG 2.2 AA 24 px minimum but is below the usual 44 px.
Unexplained wording on Q4, Q1 and group headers
All viewports. The "carried 4 rounds" chip on Q4; the button "Open in To confirm" (odd capitalisation); "Accept all (1)" in a group header counts only questions opened in this browser while the header says "7 open / 21" (the tooltip explains, the label does not). The "N to confirm" wording itself is in #5569 (comment).
Revised banner says "Your note" over Claude's own text
Q61, Q65 to Q75, Q82. The banner starts "Recommendation revised. Your note: ..." but the text is Claude's explanation; Q65 to Q75 add "(your note on Q61)". Expected: "Claude's reason". Set by the revised text, so this may be a skill-side wording issue.
apply on a re-run ops file says "duplicate id" and not that nothing was written
round.sh apply. It refuses the whole file on one duplicate id. Re-running an old ops file prints "duplicate id" with no hint that nothing was written (nothing was). Expected: say "refused: nothing written" and name the first duplicate.
Still reproducing from earlier comments
- Sticky decide bar is 374 to 435 px at 1440x900 (planning: interview page sidebar layout breaks, stale status badges, and the ask box keeps old text #5569 (comment)).
- Counts disagree: "7 of 35 answered", Summary "27 still open", Open filter 28, Answered filter 7 (includes Q4, omits Q3) (planning: interview page sidebar layout breaks, stale status badges, and the ask box keeps old text #5569 (comment)).
- Bare issue numbers are plain text on Q74, Q76 and in Notes (planning: interview page sidebar layout breaks, stale status badges, and the ask box keeps old text #5569 (comment)).
- Id chips wrap inside the id in the Activity panel at 425 px and in Notes at 390 (planning: interview page sidebar layout breaks, stale status badges, and the ask box keeps old text #5569 (comment)).
- Summary Decisions table breaks words mid-word at 390 (planning: interview page sidebar layout breaks, stale status badges, and the ask box keeps old text #5569 (comment)); desktop widths are fixed.
- Header takes 244 px at 390 wide (planning: interview page sidebar layout breaks, stale status badges, and the ask box keeps old text #5569 (comment)).
Doc drift (skill side)
The interview skill's surface doc still says commitments cannot be revised
plugins/planning/skills/interview/context/surface.md, the ops table: the revise row lists id, title, short, facts, basis, rec, why, text, alternatives, seq, affects, force and omits commits, although surface/schema/ops.schema.json accepts commits on revise (shipped in planning 0.49.0, item 11 of #5569 (comment)). A session following the doc superseded and archived 26 questions three times (Q5-Q30 to Q35-Q60 to Q61-Q86 to Q88-Q114) to change commitments it could have revised in place. Expected: the table lists commits on revise.
Activity
kyle-sexton commentedon Oct 4, 2026
This was generated by AI during triage.
Routing: human-gated,
status: needs-decision,work-class: scoped,priority: medium(assessed default). This is an umbrella of 21 page findings plus 6 still-reproducing items. Most are small scoped UI fixes, but a few are product-intent calls, and the whole set is too wide for one worker. It needs the decisions below, then/work-items:decomposeinto slices.Spot-checked against current code:
esc(c.text)).commits(anddependsOn) on thereviseop. Basis: verified, plugins/planning/skills/interview/context/surface.md:69. Drop it from the slice list.Overlaps (cluster, not blocked-by edges):
Open decisions (product intent):
main, or re-check anchors when a question is posted.The remaining Low items (contrast misses, touch targets, wording, file paths as links, flyout overlap, archive-reason text, "Your note" over Claude's text, the
applyduplicate-id message) are fix-shaped and can be sliced as scoped items without a decision.Agent Brief
Type: Bug
Summary: Fix the interview page defects from the 2026-10-02 visual audit, in slices, after the product decisions above.
Current behavior:
On narrow or zoomed viewports a rail tap leaves the detail pane off screen. Source quotes are collapsed under Details. The Decide list hides options in a nested scroller with no cue. Archived cards mix with live ones; superseded questions keep live controls; live questions reuse their predecessor's short title. Activity "Needs you" lists bookkeeping. Decide rows show literal backticks; repo paths are plain text; some source anchors point at moved lines; two light-theme contrast ratios fall below 4.5:1; several labels are unexplained;
round.sh applyrefuses a re-run ops file without saying nothing was written.Desired behavior:
round.sh applyon a file with a duplicate id says nothing was written and names the first duplicate.Acceptance criteria:
Out of scope:
kyle-sexton commentedon Oct 13, 2026
Decision recorded. The owner approved applying independently verified recommendations on 2026-10-12.
Basis: origin/main plugins/planning/surface/index.html:1111 (Details row, lsGet("moreOpen", false)); fix(planning): interview page visual audit follow-ups to #5569 #5795 body 'Source quotes are collapsed by default'; triage comment 2026-10-04 decision 1
Basis: fix(planning): interview page visual audit follow-ups to #5569 #5795 body 'Groups view mixes archived and live cards' (Measurement 14 archived before 7 live; Rounds view collapses closed rounds); judgment
Basis: fix(planning): interview page visual audit follow-ups to #5569 #5795 body High item 1 (detail pane starts at y=8,165; 'Question list' icon hides the rail); judgment
Basis: fix(planning): interview page visual audit follow-ups to #5569 #5795 body Medium item 'Activity Needs you lists Claude-side bookkeeping'; triage comment decision 4
Basis: fix(planning): interview page visual audit follow-ups to #5569 #5795 body Low item '9 of 85 repo Source text anchors point at the wrong lines'; judgment
Basis: PR fix(planning): rebalance the interview page layout and add a someone-else-decides deferral #7278 body UI-5; origin/main plugins/planning/surface/index.html:2002
Umbrella of 21 interview-page findings from a 2026-10-02 visual audit plus 6 still-reproducing items; triage found most are scoped UI fixes but five need a product call before /work-items:decompose. The core claims still hold on main (superseded banner, collapsed Details, opened-only Accept all), and the surface.md doc-drift item is already fixed.
Verification notes:
Verified by an independent fresh-context check (refuted, risk low): gh issue view 5795 (open, 1 AI triage comment, no owner decision); origin/main index.html:1090, 1111 (moreOpen), 795, 684, 360, 2002; git log origin/main -- plugins/planning/surface/ (#7278, #7280, #7301); PR #7278 and #7280 bodies; PR #7182 closes list
Admission to an agent lane stays with the work-class rules and owner ratification.
kyle-sexton commentedon Oct 17, 2026
Owner decision 2026-10-17: refresh the remaining-work list (part already shipped in #7278/#7280) and decompose into child issues; the owner ratifies the children.
kyle-sexton commentedon Oct 17, 2026
Remaining-work refresh and decomposition per the owner decision of 2026-10-17. Checked against
origin/mainatfd71a30a05and the bodies of #7278 and #7280.Done or owned elsewhere (no child):
commitsonrevise): fixed before triage.Remaining, as 8 child issues (sub-issues of this one, all
needs-humanfor owner ratification; none is admitted):applyduplicate-id messageThis issue stays open as the parent.
kyle-sexton commentedon Oct 24, 2026
Closed by the owner's HITL session under 2C/Q87 (2026-10-24), with a second agent's independent agreement. All 8 children are closed; #8089 and #5796 (G4, G11) carry the rest, and the sticky decide-bar re-measure moved to #9724. To reopen: reopen this issue and say what is still missing.