Skip to content

web(827): tile spec brief into flow; contain long-token thread rows - #846

Merged
xiechimon merged 5 commits into
mainfrom
hp/pacman/t-0157-827
Oct 4, 2026
Merged

xiechimon merged 5 commits into
mainfrom
hp/pacman/t-0157-827

Conversation

@xiechimon

Copy link
Copy Markdown
Owner

Long-token thread rows overflowed the center column and were clipped at the center/right seam, reading as covered by the right pane; the live spec brief card pinned the top of long threads. This change tiles both into the flow.

What

  • apps/web/src/detail/detail.css: min-width: 0 on .chat-text, .chat-bubble, .chat-taskline-title (flex items refused to shrink below the longest unbreakable token because break-word does not shrink intrinsic min-content size); overflow-wrap: break-word added on .chat-taskline-title, which lacked it (box shrank but glyphs still spilled).
  • apps/web/src/routes/todo-detail-page.tsx: live SpecBlock moved from above .chat-col to chat-pin head so it scrolls away with long threads. No style change. Fresh-state card already lived in a scroller.
  • apps/web/e2e/spec-flow.spec.ts (new, live-stubbed): card renders inside .chat-col; scrolls out at the bottom and back at the top; 200-char URL row has scrollWidth == clientWidth.

Deliberately out of scope

  • .chat-plan-title keeps pre-fix behavior (parked for a separate verdict; single-line revert available).
  • Reference (todos.dev) is not followed here: long links wrap instead of horizontal scrolling, per user decision.

Failure modes (listed before implementation, all verified)

  1. Overlong tokens wrap in place (the fix); fitted geometry untouched.
  2. CJK breaking unchanged (break-word only affects unbreakable runs).
  3. URL copy unaffected (visual wrap only, full text copied).
  4. Short-thread first paint and fixture captures unchanged (no fixture spec source).
  5. No new copy, CSS/TSX only.

Verification

  • pnpm lint, pnpm -r typecheck: green.
  • e2e:affected: 107 green post-revert (759 green on the full fallback for the flow move, incl. all 7 spec-brief-card pins).
  • Probe numbers: URL row 933 > seam 912 pre-fix, contained post-fix; spec card scrolls out (y=-2882) and back (y=79).

Evidence

No closes keyword: #827 stays open for the parked plan-title verdict.

Long-content scroll probes (detail 5336px transcript, board 12-card
column, fresh/doc-pane/composer seams): zero paint bleed in either
direction; all headers are static flex siblings; no sticky anywhere in
web source. Evidence for the non-repro finding on #827.
200-char URL row overflows the center column by 21px and is clipped
at the center/right seam (elementFromPoint + zoomed crop); root cause
is the flex min-width:auto + break-word intrinsic-sizing trap in
.chat-text (same latent in .chat-bubble/.chat-taskline-title). No code
change; fix proposal awaits user sign-off.
.chat-text/.chat-bubble/.chat-taskline-title/.chat-plan-title could
exceed the center column on unbreakable latin runs (flex min-width:auto
keyed to min-content, which break-word does not shrink): clipped at the
center/right seam and read as covered by the right pane. min-width:0 lets
rows shrink to the column; break-word added on the two titles that lacked
it (min-width alone left glyph spill).

Failure modes: overlong tokens now wrap in place (the fix); fitted
geometry untouched (lint + typecheck + e2e:affected 756 green); CJK
breaking unchanged; URL copy unaffected (visual wrap only); no new copy.
The live SpecBlock sat above .chat-col, permanently pinning the top of
long threads. Moved to chat-pin head so it scrolls away with the flow;
fresh-state card already lived in a scroller, untouched. No style change.

Also notes the round-1 probe correction: column-reverse scrollTop is
negative here (0 bottom, -max top); the re-shot full-scroll GIF and pins
use it. Gates: lint + typecheck + e2e:affected 759 green, including the
new spec-flow.spec.ts (in-flow structure, scroll-away behavior, long-URL
containment).
Per user sign-off: the three min-width rows ship (chat-text, chat-bubble,
chat-taskline-title); the fourth (chat-plan-title) stays undecided and is
reverted to pre-fix behavior pending a separate verdict. Reference
(todos.dev) is not followed: long links wrap, no h-scroll.

Re-verified post-revert: trio contained (sw==cw), plan-title overflow
restored (1279 vs 672, parked). Gates: lint + typecheck + e2e:affected
107 green.
@xiechimon
xiechimon merged commit 80e34ea into main Oct 4, 2026
8 checks passed
@xiechimon
xiechimon deleted the hp/pacman/t-0157-827 branch October 4, 2026 14:11
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.

1 participant