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.1 KiB
3.1 KiB
M5a task 14: bxctl reindex and bxctl memory
Branch: m5a (run git switch m5a; git status --short must be empty, otherwise stop)
Commit subject: bxctl: reindex, and memory log, undo, pending, accept, reject
Goal
The owner's memory commands (M5a spec, section 10), over memoryd's owner socket
({home}/run/owner-memory/admin.sock, or --memory-socket PATH; --admin-socket stays
brokerd's):
bxctl reindexprintsreindexed: 42 logs, 1,208 records, 7 notes.bxctl memory log [N] | undo <id> | pending | accept <id> | reject <id>prints whatmemorydanswers. An error frommemorydis printed escaped, as approvals are, and exits 1.
Files
- Copy (skeleton):
crates/bxctl/src/memory.rs - Copy (test):
crates/bxctl/tests/cli_memory.rs - Modify:
crates/bxctl/src/lib.rs(pub mod memory;afterpub mod escape;),crates/bxctl/src/cli.rs,crates/bxctl/src/main.rs,docs/implementer-log.md
The skeleton
Written: MEMORY_TIMEOUT, default_socket, Ask. Fill: parse_reindex, parse_memory,
socket_flag, grouped, run.
The edits, exactly
cli.rs:
- In
USAGE, the last entry's lineCheck the audit log's hash chain, reading the files directly.";loses its closing";, and after it come (the blank lines included):
bxctl reindex [--memory-socket PATH]
Rebuild memoryd's index from the session logs and notes.
bxctl memory log [N] | undo <id> | pending | accept <id> | reject <id> [--memory-socket PATH]
List memory edits, undo the latest edit of a file, or answer writes waiting for review.";
- In
enum Command, after theAuditVerify { home: PathBuf, },variant add
Memory {
socket: PathBuf,
ask: crate::memory::Ask,
},
- In
parse, after"audit" => parse_audit(rest, home),add
"reindex" => crate::memory::parse_reindex(rest, home),
"memory" => crate::memory::parse_memory(rest, home),
main.rs: in the match command, just before the Command::AuditVerify { home } => { arm,
add
Command::Memory { socket, ask } => {
let mut out = std::io::stdout().lock();
match bxctl::memory::run(&socket, &ask, bxctl::memory::MEMORY_TIMEOUT, &mut out) {
Ok(()) => ExitCode::SUCCESS,
Err(e) => {
eprintln!("bxctl: {e}");
ExitCode::from(1)
}
}
}
Steps
- 1. Copy the two files; make the edits;
cargo check -p bxctl --all-targets. - 2. See it fail.
cargo test -p bxctl --test cli_memory: 4 failed. - 3. Fill the five functions.
cargo fmt --all. - 4. See it pass. The same command: 4 passed. Then
cargo test -p bxctl: every suite passes (the usage tests readUSAGE). - 5. Run the gate.
make gate:gate: ok, 4 more tests than before (about 936). - 6. Log and commit.
git add -A crates/bxctl docs/implementer-log.md Cargo.lock && git commit
Done when
make gateprintsgate: ok.
Stop and report if
- A test fails after the functions follow their comments exactly.