a11y: task checkbox, sheet focus, palette semantics (#935 High) #946
Closed
kayg
wants to merge 0 commits from
fix/a11y-high-935 into dev
pull from: fix/a11y-high-935
merge into: kayg:dev
kayg:main
kayg:feat/style-sheet-fixes
kayg:storage/wal-checkpoint-off-save-1051
kayg:t3/paged-search-reconcile-final
kayg:feat/pass8
kayg:review/calendar-2
kayg:fix/shared-row-swipes
kayg:feat/contrast
kayg:dev
kayg:feat/collections-db
kayg:fix/instant-keys-1056
kayg:feat/money-round
kayg:perf/stalls-1054
kayg:wip/tiering-v3-cold4
kayg:wip/tiering-v3-cold5
kayg:port/rows-actions
kayg:port/rows-drop
kayg:port/hidden-blocks
kayg:port/rows
kayg:port/port-tables
kayg:port/port-tables-2
kayg:t3/mail-1011-liveness
kayg:port/devices
kayg:port/port-attachments
kayg:port/port-attachments-2
kayg:port/port-attachments-3
kayg:docs/design-consistency
kayg:docs/engineering-standards
kayg:fix/rusqlite-0.41-rustsec-2026-0459
kayg:feat/iphone-fixes
kayg:shared/restore-and-stale-918-919
kayg:fix/phone-top-band-contrast
kayg:feat/notes-approve
kayg:perf/soak-max-gate
kayg:feat/files-s1-identity
kayg:fix/lifecycle-event-id
kayg:feat/quickfix
kayg:wip/tiering-v3-cold
kayg:perf/web-mockup-frame-fixes
kayg:port/contacts-merge
kayg:port/contacts-edit
kayg:test/shared-room-no-deleted-text
kayg:perf/first-paint-credits
kayg:fix/shared-history-after-grant
kayg:fix/phone-swipe-regressions
kayg:feat/contrast-r1
kayg:review/sharing-pr3-review
kayg:feat/tiering-v3-s2-tags
kayg:feat/folder-drop
kayg:fix/deskpills-lazy-share
kayg:feat/sharing-s1-pr3
kayg:tmp/money-round-before
kayg:fix/phone-pane-backdrop-roots
kayg:fix/palette-preload-chips
kayg:fix/invite-defaults
kayg:port/tasks-matrix
kayg:fix/restore-green-gates
kayg:fix/sharing-fast-path-hardening
kayg:t3/photos-s1
kayg:feat/tiering-v3-s1-namespace
kayg:notes-archive-hide
kayg:feat/tasks-actions
kayg:t3/photos-plan-slice-one
kayg:feat/whiteboard-s1
kayg:t3/paged-search-reconcile
kayg:t3/smooth-pane-transitions
kayg:t3/index-position-startup-scan
kayg:fix/private-staging-759b-r2
kayg:feat/dav-transport
kayg:feat/imap-notes-fetch
kayg:feat/imap-notes-projection
kayg:feat/imap-notes-readonly
kayg:feat/imap-notes-auth
kayg:feat/imap-notes-server-foundation
kayg:docs/undo-block-ids-plan
kayg:fix/undo-768
kayg:proto/block-identity-v7d
kayg:issue/carddav-read-perf-fix-r2
kayg:issue/carddav-read-r2
kayg:docs/imap-766-plan-v2
kayg:docs/imap-notes-plan
kayg:docs/quota-plan-2
kayg:fix/parallel-test-flakes
kayg:feat/contacts-companion-pure
kayg:docs/calendar-backend-v2-plan
kayg:feat/calendar-ical-converter
kayg:docs/tasks-writes-v2-plan
kayg:docs/carddav-writes-v2-plan
kayg:docs/contacts-import-v2-plan
kayg:issue/610-pm-midnight
kayg:feat/calendar-v2-s1-containment
kayg:docs/dav-recorder-v2-plan
kayg:plan/previews-865
kayg:plan/save-log-durable-entry
kayg:fix/e2e-data-on-ram
kayg:feat/appwindow3
kayg:feat/appwindow2
kayg:feat/appwindow
kayg:feat/money-p1
kayg:feat/keys-sheet
kayg:review/calendar-2-themes
kayg:feat/smooth-cursor
kayg:fix/float-style
kayg:review/calendar-2-float
kayg:release/2026-11-06-hotfix
kayg:archive/port/rows-drop-code
kayg:archive/port/rows-actions
kayg:archive/port/rows
kayg:scratch/tasks-894-ui-gates
kayg:review/calendar-2-night-wip
kayg:release/2026-11-05
kayg:archive/feat/tiering-v3-s1-namespace
kayg:archive/flaky/rows-drop-fixed
kayg:archive/flaky/rows-actions
kayg:archive/feat/tiering-v3-reader
kayg:archive/feat/tiering-v3-roots
kayg:archive/flaky/rows
kayg:sim/bm15-final
kayg:sim/bm15-fix
kayg:sim/bm15-bis-932
kayg:sim/bm15-bis-909
kayg:sim/bm15
kayg:sim/bm15-bis-887
kayg:perf/tiering-option-b
kayg:port/style-3
kayg:port/style-2
kayg:port/style
kayg:fix/sw-lazy-precache
kayg:fix/vim-w-waits-for-save
kayg:fix/signout-test-races
kayg:fp-scratch/all
kayg:sim/bm15-first-paint
kayg:archive/bm15/rows-drop
kayg:archive/bm15/rows-actions
kayg:fix/palette-snippet-contrast
kayg:archive/bm15/rows
kayg:archive/bm15/hidden
kayg:archive/plan/save-log-durable-entry
kayg:mock/money-fix2
kayg:archive/fix/e2e-data-on-ram
kayg:mock/appearance-all
kayg:mock/pill-press
kayg:archive/docs/design-consistency
kayg:mock/auto-swipes
kayg:mock/mail-actions
kayg:archive/feat/mail-p1
kayg:mock/money-static
kayg:archive/review/standards-917
kayg:archive/docs/engineering-standards
kayg:perf/tiering-761-fix
kayg:mock/type-audit
kayg:mock/third-pane
kayg:feat/contacts-import-v2-s1
kayg:perf/executor-hot-path
kayg:archive/port/hidden-blocks
kayg:archive/port/devices
kayg:scratch/executor-on-894
kayg:scratch/executor-spans2
kayg:scratch/executor-spans
kayg:train/2026-11-03-bm14c
kayg:archive/port/rows-drop
kayg:feat/tiering-761-d-scale
kayg:feat/tiering-761-c-index
kayg:feat/tiering-761-b-reader
kayg:archive/review/sharing-pr3-review-9fec3d1f
kayg:train/2026-11-03-bm14b
kayg:perf/ports-lazy-budgets
kayg:feat/tiering-761-a-migration
kayg:train/2026-11-03-bm14
kayg:train/2026-11-03-bm12
kayg:archive/review/sharing-pr3-review
kayg:archive/feat/sharing-s1-pr3
kayg:train/2026-11-03-bm11
kayg:archive/feat/imap-notes-fetch
kayg:train/2026-11-03-bm10
kayg:archive/review/sharing-pr3-review-code
kayg:archive/plan/previews-865
kayg:train/2026-11-02-bm9
kayg:archive/port/port-attachments-3
kayg:archive/port/contacts-merge
kayg:fix/motion-audit-859
kayg:train/2026-11-02-bm8
kayg:archive/scratch/bm8-prep
kayg:archive/port/port-pickers
kayg:archive/port/port-tables-2
kayg:archive/port/port-tables
kayg:archive/feat/sharing-s1-pr3-code
kayg:archive/scratch/bm7-fixed
kayg:train/2026-11-02-bm7
kayg:archive/fix/parallel-test-flakes-code-minipc01
kayg:train/2026-11-02-bm6
kayg:docs/imap-766-readonly-slice
kayg:feat/dav-recorder-v3
kayg:research/788-diagnosis
kayg:archive/fix/parallel-test-flakes
kayg:archive/perf/pr792-cold-index-edit
kayg:docs/sharing-slice-1
kayg:archive/docs/imap-766-plan-v2
kayg:feat/dav-recorder-v2
kayg:archive/docs/dav-recorder-v2-plan
kayg:spike/imap-766-s0-cases
kayg:archive/fix/undo-768
kayg:feat/dav-recorder
kayg:archive/docs/contacts-import-v2-plan
kayg:archive/feat/calendar-ical-converter
kayg:feat/contacts-import
kayg:perf/cold-growth-on-764
kayg:perf/cold-growth-on-tiering
kayg:archive/docs/tasks-writes-v2-plan
kayg:archive/docs/calendar-backend-v2-plan
kayg:archive/feat/contacts-companion-pure
kayg:feat/tasks-set-status
kayg:feat/tasks-move-reorder
kayg:archive/docs/carddav-writes-v2-plan
kayg:archive/feat/calendar-v2-s1-containment
kayg:feat/tasks-delete-promote-duplicate
kayg:archive/feat/dav-transport
kayg:archive/fix/carddav-rebuild-r1
kayg:archive/fix/carddav-retention-r1
kayg:feat/carddav-writes
kayg:perf/quota-on-tiering
kayg:perf/quota-simple
kayg:perf/cold-growth-on-quota-stack
kayg:feat/calendar-identity
kayg:feat/calendar-event-parser
kayg:feat/calendar-props-maps
kayg:port/glass-when-ring
kayg:feat/tiering-761-s1
kayg:wip/10by32-01-impl-759b-scratch-20261030
kayg:wip/6by32-01-bm3-webkit-pause-20261030
kayg:wip/10by32-01-bm3-chromium-pause-20261030
kayg:wip/6by32-01-tier-761-s1-pause-20261030
kayg:spike/imap-766-s0
kayg:wip/6by32-02-calternal-pause-20261030
kayg:wip/8by64-01-review-688-pause-20261030
kayg:wip/6by32-01-verify-744-pause-20261030
kayg:wip/6by32-01-verify-742-pause-20261030
kayg:fix/private-staging-759b
kayg:wip/6by32-01-review-748-pause-20261030
kayg:wip/6by32-01-review-733c-pause-20261030
kayg:wip/6by32-01-review-733b-pause-20261030
kayg:wip/6by32-01-perf-idle-8-pause-20261030
kayg:wip/6by32-01-perf767-base-pause-20261030
kayg:wip/6by32-01-perf767b-767-pause-20261030
kayg:wip/6by32-01-perf767b-764-pause-20261030
kayg:wip/6by32-01-perf767-767-pause-20261030
kayg:wip/6by32-01-perf767-764-pause-20261030
kayg:wip/6by32-01-lists-b-pause-20261030
kayg:wip/6by32-01-ids-verify5-pause-20261030
kayg:wip/6by32-01-ids-verify4-pause-20261030
kayg:review/calendar-month
kayg:wip/10by32-02-undo-768-20261030
kayg:test/ids-verify3
kayg:wip/10by32-02-bm3-chromium-20261030
kayg:wip/10by32-01-review-753-20261030
kayg:wip/10by32-01-perf-idle-2-20261030
kayg:wip/10by32-01-bm2-webkit2-20261030
kayg:plan/759b-staging
kayg:train/2026-10-30-bm2
kayg:review/758b-tests
kayg:review/758-tests
kayg:review/764d-tests
kayg:review/767b-tests
kayg:review/preview-2026-10-29
kayg:review/767-tests
kayg:docs/tiering-731-plan
kayg:wip/c6b02-when2
kayg:wip/c6b02-tasks-create-fix5
kayg:wip/c6b02-settings-frost-mock
kayg:wip/c6b02-settings-frost-base
kayg:wip/c6b02-settings-frost
kayg:wip/c6b02-ring
kayg:wip/c6b02-review-733d
kayg:wip/c6b02-bm1-full-a
kayg:wip/compute02-when-field
kayg:wip/compute02-webkit-lists-repro
kayg:wip/compute02-train-bl2-dev
kayg:wip/compute02-dev-green-pw164
kayg:docs/deploy-plan
kayg:review/764c-tests
kayg:review/764b-tests
kayg:review/748g-tests
kayg:review/764-tests
kayg:review/759b-tests
kayg:fix/storage-owner-liveness-642
kayg:fix/storage-fix-7
kayg:wip/compute02-storage-fix-7
kayg:review/759-tests
kayg:feat/tiering-731
kayg:wip/tiering-731-first-attempt
kayg:wip/compute02-storage-fix-1
kayg:review/754g-tests
kayg:perf/idle-honest-2
kayg:review/754f-tests
kayg:review/754e-tests
kayg:review/755-tests
kayg:review/754d-tests
kayg:review/754c-tests
kayg:review/754b-tests
kayg:review/754-tests
kayg:fix/storage-private-tmp-642-dev
kayg:wip/compute02-verify-750
kayg:test/ids-verify5
kayg:test/ids-verify4
kayg:fix/storage-exact-file-quarantine-642
kayg:wip/compute02-verify-740
kayg:perf/one-flush-save
kayg:review/calendar-static
kayg:wip/compute02-verify-737
kayg:review/indexing-ring
kayg:review/when-field-2
kayg:wip/compute02-review-733
kayg:proto/block-identity-2-review
kayg:proto/block-identity-review
kayg:wip/c6b02-tc-design
kayg:review/when-field
kayg:issue/tasks-create-ids
kayg:issue/tasks-create
kayg:review/combined
kayg:wip/compute02-review-combined
kayg:review/task-polish
kayg:review/top-buttons
kayg:review/q1-q5
kayg:train/2026-10-26-bl2
kayg:archive/wt-398h
kayg:archive/train-bm-proptest-seed
kayg:archive/integ325-293
kayg:archive/integ325-ci
kayg:archive/client-auth-review-baseline
kayg:archive/wt-sim-4853
kayg:archive/wt-sim-4811
kayg:archive/wt-448m
kayg:archive/wt-398a-allocator
kayg:issue/calendar-adr
kayg:archive/old/train/2026-10-23bk2
kayg:archive/old/train/2026-10-23bk
kayg:issue/469-mockup-9a
kayg:issue/smart-tasks-mockup
kayg:issue/469-menus
kayg:issue/652-signout-flake
kayg:issue/652-history-fix7
kayg:issue/652-history-fix6
kayg:archive/old/issue/spring-check-perf
kayg:issue/spring-check-perf
kayg:issue/659-rename-fast
kayg:archive/old/train/2026-10-21ar
kayg:issue/search-hardening-3
kayg:issue/652-history-fix5
kayg:issue/660-port-sheets-glass
kayg:issue/652-history-fix4
kayg:issue/652-history-fix3
kayg:issue/652-history-fix2
kayg:issue/652-history-flake
kayg:train/2026-10-21an
kayg:issue/settings-admin-port
kayg:issue/search-port
kayg:train/2026-10-20am
kayg:issue/storage-split-fix2
kayg:issue/storage-split
kayg:archive/old/issue/folder-ids-fix
kayg:train/2026-10-20al
kayg:archive/old/issue/folder-ids
kayg:train/2026-10-20ak
kayg:issue/tables-mockup
kayg:train/2026-10-19aj
kayg:train/2026-10-19ai
kayg:issue/469-merge-fixes
kayg:issue/sidebar-band
kayg:archive/old/issue/608-settings-spec
kayg:train/2026-10-19ah
kayg:issue/swipe-offscreen
kayg:train/2026-10-19ag
kayg:archive/old/issue/590-nlp-adr
kayg:archive/old/issue/587-event-after-write-2
kayg:train/2026-10-19af
kayg:archive/old/issue/587-event-after-write
kayg:issue/469-pill-room-c
kayg:issue/469-pill-room
kayg:train/2026-10-19ae
kayg:issue/469-narrow-handle
kayg:issue/397-ios-swipe-2
kayg:archive/old/issue/adrs-photos-files-tasks
kayg:issue/469-desk-fixes
kayg:archive/old/issue/auto-update-adr
kayg:issue/469-filter-gap
kayg:issue/469-port-1b
kayg:issue/442-opacity-flake
kayg:archive/397-ios-swipe-2
kayg:issue/327-web-fast-3
kayg:archive/old/issue/469-port-1
kayg:issue/469-port-1
kayg:issue/327-web-fast-2
kayg:archive/old/issue/327-web-fast
kayg:archive/old/issue/425-stt-bench-vq1
kayg:archive/old/issue/445-no-bleed
kayg:archive/old/issue/400-swipe-mockup-2
kayg:issue/426-client-review
kayg:issue/426-client-2
kayg:issue/426-client
kayg:archive/old/issue/476-safe-area-lab
kayg:archive/445-top-light-2
kayg:archive/old/issue/445-top-light
kayg:issue/471-blocks-mockup
kayg:archive/old/issue/448-links-app-2
kayg:archive/old/issue/448-links-app
kayg:archive/old/issue/398-cold-links
kayg:issue/434-442-small-2
kayg:issue/434-442-small
kayg:archive/old/issue/398-unload
kayg:archive/old/issue/445-bottom-band
kayg:issue/445-bottom-band
kayg:issue/351-rem-3
kayg:archive/312-views-mockup
kayg:issue/351-rem-2
kayg:issue/351-rem
kayg:archive/old/issue/327-first-note
kayg:issue/395-width-phone
kayg:archive/old/issue/327-typing
kayg:issue/396-ios-edges
kayg:issue/397-ios-swipe
kayg:archive/398-allocator
kayg:archive/old/issue/327-notes-index
kayg:issue/345-347-contrast-empty-2
kayg:archive/old/issue/44-arenas
kayg:issue/44-arenas
kayg:archive/integ325
kayg:archive/old/issue/327-perf-harness
kayg:archive/old/issue/44-thp
kayg:issue/44-thp
kayg:archive/old/issue/285-sticky-pills
kayg:archive/old/issue/44-trim-3
kayg:issue/44-trim-3
kayg:archive/old/issue/165-cards
kayg:archive/old/issue/165-picker-2
kayg:archive/old/issue/212-multi-select
No reviewers
Labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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!946
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/a11y-high-935"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes the three High findings of the prod UX audit (#935). No new UI; behaviour and markup only.
What changed
1. Task checkbox in the Notes editor (
packages/editor/src/syntax/widgets.ts,transforms/tasks.ts,apps/web/src/styles/cm.css)tabindex=0); Space and Enter flip it. The key is handled on the box itself, so Enter never splits the list line, and typing is untouched. A keyboard flip is instant (no spring); a pointer press still plays the spring check.Task: Renew passport,Cancelled task: …(links and inline marks reduced to text, cut at 80 characters). It is read when the box gets focus and when it is drawn, never per keystroke.::after(inset: -14px); the drawn box stays 18 px. Accent focus ring like every other control (hidden after a pointer press, as elsewhere).2. Sheets (
packages/ui/src/components/Morph.svelte, newpackages/ui/src/lib/dialog-focus.ts)Morphcapsule, so the fix lives there: while its role isdialogit getsaria-modal="true",aria-labelledby(a hidden title that follows the sheet's name), focus moves in, Tab/Shift+Tab stay inside, and on close focus returns to the opener (the tool button is found again after the bar swaps its layers). Esc is still the app's (BottomBar).lib/dialog-focus.ts, called by each lazy sheet and placed in theidle-screenschunk, so the first paint carries only a 3-line hook that records the opener.3. Search palette and phone list search (
composer/FoundList.svelte,ComposerBody.svelte,components/ListSearch.svelte)<button>is now therole=optionitself (li role=none), so no option contains anything interactive (axenested-interactive). The field is the combobox:aria-autocomplete="list",aria-controls,aria-expanded, andaria-activedescendant= the highlighted option (cmp-opt-N/ls-N).Decisions
axe-coreas anapps/webdevDependency (specs only, not shipped).task-check(Cancelled task: cancelled),search-palette(the option is the button).bar-focus/lazy-styledencode #268.Tests
apps/web/e2e/a11y-high.spec.ts(Chromium + WebKit, 1440 and a 402 pt phone), with axe on the markup each fix changed:aria-modal,aria-labelledbyresolves to the name, focus inside after open, 40 Tab + 40 Shift+Tab never leave, axe, Esc closes and the opener button is focused; desktop pointer open returns focus to the editor;aria-activedescendantfollows ArrowDown to anaria-selectedoption, focus stays in the field, axe (nested-interactiveand the ARIA structure rules); phone list search the same.Also in this PR (to offset the first-paint bytes): the editor
baseTheme, mockup-only CSS and two unused icons are removed; details per step and gates are in the comments below.Gate results (head
cb007ba4, dev-01,CI=1 --retries=0 --workers=1, through~/bin/slot; backend binary built from this tree)e2e/a11y-high.spec.ts+ 26 existing specs touching bars, sheets, palette, tasks, editor, lazy-ui (--project=chromium-1440 chromium-390)webkit-1440 webkit-390vitestweb 96, editor 511, ui 89node --test scripts/test/*.test.mjsandfilter-motion.mjssvelte-checkreview4-signout.spec.ts; none in changed files)action-types.mjs --checkSpecs run: a11y-high task-check keys-tab keys-rings dialog-stable bar-focus bar-taps bar-stays bar-stable search-palette composer composer-tasks list-search info sheet-geometry lazy-styled lazy-sheet-recovery lazy-ui lazy-offline preload link-suggest picker phone-targets glass-roots shortcuts editor toast-bar keys-no-motion. WebKit ran on dev-01 (Playwright WebKit), not dev-02, to avoid an aarch64 backend build; phone project width 402 inside the spec (project default 390).
The one WebKit failure:
composer-tasks.spec.ts:115"a line about a person makes a contact card, Undo deletes it" (webkit-1440; Undo button never shows).--repeat-each=10on this branch: 10/10 fail; on origin/dev with the same binary: 10/10 fail. So it is not caused by this PR; it needs its own issue (contacts.create toast on WebKit).First-paint bytes vs origin/dev (
bundle-size.mjs, brotli q11)Verdict: first paint grows slightly (+133 B real code, +392 B as built; +19 B CSS). It stays inside the budgets (240 KB JS, 22.1 KB CSS) and I did not touch budgets. About 260 B of the official JS figure is hash noise: rebuilding dev with the lazy-chunk files unchanged but different content hashes moves the index chunk by ~180 B with identical raw bytes. I cut it down from +782 B by moving the sheet rules into the lazy
idle-screenschunk, drawing the task mark from one parsed string, and keeping only a hook inMorph. The remaining growth is the task box's keys and name (index) and the Morph hook; I could not remove it without dropping a requested behaviour. Needs your call, or an offset from the first-paint diet PRs (#906/#908).Typing and frame times: the task name is computed on focus only, nothing was added to the per-key path. I did not run the perf VMs or the Mac frame harness (no animation or typing path changed; the spring check CSS is unchanged).
Round 2: rule fixes (head
8812570f, baseorigin/dev=9377d711)Note: you named
41f2efa3as the dev base. That commit is "Merge train BM13", an ancestor of the dev tip;origin/devis9377d711and this branch is on it, so all numbers below are against9377d711(built the same way, same host).1. Lazy-import count: back to 18
apps/web/scripts/lazy-ui-plugin.tsis identical to dev again. The sheet focus rules are no longer imported withimport(): each lazy sheet (Inspector,InsertSheet,InfoSheet,NotePicker, all inidle-screens) callssheetDialog()frompackages/ui/src/lib/dialog-focus.ts, and that file is placed inidle-screensby the existing group invite.config.ts(the regex now lists it next tomove-to-note).Morphonly records who had focus when a sheet opens ($effect.pre, 3 lines, inlib/dialog-opener.ts).2. First-paint bytes vs dev (
bundle-size.mjs, brotli q11 / gzip 9; same host, same Node)So raw, gzip, CSS in every unit, and brotli with the asset-name hashes held constant are all at or below dev. As-built JS brotli is +21 B, which I could not close: brotli q11 on an 845 KB chunk jitters by about ±150 B between builds whose content differs by a few bytes (table below: a change that removes 17 raw bytes moved as-built brotli by +33 B and a change that removes 230 raw moved it by +270 B). I stopped trimming at the point where each further saving was smaller than that noise. If you want it strictly ≤ 0 as built, the one big lever left is the 6 mockup-only icons in the shared
Icon.svelte(about 0.5 KB br), which I did not take because the mockup still draws them.What I took out, and each step's number
(raw / gzip not shown for brevity where equal; "norm" = brotli with hashes normalised; negative is smaller; JS first-paint)
cb007ba4f22ad723import(): sheets callsheetDialog()1acd998fbase.cssalready rings:focus-visibleunderdata-input=keyboard),role/tabindexin the template, nostopPropagationbf29a483editor/src/theme.tsbaseTheme: every rule in it (.cm-task,.cm-bullet,.cm-block-pill,.cm-block-handle) is overridden bycm.cssunder.page; the only other consumer (mockup) styles none of those classes64b3f0c3.margin-controls*,.handle*,.drop-line*,.block.dragged/.drop-target,.cm-rulef7fa2dad6d2b81eaMorphenter/exit share 3 fade functions instead of 7 copies3f45040dstarandswatch(referenced nowhere, mockup or any open branch)8812570f(I tried one more trim, "read the mark from the line in hand": −17 raw, +33 as-built, so it was reverted.)
3. Gates (dev-01,
CI=1 --retries=0 --workers=1, via~/bin/slot, backend built from this tree; same 27-spec list as before pluslazy-offlineandpreload)a11y-high.spec.ts, Chromium + WebKit, 1440 + 402: 28 passed (this run also checks that the focused task box wears a solid keyboard ring).composer-tasks.spec:51×2,composer-tasks.spec:115,composer.spec:51. Flaky rule,--repeat-each=10on webkit-1440: this branch 2 of 30 fail, origin/dev 10 of 30 fail, so they are not from this PR; the cause is the toast clock and is fixed in #950 (issue #948), wherecomposer-tasks:115goes from 10/10 failing to 10/10 passing.vitestweb 96, editor 511, ui 89 pass;node --test scripts/test/*.test.mjsandfilter-motion.mjspass;svelte-check2 errors + 15 warnings, identical to dev (none in changed files).(Reading the round-2 table: every number is cumulative against dev at that commit, not the step's own change. The jitter is why single steps look backwards: e.g. step 6 is −125 raw yet +270 as built.)
#946 per-PR gates: GREEN at
c55a3b42(Style-sheet focus-loop spec skipped, as instructed)Head =
e59eb683+ merge of origin/devb5e8dcb2(no conflicts). Branch alone vs dev;CI=1 --retries=0 --workers=1through~/bin/slot.--grep-invert "Style: labelled")perf/web.sh --bundle-only --gatecheck-ui-primitives(from #941, run on this tree)Not covered here (skipped by design):
a11y-high"Style: labelled, focus in and kept" at 1440 and 390, which fails 3 rounds and is being redesigned (sentinel pair /inert).Merged into dev by the orchestrator (U1 per-PR gates GREEN), dev head
34c14822.Pull request closed