feat(tasks): port B1 status plans to the Home executor #812
Closed
kayg
wants to merge 0 commits from
feat/tasks-v2-set-status into dev
pull from: feat/tasks-v2-set-status
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!812
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/tasks-v2-set-status"
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?
Ports
tasks.set-statusandtasks.set-status-manyto pure raw-byte plans submitted to the shared Home executor. One transaction groups status/completed property splices and owning checkbox characters, with exact inverse offsets. No action-specific write, Flush, recovery or undo implementation is retained from #801.Supersedes #801. Stack: #809 → #814 (
0f38d06f), plus #813 (11230729) and the shared parsed view from #805 (948117cc). #814 remains under review. Q1–Q6 on #808 are still pending; this port uses the executor's conservative defaults. Never merge.Implementation:
notes.undoreaches the executor's inverse path. #814 still refuses Home undo; responses exposeundo_available: false. Recorded byte-executor inverses are tested where enabled.Supported scope and refusals:
log, and #814 does not admit occurrence participants. No session-link log or guessed occurrence is written.Size/cost: the planner is about 260 production lines, with capture/submit separate. Planning is O(N + P log P + S log S), plus indexed incoming queries and per-note owner-range lookups; memory O(N + P + S). Existing executor caps and WAL/publication costs remain. No performance, power-loss, Apple or supported recurring-outcome pass is claimed.
Validation: all gates passed on dev-01 in
~/Developer/Worktrees/tasks-v2-set-status, throughnix develop -c bash -c, at825c73c4. Final heade7e0831553b291ea96d748725c143fdb9e0248d7only adds the regression seed already exercised in that passing VM run and updates documentation.Results: tasks 56 passed; notes 497 passed with 6 existing ignored; all calternal suites passed with existing ignored tests; the explicit action contract passed; all 25 shared-view unit/integration tests passed, including the Rust corpus contract; doc tests passed. fmt, workspace clippy
-D warningsand action-types check passed. Full log:~/tasks-v2-b1-verified.log, endingB1_GATES_PASSED; systemd unit completed successfully. The expanded shared process-kill harness covers every forward and inverse byte boundary and every Home publication boundary, with repeated recovery. Existing crash/conflict/receipt regressions and all adapted B1 regressions passed. The saved property seed is retained.Decisions/open risks: Q1–Q6 are unchanged and pending. Recurring outcome writes, Home undo, worker-routed inputs, source authority and metadata outside #813's grammar remain refused. In particular ordinary generated unquoted UUID/timestamp metadata requires explicit source correction before B1 can write it. No performance, Apple, power-loss or native recurring-outcome pass is claimed. #814 remains under review; this PR is ready for review, never merged.
Implementation plan: merge #814 (on #809), #813 and the shared parsed view dependency #805. Add exact checkbox spans to that view; add strict metadata validation at Home executor admission. Implement a pure B1 planner and thin set-status adapters, grouped by note, with exact inverse splices. No action-specific placement, recovery or undo. Home undo remains gated by #814. Recurring operations refuse because #813 does not support normative map-list log values or occurrence participants. Keep Q1–Q6 conservative defaults. Costs and failure/gate matrix remain in docs/plans/tasks-v2-set-status.md; extend them with the new admission boundary. Target 150–300 planner lines plus a separate adapter and tests. Run independent range/inverse/refusal properties, salvaged regressions and the shared crash harness, then all requested VM gates. Never merge.
WIP: Tasks v2 B1 prerequisite audit (blocked on shared integration)to WIP: Tasks v2 B1 status plans through the Home executorWIP: Tasks v2 B1 status plans through the Home executorto feat(tasks): port B1 status plans to the Home executorIndependent review, round 1
Verdict: fix first. Reviewed head
e7e0831553b291ea96d748725c143fdb9e0248d7. P0: none identified. P1: none identified.P2: an unrelated URL checkbox refuses the selected task
crates/tasks/src/status.rs:159–179rejects every checkbox destination containing:,#or%before determining whether that row owns a selected task. A daily note containing these independent rows refuses the entire action:A standalone VM probe calling the actual planner returned
Ok(2)without the first row andInvalidInput: unsupported owner bindingwith it. The unrelated web link is not a task owner. Determine relevance before applying owner restrictions, while continuing to refuse unsupported bindings that could own a selected task. Add the action-level positive regression and retain exact unrelated bytes.P2: the salvaged encoding and duplicate-property probes no longer reproduce their original conditions
crates/tasks/src/status/tests.rs:161–168appends each variant todaily.md, which has no frontmatter. Appending CRLF does not convert the file to CRLF; appending U+FEFF does not introduce a BOM; appendingcompleted: laterin body text does not recreate a frontmatter property that the inverse reinserts. All three currently prove only rejection of an arbitrary appended edit.Retain those checks if useful, but also adapt the actual #801 regressions: convert the recorded post-image to CRLF, prepend a BOM, and run done-with-completed → todo, then recreate
completedinside the task frontmatter before inverse admission. Assert whole-inverse refusal before PREPARE, unchanged task and owner files, and retained evidence. Home undo can remain gated; exercise the recorded inverse through the supported offline executor.P2: B1 generated and crash coverage is not connected to B1 executor admission/recovery
The generated B1 cases in
crates/tasks/src/status/tests.rscallstatus::planandapply_splices; refusal cases compare immutable input maps. They do not execute generated task plans or inspect files, records or publication. The shared executor properties genuinely execute generic string-replacement plans, and its process-kill tests genuinely kill executor processes, but their fixtures do not consume B1 plans. The Home crash fixture also omits B1's newly added metadata, expected-room, inventory and request-fingerprint requirements. The old forward/inverse × unchanged/outside-CRLF matrix is therefore not replaced by the B1 coverage claimed here.Connect generated B1 plans to the shared executor and verify independent expected files, exact recorded inverse identity and refusal side effects. Add B1-derived task/owner plans to the crash harness, including outside encoding changes and repeated recovery; cover the new Home requirements and recorded-plan retry at admission/publication boundaries. No task-specific recovery implementation is needed.
Architecture/parser assessment: the action contains capture/submit glue and a pure planner; I found no task-specific placement, Flush, recovery or undo implementation. Frontmatter edits use the strict planner and checkbox spans use the shared parsed view. The shared #805 vectors include multiline code, comments, frontmatter and mixed endings; B1 retains positive controls in its original CommonMark corpus. Recurring writes and Home undo remain explicitly refused. The known non-target UUID/timestamp writer issue is excluded from these findings.
Validation: on dev-01,
nix develop -c bash -c '~/bin/slot cargo test -j4 -p calternal-tasks status -- --nocapture'passed 16 tests. VM checkout is825c73c4; its difference from reviewed head is only the saved property seed and documentation. Independently inspected the existing full gate log endingB1_GATES_PASSED; that is prior implementation evidence, not a new full-suite run. The URL probe used the built task library, ran through Nix/slot, and removed its temporary files. No repository code edited or pushed. No P3 findings.Updated head:
a0d5592d1bf06c94a48e7cecbe4dbc3dc08d8cd0. Mergedorigin/feat/strict-frontmatter-writer(81c339725bb674710c4ed50ab982a196b355f11c) into this branch with merge commit01dbcbd1. No merge into dev.Ordinary generated note metadata no longer requires source correction before task status edits. Non-target UUIDs/timestamps and other structurally bounded plain scalar leaves/lists pass through byte-identically. Target types, exact inverses, independent byte audit and executor admission remain enforced. Positive Home fixtures now retain their original generated metadata. A new end-to-end test compares every non-target raw line after ticking a normal task; executor live-room/history/index coverage now explicitly requests metadata validation. Refusal coverage uses actual unsupported flow metadata and a commented post-image rather than treating ordinary UUID/timestamps as invalid. Existing stale-selection, recurring/custom-owner, recovery and undo gates remain. Documentation updated.
All gates passed on
calternal-dev-01-compute02in this branch’s existing VM worktree through/nix/var/nix/profiles/default/bin/nix develop -c bash -c. Every heavy command used the slot wrapper. Log:~/tasks-b1-opaque-gates.log, endingB1_OPAQUE_GATES_PASSED; systemd unit exited 0.Results: tasks 57 passed; notes 500 passed / 6 existing ignored / 0 failed; all calternal suites passed with existing ignored cases; explicit action contract passed; all 25 markdown-view unit/integration tests and doctests passed. Fmt, workspace clippy -D warnings and action-types check passed. The tested formatting is committed; VM-only Nix scaffolding is excluded. The prior untracked property seed was preserved and matches the now-tracked seed. No build/test/install ran on the control host.
Decisions/open limits: target value types remain restricted, and all retained #781 structural/comment/envelope refusal cases run in the notes suite. Existing key/map/depth/size limits remain. Q1–Q6, recurring map-list writes, source authority, worker-routed inputs and Home undo remain as previously gated. No new independent review, performance, Apple or power-loss result is claimed. No repository settings changed.
Round-1 P2 follow-up to #issuecomment-71843. Head
a9304c4abb509625d15d38069cd65ec5df16b78d.81c339725bb674710c4ed50ab982a196b355f11cis retained through merge01dbcbd1. Ordinary non-target UUID/timestamp metadata passes through byte-identically; target restrictions and byte audit remain. Ordinary-note action and strict-writer regressions pass in the notes/tasks gates.unrelated_url_checkboxes_keep_exact_bytes_when_selected_task_changesexercises the actual action with unrelated URL/fragment/encoded URL rows and exact owner-note bytes; it failed on the previous implementation withunsupported owner binding. Selected fragment, encoded and self-fragment owner bindings still refuse inunsupported_bindings_that_could_own_selected_task_still_refuse.recorded_byte_executor_inverse_is_exact_and_changed_post_images_refuseconverts the actual task post-image to CRLF, prepends a BOM, and separately plans done-with-completed → todo before recreating completed inside task frontmatter. Every refused inverse leaves both files, the complete record set and retained evidence unchanged, proving no inverse PREPARE. The unchanged inverse/idempotence control remains.Only the owner relevance check changes action behavior. The shared link helper extracts existing reader logic. Cross-crate crash tests use the notes crate’s existing
crash-pointsdev feature and shared executor pause boundaries; no task-specific recovery or undo implementation was added. Home fixtures settle participant rooms before taking a fresh admission snapshot, preserving the conservative inventory checks. The initial Home harness runs exposed startup inventory refusals; the settled-room fixture passes.After the fixes and focused regression checks, the requested full gate set ran once on dev-01, in the existing VM worktree through
/nix/var/nix/profiles/default/bin/nix develop -c bash -c. Log~/tasks-b1-p2-gates.logendsB1_P2_GATES_PASSED; systemd unit exited 0:Passed: tasks 65; notes 500 with 6 existing ignored; all calternal suites with existing ignored cases; all 25 markdown-view unit/integration tests; explicit action contract; doctests; fmt; workspace clippy -D warnings; action-types. No gate failures in that full run. The tested formatting is committed and pushed; VM-only Nix scaffolding is excluded. No build/test/install ran on the control host.
Existing Q1–Q6, recurring map-list/source authority/worker-routing limits and Home undo gating remain unchanged. No new independent review or power-loss/performance result is claimed. No merge into dev and no repository settings changed.
Independent review, round 2
verdict: ready for scoped B1 at
a9304c4abb509625d15d38069cd65ec5df16b78d. New P0–P3 findings: none identified. Reviewed round-1 #issuecomment-71843 and fix status #issuecomment-71912. No code pushed or merged.completedinside frontmatter. Each inverse refuses with both files, complete records and retained evidence unchanged. The exact inverse/idempotence control passes.81c33972is included; its round-2 scalar/list, byte-preservation and refusal probes pass independently. Ordinary generated metadata action regression passes.Fresh validation on dev-01 in
~/Developer/Worktrees/tasks-v2-set-status, with HEAD confirmed asa9304c4abb509625d15d38069cd65ec5df16b78d:25 passed / 0 failed / 40 filtered out, including the generated execution/refusal tests, byte/Home crash matrices, URL action regression and encoding/duplicate-property inverse checks. Log:
~/review-812-r2.log. Inspected the earlier full gate log endingB1_P2_GATES_PASSED; that is implementation evidence, not a new full-suite/clippy run. No build/test/install ran on the control host.No task-specific writer, recovery or undo implementation was introduced by these fixes. Recurring map-list writes, source authority, isolated-parser routing, Q1–Q6 and Home undo remain explicitly gated; ready does not enable those capabilities or authorize a merge.
Round-2 integration status — head
56451a2c47d79dc2b241862e25ef3067dcf2a13e.Merged final #814 head
2e08de7481bf8e8bea5cf1feeca18e8d9285642finto this branch. Accepted source readers still pingeneration::Snapshot; B1 writes continue through the Home executor admission path.recorded_note_writereads atomically replaced journal records withoutjobsor the exclusiveDataLock. The newrecorded_plan_lookup_does_not_take_executor_writer_lockregression reproducedWouldBlockbefore the fix and passes while the writer lock is held. Unchanged participants remain executor read dependencies; Home undo remains refused by the executor boundary.All requested gates passed on dev-01 through Nix:
cargo fmt --allandcargo fmt --all --check~/bin/slot cargo clippy --workspace --all-targets -j4 -- -D warnings~/bin/slot cargo test -j4 -p calternal-notes -p calternal-tasks -p calternal -p calternal-store -p calternal-search~/bin/slot cargo test -j4 -p calternal-markdown-view~/bin/slot cargo test -j4 -p calternal contract(1 passed)node apps/web/scripts/action-types.mjs --checkThe focused writer-lock regression passed (1 passed). No Playwright run was started.
Independent review: snapshot adaptation
verdict: ready for the scoped B1 adaptation at
56451a2c47d79dc2b241862e25ef3067dcf2a13e. P0: none identified. P1: none identified. P2: none identified. P3: none identified.Reviewed
a9304c4a..56451a2c, subtracting the changes in0f38d06f..2e08de74belonging to #814. This is an adaptation review, not a fresh approval of all dependency code.spawn_blocking, withoutjobs,executor_generation, or the exclusive DataLock. It holds no reader lock across an await. Returning a retained plan still leads throughexecute_note_write, writer admission/recovery and the durable directory barrier. Request/author matching remains enforced.Notes::getpath. There is no new B1 stale-snapshot propagation or retry loop. The shared search consumer reacquires snapshots after failed staging with a quiet delay. The probe below verifies expiry and a successful fresh read, and bounds action retries rather than concealing stale-selection refusals.ReadDependencyentries and receive actor leases plus expected-room checks. Exact pre-images, room revisions and inventory admission remain in place. The planner and its inverse-splice calculation are unchanged. Existing exact-inverse/changed-post-image regressions pass; Home undo remains explicitly gated.Fresh dev-01 evidence, isolated uncommitted worktree
~/Developer/Worktrees/review-812-snapshotat the reviewed head:The new
status_action::executor_tests::review_snapshot_task_concurrencyprobe passed independently and in the status run. It races actualtasks.set-statusactions against append edits to the same note while retaining successive source snapshots. Across 16 rounds, all 16 initial racing status admissions refused, bounded fresh retries succeeded, every append marker survived exactly once in live and on-disk text, deliberately stale task versions refused without changes, the oldest source pin expired withNotSavedYet, and a fresh snapshot read succeeded. A 45-second outer deadline detects stalls; the independent run finished in 2.26 seconds. This sampled schedule does not claim exhaustive interleaving coverage.Status regressions: 26 passed, 0 failed, including the added probe, exact inverse/refusal checks and existing byte/Home crash matrices. Writer-lock lookup regression: 1 passed, 0 failed. Logs:
~/review-812-snapshot-probe.logand~/review-812-snapshot-gates.log. Probe source remains in the VM worktree, uncommitted. Root storage was tight, so build artifacts used memory-backed/tmp; the review's temporary target was removed afterward. No control-host build/test/install, push, merge or settings change. Existing B1 capability gates remain unchanged.ADR 0003 evidence migration:
docs/plans/tasks-v2-set-status.mdSource commit: d2362e5c9afee81bedc7c85da7c36fb2f46b5320; snapshot from dev
55f35fcd. Full original source preserved below before repository removal/stripping. Design, code and test inputs are retained where applicable.Closing: head
56451a2cis already in dev (reached via1a7a31bc); nothing left to merge. Branch kept.Pull request closed