M5a plan: task 18, a note cannot forge a notes.md header
entry_problem refuses any line that starts with the separator, and a noted header with an unknown last part is not a header. The new given tests are forgery.rs and new versions of memory_args.rs and notes.rs; the old copies are kept as -task02 and -task06. On a scratch tree at the end of task 17, the three tests named in the task fail and then pass, four mutations of the fix are caught, and the gate passes with 939 tests. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# M5a implementation plan: local memory
|
||||
|
||||
> **For the implementing model:** do not work from this file. The owner gives you one task file at
|
||||
> a time (`01-…` to `17-…`). This file is the index for the owner and the reviewer.
|
||||
> a time (`01-…` to `18-…`). This file is the index for the owner and the reviewer.
|
||||
|
||||
**Goal:** a new role, `memoryd`, owns the agent's memory: identity (`soul.md`, `memory.md`,
|
||||
`user.md`, in every new session's prompt) and experience (`notes.md` and the session logs, found
|
||||
@@ -66,9 +66,10 @@ the skeletons were cut (tip T25).
|
||||
| 15 | `15-soul-and-device.md` | the starter soul; device checks with `memoryd` | `device.rs` updated, `support/memoryd.rs` | reference; `make verify-device` on straylight |
|
||||
| 16 | `16-memoryd-no-slicing.md` | the day and the month with `get`, not a slice (review nit) | the existing ones | reference |
|
||||
| 17 | `17-repeated-code.md` | repeated error lines written once (review nit) | the existing ones | reference; 4 mutations caught |
|
||||
| 18 | `18-no-forged-headers.md` | a note cannot forge a `notes.md` header (review finding) | `forgery.rs`; `memory_args.rs`, `notes.rs` updated | reference; 4 mutations caught |
|
||||
|
||||
At the end of task 15: 936 tests (854 before task 01); tasks 16 and 17 change no behaviour and
|
||||
keep 936. Each task's count was checked by running
|
||||
keep 936; at the end of task 18, 939. Each task's count was checked by running
|
||||
the gate at its end state on its own.
|
||||
|
||||
## Changes during the run
|
||||
@@ -90,7 +91,12 @@ the gate at its end state on its own.
|
||||
are rustfmt-clean. The attempt is saved in `.state/runs/M5a/04-attempt-2/`. Resume from task
|
||||
04. The measurements behind this are in `docs/research/2026-09-24-chat-template-tokens.md`,
|
||||
added after the run.
|
||||
- 2026-09-24, after the review: tasks 16 and 17 clean up the review's nits. Resume from task 16.
|
||||
- 2026-09-24, after the review: tasks 16 and 17 clean up the review's nits. Task 18 closes a hole
|
||||
the review found in the spec and the reference alike: a note's text could hold a line shaped like
|
||||
a `notes.md` header, so an untrusted session could plant a `moved from memory.md` entry that
|
||||
`recall` showed as identity. The spec was changed (`4ae827a`, section 3). Since task 18 hands
|
||||
over new versions of two given tests, task 02's `memory_args.rs` is now `memory_args.rs-task02`
|
||||
and task 06's `notes.rs` is now `notes.rs-task06`. Resume from task 16.
|
||||
|
||||
## Running it
|
||||
|
||||
|
||||
Reference in New Issue
Block a user