port: tables, resizing, markdown in cells, carry, motion (stacked on #845) #854

Open
kayg wants to merge 29 commits from port/port-tables-2 into port/port-tables
Owner

Stacked on #845 (base port/port-tables). The rest of the approved table behaviour.

What it does

  • Resize columns and rows. A mouse drags a column's right border or a row's bottom border (cursor says where; a second press on the border lets the column size itself again). A finger picks the column or row, then drags the handle on its edge. Never narrower than the longest word: the browser's table layout enforces that, and the width kept is what the column really became. A table with a width of its own may be wider than its card and then scrolls.
  • Where widths live (the mockup's storage, ADR 0056 / 0068, no new key): frontmatter table-widths: [[14, null, 4, 5]], characters, one list per table in document order, null for a column that sizes itself. The table's own pipes are never touched. Widths follow their column when columns are added, removed or moved. Row heights are UI state, never saved (as in the mockup).
  • Markdown in cells. **bold**, *italic*, ~~strike~~, ==mark==, `code` and links are drawn at rest; with the caret in a cell it shows the file's markdown, so what is typed is exactly what is saved (the caret goes to the end of a cell that has formatting). Built from DOM nodes, never HTML strings.
  • Carry a picked row or column by its strip; the others make room, it settles, then the order changes.
  • Motion (Emil's rules): a pointer's add / delete / move / sort slides what was there, new rows and columns ease in, leaving ones fade; all < 300 ms, ease-out, nothing from scale(0); keys and reduced motion play nothing. Tested.
  • Copy a picked row or column: tab-separated text and a small HTML table.
  • Hook for the pickers (port-pickers: [[, @, # in cells): the grid dispatches table-cell-input on the editor's DOM (detail.cell, detail.value) on each cell edit; a link the picker writes is [title](<path>) in the cell's text, which is already drawn. Following a cell link is not wired (links are drawn and styled; clicking goes into the cell).

Gates

  • editor vitest 531 passed (new: inline drawing, table-widths read/write/remove incl. whole-block removal, motion index maps); tsc clean; svelte-check 0 errors; web 78, ui 46.
  • e2e/tables.spec.ts + e2e/tables-more.spec.ts: chromium 1440+390 43 passed; webkit 1440+390 43 passed; with the neighbours 356 passed.
  • Typing path (dev-01 Chromium, headless on a busy Linux box: relative only), keydown to the frame after the input, 120 keys x 3 rounds, p50 in ms: plain 60-paragraph note 157 / 176 / 127; note with a 50-row table, typing in a paragraph 164 / 131 / 141; typing in a cell of that table 157 / 160 / 165. No measurable difference beyond the box's noise (p95 270 to 520 everywhere). Real numbers need the perf VMs.

Bundle (brotli bytes): first paint JS 245,664 (budget 245,760), first paint CSS 21,483, all JS 332,598 (budget 322,560: over by 10,038 B; see #845, needs kayg's decision).

Stacked on #845 (base `port/port-tables`). The rest of the approved table behaviour. ## What it does - **Resize columns and rows.** A mouse drags a column's right border or a row's bottom border (cursor says where; a second press on the border lets the column size itself again). A finger picks the column or row, then drags the handle on its edge. Never narrower than the longest word: the browser's table layout enforces that, and the width kept is what the column really became. A table with a width of its own may be wider than its card and then scrolls. - **Where widths live** (the mockup's storage, ADR 0056 / 0068, no new key): frontmatter `table-widths: [[14, null, 4, 5]]`, characters, one list per table in document order, `null` for a column that sizes itself. The table's own pipes are never touched. Widths follow their column when columns are added, removed or moved. Row heights are UI state, never saved (as in the mockup). - **Markdown in cells.** `**bold**`, `*italic*`, `~~strike~~`, `==mark==`, `` `code` `` and links are drawn at rest; with the caret in a cell it shows the file's markdown, so what is typed is exactly what is saved (the caret goes to the end of a cell that has formatting). Built from DOM nodes, never HTML strings. - **Carry a picked row or column** by its strip; the others make room, it settles, then the order changes. - **Motion** (Emil's rules): a pointer's add / delete / move / sort slides what was there, new rows and columns ease in, leaving ones fade; all < 300 ms, ease-out, nothing from `scale(0)`; keys and reduced motion play nothing. Tested. - **Copy a picked row or column**: tab-separated text and a small HTML table. - **Hook for the pickers** (port-pickers: `[[`, `@`, `#` in cells): the grid dispatches `table-cell-input` on the editor's DOM (`detail.cell`, `detail.value`) on each cell edit; a link the picker writes is `[title](<path>)` in the cell's text, which is already drawn. Following a cell link is not wired (links are drawn and styled; clicking goes into the cell). ## Gates - editor vitest 531 passed (new: inline drawing, `table-widths` read/write/remove incl. whole-block removal, motion index maps); tsc clean; svelte-check 0 errors; web 78, ui 46. - `e2e/tables.spec.ts` + `e2e/tables-more.spec.ts`: chromium 1440+390 43 passed; webkit 1440+390 43 passed; with the neighbours 356 passed. - Typing path (dev-01 Chromium, headless on a busy Linux box: **relative only**), keydown to the frame after the input, 120 keys x 3 rounds, p50 in ms: plain 60-paragraph note 157 / 176 / 127; note with a 50-row table, typing in a paragraph 164 / 131 / 141; typing in a cell of that table 157 / 160 / 165. No measurable difference beyond the box's noise (p95 270 to 520 everywhere). Real numbers need the perf VMs. ## Bundle (brotli bytes): first paint JS 245,664 (budget 245,760), first paint CSS 21,483, all JS 332,598 (budget 322,560: over by 10,038 B; see #845, needs kayg's decision).
tables: a dragged width may overflow the card at once
Some checks failed
CI / server (pull_request) Has been cancelled
CI / rust (pull_request) Has been cancelled
CI / web (pull_request) Has been cancelled
Markdown extraction contract / markdown-native-contract (pull_request) Has been cancelled
Markdown extraction contract / markdown-editor-contract (pull_request) Has been cancelled
c9bad2d457
Author
Owner

housekeeping #1009: rebased+failing, left open for review.

restacked table follow-up on #845.

head: b4e67da4aff4bb7a42d678935900dfb447b5ab01; based on dev cd7f84432febfc63b788fbb9b9f9950452982d74, pushed with the original exact force-with-lease.

frontend frozen install, check, lint, build and unit tests passed. bundle gate failed. first-paint brotli vs dev: JS 231054 B (+277 B), CSS 18533 B (+147 B).

targeted Chromium and WebKit specs at 1440 and 390 never started. the audit waited more than three hours behind the live daily-train-1107 locks (first queue at 23:45 IST, 7 November; final queue cleanup after 02:46 IST, 8 November). browser validation and UI captures are unrun. only this audit’s exact queued units were stopped; the train locks and owners were left intact. hot-path perf qualification is unrun.

all executed gates used the VM Nix environment, shared Mac lock and slot. exact commands, source heads, logs and dev baseline. frontend inputs are identical to the tested frontend tree when a Rust-only repair changed the head.

original-head cherry/patch inventory, pr-854.md; unmatched entries are missing-patch candidates, with semantic overlap/replacements noted above.

final queue, cleanup and source-verification evidence.

housekeeping #1009: rebased+failing, left open for review. restacked table follow-up on #845. head: `b4e67da4aff4bb7a42d678935900dfb447b5ab01`; based on dev `cd7f84432febfc63b788fbb9b9f9950452982d74`, pushed with the original exact force-with-lease. frontend frozen install, check, lint, build and unit tests passed. bundle gate failed. first-paint brotli vs dev: JS 231054 B (+277 B), CSS 18533 B (+147 B). targeted Chromium and WebKit specs at 1440 and 390 never started. the audit waited more than three hours behind the live daily-train-1107 locks (first queue at 23:45 IST, 7 November; final queue cleanup after 02:46 IST, 8 November). browser validation and UI captures are unrun. only this audit’s exact queued units were stopped; the train locks and owners were left intact. hot-path perf qualification is unrun. all executed gates used the VM Nix environment, shared Mac lock and slot. [exact commands, source heads, logs and dev baseline](https://git.kayg.org/attachments/870a0fef-2e31-425c-aea6-eb87a66d365a). frontend inputs are identical to the tested frontend tree when a Rust-only repair changed the head. [original-head cherry/patch inventory](https://git.kayg.org/attachments/e05a38dc-c028-4d77-8655-efa9d5c8ea50), `pr-854.md`; unmatched entries are missing-patch candidates, with semantic overlap/replacements noted above. [final queue, cleanup and source-verification evidence](https://git.kayg.org/attachments/7ab315a5-4b6c-4af1-971b-cdae2637adae).
Author
Owner

Final-port test pass (issue #1009), READY: no: fixed 2 real failures, specs now pass; bundle gate fails; first paint is bigger than dev.

head e817319cd1ec37c43078c4eb204ce2ee53f21888

Targeted specs, CI=1 --retries=0 --workers=1, dev-01 Chromium and dev-02 WebKit (through ~/bin/slot), against a dev-head backend (cd7f84432).

spec Chromium 1440 Chromium 390 WebKit 1440 WebKit 390
tables-more (before fix) 6 pass, 2 fail 6 pass, 2 fail 6 pass, 2 fail 6 pass, 2 fail
tables + tables-more (after e817319cd) 21/21 22/22 21/21 22/22

Bundle gate: perf/web.sh --bundle-only --gate (the 17 failures from the housekeeping audit). Per the gate's own rule (total_js_brotli budget must equal the sum of the named chunk budgets) a cap can only move between named chunks; there is no donor chunk inside this PR, so a fix is a code cut or a decision by kayg. I raised nothing and moved nothing.

  • Fix pushed (e817319cd): the table-widths line was written with userEvent: 'input.table'; dev's editor drops every frontmatter edit not tagged input.properties, so a dragged width never reached the note. widths.ts now uses input.properties. Probe: the right change was dispatched and silently filtered.
  • Gate: widget 10.35 KB vs 1.1 cap. First paint JS +277 B, CSS +147 B vs dev.

Not done: Not run yet: Mac VM Safari blur/frame check and perf ABAB x5 on the perf VMs (they need a ready PR first); light/dark 2x screenshots against the mockup are only done for #888 (see its comment).

Not marked READY FOR MERGE.

**Final-port test pass (issue #1009), READY: no: fixed 2 real failures, specs now pass; bundle gate fails; first paint is bigger than dev.** head `e817319cd1ec37c43078c4eb204ce2ee53f21888` Targeted specs, `CI=1 --retries=0 --workers=1`, dev-01 Chromium and dev-02 WebKit (through `~/bin/slot`), against a dev-head backend (`cd7f84432`). | spec | Chromium 1440 | Chromium 390 | WebKit 1440 | WebKit 390 | |---|---|---|---|---| | tables-more (before fix) | 6 pass, 2 fail | 6 pass, 2 fail | 6 pass, 2 fail | 6 pass, 2 fail | | tables + tables-more (after `e817319cd`) | 21/21 | 22/22 | 21/21 | 22/22 | **Bundle gate:** `perf/web.sh --bundle-only --gate` (the 17 failures from the housekeeping audit). Per the gate's own rule (`total_js_brotli` budget must equal the sum of the named chunk budgets) a cap can only move between named chunks; there is no donor chunk inside this PR, so a fix is a code cut or a decision by kayg. I raised nothing and moved nothing. - **Fix pushed (`e817319cd`):** the `table-widths` line was written with `userEvent: 'input.table'`; dev's editor drops every frontmatter edit not tagged `input.properties`, so a dragged width never reached the note. `widths.ts` now uses `input.properties`. Probe: the right change was dispatched and silently filtered. - Gate: `widget` 10.35 KB vs 1.1 cap. First paint JS +277 B, CSS +147 B vs dev. **Not done:** Not run yet: Mac VM Safari blur/frame check and perf ABAB x5 on the perf VMs (they need a ready PR first); light/dark 2x screenshots against the mockup are only done for #888 (see its comment). Not marked READY FOR MERGE.
Author
Owner

Screenshots and state (issue #1009), 0a98ffe3f9

Product (the #854 tip, which contains #845; Chromium, 2x) next to the approved mockup, light and dark, 1440x900 and 390x844. Real Safari not taken yet. Not READY: first paint is over dev (see the #1009 table).
Differences from the mockup: the product's row bar is shorter (insert above/below, move up/down, delete, done) and its cell and column bars lack the mic; the mockup note shows its own Share and More pills, a warm sky and a 40-note list; the product table's rows are a little taller; on wide the product shows seven columns before the edge fade, the mockup six.

Screenshots (2x; light and dark; 1440x900 and 390x844). Left: the approved mockup (review/calendar-2). Right: this PR.

cell

mockup this PR
1440 light
1440 dark
390 light
390 dark

row

mockup this PR
1440 light
1440 dark
390 light
390 dark

col

mockup this PR
1440 light
1440 dark
390 light
390 dark

rest

mockup this PR
1440 light
1440 dark
390 light
390 dark

wide

mockup this PR
1440 light
1440 dark
390 light
390 dark

Real Safari (Mac VM, safaridriver, 1x: the VM reports devicePixelRatio 1)

cell

light dark
1440
390

row

light dark
1440
390

col

light dark
1440
390

rest

light dark
1440
390

wide

light dark
1440
390
**Screenshots and state (issue #1009), 0a98ffe3f94dfab37b37819787362d99b2c5ae98** Product (the #854 tip, which contains #845; Chromium, 2x) next to the approved mockup, light and dark, 1440x900 and 390x844. Real Safari not taken yet. **Not READY: first paint is over dev (see the #1009 table).** Differences from the mockup: the product's row bar is shorter (insert above/below, move up/down, delete, done) and its cell and column bars lack the mic; the mockup note shows its own Share and More pills, a warm sky and a 40-note list; the product table's rows are a little taller; on `wide` the product shows seven columns before the edge fade, the mockup six. ### Screenshots (2x; light and dark; 1440x900 and 390x844). Left: the approved mockup (review/calendar-2). Right: this PR. **cell** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/6699c58a-0cff-409a-b973-123b7e542dc9) | ![](https://git.kayg.org/attachments/1c177966-3a80-4334-8da4-520ca79841f0) | | 1440 dark | ![](https://git.kayg.org/attachments/27a2272f-14f3-4f4f-bdb8-7c895aad19d9) | ![](https://git.kayg.org/attachments/24aec18c-b955-4c01-bbf6-94e340589958) | | 390 light | ![](https://git.kayg.org/attachments/c330aba9-f872-49c8-ae7b-6c76f3cf61b4) | ![](https://git.kayg.org/attachments/78ca82e1-e54a-46ad-ac2b-da3bd0312c32) | | 390 dark | ![](https://git.kayg.org/attachments/ce02394d-bd96-421f-91bc-35fa52b348b5) | ![](https://git.kayg.org/attachments/15c881b9-d650-49f0-aaf6-548137924062) | **row** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/dc3323f0-fb6b-4311-ab03-c34e511c6d09) | ![](https://git.kayg.org/attachments/f8d919dd-22b6-4335-a9ce-6bb34923f61c) | | 1440 dark | ![](https://git.kayg.org/attachments/0fcaa3c2-42e5-4b9d-934c-3a74b7ef9a0c) | ![](https://git.kayg.org/attachments/92874ff7-92ba-480a-8152-e40d35e4886e) | | 390 light | ![](https://git.kayg.org/attachments/3a47c18d-eb52-4446-8aa3-21127ff9cf6b) | ![](https://git.kayg.org/attachments/95654e34-b634-4bfe-be0c-578dd4e67328) | | 390 dark | ![](https://git.kayg.org/attachments/83151857-2445-41c2-976e-b11d3dfb3c50) | ![](https://git.kayg.org/attachments/65ac0cd9-29ae-4262-b338-0daf088eed45) | **col** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/4826745a-e7d7-48b8-96cc-650ad91e6cb5) | ![](https://git.kayg.org/attachments/0e0e77be-f929-4dfb-b9ca-931458184b56) | | 1440 dark | ![](https://git.kayg.org/attachments/ac268838-95b1-4f81-9797-e8891ada3c94) | ![](https://git.kayg.org/attachments/7a8d8f81-53c7-4e9a-a4fd-1d87dd171876) | | 390 light | ![](https://git.kayg.org/attachments/2c66d597-b2d1-433a-93a2-7959ba465004) | ![](https://git.kayg.org/attachments/59870771-0a38-4b9f-a1b6-28538574bbae) | | 390 dark | ![](https://git.kayg.org/attachments/a2a22068-ce3f-4b7c-93c7-dd50da849943) | ![](https://git.kayg.org/attachments/72fa2807-1549-402f-8e90-d0e0944ffa2d) | **rest** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/70a2adbb-c652-4409-b3b0-fdfc8f3fa97e) | ![](https://git.kayg.org/attachments/cfd7a0d2-5f27-4889-90b0-fa9cb7b01a80) | | 1440 dark | ![](https://git.kayg.org/attachments/61300758-7139-48a9-a274-c6f172bf53b9) | ![](https://git.kayg.org/attachments/0e80e16a-4b86-47c3-80d3-967d0eb43cfc) | | 390 light | ![](https://git.kayg.org/attachments/68131565-d211-42bd-96d1-bdeadf283b0b) | ![](https://git.kayg.org/attachments/bcdc8355-9a22-4a43-99e3-f75930c7cd16) | | 390 dark | ![](https://git.kayg.org/attachments/21546bfc-1cf9-45fc-8c2a-c290d527eb06) | ![](https://git.kayg.org/attachments/d47ebb09-45fa-45f5-8c3b-58077e5621b7) | **wide** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/f638cb01-2e42-4df4-9397-abf2a4ce82a8) | ![](https://git.kayg.org/attachments/02bcbaf8-b49c-4329-a49d-a9548cf9f068) | | 1440 dark | ![](https://git.kayg.org/attachments/f5edabc6-56b4-4c24-a942-d8e969117d7d) | ![](https://git.kayg.org/attachments/c0fd2396-be46-4261-9a32-d55d641bd28e) | | 390 light | ![](https://git.kayg.org/attachments/90eee056-de86-4f94-b95a-c0e9411e7a90) | ![](https://git.kayg.org/attachments/c1723736-b413-4d7a-b91c-071c9d5cec22) | | 390 dark | ![](https://git.kayg.org/attachments/d1b75d70-b3f0-4dc4-af8c-a6673dcb5d9a) | ![](https://git.kayg.org/attachments/376eeaf5-bd99-48a1-aaa4-80a939d63609) | ### Real Safari (Mac VM, safaridriver, 1x: the VM reports devicePixelRatio 1) **cell** | | light | dark | |---|---|---| | 1440 | ![](https://git.kayg.org/attachments/f083bf27-ce4c-4ab7-b358-d26a5655a7df) | ![](https://git.kayg.org/attachments/415e0287-fd74-465c-819c-0910af63f5af) | | 390 | ![](https://git.kayg.org/attachments/e5188e52-13b6-4186-abab-357ede135b7b) | ![](https://git.kayg.org/attachments/f7cc11c1-10d9-4eb4-9d5c-462e483f9e54) | **row** | | light | dark | |---|---|---| | 1440 | ![](https://git.kayg.org/attachments/a1e7c631-7bdb-40f7-9b73-43d3c47b11d2) | ![](https://git.kayg.org/attachments/b7c052fa-265d-4e98-8224-eb9c66d0afd3) | | 390 | ![](https://git.kayg.org/attachments/43eb7c14-7bef-4b1f-bc18-e1d6df9e4177) | ![](https://git.kayg.org/attachments/0cbb7bc6-a026-4a60-9533-38797d89487a) | **col** | | light | dark | |---|---|---| | 1440 | ![](https://git.kayg.org/attachments/7bce09b9-e6b3-4d09-adee-43b222486f31) | ![](https://git.kayg.org/attachments/656542d1-416a-4179-a0b7-98b72dc31e8a) | | 390 | ![](https://git.kayg.org/attachments/0d2acb0d-fb5c-4284-b290-5c5e5820b24d) | ![](https://git.kayg.org/attachments/136c0856-20ce-4bb0-bfbe-26746084c646) | **rest** | | light | dark | |---|---|---| | 1440 | ![](https://git.kayg.org/attachments/b54a7c79-7346-4369-8d26-cf241388f157) | ![](https://git.kayg.org/attachments/1f30a8f8-0404-42b7-af40-f8af56245b64) | | 390 | ![](https://git.kayg.org/attachments/2c5ded28-1835-4ad2-b6f0-73c77f1031d9) | ![](https://git.kayg.org/attachments/8168b699-79de-4cbc-b96d-04b4ba92f22d) | **wide** | | light | dark | |---|---|---| | 1440 | ![](https://git.kayg.org/attachments/648f4607-d904-47c2-ae30-a1a6db13888a) | ![](https://git.kayg.org/attachments/c19a9e8e-473a-4dd0-8a51-d5c0ba29f2b5) | | 390 | ![](https://git.kayg.org/attachments/cbd65cb8-2975-49c2-beec-cca80db4e14c) | ![](https://git.kayg.org/attachments/5cd576e1-6513-4bca-b4d7-cc9f3bce065d) |
Author
Owner

Screenshots and state (issue #1009), 1f87444052

Tables (#845, #854; this is the #854 tip), restacked on dev 661123e94. Product (Chromium, 2x, re-taken after the rebase) next to the approved mockup, light and dark. Not READY: first paint JS is over dev (+387 B plain for #854, +506 B for #845; CSS +142 B). Specs: tables, tables-more, bars, dialogs, slash menu: green on Chromium and WebKit at both sizes except slash-menu:79, which fails about one run in six on dev 661123e94 itself. Gate passes (budget total 517.6 KiB). Rebase notes: dev's Insert sheet now lists the block registry, so Table is a registry block whose action runs the grid's insert (the registry's blocks may run something instead of writing markdown). Perf ABAB is queued behind other lanes.

Screenshots (2x; light and dark; 1440x900 and 390x844). Left: the approved mockup (review/calendar-2). Right: this PR.

cell

mockup this PR
1440 light
1440 dark
390 light
390 dark

row

mockup this PR
1440 light
1440 dark
390 light
390 dark

col

mockup this PR
1440 light
1440 dark
390 light
390 dark

rest

mockup this PR
1440 light
1440 dark
390 light
390 dark

wide

mockup this PR
1440 light
1440 dark
390 light
390 dark

Differences from the mockup: as in the earlier set (the row bar is shorter, the cell and column bars lack the mic, the mockup's own Share and More pills and warm sky).

**Screenshots and state (issue #1009), 1f874440527e0c527229655d487f7ad0660f3dd1** Tables (#845, #854; this is the #854 tip), restacked on dev `661123e94`. Product (Chromium, 2x, re-taken after the rebase) next to the approved mockup, light and dark. **Not READY: first paint JS is over dev (+387 B plain for #854, +506 B for #845; CSS +142 B).** Specs: tables, tables-more, bars, dialogs, slash menu: green on Chromium and WebKit at both sizes except `slash-menu:79`, which fails about one run in six on dev `661123e94` itself. Gate passes (budget total 517.6 KiB). Rebase notes: dev's Insert sheet now lists the block registry, so Table is a registry block whose action runs the grid's insert (the registry's blocks may run something instead of writing markdown). Perf ABAB is queued behind other lanes. ### Screenshots (2x; light and dark; 1440x900 and 390x844). Left: the approved mockup (review/calendar-2). Right: this PR. **cell** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/b9d2c01b-4fbf-450f-9503-6782646ff90a) | ![](https://git.kayg.org/attachments/b2b99b71-e0b3-43ea-9f25-71a6db9cdc5c) | | 1440 dark | ![](https://git.kayg.org/attachments/1b03b394-60e7-4d44-b728-9111b1d8f752) | ![](https://git.kayg.org/attachments/d4aeaca8-86ea-411a-ac27-81c20db83a63) | | 390 light | ![](https://git.kayg.org/attachments/a0ff14de-7f22-4022-8be3-713ce91257ab) | ![](https://git.kayg.org/attachments/f302261c-721b-49f9-b02b-fcfa08cf2d07) | | 390 dark | ![](https://git.kayg.org/attachments/91c4e693-792c-4561-a6d7-98e3ae31382a) | ![](https://git.kayg.org/attachments/503eb9c6-20dd-4a3c-b85f-299bfc8c1314) | **row** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/3efcecf1-e866-40e7-bf72-e785a200f7a4) | ![](https://git.kayg.org/attachments/6c3acc85-17fd-4d58-a092-8ddebe15ff7e) | | 1440 dark | ![](https://git.kayg.org/attachments/8692c997-7853-4282-9134-c6f7ad9284be) | ![](https://git.kayg.org/attachments/b6664f78-ffda-42e4-98b5-961b4a8e1ec0) | | 390 light | ![](https://git.kayg.org/attachments/31df8e62-888a-4e44-acf3-7d3c95166af8) | ![](https://git.kayg.org/attachments/50b9a24f-33fe-4391-a55e-29948bf614d1) | | 390 dark | ![](https://git.kayg.org/attachments/fae549ac-0915-4f3c-bb99-0bbe2dce97b4) | ![](https://git.kayg.org/attachments/6425d142-5bfe-4941-8055-5c9c3790d378) | **col** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/02691657-8ca3-4be6-8a0b-931e96519acd) | ![](https://git.kayg.org/attachments/bc1e08bf-02a2-4fbe-9a86-1f295d56d620) | | 1440 dark | ![](https://git.kayg.org/attachments/6ffb4727-5e97-4791-9d70-21a5cbb9e2a9) | ![](https://git.kayg.org/attachments/9c12bfd9-68fb-4178-ac55-c416fbeccf95) | | 390 light | ![](https://git.kayg.org/attachments/bc640f51-f310-486b-9735-b77ef926f803) | ![](https://git.kayg.org/attachments/4dfe44b0-7315-4431-839c-b73b216264c5) | | 390 dark | ![](https://git.kayg.org/attachments/9917c417-5b8f-4baf-908d-de9036f30915) | ![](https://git.kayg.org/attachments/152d51e3-9cce-447d-b83f-9fe5f0526852) | **rest** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/c3bcfd5a-10da-491d-b0e9-2896738376ba) | ![](https://git.kayg.org/attachments/f91c12cc-f711-4daa-abeb-0fc601c344ad) | | 1440 dark | ![](https://git.kayg.org/attachments/dd7df58f-d659-40d2-8723-1940d6ddded5) | ![](https://git.kayg.org/attachments/7e99331e-61a4-49bc-b42a-199b88f71998) | | 390 light | ![](https://git.kayg.org/attachments/ca8dea05-8d2d-4ac0-a50f-2ce2cd104dd5) | ![](https://git.kayg.org/attachments/a8a83750-fb7c-44c9-be4c-5dc828a0d62e) | | 390 dark | ![](https://git.kayg.org/attachments/68b3edde-1674-403f-a5a4-ddd37b0186fd) | ![](https://git.kayg.org/attachments/7679f2e3-7b8f-4934-80f0-38da97825541) | **wide** | | mockup | this PR | |---|---|---| | 1440 light | ![](https://git.kayg.org/attachments/53892c84-0036-4829-8113-0056f3e665a4) | ![](https://git.kayg.org/attachments/08095188-e10e-46a8-8e50-3832ae3a0bfc) | | 1440 dark | ![](https://git.kayg.org/attachments/5fc97be0-07cb-4e9e-8555-a6535c94e17b) | ![](https://git.kayg.org/attachments/31668d1e-0bbe-4d0d-b7b6-7466e98a8177) | | 390 light | ![](https://git.kayg.org/attachments/9f1fdd5b-3cff-4c91-bdcd-9cfd31d952cc) | ![](https://git.kayg.org/attachments/d4502a61-5e9f-4cdb-bc9c-4361e6f8333f) | | 390 dark | ![](https://git.kayg.org/attachments/33b1f879-bda1-4fbd-ac44-75c882b452ba) | ![](https://git.kayg.org/attachments/7ef04ee6-e799-4d04-946a-35f1d191ab89) | Differences from the mockup: as in the earlier set (the row bar is shorter, the cell and column bars lack the mic, the mockup's own Share and More pills and warm sky).
Author
Owner

Perf (perf-02, Chromium 4x slowdown, 10k notes, 5 interleaved rounds, dev built from 3f079de39 run twice as a control; medians of per-run p50 / p95, ms):

metric dev A dev B (control) #1022 credits #849 Contacts #854 tables #861 attachments
blaze.shown p50 / p95 36.2 / 64.7 36.0 / 65.7 35.5 / 67.3 37.3 / 65.1 35.1 / 62.3 34.7 / 66.6
type.long_note p50 / p95 21.9 / 55.5 23.5 / 53.4 22.8 / 55.2 23.3 / 54.8 21.8 / 57.0 26.3 / 61.5
type.nested_list p50 / p95 42.1 / 51.0 42.0 / 51.3 43.0 / 52.5 42.4 / 51.0 42.2 / 50.8 43.2 / 52.2
type.code_block p50 / p95 23.9 / 34.8 24.0 / 47.3 24.4 / 52.9 28.0 / 47.5 24.9 / 53.6 25.7 / 53.1
type.code_note_prose p50 / p95 28.0 / 63.0 29.6 / 64.0 29.6 / 68.6 33.4 / 68.5 27.9 / 69.5 37.1 / 71.2
blaze.cpu 76.8 76.3 75.8 75.8 75.4 77.2
blaze.long_task_max 157 153 157 151 149 162

The dev-vs-dev control moves by as much as any arm (code_block p95 34.8 vs 47.3; long_note p95 53.4 vs 55.5), so there is no change beyond the noise on any metric, for any arm. Arms are the heads built from the rebased branches (#854 f58c71010, #861 f20b9457b, #849 as 144013926 before its budget-only commit, #1022 17010f469).

First paint on dev 3f079de39 (before credits): +365 B plain / +384 B normalised over dev. Specs on the rebased head f58c71010: only dev's own failures (lazy-ui:70, preload:89 at 390); gate passes.

**Perf** (perf-02, Chromium 4x slowdown, 10k notes, 5 interleaved rounds, dev built from `3f079de39` run twice as a control; medians of per-run p50 / p95, ms): | metric | dev A | dev B (control) | #1022 credits | #849 Contacts | #854 tables | #861 attachments | |---|---|---|---|---|---|---| | blaze.shown p50 / p95 | 36.2 / 64.7 | 36.0 / 65.7 | 35.5 / 67.3 | 37.3 / 65.1 | 35.1 / 62.3 | 34.7 / 66.6 | | type.long_note p50 / p95 | 21.9 / 55.5 | 23.5 / 53.4 | 22.8 / 55.2 | 23.3 / 54.8 | 21.8 / 57.0 | 26.3 / 61.5 | | type.nested_list p50 / p95 | 42.1 / 51.0 | 42.0 / 51.3 | 43.0 / 52.5 | 42.4 / 51.0 | 42.2 / 50.8 | 43.2 / 52.2 | | type.code_block p50 / p95 | 23.9 / 34.8 | 24.0 / 47.3 | 24.4 / 52.9 | 28.0 / 47.5 | 24.9 / 53.6 | 25.7 / 53.1 | | type.code_note_prose p50 / p95 | 28.0 / 63.0 | 29.6 / 64.0 | 29.6 / 68.6 | 33.4 / 68.5 | 27.9 / 69.5 | 37.1 / 71.2 | | blaze.cpu | 76.8 | 76.3 | 75.8 | 75.8 | 75.4 | 77.2 | | blaze.long_task_max | 157 | 153 | 157 | 151 | 149 | 162 | The dev-vs-dev control moves by as much as any arm (code_block p95 34.8 vs 47.3; long_note p95 53.4 vs 55.5), so there is no change beyond the noise on any metric, for any arm. Arms are the heads built from the rebased branches (#854 `f58c71010`, #861 `f20b9457b`, #849 as `144013926` before its budget-only commit, #1022 `17010f469`). First paint on dev `3f079de39` (before credits): +365 B plain / +384 B normalised over dev. Specs on the rebased head `f58c71010`: only dev's own failures (lazy-ui:70, preload:89 at 390); gate passes.
Author
Owner

READY FOR MERGE: tables 2 (head 8c6ec171b, on #845)

Rebased on dev 9438918f3 (#848/#849 in), budgets regenerated from a fresh build of this head, bundle gate clean, specs on dev-02 (idle host) with calternal-h861, chromium and webkit at 1440 and 390 (preload, lazy-ui, lazy-offline, glass, shortcuts and this PR's own specs): 0 failed.

dev #845 + #854
first paint plain / normalised 227531 / 227081 B 227938 / 227333 B (+407 / +252 B)
CSS 18234 18399 (+165)
budget total 537.55 KiB 542.27 KiB (tables 10.39)

234 passed, 42 skipped. Perf: the 11-09 run on the previous head is on #854.

## READY FOR MERGE: tables 2 (head `8c6ec171b`, on #845) Rebased on dev `9438918f3` (#848/#849 in), budgets regenerated from a fresh build of this head, bundle gate clean, specs on dev-02 (idle host) with `calternal-h861`, chromium and webkit at 1440 and 390 (preload, lazy-ui, lazy-offline, glass, shortcuts and this PR's own specs): **0 failed**. | | dev | #845 + #854 | |---|---|---| | first paint plain / normalised | 227531 / 227081 B | 227938 / 227333 B (**+407 / +252 B**) | | CSS | 18234 | 18399 (+165) | | budget total | 537.55 KiB | 542.27 KiB (tables 10.39) | 234 passed, 42 skipped. Perf: the 11-09 run on the previous head is on #854.
Author
Owner

READY FOR MERGE: tables 2 (head fb563bf69, on #845)

Merged dev fe2efbf11 (#1044) into the branch (it also merges cleanly with 4274dafb4, git merge-tree), budgets regenerated from a fresh build, bundle gate clean, specs on dev-02 with calternal-h861, chromium and webkit at 1440 and 390. Dev baseline on fe2efbf11: 228023 B plain / 227378 B normalised / CSS 18236.

first paint plain / normalised CSS budget total
228298 / 227989 B (+275 / +611 B; growth accepted by kayg) 18400 (+164) 542.54 KiB (≤ 543.9)

Specs: tables-more (including the motion spec that #1044 would have broken) and keys-no-motion pass, 48 passed, 0 failed; earlier full set 221 passed. Gate clean.

## READY FOR MERGE: tables 2 (head `fb563bf69`, on #845) Merged dev `fe2efbf11` (#1044) into the branch (it also merges cleanly with `4274dafb4`, `git merge-tree`), budgets regenerated from a fresh build, bundle gate clean, specs on dev-02 with `calternal-h861`, chromium and webkit at 1440 and 390. Dev baseline on `fe2efbf11`: 228023 B plain / 227378 B normalised / CSS 18236. | first paint plain / normalised | CSS | budget total | |---|---|---| | 228298 / 227989 B (**+275 / +611 B**; growth accepted by kayg) | 18400 (+164) | 542.54 KiB (≤ 543.9) | Specs: `tables-more` (including the motion spec that #1044 would have broken) and `keys-no-motion` pass, 48 passed, 0 failed; earlier full set 221 passed. Gate clean.
Author
Owner

Handoff: head fb563bf69 is pushed and READY as posted

Handoff (usage limit): the x86 pixel and contrast run on dev-01 (4 projects, 15 specs) was stopped before finishing this head; I released its job. Done: dev fe2efbf11 and the earlier heads (#902, #854, rows tip, #878 base) ran there with the same 6 phone-bars photo-dark failures on dev itself and nothing new. Next step: re-run px-d1b.sh-style pixel set on this head on dev-01 (about 1 h per head) if you want it before merging.

## Handoff: head `fb563bf69` is pushed and READY as posted Handoff (usage limit): the x86 pixel and contrast run on dev-01 (4 projects, 15 specs) was stopped before finishing this head; I released its job. Done: dev `fe2efbf11` and the earlier heads (#902, #854, rows tip, #878 base) ran there with the same 6 `phone-bars` photo-dark failures on dev itself and nothing new. Next step: re-run `px-d1b.sh`-style pixel set on this head on dev-01 (about 1 h per head) if you want it before merging.
Some checks failed
CI / server (pull_request) Has been cancelled
CI / rust (pull_request) Has been cancelled
CI / web (pull_request) Has been cancelled
Markdown extraction contract / markdown-native-contract (pull_request) Has been cancelled
Markdown extraction contract / markdown-editor-contract (pull_request) Has been cancelled
This pull request is broken due to missing fork information.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin port/port-tables-2:port/port-tables-2
git switch port/port-tables-2

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch port/port-tables
git merge --no-ff port/port-tables-2
git switch port/port-tables-2
git rebase port/port-tables
git switch port/port-tables
git merge --ff-only port/port-tables-2
git switch port/port-tables-2
git rebase port/port-tables
git switch port/port-tables
git merge --no-ff port/port-tables-2
git switch port/port-tables
git merge --squash port/port-tables-2
git switch port/port-tables
git merge --ff-only port/port-tables-2
git switch port/port-tables
git merge port/port-tables-2
git push origin port/port-tables
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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
kayg/calternal!854
No description provided.