memoryd (files, the check, edits, journal, index, recall, serving), the memory tools and built-in grants in brokerd, the memory block in loopd, bxctl reindex and memory, and the device checks with memoryd. Each task was built as a reference and gated. Each was replayed on its own at its end state (854 to 936 tests) and mutation-checked. Each skeleton compiles and fails its tests. Every todo comment was read beside its signature. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
3.7 KiB
M5a task 03: the memoryd crate, its configuration and sockets
Branch: m5a (run git switch m5a; git status --short must be empty, otherwise stop)
Commit subject: memoryd: the crate, memoryd.toml, and listening on a socket
Goal
A new role crate, memoryd (M5a spec, sections 2, 7 and 11), with its configuration and the
socket helper its three sockets will use. It depends on proto and on one new crate, rusqlite
(the index, from task 08), which is added to the workspace now so the dependency checks pass
once. memoryd serve --config <path> reads its configuration and says "not implemented" until
task 10.
Files
- Copy (whole, nothing to fill):
crates/memoryd/Cargo.toml,crates/memoryd/src/lib.rs,crates/memoryd/src/main.rs - Copy (skeletons):
crates/memoryd/src/config.rs,crates/memoryd/src/socket.rs - Copy (tests):
crates/memoryd/tests/config.rs,crates/memoryd/tests/socket.rs,crates/memoryd/tests/support/tmp.rs - Append:
docs/plans/M5a/files/runbook-memoryd-start-failed.mdto the end ofdocs/runbook.md(a blank line before it) - Modify:
Cargo.toml,deny.toml,docs/dependencies.md,docs/implementer-log.md
The edits, exactly
Cargo.toml (the workspace): add "crates/memoryd", to members after
"crates/gatewayd",, and at the end of [workspace.dependencies] add
rusqlite = { version = "0.40.2", features = ["bundled"] }
deny.toml: the line allow = ["MIT", "Apache-2.0", "Unicode-3.0", "ISC", "BSD-3-Clause"]
becomes allow = ["MIT", "Apache-2.0", "Unicode-3.0", "ISC", "BSD-3-Clause", "Zlib"]
(foldhash, a dependency of rusqlite, is Zlib-licensed).
docs/dependencies.md: add this row at the end of the table:
| `rusqlite` | 0.40.2 | `memoryd` from M5a | The full-text index (`index/memory.sqlite3`, FTS5), disposable and rebuilt from files. Feature `bundled`: `libsqlite3-sys` compiles SQLite from source with FTS5 on, so no system SQLite is needed. With its dependencies: `libsqlite3-sys` (MIT; build: `cc`, `pkg-config`, `vcpkg`), `hashlink`, `hashbrown`, `foldhash` (Zlib, added to `deny.toml` for it), `fallible-iterator`, `fallible-streaming-iterator`, `smallvec`, `bitflags`. MIT. |
The skeletons
config.rs: the types, Config::parse and the path methods are written; fill Config::load and
Config::socket. socket.rs: fill listen, the same five steps as listen in
crates/brokerd/src/serve.rs (read it; no crate may depend on another role's crate, so this is a
copy with String errors).
Steps
- 1. Copy every file above from
docs/plans/M5a/files/to the same path; make the three edits; append the runbook entry. - 2. Build.
cargo build -p memoryd. The first build downloadsrusqliteand compiles SQLite; it takes a few minutes. Thencargo deny check: expectedadvisories ok, bans ok, licenses ok, sources ok(it needs the network). - 3. See it fail.
cargo test -p memoryd --test config --test socket: expectedconfig3 failed, 1 passed;socket2 failed. - 4. Fill
Config::load,Config::socketandlisten.cargo fmt --all. - 5. See it pass. The same command: 4 and 2 passed.
- 6. Run the gate.
make gate:gate: ok, with 6 more tests than before (about 868). - 7. Log and commit.
git add -A Cargo.toml Cargo.lock deny.toml crates/memoryd docs/runbook.md docs/dependencies.md docs/implementer-log.md && git commit
Done when
make gateprintsgate: ok, andcargo deny checkpasses.
Stop and report if
cargo deny checkreports anything but the four "ok"s: a licence other than Zlib, or two versions of one crate. Do not editdeny.tomlbeyond the one line above.- The build cannot download
rusqlite.