Note: status row reappears while loading and leaves a lone '>' above the card #1209

Open
opened 2026-10-06 16:27:58 +00:00 by kayg · 6 comments
Owner

Owner report (2026-10-06, production ff53d7b8b, desktop dark): "this top live thing is back again, shows up while loading a note and becomes that symbol"

Screenshot ~/calternal-private/reference/owner-note-chevron.png: above a new Note card ("Untitled") a status line appears while the Note loads (the owner calls it "the live thing" — the connection/collaboration status row, e.g. "Connecting…"/"Live"), and after loading it collapses into a lone ">" chevron at the top-left above the card, left of the card's text column. This is a regression of #1132 (the "Not live" status line removed on owner request; batch 8, c894baaef) — something reintroduced a visible status row or left its container behind.

Do (fix only):

  1. Reproduce on a production build: open an existing Note and a new Note, cold and warm, at 1440. Use document.elementsFromPoint on the chevron to find the element (status row icon, a breadcrumb/ancestor chevron with an empty parent, a collapsed disclosure, the #1191 contents rail, or a peers indicator) and the commit that reintroduced it (git log -S on the markup/class).
  2. Remove it at the source: no status text or icon row above the Note card while loading or after; the steady states stay screen-reader-only as #1132 decided; any genuinely needed indicator (offline/read-only) follows #1132's rules. No empty row height reserved.
  3. Regression e2e: during and after loading a Note, nothing renders between the page header and the Note card (no text, no icon), in Chromium and WebKit.
    Screenshots at ACTUAL size before/after (loading + loaded). Merge origin/dev; bun run check + bun run test pass. Commit; comment with culprit commit and head SHA. Do not push.
## Owner report (2026-10-06, production ff53d7b8b, desktop dark): "this top live thing is back again, shows up while loading a note and becomes that symbol" Screenshot ~/calternal-private/reference/owner-note-chevron.png: above a new Note card ("Untitled") a status line appears while the Note loads (the owner calls it "the live thing" — the connection/collaboration status row, e.g. "Connecting…"/"Live"), and after loading it collapses into a lone ">" chevron at the top-left above the card, left of the card's text column. This is a regression of #1132 (the "Not live" status line removed on owner request; batch 8, c894baaef) — something reintroduced a visible status row or left its container behind. Do (fix only): 1. Reproduce on a production build: open an existing Note and a new Note, cold and warm, at 1440. Use `document.elementsFromPoint` on the chevron to find the element (status row icon, a breadcrumb/ancestor chevron with an empty parent, a collapsed disclosure, the #1191 contents rail, or a peers indicator) and the commit that reintroduced it (`git log -S` on the markup/class). 2. Remove it at the source: no status text or icon row above the Note card while loading or after; the steady states stay screen-reader-only as #1132 decided; any genuinely needed indicator (offline/read-only) follows #1132's rules. No empty row height reserved. 3. Regression e2e: during and after loading a Note, nothing renders between the page header and the Note card (no text, no icon), in Chromium and WebKit. Screenshots at ACTUAL size before/after (loading + loaded). Merge origin/dev; bun run check + bun run test pass. Commit; comment with culprit commit and head SHA. Do not push.
Author
Owner

Owner follow-up (2026-10-06): the lone ">" also moves around at the top of the note while the page settles (screenshot: it sits above the card, offset from the title). Treat it as a stray element whose position updates, not a static leftover. The regression test must cover both load and post-load.

Owner follow-up (2026-10-06): the lone ">" also **moves** around at the top of the note while the page settles (screenshot: it sits above the card, offset from the title). Treat it as a stray element whose position updates, not a static leftover. The regression test must cover both load and post-load.
Author
Owner

Owner follow-up (2026-10-06): the lone ">" also moves around at the top of the note while the page settles (screenshot: it sits above the card, offset from the title). Treat it as a stray element whose position updates, not a static leftover. The regression test must cover both load and post-load.

Owner follow-up (2026-10-06): the lone ">" also **moves** around at the top of the note while the page settles (screenshot: it sits above the card, offset from the title). Treat it as a stray element whose position updates, not a static leftover. The regression test must cover both load and post-load.
Author
Owner

Starting #1209 on branch job/notestatus-1209, based on origin/dev at ff53d7b8b4da5a21f862d57dcc3496f8c019f647 (the branch currently matches origin/dev). I am tracing the rendered element in a production build and will add the requested Chromium/WebKit regression coverage.

Starting #1209 on branch `job/notestatus-1209`, based on `origin/dev` at `ff53d7b8b4da5a21f862d57dcc3496f8c019f647` (the branch currently matches origin/dev). I am tracing the rendered element in a production build and will add the requested Chromium/WebKit regression coverage.
Author
Owner

Production-build finding on ff53d7b8b4, 1440×900 dark: while the room is connecting, .note-actions-row renders at x=435, y=80, height=40 directly above the Note card at y=136, with the visible dot and “Connecting…” label. After the room connects the row is gone. document.elementsFromPoint(710, 44) hits the SVG in .mh-title-slot; git blame and git log -S trace its unconditional trailing breadcrumb chevron to bab057326b73c037ec5026fcda9064ff2df1b3eb (Oct 5), where it was added outside the inline title opacity transition. The connecting status text/row predates #1132 in ceb70c6f6; #1132 hid the fallback-only “Not live” message and kept steady “Live” screen-reader-only, but did not hide “Connecting…”. I am fixing the chevron fade and keeping routine collaboration states screen-reader-only, while preserving meaningful offline/read-only indicators.

Production-build finding on ff53d7b8b4da5a21f862d57dcc3496f8c019f647, 1440×900 dark: while the room is connecting, `.note-actions-row` renders at x=435, y=80, height=40 directly above the Note card at y=136, with the visible dot and “Connecting…” label. After the room connects the row is gone. `document.elementsFromPoint(710, 44)` hits the SVG in `.mh-title-slot`; `git blame` and `git log -S` trace its unconditional trailing breadcrumb chevron to `bab057326b73c037ec5026fcda9064ff2df1b3eb` (Oct 5), where it was added outside the inline title opacity transition. The connecting status text/row predates #1132 in `ceb70c6f6`; #1132 hid the fallback-only “Not live” message and kept steady “Live” screen-reader-only, but did not hide “Connecting…”. I am fixing the chevron fade and keeping routine collaboration states screen-reader-only, while preserving meaningful offline/read-only indicators.
Author
Owner

Verification finding: the first WebKit run returned HTTP 401 from /api/v1/auth/me before the Note flow. The fixture copied the __Host session cookie with serialized domain and path fields, which made the cookie invalid. The WebKit-only transfer now binds it as a host-only cookie on the HTTPS front. The final Chromium and WebKit existing/new cold/warm flows both pass.

Verification finding: the first WebKit run returned HTTP 401 from `/api/v1/auth/me` before the Note flow. The fixture copied the `__Host` session cookie with serialized domain and path fields, which made the cookie invalid. The WebKit-only transfer now binds it as a host-only cookie on the HTTPS front. The final Chromium and WebKit existing/new cold/warm flows both pass.
Author
Owner

#1209 complete

Branch: job/notestatus-1209 (based on dev at ff53d7b8b4da5a21f862d57dcc3496f8c019f647). git fetch origin && git merge origin/dev reported Already up to date. No push or merge was made.

Head: 16371112c0f171725e858262a5f2bddfe2a8007b

Finding and fix

document.elementsFromPoint identified the lone > as .mh-title-slot > svg.mh-crumb-separator. Commit bab057326b73c037ec5026fcda9064ff2df1b3eb (“Replace the Note breadcrumb leaf on scroll”) introduced this separator; it stayed visible after its inline title faded. The visible Connecting…/Live status path was not a later reintroduction: it originated in ceb70c6f6ce7b2cb839103d1023d6efb8dcf1f76, and #1132's c9bbaecd52fa24a42c47f85042c79a07bcb4b87c hid the refused-room “Not live” line while leaving routine connection status visible.

Routine connection, live and peer status is now screen-reader-only. Offline and read-only status keeps its visible row. The row does not reserve space. The breadcrumb separator follows the existing inline-title opacity, so it fades with the title. The production-build regression flow checks existing and new Notes, cold and warm, in Chromium and WebKit, including elementsFromPoint and visible content before the Note card.

Cost: constant-time status derivation and the existing title transition; no added network work or layout measurement.

Commits

  • 475ec8924 — remove transient status chrome above Note cards and add regression coverage.
  • 63ea9cef7 — refresh exact perf source pins for the touched NoteView and ModeHeader lists; no rule or limit changed.
  • 16371112c — preserve host-only cookies in the WebKit test front.

Files

apps/web/e2e/harness.mjs, apps/web/e2e/harness.test.mjs, apps/web/e2e/notes.mjs, apps/web/src/lib/modeHeader.svelte.test.ts, apps/web/src/lib/notes/NoteView.svelte, packages/ui/src/components/ModeHeader.svelte, contracts/perf/adoption-1058.json, and contracts/perf/exceptions.json.

Screenshots

Full-size 1440×900 PNG captures, dark appearance, macOS platform emulation. “Cold/connecting” captures the loading handshake; “loaded” captures the steady state.

Note State Before After Chromium After WebKit
Existing Cold/connecting PNG PNG PNG
Existing Loaded PNG PNG PNG
New Cold/connecting PNG PNG PNG
New Loaded PNG PNG PNG

Verification

bun run check:

perf-lint: PASS; 0 violations; 22615 scoped exceptions
svelte-check found 0 errors and 2 warnings in 2 files

The two warnings are the existing empty focus rulesets in AttachmentDeck.svelte:1055 and AgendaList.svelte:1277.

bun run test:

 Test Files  282 passed (282)
      Tests  1978 passed (1978)
   Start at  21:31:51
   Duration  389.89s (environment 27%, transform 27%, import 22%, tests 17%, setup 6%)

Chromium:

notes #1209 status e2e probe: chromium, existing/new, cold/warm passed
CSP REPORTS notes: 0 across 2 pages

WebKit:

notes #1209 status e2e probe: webkit, existing/new, cold/warm passed
CSP REPORTS notes: 0 across 1 pages

cargo clean:

Removed 8647 files, 7.3GiB total

No Rust files changed, so Rust format, clippy and crate tests were not run. Build output was removed after verification.

UX gaps closed / left

Closed: routine status no longer adds visible text, icons or row height above a Note; the lone breadcrumb chevron no longer remains after the title fades. The screen reader still receives routine status. Offline and read-only states retain their visible status.

Left: none for the requested regression.

Decision

The separator uses the existing inline-title opacity progress so both disappear together. The status split follows #1132 and this issue: routine state is screen-reader-only, while offline/read-only state stays visible.

#1209 complete Branch: `job/notestatus-1209` (based on `dev` at `ff53d7b8b4da5a21f862d57dcc3496f8c019f647`). `git fetch origin && git merge origin/dev` reported `Already up to date.` No push or merge was made. Head: `16371112c0f171725e858262a5f2bddfe2a8007b` ## Finding and fix `document.elementsFromPoint` identified the lone `>` as `.mh-title-slot > svg.mh-crumb-separator`. Commit `bab057326b73c037ec5026fcda9064ff2df1b3eb` (“Replace the Note breadcrumb leaf on scroll”) introduced this separator; it stayed visible after its inline title faded. The visible `Connecting…`/`Live` status path was not a later reintroduction: it originated in `ceb70c6f6ce7b2cb839103d1023d6efb8dcf1f76`, and #1132's `c9bbaecd52fa24a42c47f85042c79a07bcb4b87c` hid the refused-room “Not live” line while leaving routine connection status visible. Routine connection, live and peer status is now screen-reader-only. Offline and read-only status keeps its visible row. The row does not reserve space. The breadcrumb separator follows the existing inline-title opacity, so it fades with the title. The production-build regression flow checks existing and new Notes, cold and warm, in Chromium and WebKit, including `elementsFromPoint` and visible content before the Note card. Cost: constant-time status derivation and the existing title transition; no added network work or layout measurement. ## Commits - `475ec8924` — remove transient status chrome above Note cards and add regression coverage. - `63ea9cef7` — refresh exact perf source pins for the touched NoteView and ModeHeader lists; no rule or limit changed. - `16371112c` — preserve host-only cookies in the WebKit test front. ## Files `apps/web/e2e/harness.mjs`, `apps/web/e2e/harness.test.mjs`, `apps/web/e2e/notes.mjs`, `apps/web/src/lib/modeHeader.svelte.test.ts`, `apps/web/src/lib/notes/NoteView.svelte`, `packages/ui/src/components/ModeHeader.svelte`, `contracts/perf/adoption-1058.json`, and `contracts/perf/exceptions.json`. ## Screenshots Full-size 1440×900 PNG captures, dark appearance, macOS platform emulation. “Cold/connecting” captures the loading handshake; “loaded” captures the steady state. | Note | State | Before | After Chromium | After WebKit | |---|---|---|---|---| | Existing | Cold/connecting | [PNG](https://git.kayg.org/attachments/42e3badd-2733-4886-a15a-20f51aad6cd0) | [PNG](https://git.kayg.org/attachments/0037fb28-5a78-4529-a267-e34337646c6e) | [PNG](https://git.kayg.org/attachments/d1e1e40c-cc16-4b57-82c2-a34d5403a575) | | Existing | Loaded | [PNG](https://git.kayg.org/attachments/78ae2fb8-0fd1-469f-a508-dfe75d18bb16) | [PNG](https://git.kayg.org/attachments/590cbaba-af95-4164-beb6-ad78fb4dfb7e) | [PNG](https://git.kayg.org/attachments/7b1515ae-01e8-4b3b-bf75-c56f455b7d56) | | New | Cold/connecting | [PNG](https://git.kayg.org/attachments/c08ae37d-bf43-4844-a445-1585626fdc71) | [PNG](https://git.kayg.org/attachments/00135fe3-5fca-4702-8860-b26df2454cf3) | [PNG](https://git.kayg.org/attachments/f832797e-5150-464b-89ea-97c51889bac7) | | New | Loaded | [PNG](https://git.kayg.org/attachments/f8efc141-dc94-4c5f-98b9-ccd477d476a4) | [PNG](https://git.kayg.org/attachments/04145d65-5e66-4a42-a615-9aac1f2ab99d) | [PNG](https://git.kayg.org/attachments/bc81b076-36c6-43b5-8b85-b0bc36d80b5a) | ## Verification `bun run check`: ```text perf-lint: PASS; 0 violations; 22615 scoped exceptions svelte-check found 0 errors and 2 warnings in 2 files ``` The two warnings are the existing empty focus rulesets in `AttachmentDeck.svelte:1055` and `AgendaList.svelte:1277`. `bun run test`: ```text Test Files 282 passed (282) Tests 1978 passed (1978) Start at 21:31:51 Duration 389.89s (environment 27%, transform 27%, import 22%, tests 17%, setup 6%) ``` Chromium: ```text notes #1209 status e2e probe: chromium, existing/new, cold/warm passed CSP REPORTS notes: 0 across 2 pages ``` WebKit: ```text notes #1209 status e2e probe: webkit, existing/new, cold/warm passed CSP REPORTS notes: 0 across 1 pages ``` `cargo clean`: ```text Removed 8647 files, 7.3GiB total ``` No Rust files changed, so Rust format, clippy and crate tests were not run. Build output was removed after verification. ## UX gaps closed / left Closed: routine status no longer adds visible text, icons or row height above a Note; the lone breadcrumb chevron no longer remains after the title fades. The screen reader still receives routine status. Offline and read-only states retain their visible status. Left: none for the requested regression. ## Decision The separator uses the existing inline-title opacity progress so both disappear together. The status split follows #1132 and this issue: routine state is screen-reader-only, while offline/read-only state stays visible.
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
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
kayg/calternal-v0#1209
No description provided.