Tables with wrong word fitting #93

Closed
opened 2026-10-08 13:25:11 +02:00 by EduarD3V · 5 comments
Owner

URL: http://100.118.73.36:5173/plans/incidents , http://100.118.73.36:5173/plans/executions and similar

I need you to review the cells and the words on that table component, for all of it use across other places. in small width screens, the words of different cells are overlapping. fix that, you are allowed to enable auto horizontal scroll on the tables

URL: http://100.118.73.36:5173/plans/incidents , http://100.118.73.36:5173/plans/executions and similar I need you to review the cells and the words on that table component, for all of it use across other places. in small width screens, the words of different cells are overlapping. fix that, you are allowed to enable auto horizontal scroll on the tables
gotoi-agent added reference issue/93-table-fitting 2026-10-09 15:39:20 +02:00
Collaborator

Claimed — branch issue/93-table-fitting. Doing: root-cause the FeedTable cell overlap on /plans/incidents and /plans/executions at narrow widths, fix minimal CSS, add UC + test.

Claimed — branch `issue/93-table-fitting`. Doing: root-cause the FeedTable cell overlap on /plans/incidents and /plans/executions at narrow widths, fix minimal CSS, add UC + test.
Collaborator

Issue #93 — Tables with wrong word fitting

Restated goal

On narrow screens the shared feed tables overlap cell text: words from one cell
paint over the next. Operator named /plans/incidents and /plans/executions
(“and similar”). Horizontal auto-scroll is explicitly allowed as the fix.

Root cause (measured, not guessed)

dashboard/src/lib/components/FeedTable.svelte:83 renders

<Table.Root class="{columnStyle ? 'w-max min-w-full table-auto' : 'w-full table-fixed'} text-sm">

When a page does not pass columnStyle (both issue pages), the table is
table-layout: fixed; width: 100%. Cells inherit whitespace-nowrap from
ui/table/table-cell.svelte, so each column is locked to an equal fraction of
the pane while its content is wider. The text overflows the cell box and paints
over the neighbour — and nothing scrolls, because the table never exceeds its
container.

DOM probe on the isolated stack (127.0.0.1:5181 dashboard → :3101 middleware,
DB gotoi_93, demo catalog), viewport 700px, /plans/executions:

cell clientWidth scrollWidth overflow
verdict fixed_verified 87 119 +32
status succeeded 87 106 +19
planId disk-cleanup 87 98 +11

table-layout: fixed, tableWidth 650px, wrapWidth 650px, overflow-x: auto
on the wrapper — the wrapper never scrolls because the table is capped at 100%.
/plans/incidents at 390px: severity warning +27, status resolved +30.
/alerts passes columnStyle, gets table-auto w-max, and does not overlap.

Scope

Change (dashboard only):

  • dashboard/src/lib/components/FeedTable.svelte — remove the table-fixed
    branch; the base table is always w-max min-w-full table-auto, so cells keep
    their natural content width and the existing overflow-auto wrapper scrolls.
  • docs/use-cases/frontend/UC-FE-75-list-playground.md — Story/Notes line for
    the narrow-width horizontal-scroll rule; bump version:.

Do not touch: middleware/, agent/, docs-site/, schema/migrations,
main/master, the .btn/.field systems, or any non-feed table.

UC decision

No new UC. UC-FE-75 owns the shared list playground table; a Story/Notes line
stating “narrow widths scroll horizontally; cells never overlap” covers the fix.
UC-FE-72 (alerts) already passes columnStyle and stays green. Bump
version: on UC-FE-75.

Design decisions

  • Why not add another overflow-x-auto: the wrapper already has it; the
    table is width:100%, so there is nothing to scroll. The defect is the table
    width model, not a missing scroll container.
  • Why drop table-fixed rather than widen it: table-fixed ignores content
    width by design. With table-auto + whitespace-nowrap, columns size to their
    content; min-w-full keeps the table filling the pane when content is narrow.
  • Alerts stays as-is: it passes columnStyle (user-resizable widths) and
    already lands on the table-auto branch — touching it would be scope creep.
  • No new test file: the repo has no component/page test layer (AGENTS.md
    “Testing conventions”), and RULES forbids source-text assertions. The red/green
    artifact is the live DOM probe; a UC entry carries the contract.

Tasks

  1. Plan + scope freeze → this file; post it as the Plan comment.
  2. Red-first: DOM probe (above) on the live stack at 390/480/700px records the
    overflowing cells and the table-fixed layout; keep the before screenshot.
  3. Implement: FeedTable.svelte — single table class.
  4. Green: re-run the DOM probe at 390/480/700px — zero overflowing cells
    (scrollWidth <= clientWidth everywhere) and the wrapper scrolls
    (scrollWidth > clientWidth) when content is wider; after screenshot.
    bun run check clean.
  5. UC: update UC-FE-75 version + notes, run python3 docs/use-cases/_check.py.
  6. Commit + STOP.

Hard rules

  • Branch issue/93-table-fitting, work only in
    /home/eduardez/workspace/gotoi-wt/issue-93.
  • main/master forbidden; Refs #93 only.
  • RULES.md §6 AI header; native-button / parallel .btn rule respected.
  • Showing lines scan empty; bun run check --threshold error clean.

Verification gates

  • cd dashboard && bun run test && bun run check
  • python3 docs/use-cases/_check.py
  • python3 scripts/check-ai-headers.py
  • rg -n 'Showing lines' --glob '!node_modules' --glob '!.git'
# Issue #93 — Tables with wrong word fitting ## Restated goal On narrow screens the shared feed tables overlap cell text: words from one cell paint over the next. Operator named `/plans/incidents` and `/plans/executions` (“and similar”). Horizontal auto-scroll is explicitly allowed as the fix. ## Root cause (measured, not guessed) `dashboard/src/lib/components/FeedTable.svelte:83` renders ``` <Table.Root class="{columnStyle ? 'w-max min-w-full table-auto' : 'w-full table-fixed'} text-sm"> ``` When a page does **not** pass `columnStyle` (both issue pages), the table is `table-layout: fixed; width: 100%`. Cells inherit `whitespace-nowrap` from `ui/table/table-cell.svelte`, so each column is locked to an equal fraction of the pane while its content is wider. The text overflows the cell box and paints over the neighbour — and nothing scrolls, because the table never exceeds its container. DOM probe on the isolated stack (`127.0.0.1:5181` dashboard → `:3101` middleware, DB `gotoi_93`, demo catalog), viewport 700px, `/plans/executions`: | cell | clientWidth | scrollWidth | overflow | |---|---|---|---| | verdict `fixed_verified` | 87 | 119 | +32 | | status `succeeded` | 87 | 106 | +19 | | planId `disk-cleanup` | 87 | 98 | +11 | `table-layout: fixed`, `tableWidth 650px`, `wrapWidth 650px`, `overflow-x: auto` on the wrapper — the wrapper never scrolls because the table is capped at 100%. `/plans/incidents` at 390px: severity `warning` +27, status `resolved` +30. `/alerts` passes `columnStyle`, gets `table-auto w-max`, and does not overlap. ## Scope **Change** (dashboard only): - `dashboard/src/lib/components/FeedTable.svelte` — remove the `table-fixed` branch; the base table is always `w-max min-w-full table-auto`, so cells keep their natural content width and the existing `overflow-auto` wrapper scrolls. - `docs/use-cases/frontend/UC-FE-75-list-playground.md` — Story/Notes line for the narrow-width horizontal-scroll rule; bump `version:`. **Do not touch**: `middleware/`, `agent/`, `docs-site/`, schema/migrations, `main`/`master`, the `.btn`/`.field` systems, or any non-feed table. ## UC decision No new UC. **UC-FE-75** owns the shared list playground table; a Story/Notes line stating “narrow widths scroll horizontally; cells never overlap” covers the fix. `UC-FE-72` (alerts) already passes `columnStyle` and stays green. Bump `version:` on UC-FE-75. ## Design decisions - **Why not add another `overflow-x-auto`**: the wrapper already has it; the table is `width:100%`, so there is nothing to scroll. The defect is the table width model, not a missing scroll container. - **Why drop `table-fixed` rather than widen it**: `table-fixed` ignores content width by design. With `table-auto` + `whitespace-nowrap`, columns size to their content; `min-w-full` keeps the table filling the pane when content is narrow. - **Alerts stays as-is**: it passes `columnStyle` (user-resizable widths) and already lands on the `table-auto` branch — touching it would be scope creep. - **No new test file**: the repo has no component/page test layer (AGENTS.md “Testing conventions”), and RULES forbids source-text assertions. The red/green artifact is the live DOM probe; a UC entry carries the contract. ## Tasks 1. Plan + scope freeze → this file; post it as the Plan comment. 2. Red-first: DOM probe (above) on the live stack at 390/480/700px records the overflowing cells and the `table-fixed` layout; keep the before screenshot. 3. Implement: `FeedTable.svelte` — single table class. 4. Green: re-run the DOM probe at 390/480/700px — zero overflowing cells (`scrollWidth <= clientWidth` everywhere) and the wrapper scrolls (`scrollWidth > clientWidth`) when content is wider; after screenshot. `bun run check` clean. 5. UC: update `UC-FE-75` version + notes, run `python3 docs/use-cases/_check.py`. 6. Commit + STOP. ## Hard rules - Branch `issue/93-table-fitting`, work only in `/home/eduardez/workspace/gotoi-wt/issue-93`. - `main`/`master` forbidden; `Refs #93` only. - RULES.md §6 AI header; native-button / parallel `.btn` rule respected. - `Showing lines` scan empty; `bun run check --threshold error` clean. ## Verification gates - `cd dashboard && bun run test && bun run check` - `python3 docs/use-cases/_check.py` - `python3 scripts/check-ai-headers.py` - `rg -n 'Showing lines' --glob '!node_modules' --glob '!.git'`
Collaborator

DONE

Commit: cde01db fix(dashboard): feed table always table-auto so nowrap cells never overlap (UC-FE-75)

Root cause: FeedTable.svelte used table-fixed w-full whenever the caller passed no columnStyle (/plans/incidents, /plans/executions). Cells are whitespace-nowrap, so each column locked to an equal fraction of the pane while content was wider — text painted over its neighbour, and the overflow-auto wrapper had nothing to scroll. /alerts passed columnStyle, stayed on table-auto, and never overlapped.

Fix: base table is always w-max min-w-full table-auto; columns size to content, wrapper scrolls.

Evidence (live DOM probe, :5181 → :3101, DB gotoi_93 demo catalog):

  • before 700px /plans/executions: table-layout fixed; verdict +32, status +19, planId +11 overflow
  • before 390px /plans/incidents: warning +27, resolved +30
  • after 390/480/700px both pages: 0 overflowing cells; wrapper scrollWidth 807 vs clientWidth 364 (scrolls)
  • /alerts unchanged (0 overflow at every width)

Gates (all exit 0):

  • cd dashboard && bun run check — 0 errors (7 pre-existing warnings in untouched files)
  • cd dashboard && bun run test — 254 passed
  • python3 docs/use-cases/_check.py — conform
  • python3 scripts/check-ai-headers.py — 576 ok
  • python3 scripts/check-type-mirror.py — exit 0
  • footer scan empty

Files: FeedTable.svelte, usecases-frontend.test.ts (removed an incidental table-fixed source assertion that pinned the defect), UC-FE-75 (version + narrow-width note).

No push, per protocol.

DONE Commit: cde01db `fix(dashboard): feed table always table-auto so nowrap cells never overlap (UC-FE-75)` Root cause: `FeedTable.svelte` used `table-fixed w-full` whenever the caller passed no `columnStyle` (/plans/incidents, /plans/executions). Cells are `whitespace-nowrap`, so each column locked to an equal fraction of the pane while content was wider — text painted over its neighbour, and the `overflow-auto` wrapper had nothing to scroll. /alerts passed `columnStyle`, stayed on `table-auto`, and never overlapped. Fix: base table is always `w-max min-w-full table-auto`; columns size to content, wrapper scrolls. Evidence (live DOM probe, :5181 → :3101, DB gotoi_93 demo catalog): - before 700px /plans/executions: table-layout fixed; verdict +32, status +19, planId +11 overflow - before 390px /plans/incidents: warning +27, resolved +30 - after 390/480/700px both pages: 0 overflowing cells; wrapper scrollWidth 807 vs clientWidth 364 (scrolls) - /alerts unchanged (0 overflow at every width) Gates (all exit 0): - `cd dashboard && bun run check` — 0 errors (7 pre-existing warnings in untouched files) - `cd dashboard && bun run test` — 254 passed - `python3 docs/use-cases/_check.py` — conform - `python3 scripts/check-ai-headers.py` — 576 ok - `python3 scripts/check-type-mirror.py` — exit 0 - footer scan empty Files: FeedTable.svelte, usecases-frontend.test.ts (removed an incidental `table-fixed` source assertion that pinned the defect), UC-FE-75 (version + narrow-width note). No push, per protocol.
Collaborator

REVIEW: FIXED 1 — findings: UC-FE-75 flow line 6 claimed a per-cell min-width that FeedTable never applies on the incidents/executions path (columnStyle is alerts-only and only decorates Table.Head); rewritten to the real invariant w-max min-w-full table-auto, matching DataTable (commit 44642b4). Test integrity: the removed assertions in dashboard/src/lib/usecases-frontend.test.ts were readFileSync+toContain('table-fixed') — a source-text pin of the defect itself, contradicted by the fix; no other assertion loosened, no .skip added, 108/108 tests pass. Checkers: _check.py, check-ai-headers.py, check-type-mirror.py exit 0; svelte-check 0 errors; 'Showing lines' hits are pre-existing docs quoting the rule (also on origin/agent-develop); UNFIXED: none

REVIEW: FIXED 1 — findings: UC-FE-75 flow line 6 claimed a per-cell min-width that FeedTable never applies on the incidents/executions path (columnStyle is alerts-only and only decorates Table.Head); rewritten to the real invariant w-max min-w-full table-auto, matching DataTable (commit 44642b4). Test integrity: the removed assertions in dashboard/src/lib/usecases-frontend.test.ts were readFileSync+toContain('table-fixed') — a source-text pin of the defect itself, contradicted by the fix; no other assertion loosened, no .skip added, 108/108 tests pass. Checkers: _check.py, check-ai-headers.py, check-type-mirror.py exit 0; svelte-check 0 errors; 'Showing lines' hits are pre-existing docs quoting the rule (also on origin/agent-develop); UNFIXED: none
Collaborator

DONE — branch issue/93-table-fitting, PR #105 (#105) targeting agent-develop. 2 commits (da354f8 fix: feed table table-auto so nowrap cells never overlap, UC-FE-75; 44642b4 review: correct UC-FE-75 width-model doc line). Worker commit rebased onto current agent-develop (base had drifted pre-#99/#102/#104 merges). Review: FIXED 1 (docs correction only). Gates: UC catalog ok, ai-headers 582 ok, type-mirror ok, Showing-lines empty, dashboard test + check GREEN. Refs #93

DONE — branch issue/93-table-fitting, PR #105 (https://git.eduard3v.com/EduarD3V/gotoi/pulls/105) targeting agent-develop. 2 commits (da354f8 fix: feed table table-auto so nowrap cells never overlap, UC-FE-75; 44642b4 review: correct UC-FE-75 width-model doc line). Worker commit rebased onto current agent-develop (base had drifted pre-#99/#102/#104 merges). Review: FIXED 1 (docs correction only). Gates: UC catalog ok, ai-headers 582 ok, type-mirror ok, Showing-lines empty, dashboard test + check GREEN. Refs #93
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
EduarD3V/gotoi#93
No description provided.