Tasks UI slices 1–2 #832
Closed
kayg
wants to merge 13 commits from
feat/tasks-ui-s1-s2 into dev
pull from: feat/tasks-ui-s1-s2
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!832
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/tasks-ui-s1-s2"
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?
Slices (Tasks UI port plan, section 9)
tasks.set-status(+many)tasks.move,tasks.reorderwritertasks.delete,tasks.promote,tasks.duplicateTasksScreen+ size gate (tab stays off)when/)tasks.set-statusDecided by kayg (11-01): the mockup is approved and its values win over TASTE.md; Matrix and Timeline wait for a redesign; List first, then Board; in-app ticks use
tasks.set-status; the tab turns on only once ticking and the card work; never stub actions.What this does
#/tasks/<today|upcoming|anytime|someday|tag:name>opens the Tasks screen. The tab stays off (registerApp("tasks")is not called);appTabs()takes analsoid so the phone's tab bar shows Tasks while you are on it.TasksScreen-*), fetched only when that address is opened, never by idle warming. While it loads, Notes stay on screen (no blank frame). It is not inwarmUI's list.tasks.counts). Today shows how many are left; the rest stay quiet, as in the mockup.tasks/tasks.css).+opens the Composer (search/add).Decisions
--r-selectand--prio-*live in the lazytasks.css, not intokens.css(first-paint CSS stays at 20.9 KB).aria-disabled). Slice 3 enables them and the ratio then applies (it measured 2.8:1 light and 2.1:1 dark with the default outline ink on glass): that slice must pick an outline ink that reaches 3:1.--ink-2(the mockup's--ink-3measured 4.46:1 at dawn, light).Bundle (brotli,
perf/web.sh --bundle-only --gate, dev-01)all_js_brotli)First-paint edits:
App.svelte(the Tasks layer,awayinstead ofinSettingsfor the Notes layer),lib/lazy-ui.svelte.ts(onelazy()line),lib/apps.ts(appTabs(also)),PhoneStack.svelte(docscrollfollowsactive), build plugin regex.The
all_js_brotligate fails: 317.1 KB against 315. Slices 1–2 add about 5.1 KB to a total that had about 2.9 KB left. The plan (Q4) says to ask kayg for a cap raise with numbers when the measured sum passes 315 KB. I did not touch the cap. Needs kayg: raiseweb.bundle.all_js_brotli(the full Tasks UI is estimated at 35–45 KB brotli, so slice 2 alone will not be the last raise), or trim elsewhere. First-paint JS passes.New bundle line:
web.bundle.tasks_js_brotli(cap 20 KB for these slices, inperf/budgets.json) and ataskspart inbundle-size.mjs.Round 2 (orchestrator review)
overdueflag looks at the Deadline first, so Renew passport (When past, Deadline ahead) was not flagged, contrary to the lists.rs doc.PhoneFoot), so there was nothing to reuse:tasks/SideFoot.svelteis the mockup's, and Notes is one click away. Specs added for both.24359ba2: check 0 errors; Tasks specs 54/54 on the four projects;tasks-contrastpasses. Bundle: Tasks chunk only (first-paint unchanged; cap untouched).Gates (dev-01,
--workers=1)perf/web.sh --bundle-only --gate: first-paint passes,all_js_brotliover (above).bun run check: 0 errors.bun run test: 78 passed.bun run lint: 17 passed, filter-motion ok.bunx playwright test e2e/tasks-lazy.spec.ts e2e/tasks-lists.spec.ts e2e/tasks-no-hscroll.spec.ts --project=chromium-1440 --project=chromium-390 --project=webkit-1440 --project=webkit-390 --workers=1: 48 passed.bunx playwright test e2e/tasks-contrast.spec.ts e2e/contrast.spec.ts --project=contrast --workers=1: 10 passed (tasks-contrastis new: sidebar, list and all four priority chips at every sky hour, both looks, wide and 390; the QUIETcontrastproject now matches it).cargo build -j4 -p calternalat the branch point (origin/dev55f35fcd).Findings for others
tasks.set-statusanswered 400invalid_inputfor a freshly created task (id fromtasks.list,versionfromnotes.get, over HTTP with an idempotency key, after waiting 30 s):{"id":…,"status":"someday","version":1}, also fordone. Slice 3 depends on it. Not investigated further here (the error text is generic).apps/webhas noregisterIcons,minioropticalicon props that the mockup's newerpackages/uihas; icons here usesizeandstroke(TIcon).Screenshots
Same 16 seeded tasks as the mockup fixtures, same day (the page's clock is Tue 13 Oct 2026, 14:10), real app next to the mockup built from
review/preview-2026-10-29:~/tasks-port-shots/on code-minipc01 (real-<w>-<light|dark>-<view>.png,mock-…; views today, upcoming, tag-home; phone also lists). Known differences from the mockup: backdrop sky (app level), Views, layout switcher, mic, desktop sidebar foot with app tabs, the Upcoming rows noted above. Not in the PR (no image hosting).🤖 Generated with Claude Code
kayg referenced this pull request2026-11-01 18:41:21 +00:00
Backend fixes for the three findings are ready in #833 (head
4637c518a12a34fc746f3c316a7dcaf0eb9ce96b).#in the quotedfrombacklink that tasks.create writes. Complete quoted strings now pass JSON/YAML verification. An HTTP test creates a task and changes done → someday → todo, checking its owning checkbox.All dev-01 gates pass: fmt, workspace/all-targets clippy with -D warnings, 67 tasks tests, 20 strict writer tests, HTTP regression, action and markdown contracts, generated action-types check, and workspace tests -j4. No contract shape changes were needed. No merge performed.
Rebased onto dev
41f2efa3(3 conflicts: bundle-size.mjs, lazy-ui-plugin.ts, App.svelte; resolved by keeping dev's per-chunk report and adding the Tasks entries) and force-pushed to62cfff69so slices 3-5 stack on it (#888 -> #889 -> #893). One extra commit: the lazy import count is now 19.kayg referenced this pull request2026-11-03 11:16:23 +00:00
First-paint diet (BM15, #947). Head
baeb845d(one budget commit by me).First-paint bytes are brotli q11 from
apps/web/scripts/bundle-size.mjs(JS of the first-paint closure = theindexchunk; CSS of the first stylesheet). Dev baseline41f2efa3: 238,797 B JS, 19,250 B CSS. A second figure, "hash-normalised", is the same chunk with the 8-character chunk-file hashes replaced by a fixed string: the hashes are random, and they move the real brotli number by ±300 B between two builds of identical code, so a few-hundred-byte claim is only meaningful in the normalised figure (dev: 238,804). Chunk budgets: every new lazy chunk's line is taken from the first-script line or the idle-screens line so the total stays 404.2;perf/web.sh --bundle-only --gatepasses on this head.The Tasks screen is already its own lazy chunk. The first-screen part is the route wiring (
App.svelte, onelazy()entry inlazy-ui.svelte.ts,appTabs(also)). When #841 also lands the two are oneappScreensregistry (tasks,contacts) instead of two parallel special cases: I did that resolution in the merge simulation (#947), so the pair costs less than the sum. Not ≤ 0 on its own; covered by #875.Tasks specs (
tasks-lazy,tasks-lists,tasks-no-hscroll,tasks-contrast): 54 passed, 2 skipped on all four projects.Budgets: the total bump (404.2 → 409.85) is reverted;
TasksScreen5.1 anddates0.55 are carved fromindex(240 → 234.35); total 404.2.#832 per-PR gates at
a1a205fc: BLOCKED on two non-spec gatesHead =
46dee691+ merge of origin/devb5e8dcb2(no conflicts).perf/web.sh --bundle-only --gatecheck-ui-primitives(from #941, run on this tree)tasks/TasksScreen.svelte:69(hand-made glass pill: use<Pill alone>); the fix needs #941's Pill, so it follows #941 into devTo go GREEN: (1) cut ≥ 34 B from the first script or get an explicit OK; (2) move the pill to
<Pill alone>once #941 is in dev.#832 after #941: Pill/press done, specs green, first-paint bytes NOT yet ≤ dev
Head
955e0e46b, dev850c23a9merged in. The phone's back is<Pill alone h="var(--tier-top)">; the local.pill/.roundCSS is gone.perf/budgets.jsonmerged with dev's line move (index 233.55, idle-screens 51.3: total unchanged).check-ui-primitivesNot GREEN until the first-paint bytes are cut by the amount above.
kayg referenced this pull request2026-11-05 23:21:11 +00:00
#832 re-gated on dev
c808ef67: GREEN atd9bfb49bMerged dev; the Pill fix is kept. Budget: dev's
indexline (229.2) was tightened for the 7 KB drop, so Tasks' own two lines (TasksScreen 5.1, dates 0.55, funded fromindexbefore) no longer fitted;indexis now 225.95 (measures 225.782) and the 2.4 KB come from the unbuiltwidgetchunk's reserved line (7.25 → 4.85). Sum of chunk lines still 404.2, no line raised;widget's owner will see the move on merge.check-ui-primitivesc808ef67225.407 KB vs prod71827028233.040 KB)perf/web.sh --bundle-only --gate#832 re-gated with Contacts in dev: GREEN at
bbba9d9c(dev3f1f88a6merged)Merge, both apps kept:
lazy-ui-plugin.ts(bothTasksScreenandContactsScreenin the import pattern; expected lazy-import count is now 27, which the build checks),App.svelte(both screens,away= settings or Tasks or Contacts, both routes allowed, both layers),apps.ts(dev's list with Contacts built and Tasks reached by its address;appTabs(also)kept,registerAppstays gone as in dev),lazy-ui.svelte.ts(both lazy screens). The Pill fix is kept.Budgets (moves only, nothing raised): dev's lines + Tasks'
TasksScreen5.1 anddates0.55 (5.65 KB). Funded byindex229.0 → 226.25 (it measures 226.087) and the unbuiltwidgetchunk's reserved line 7.25 → 4.35. The chunk lines still sum to the 488.3 total (checked by the report).check-ui-primitives3f1f88a6(225.931), −6.90 KB vs prod71827028(233.040); first CSS 17.952 = devperf/web.sh --bundle-only --gateMerged into dev by the orchestrator (U1 GREEN).
Pull request closed