port: attachments (approved mockup) 3/3: note embeds, mini bar, widths, custom text #861
Open
kayg
wants to merge 52 commits from
port/port-attachments-3 into port/port-attachments-2
pull from: port/port-attachments-3
merge into: kayg:port/port-attachments-2
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: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!861
Loading…
Reference in a new issue
No description provided.
Delete branch "port/port-attachments-3"
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?
port: attachments, slice 3 of 3 (note embeds, mini bar, widths, custom text, phone Attach) · stacked on slice 2
is a card with the note's title, its first six lines (blocks drawn read-only: headings, lists, to-dos, quotes, emphasis) and "Show all N lines";<Note.md#Ingredients>shows only that part (#^idone line); it stays live (a change to the note marks its text stale, the card asks again and redraws). States are the links' (#448): never written (Make the note), in the Trash (lines shown dimmed, Restore), deleted for good (Create a new note), each with Remove embed. Open scales the note up out of its card (300 ms, reduced motion keeps the plain arrival)."large"; on desktop it reaches 56 px past the text column on each side, on a phone to within 7 px of the card's edge, never scrolling the page sideways (asserted). Compact ("compact") for notes, PDFs, recordings.Gates (head
abe12cb0= gated headef0937a3+ a CSS-only change to the viewer's veil; Chromium dev-01, WebKit dev-02,CI=1 --retries=0,~/bin/slot)vitest521 pass,tscok; webvitest87 pass;svelte-check0 errors; Rust: contract test ok.e2e/note-embeds.spec.ts(whole note and one part, open; live: text typed in another page shows in the card; never written → Make the note; mini toolbar sets Large and Card, wider than the card, no sideways scroll; double-click changes the words and empty gives the name back; phone text bar Attach) +pictures+embeds+bar-stable+phone-bars: chromium 273 pass; webkit 273 pass. The broader regression set on the stack head (editor, links, picker, no-hscroll, text-size too) passed on Chromium (325 of 326, the one failure was a read of an element that had been drawn again, fixed in the spec) and WebKit (320 of 322; the two were the Linux-WebKit video crash above).Bundle (gz, whole stack vs
dev)devSlice 3 adds +4.4 KB first paint / +4.5 KB total. The embed builders are in the editor chunk (the extension has to draw them synchronously); lazy-loading them is a possible later trim.
Screenshots
Control host:
~/Developer/Worktrees/shots/port-attachments/(product-*↔mockup-*, 1440x900 and 390x844). Pairs: note card (whole, part), picture with mini toolbar, viewer (desktop and phone); Attach menu (tools bar and text bar) and Large are product-only.Not ported yet, and why
pill/plain/map/web-link cards, code and CSV previews, Add-to-gallery+, drag a picture onto another to join (gallery stays "several on one line" by hand, or by Attach with several photos).🤖 Generated with Claude Code
First-paint budget (#866) at head
495b4041: first_js_brotli 240.136 KB (limit 240: over by 0.136), first_css_brotli 22.739 KB (limit 22.1: over by 0.64: the mini toolbar and note-card styles),PictureViewer1.216 KB (limit 1.1), andattachmentsis 10.3 KB (a new chunk name, needs a budget line). Everything this PR adds to JS lives in the lazyattachmentschunk (note cards, mini toolbar, zoom, live cards,embed-note.ts); the entry gets only the zoom and peek hooks (lazy.ts,peek.ts) and the phone text bar's Attach button. I did not raise any limit. To get under: the CSS can move to the chunk (measured: that costs the entry ~0.2 KB for the listed dependency, so it needs the entry trimmed too) or kayg can give this PR its own lines. Gates: Chromium 310 and WebKit 306 pass (pictures, embeds, note-embeds, bar-stable, phone-bars, editor, links, picker), editor 521 / web 87 unit tests.kayg referenced this pull request2026-11-05 23:21:11 +00:00
housekeeping #1009: rebased+failing, left open for review.
restacked attachment slice three on #860. preserved final viewer/embed modules and current dev bars; peek notifications follow the memory update without eager prefetch. removed obsolete widget.ts and updated peek subscriptions to onPeek.
head:
985c68535484651b39cd611cc8f814a36c05ff75; based on devcd7f84432febfc63b788fbb9b9f9950452982d74, 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 231081 B (+304 B), CSS 18386 B (+0 B).
Rust gate results (Mac VM):
cargo fmt -p calternal-attachments -- --checkcargo check -j4 --locked -p calternal-attachments --all-targetscargo clippy -j4 --locked -p calternal-attachments --all-targets -- -D warningscargo test -j4 --locked -p calternal-attachmentstargeted 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-861.md; unmatched entries are missing-patch candidates, with semantic overlap/replacements noted above.final queue, cleanup and source-verification evidence.
Final-port test pass (issue #1009), READY: no: 2 real failures; bundle gate fails; first paint is bigger than dev.
head
985c68535484651b39cd611cc8f814a36c05ff75Targeted specs,
CI=1 --retries=0 --workers=1, dev-01 Chromium and dev-02 WebKit (through~/bin/slot), against a dev-head backend (cd7f84432).Failing:
embeds.spec.ts:101(1440, same cause as #860) andnote-embeds.spec.ts:145 on a phone the text bar has Attach, and it opens the same menu(390).Bundle gate:
perf/web.sh --bundle-only --gate(the 17 failures from the housekeeping audit). Per the gate's own rule (total_js_brotlibudget 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.attachments9.90 KB (no budget),PictureViewer1.21 vs 1.1. First paint JS +304 B vs dev (rule: <= 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.
Screenshots and state (issue #1009),
a4ee1ff888Attachments and pictures (#846, #860, #861; this is the #861 tip). Product (Chromium, 2x) next to the approved mockup, light and dark. Not READY: first paint is over dev (JS +257 B plain; see the #1009 table). Specs: Chromium and WebKit at both sizes green (pictures, note-embeds, embeds, bars, dialogs) after one real fix:
embeds.csswas imported by nothing inapps/web, so pictures were drawn without their styles in WebKit (pictures:70and:143).Differences from the mockup: the product's audio card has no waveform or scrubber; its PDF is a tile row with no page preview; the viewer shows the note dimmed behind the picture where the mockup has a blurred backdrop; the picture toolbar has fewer buttons; the product's Insert sheet at 1440 is a small floating card.
Screenshots (2x; light and dark; 1440x900 and 390x844). Left: the approved mockup (review/calendar-2). Right: this PR.
attach-menu
note-card
note-part
note-picture
picture
large
gallery-stack
gallery-grid
viewer
audio
pdf-file
textbar
Screenshots and state (issue #1009),
fcf655253bAttachments and pictures (#846, #860, #861; this is the #861 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 (+233 B #846, +202 B #860, +352 B #861; #846 CSS +129 B). Specs: pictures, note-embeds, embeds, bars, dialogs, phone-bars: green on Chromium and WebKit at both sizes (275 passed each). Gate passes (budget total 517.3 KiB). Rebase notes: Image and File are now blocks of the registry (Media group) that open the chooser inside the tap, since the Insert sheet lists the registry; the attach menu uses dev'saboveplacement, not the oldup;embeds.cssis imported by the lazy widget module. 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.
attach-menu
note-card
note-part
note-picture
picture
large
gallery-stack
gallery-grid
viewer
audio
pdf-file
textbar
Differences from the mockup: the product's Insert sheet at 1440 has Image and File where the mockup has one Photo or file tile; the audio card has no waveform or scrubber; the PDF is a tile row with no page preview; no cover chip.
Perf (perf-02, Chromium 4x slowdown, 10k notes, 5 interleaved rounds, dev built from
3f079de39run twice as a control; medians of per-run p50 / p95, ms):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, #861f20b9457b, #849 as144013926before its budget-only commit, #102217010f469).First paint on dev
3f079de39: +78 B plain / +467 B normalised. Gate passes atf20b9457b. Specs: all chromium specs pass. webkit-1440 (15) and webkit-390 (7) fail in embeds, note-embeds and pictures (Page crashedon dev-01 under load 30+); the same four pictures specs fail the same way on the pre-rebase headfcf655253, so they are not caused by the rebase. They need a quieter host to be told apart from load.READY FOR MERGE: attachments embeds (head
f20b9457b): the webkit failures were the hostRe-ran the three specs that crashed (
pictures,note-embeds,embeds) in webkit-1440 and webkit-390 on dev-02, which was idle: load 3.1 before, 6.5 at the end (dev-01 was at 30 to 40 when they crashed). Same head, samecalternal-h861backend: 31 passed, 1 skipped, 0 failed. The four pictures specs that hadPage crashedpass too. So the earlier webkit failures were the loaded host (WebKit crashing under memory/CPU pressure), not this PR and not the rebase.The rest of the evidence on this head is unchanged: gate passes, chromium 1440 and 390 all pass, only dev's own failures elsewhere. First paint against dev is still over (+78 B plain / +467 B normalised on
3f079de39); that is kayg's call and is parked until the new table.READY FOR MERGE: attachments 3, embedded notes (head
ac2061d00, on #860)Merged dev
fe2efbf11(#1044) into the branch (clean; it also merges cleanly with the newer4274dafb4), budgets regenerated from a fresh build, bundle gate clean, specs on dev-02 withcalternal-h861, chromium and webkit at 1440 and 390. Dev baseline: 228023 B plain / 227378 B normalised / CSS 18236.Specs (+ embeds, note-embeds, phone-bars, keys-no-motion): 654 passed, 518 skipped, 0 failed on dev-02; the earlier webkit
Page crashedfailures on dev-01 do not recur on an idle host. Pixel and contrast specs on x86 (dev-01): see the dev-01 comment below.Handoff: head
ac2061d00is pushed and READY as postedHandoff (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
fe2efbf11and the earlier heads (#902, #854, rows tip, #878 base) ran there with the same 6phone-barsphoto-dark failures on dev itself and nothing new. Next step: re-runpx-d1b.sh-style pixel set on this head on dev-01 (about 1 h per head) if you want it before merging.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.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.