Assign stable identity to imported Markdown Notes #857

Open
opened 2026-10-02 16:08:34 +00:00 by kayg · 11 comments
Owner

Parent: #719

Evidence: Three Notes without calternal-id were imported through the generated Wiki-link corpus. The Notes API exposed all three as path: identities. Opening one Note did not write to its bytes, but it also did not give it a stable identity.

Expected: assign a stable identity to an imported Note without changing its visible Markdown except for the documented identity frontmatter key. Opening a Note must stay read-only. Cover renames and deep links with regressions.

Parent: #719 Evidence: Three Notes without `calternal-id` were imported through the generated Wiki-link corpus. The Notes API exposed all three as `path:` identities. Opening one Note did not write to its bytes, but it also did not give it a stable identity. Expected: assign a stable identity to an imported Note without changing its visible Markdown except for the documented identity frontmatter key. Opening a Note must stay read-only. Cover renames and deep links with regressions.
Author
Owner

Started on job/noteid-857 at base 4a871b3838. Tracing Notes indexing, Files rename tracking and atomic edit paths. Folder identity code remains owned by #627.

Started on job/noteid-857 at base 4a871b383864dad0d6c87bcd22b7f0d589e3506e. Tracing Notes indexing, Files rename tracking and atomic edit paths. Folder identity code remains owned by #627.
Author
Owner

Findings: store::index_note_projection and the Note response builder use path-based fallback IDs. The Notes Index upsert also lets a copied calternal-id take over the original path. Files retains immutable item IDs for move tracking.

Decisions: retain an Index identity map keyed by User and Note ID, with indexed Files item ID and current path. Keep it when source projections are removed so Files move adoption can resolve the new path. Use the existing lossless scalar frontmatter patcher on real edits. No new dependency or folder identity changes.

Findings: store::index_note_projection and the Note response builder use path-based fallback IDs. The Notes Index upsert also lets a copied calternal-id take over the original path. Files retains immutable item IDs for move tracking. Decisions: retain an Index identity map keyed by User and Note ID, with indexed Files item ID and current path. Keep it when source projections are removed so Files move adoption can resolve the new path. Use the existing lossless scalar frontmatter patcher on real edits. No new dependency or folder identity changes.
Author
Owner

Added the imported-Notes profile in an atomic commit. It extends the existing import runner with 656/1000/5000/10000 ID-less Notes and an eight-upload burst, reporting p50/p95, CPU and RSS. Python fixture tests: Ran 4 tests; OK. Per the 2026-10-02 verification policy, measurement is for the merge round. Rust dependency compilation is still progressing on the shared host.

Added the imported-Notes profile in an atomic commit. It extends the existing import runner with 656/1000/5000/10000 ID-less Notes and an eight-upload burst, reporting p50/p95, CPU and RSS. Python fixture tests: Ran 4 tests; OK. Per the 2026-10-02 verification policy, measurement is for the merge round. Rust dependency compilation is still progressing on the shared host.
Author
Owner

Additional findings and fixes:

  • Imported filenames cannot pass the old rename planner (it requires YYYYMMDD-slug-idslice.md). The planner now keeps canonical segments and uses a title slug for imported filenames.
  • Files may index after Notes. Markdown Files writes now bind an existing Note identity to the Files item ID in one transaction, including the single-file fast path. Non-Markdown writes retain their existing fast path.
  • A retained path can give a deleted Note's ID to a replacement. Removing a projection now releases its path and retains its Files binding.
  • A journalled Notes move creates a new inode before Files finishes adoption. Identity assignment now honors the durable Notes move intent and the existing Files pending move ID.
  • Empty properties patches and unchanged live/body saves do not materialize the key. Content, property, Journal and block Reminder edits write the assigned key in their atomic save.

Regressions include the real Files and WebDAV MOVE adapters, a folder move, backlinks, two equal titles in separate folders, a duplicate frontmatter ID, a first live and HTTP edit, and a 656-file no-write reindex.

Decision: pre-edit generated IDs need retained Index identity state for a rebuild. This follows the brief's durable Index assignment; once the User edits, Markdown carries the key. DESIGN §17 records this limit.

Additional findings and fixes: - Imported filenames cannot pass the old rename planner (it requires YYYYMMDD-slug-idslice.md). The planner now keeps canonical segments and uses a title slug for imported filenames. - Files may index after Notes. Markdown Files writes now bind an existing Note identity to the Files item ID in one transaction, including the single-file fast path. Non-Markdown writes retain their existing fast path. - A retained path can give a deleted Note's ID to a replacement. Removing a projection now releases its path and retains its Files binding. - A journalled Notes move creates a new inode before Files finishes adoption. Identity assignment now honors the durable Notes move intent and the existing Files pending move ID. - Empty properties patches and unchanged live/body saves do not materialize the key. Content, property, Journal and block Reminder edits write the assigned key in their atomic save. Regressions include the real Files and WebDAV MOVE adapters, a folder move, backlinks, two equal titles in separate folders, a duplicate frontmatter ID, a first live and HTTP edit, and a 656-file no-write reindex. Decision: pre-edit generated IDs need retained Index identity state for a rebuild. This follows the brief's durable Index assignment; once the User edits, Markdown carries the key. DESIGN §17 records this limit.
Author
Owner

Checkpoint: merged origin/dev f06679b11c once. No conflicts. Origin/dev's Notes migrations end at 0024; 0025 is free.

Commits so far: 5857fd614 (import profile); 998e85cf3 (imported filename planner). No pushes or deployment.

Focused identity regression output (verbatim):

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 167 filtered out; finished in 239.77s

Notes-core Clippy passed. Per-target test output (verbatim):

test result: ok. 519 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s
test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.32s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

Notes and Files full per-crate gates remain in progress. Full server, web, adversarial and performance runs are for the merge round under the verification policy.

Checkpoint: merged origin/dev f06679b11cde29cc0b7120fdab5f721389caf695 once. No conflicts. Origin/dev's Notes migrations end at 0024; 0025 is free. Commits so far: 5857fd614 (import profile); 998e85cf3 (imported filename planner). No pushes or deployment. Focused identity regression output (verbatim): ``` test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 167 filtered out; finished in 239.77s ``` Notes-core Clippy passed. Per-target test output (verbatim): ``` test result: ok. 519 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.32s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` Notes and Files full per-crate gates remain in progress. Full server, web, adversarial and performance runs are for the merge round under the verification policy.
Author
Owner

First-edit finding: the HTTP body route discarded frontmatter when its closing fence was at EOF (without a final newline). The Note response also exposed that frontmatter as its body. This affects imported Notes with metadata but no body.

Fix: reuse store::note_body for the response and edit boundary, keep the full source prefix, and add only the needed separator before new content. Added imported_identity_first_body_edit_preserves_frontmatter_at_eof. No existing expectations were changed. The first edit writes the assigned ID in the same conditional atomic save and makes one Version.

Notes Clippy passed before this small fix. The full Notes test build is in progress; the warm Clippy check will run once more for the changed code.

First-edit finding: the HTTP body route discarded frontmatter when its closing fence was at EOF (without a final newline). The Note response also exposed that frontmatter as its body. This affects imported Notes with metadata but no body. Fix: reuse store::note_body for the response and edit boundary, keep the full source prefix, and add only the needed separator before new content. Added imported_identity_first_body_edit_preserves_frontmatter_at_eof. No existing expectations were changed. The first edit writes the assigned ID in the same conditional atomic save and makes one Version. Notes Clippy passed before this small fix. The full Notes test build is in progress; the warm Clippy check will run once more for the changed code.
Author
Owner

#857 gate finding: all ten imported-identity regressions passed, including 656 unchanged imports/reindexes. The first full Notes suite reported 164 passed, 13 failed. Twelve failures compared first-edit bytes with no calternal-id, or expected the body at byte zero; #857 explicitly changes that first-edit behavior. Updated only those expectations: exact unrelated bytes remain checked, allowing only the assigned scalar. Checkbox regression additionally compares the key with the Index. Three body-prefix checks now assert identity metadata separately. No status or fixture expectations changed.

The remaining daily_and_composer_preserve_unrelated_bytes failure returned 404 from the Journal snapshot read. A focused run of the same unchanged test passed (1 passed, 0 failed; 14.87s). Its expectation stays unchanged; the final Notes run will check it again. This path has legacy unanchored Log repair and a non-waiting reader (#549).

#857 gate finding: all ten imported-identity regressions passed, including 656 unchanged imports/reindexes. The first full Notes suite reported 164 passed, 13 failed. Twelve failures compared first-edit bytes with no `calternal-id`, or expected the body at byte zero; #857 explicitly changes that first-edit behavior. Updated only those expectations: exact unrelated bytes remain checked, allowing only the assigned scalar. Checkbox regression additionally compares the key with the Index. Three body-prefix checks now assert identity metadata separately. No status or fixture expectations changed. The remaining `daily_and_composer_preserve_unrelated_bytes` failure returned 404 from the Journal snapshot read. A focused run of the same unchanged test passed (1 passed, 0 failed; 14.87s). Its expectation stays unchanged; the final Notes run will check it again. This path has legacy unanchored Log repair and a non-waiting reader (#549).
Author
Owner

Committed Notes identity slice: fe4f6b6ae. The retained map, ID-backed responses, deferred first-edit key, imported rename planning integration, and ten real-Home regressions are now in history. All ten new regressions passed in the full run. Final Notes lint passed:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 16m 25s

The suite's twelve first-edit byte expectations now allow only the scalar required by #857, while keeping body bytes exact; the final suite run will verify those updates. The unchanged 404 expectation is independently tracked in #1005 on the same origin/dev revision. Its focused rerun passed locally. Files lint also passed, and its full touched-crate tests are compiling. Folder item ID generation remains unchanged (#627).

Committed Notes identity slice: `fe4f6b6ae`. The retained map, ID-backed responses, deferred first-edit key, imported rename planning integration, and ten real-Home regressions are now in history. All ten new regressions passed in the full run. Final Notes lint passed: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 16m 25s ``` The suite's twelve first-edit byte expectations now allow only the scalar required by #857, while keeping body bytes exact; the final suite run will verify those updates. The unchanged 404 expectation is independently tracked in #1005 on the same `origin/dev` revision. Its focused rerun passed locally. Files lint also passed, and its full touched-crate tests are compiling. Folder item ID generation remains unchanged (#627).
Author
Owner

Files full-crate run completed:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 25m 36s
test result: FAILED. 145 passed; 2 failed; 1 ignored; 0 measured; 0 filtered out; finished in 369.40s

The new WebDAV regression had no Host header for an absolute Destination URI. The server correctly returned 403. Added the missing test header; the expected 201 stays unchanged. The other failure is the unchanged five-minute atomic-write/reconcile storm timeout, already tracked in #1000; cleanup then reports atomic write 627 failed: entry not found. No timeout or assertion changed. This is for the merge round.

Code review also found that the late Notes binding predicate checked only the .md suffix, which includes directories named .md. It now reuses the visible Markdown predicate and requires a file MIME value. Added a regression where a not-yet-bound Note is replaced by a directory before the Files scan: the folder must not claim the old Note identity. Folder identity assignment itself remains unchanged (#627). Final Files lint and the focused identity regression are running; no second storm-only run.

Files full-crate run completed: ``` Finished `test` profile [unoptimized + debuginfo] target(s) in 25m 36s test result: FAILED. 145 passed; 2 failed; 1 ignored; 0 measured; 0 filtered out; finished in 369.40s ``` The new WebDAV regression had no Host header for an absolute Destination URI. The server correctly returned 403. Added the missing test header; the expected 201 stays unchanged. The other failure is the unchanged five-minute atomic-write/reconcile storm timeout, already tracked in #1000; cleanup then reports `atomic write 627 failed: entry not found`. No timeout or assertion changed. This is for the merge round. Code review also found that the late Notes binding predicate checked only the `.md` suffix, which includes directories named `.md`. It now reuses the visible Markdown predicate and requires a file MIME value. Added a regression where a not-yet-bound Note is replaced by a directory before the Files scan: the folder must not claim the old Note identity. Folder identity assignment itself remains unchanged (#627). Final Files lint and the focused identity regression are running; no second storm-only run.
Author
Owner

Committed Files integration: 54456bd10b5c10abee4b9b90158aba3e6f440b2a. Final Files lint and the focused regression passed:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 31.63s
    Finished `test` profile [unoptimized + debuginfo] target(s) in 22.75s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 147 filtered out; finished in 9.48s

The watcher fixture now journals its move before changing the Home, as Files/DAV writers do. It keeps the original ID before and after replay/reindex. The focused test also passes Files rename, WebDAV MOVE, folder move, unindexed-source copy collision, non-UTF-8 copy, and .md directory exclusion. Bytes/fingerprints remain intact. The original full-suite storm failure is #1000; no expectation changed. Final Notes suite is compiling; its first-edit expectation updates remain to verify.

Committed Files integration: `54456bd10b5c10abee4b9b90158aba3e6f440b2a`. Final Files lint and the focused regression passed: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 31.63s Finished `test` profile [unoptimized + debuginfo] target(s) in 22.75s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 147 filtered out; finished in 9.48s ``` The watcher fixture now journals its move before changing the Home, as Files/DAV writers do. It keeps the original ID before and after replay/reindex. The focused test also passes Files rename, WebDAV MOVE, folder move, unindexed-source copy collision, non-UTF-8 copy, and `.md` directory exclusion. Bytes/fingerprints remain intact. The original full-suite storm failure is #1000; no expectation changed. Final Notes suite is compiling; its first-edit expectation updates remain to verify.
Author
Owner

Head: 54456bd10b5c10abee4b9b90158aba3e6f440b2a on job/noteid-857. Own commits: 5857fd614 (profile), 998e85cf3 (planner), ac0d28486 (decisions), fe4f6b6ae (Notes), 54456bd10 (Files). Fetched/merged origin/dev once at f06679b11cde29cc0b7120fdab5f721389caf695; Notes migration 0025 was free there. Coordinated with #627; folder ID assignment is unchanged. Tracked worktree is clean.

Built durable imported Note identity for #857. The Index retains a Note UUID linked to the Files item ID. API/deep links and backlinks use it before any Markdown edit. Existing keys win; copies receive independent IDs. Reads, sync ingestion, reindex and mechanical moves do not add the key. A real edit adds it in the same atomic write. EOF frontmatter is preserved.

Files: crates/calternal-notes-core/src/rename.rs; crates/plugins/notes/migrations/0025_note_identity.sql; Notes store.rs, lib.rs, bookmarks.rs, imap.rs, tasks_api.rs, reminders_api.rs, wikilinks.rs, tests/imported_identity.rs; Files index.rs, lib.rs, dav.rs, tests/imported_identity.rs; docs/DESIGN.md; bench/notes-import.sh; tests/perf/upload_scale.py, test_upload_scale.py.

Decisions: retain identity rows separately from disposable content projections; clear the old path on removal but retain the Files binding; first indexed owner keeps a duplicated declared ID, with API/DAV copies claiming source identity first; imported retitle uses the new title slug in its current folder; mechanical link rewrites do not materialize identity. Pre-edit identity needs retained Index state during a rebuild. Native-client content mutations count as real User edits; sync byte ingestion does not.

UX gaps closed: imported deep links after rename/move; backlinks before first edit; copied keys colliding; no-op saves adding metadata/versions; first body edit dropping EOF metadata. UX gaps left: existing Journal snapshot 404 (#1005), independently found on the same origin/dev; existing atomic-write/reconcile storm timeout and fixture-cleanup race (#1000). All status assertions remain unchanged. Twelve byte expectations changed only for the new first-edit scalar required by #857; bodies remain exact.

For the merge round: run bash tests/adversarial/run.sh once on the combined branch to cover cross-plugin/authz/robustness and ordinary-write consistency plus WebDAV; run cargo clippy -p calternal-server --all-targets -- -D warnings and cargo test -p calternal-server -- --test-threads=4 on the combined branch. After #1000/#1005 fixes, rerun cargo test -p calternal-plugin-files -- --test-threads=4 and cargo test -p calternal-plugin-notes -- --test-threads=4; the Notes lib failure currently prevents its integration tests from running. In apps/web, run bun run check, bun run test --maxWorkers=2, bun run test:e2e:notes, bun run test:e2e:deeplinks, and bun run test:e2e:files, with the combined server build. These must prove that imported Notes open without saves and Copy links survive tracked moves and the first edit. The optional import profile is CALTERNAL_IMPORTED_NOTES=1 PERF_LABEL=notes-imported-857 bash bench/notes-import.sh with the shared release binary, inside flock /root/perf.lock on the perf VM and load recorded. No perf run in this identity job under the 2026-10-02 verification policy; the profile adds 656/1k/5k/10k imports and an eight-request burst.

All ten Notes identity regressions passed in the final full run, including 656 unchanged imports/reindexes, first HTTP/live/property/checkbox edits, no-op saves, same-title Notes in different folders, backlinks, copy collisions, tombstones, and EOF metadata. The Files focused regression passed rename, WebDAV MOVE, folder move, pending-move watcher adoption/replay, unindexed-source copy, non-UTF-8 copy and directory exclusion.

Gate output (verbatim summary lines; full logs remain in worktree artifacts):

cargo fmt --check: exit 0, no output. All Cargo commands used CARGO_PROFILE_DEV_DEBUG=line-tables-only CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 TMPDIR=<worktree>/target/tmp, with the preset target directory.

cargo clippy -p calternal-notes-core --all-targets -- -D warnings

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 39s

cargo test -p calternal-notes-core -- --test-threads=4

    Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 56s
test result: ok. 519 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s
test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.32s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

cargo clippy -p calternal-plugin-notes --all-targets -- -D warnings

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 16m 25s

cargo test -p calternal-plugin-notes -- --test-threads=4

    Finished `test` profile [unoptimized + debuginfo] target(s) in 9m 10s
test result: FAILED. 176 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 539.12s

cargo clippy -p calternal-plugin-files --all-targets -- -D warnings

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 31.63s

cargo test -p calternal-plugin-files -- --test-threads=4

    Finished `test` profile [unoptimized + debuginfo] target(s) in 25m 36s
test result: FAILED. 145 passed; 2 failed; 1 ignored; 0 measured; 0 filtered out; finished in 369.40s

cargo test -p calternal-plugin-files imported_identity -- --test-threads=1

    Finished `test` profile [unoptimized + debuginfo] target(s) in 22.75s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 147 filtered out; finished in 9.48s

The Notes full gate fails only the unchanged 404 assertion in #1005. The Files initial full gate had two failures: the new test omitted Host (fixed, expected 201 unchanged), and #1000's unchanged storm timeout. A later focused fixture was corrected to create the real Files move intent before moving the file; its original-ID expectation also stayed unchanged. The final focused Files result above passes. No storm-only rerun or full adversarial matrix ran under the current verification policy.

Python profile fixtures: python3 -m unittest discover -s tests/perf -p test_upload_scale.py passed all four tests. bash -n bench/notes-import.sh passed. No dependency versions changed.

Doc comments were reread before this report. Build cleanup completed with cargo clean; web build output was removed. Review artifacts are gitignored and remain local.

Head: `54456bd10b5c10abee4b9b90158aba3e6f440b2a` on `job/noteid-857`. Own commits: `5857fd614` (profile), `998e85cf3` (planner), `ac0d28486` (decisions), `fe4f6b6ae` (Notes), `54456bd10` (Files). Fetched/merged `origin/dev` once at `f06679b11cde29cc0b7120fdab5f721389caf695`; Notes migration 0025 was free there. Coordinated with #627; folder ID assignment is unchanged. Tracked worktree is clean. Built durable imported Note identity for #857. The Index retains a Note UUID linked to the Files item ID. API/deep links and backlinks use it before any Markdown edit. Existing keys win; copies receive independent IDs. Reads, sync ingestion, reindex and mechanical moves do not add the key. A real edit adds it in the same atomic write. EOF frontmatter is preserved. Files: `crates/calternal-notes-core/src/rename.rs`; `crates/plugins/notes/migrations/0025_note_identity.sql`; Notes `store.rs`, `lib.rs`, `bookmarks.rs`, `imap.rs`, `tasks_api.rs`, `reminders_api.rs`, `wikilinks.rs`, `tests/imported_identity.rs`; Files `index.rs`, `lib.rs`, `dav.rs`, `tests/imported_identity.rs`; `docs/DESIGN.md`; `bench/notes-import.sh`; `tests/perf/upload_scale.py`, `test_upload_scale.py`. Decisions: retain identity rows separately from disposable content projections; clear the old path on removal but retain the Files binding; first indexed owner keeps a duplicated declared ID, with API/DAV copies claiming source identity first; imported retitle uses the new title slug in its current folder; mechanical link rewrites do not materialize identity. Pre-edit identity needs retained Index state during a rebuild. Native-client content mutations count as real User edits; sync byte ingestion does not. UX gaps closed: imported deep links after rename/move; backlinks before first edit; copied keys colliding; no-op saves adding metadata/versions; first body edit dropping EOF metadata. UX gaps left: existing Journal snapshot 404 (#1005), independently found on the same origin/dev; existing atomic-write/reconcile storm timeout and fixture-cleanup race (#1000). All status assertions remain unchanged. Twelve byte expectations changed only for the new first-edit scalar required by #857; bodies remain exact. For the merge round: run `bash tests/adversarial/run.sh` once on the combined branch to cover cross-plugin/authz/robustness and ordinary-write consistency plus WebDAV; run `cargo clippy -p calternal-server --all-targets -- -D warnings` and `cargo test -p calternal-server -- --test-threads=4` on the combined branch. After #1000/#1005 fixes, rerun `cargo test -p calternal-plugin-files -- --test-threads=4` and `cargo test -p calternal-plugin-notes -- --test-threads=4`; the Notes lib failure currently prevents its integration tests from running. In apps/web, run `bun run check`, `bun run test --maxWorkers=2`, `bun run test:e2e:notes`, `bun run test:e2e:deeplinks`, and `bun run test:e2e:files`, with the combined server build. These must prove that imported Notes open without saves and Copy links survive tracked moves and the first edit. The optional import profile is `CALTERNAL_IMPORTED_NOTES=1 PERF_LABEL=notes-imported-857 bash bench/notes-import.sh` with the shared release binary, inside `flock /root/perf.lock` on the perf VM and load recorded. No perf run in this identity job under the 2026-10-02 verification policy; the profile adds 656/1k/5k/10k imports and an eight-request burst. All ten Notes identity regressions passed in the final full run, including 656 unchanged imports/reindexes, first HTTP/live/property/checkbox edits, no-op saves, same-title Notes in different folders, backlinks, copy collisions, tombstones, and EOF metadata. The Files focused regression passed rename, WebDAV MOVE, folder move, pending-move watcher adoption/replay, unindexed-source copy, non-UTF-8 copy and directory exclusion. Gate output (verbatim summary lines; full logs remain in worktree artifacts): `cargo fmt --check`: exit 0, no output. All Cargo commands used `CARGO_PROFILE_DEV_DEBUG=line-tables-only CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 TMPDIR=<worktree>/target/tmp`, with the preset target directory. `cargo clippy -p calternal-notes-core --all-targets -- -D warnings` ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 39s ``` `cargo test -p calternal-notes-core -- --test-threads=4` ``` Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 56s test result: ok. 519 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.32s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` `cargo clippy -p calternal-plugin-notes --all-targets -- -D warnings` ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 16m 25s ``` `cargo test -p calternal-plugin-notes -- --test-threads=4` ``` Finished `test` profile [unoptimized + debuginfo] target(s) in 9m 10s test result: FAILED. 176 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 539.12s ``` `cargo clippy -p calternal-plugin-files --all-targets -- -D warnings` ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 31.63s ``` `cargo test -p calternal-plugin-files -- --test-threads=4` ``` Finished `test` profile [unoptimized + debuginfo] target(s) in 25m 36s test result: FAILED. 145 passed; 2 failed; 1 ignored; 0 measured; 0 filtered out; finished in 369.40s ``` `cargo test -p calternal-plugin-files imported_identity -- --test-threads=1` ``` Finished `test` profile [unoptimized + debuginfo] target(s) in 22.75s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 147 filtered out; finished in 9.48s ``` The Notes full gate fails only the unchanged 404 assertion in #1005. The Files initial full gate had two failures: the new test omitted Host (fixed, expected 201 unchanged), and #1000's unchanged storm timeout. A later focused fixture was corrected to create the real Files move intent before moving the file; its original-ID expectation also stayed unchanged. The final focused Files result above passes. No storm-only rerun or full adversarial matrix ran under the current verification policy. Python profile fixtures: `python3 -m unittest discover -s tests/perf -p test_upload_scale.py` passed all four tests. `bash -n bench/notes-import.sh` passed. No dependency versions changed. Doc comments were reread before this report. Build cleanup completed with `cargo clean`; web build output was removed. Review artifacts are gitignored and remain local.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#857
No description provided.