Memory: remove the whole-Home notes.list (#398) #417

Closed
kayg wants to merge 0 commits from issue/398-no-whole-list into dev
Owner

Part of #398 (approved by kayg on 2026-10-15, Q5 on #174).

What

  • notes.list no longer has a whole-Home form. With no input it now returns the first page of 50, the same as {}. Before, it built every note of the Home into one answer: 100,000 objects at 100k notes. The app only asks for pages (limit: 500), and the form was marked "deprecated; for one release".
  • Item and Notes::list stay inside the server. The search provider and renames still use them, and they read the id index, not the list store.
  • The perf harness no longer calls the whole-Home form. home.first_list, home.list and mem.after_list are gone, and mem.after_first_page is new. The cold run opens the Home with a first page, as the app does, and reports it as cold.first_page.
  • One daily test now checks the id index. It used to read the whole list through the action. A page of the list catches up a moment after a note is made, and a page-based version of the test failed on a slower machine.

The contract (contracts/actions.json) doesn't change, because the input schema is the same.

Numbers

These are from the perf VM at 100k notes, #44 round 21. All8 was run twice: as is, and with the harness's 21 whole-Home calls left out. That comparison is what this PR does to a real run. Values are p50 / p95.

metric with whole-Home calls without
mem.peak MB 269 / 275 111 / 120
idle.rss MB 78.9 65.6
mem.after_opens MB 442 / 466 (all5, r13) 48.6 / 48.7 (all5, r13)
search.query ms 6.27 / 28.5 4.74 / 38.8
sync.save_ack ms 8.93 / 34.7 6.10 / 15.0

On this branch, the #398 runs on the perf VM (100k, dropped caches) gave these numbers:

  • glibc defaults: mem.peak 142 / 180 MB.
  • With the two-heap tunable (the next PR): 108 / 131 MB.
  • Each warm run's peak now comes from the opens, the search and the storm, not from a list.

Checks: cargo fmt, clippy -D warnings and the workspace tests are clean (Rust 1.99.0).

🤖 Generated with Claude Code

https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T

Part of #398 (approved by kayg on 2026-10-15, Q5 on #174). ## What - **`notes.list` no longer has a whole-Home form.** With no input it now returns the first page of 50, the same as `{}`. Before, it built every note of the Home into one answer: 100,000 objects at 100k notes. The app only asks for pages (`limit: 500`), and the form was marked "deprecated; for one release". - **`Item` and `Notes::list` stay** inside the server. The search provider and renames still use them, and they read the id index, not the list store. - **The perf harness no longer calls the whole-Home form.** `home.first_list`, `home.list` and `mem.after_list` are gone, and `mem.after_first_page` is new. The cold run opens the Home with a first page, as the app does, and reports it as `cold.first_page`. - **One daily test now checks the id index.** It used to read the whole list through the action. A page of the list catches up a moment after a note is made, and a page-based version of the test failed on a slower machine. The contract (`contracts/actions.json`) doesn't change, because the input schema is the same. ## Numbers These are from the perf VM at 100k notes, #44 round 21. All8 was run twice: as is, and with the harness's 21 whole-Home calls left out. That comparison is what this PR does to a real run. Values are p50 / p95. | metric | with whole-Home calls | without | |---|---|---| | mem.peak MB | 269 / 275 | **111 / 120** | | idle.rss MB | 78.9 | **65.6** | | mem.after_opens MB | 442 / 466 (all5, r13) | **48.6 / 48.7** (all5, r13) | | search.query ms | 6.27 / 28.5 | 4.74 / 38.8 | | sync.save_ack ms | 8.93 / 34.7 | 6.10 / 15.0 | On this branch, the #398 runs on the perf VM (100k, dropped caches) gave these numbers: - glibc defaults: `mem.peak` 142 / 180 MB. - With the two-heap tunable (the next PR): 108 / 131 MB. - Each warm run's peak now comes from the opens, the search and the storm, not from a list. Checks: `cargo fmt`, `clippy -D warnings` and the workspace tests are clean (Rust 1.99.0). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Memory: remove the whole-Home notes.list (#398)
Some checks failed
CI / server (pull_request) Successful in 33s
CI / rust (pull_request) Successful in 2m35s
CI / web (pull_request) Failing after 44m28s
44306033b1
`notes.list` without input built every note of the Home into one answer
(100,000 objects at 100k notes, hundreds of megabytes at once). The app
only asks for pages, and the form was deprecated "for one release".
Without input it now returns the first page of 50, like `{}`.

The perf harness no longer calls it: `home.first_list`, `home.list` and
`mem.after_list` are gone (`mem.after_first_page` instead), and the cold
run opens the Home with a first page (`cold.first_page`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Author
Owner

Train m ran the full suite per project (11) plus fmt, clippy, workspace tests and the build. Everything passed except two:

  • trash:74 failed once and then passed 4/4 when rerun.
  • passkeys failed on a port clash with another server, then passed 2/2 when run fresh.
    Contents: #417 #418 #427 #428 #429 #435 (#398 memory) and #439 (#422 compression). Merging.
Train m ran the full suite per project (11) plus fmt, clippy, workspace tests and the build. Everything passed except two: - trash:74 failed once and then passed 4/4 when rerun. - passkeys failed on a port clash with another server, then passed 2/2 when run fresh. Contents: #417 #418 #427 #428 #429 #435 (#398 memory) and #439 (#422 compression). Merging.
kayg closed this pull request 2026-10-15 16:19:38 +00:00
Some checks failed
CI / server (pull_request) Successful in 33s
CI / rust (pull_request) Successful in 2m35s
CI / web (pull_request) Failing after 44m28s

Pull request closed

Sign in to join this conversation.
No reviewers
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!417
No description provided.