diff --git a/docs/plans/M5d2/01-loopd-session-slot.md b/docs/plans/M5d2/01-loopd-session-slot.md index 5386730..8b5dfd6 100644 --- a/docs/plans/M5d2/01-loopd-session-slot.md +++ b/docs/plans/M5d2/01-loopd-session-slot.md @@ -89,7 +89,7 @@ become --test compact_turn`: every test passes, 4 in `session_slot` and the others as before. - [ ] **5. Check.** `git diff --stat` lists exactly `crates/loopd/src/turn.rs`. - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, with a shell timeout of 600000 ms. - Expected last line: `gate: ok`. The test count is **1511** after this task, 1507 before it, + Expected last line: `gate: ok`. The test count is **1512** after this task, 1508 before it, and the 4 new ones are the tests of `session_slot.rs`. To count, add up the `N passed` of every `test result:` line the gate's `cargo test --workspace` printed, and add 1. Never run the gate again only to count. @@ -100,7 +100,7 @@ become ## Done when -- `make gate` prints `gate: ok` with 1511 tests. +- `make gate` prints `gate: ok` with 1512 tests. - `git diff HEAD~1 --stat` lists only `crates/loopd/src/turn.rs`, `crates/loopd/tests/session_slot.rs` and `docs/implementer-log.md`. @@ -115,7 +115,7 @@ become - The fix seems to need a change anywhere else. It does not; stop and say why you think so. - A test outside `session_slot.rs` fails in the gate: check once whether it fails without your change (`git stash -u`, run it, `git stash pop`), then stop and report both results. -- The gate passes with a count other than 1511. +- The gate passes with a count other than 1512. ## What the given tests pin diff --git a/docs/plans/M5d2/02-bxcore-tool-summary.md b/docs/plans/M5d2/02-bxcore-tool-summary.md index f91895a..ab4da55 100644 --- a/docs/plans/M5d2/02-bxcore-tool-summary.md +++ b/docs/plans/M5d2/02-bxcore-tool-summary.md @@ -139,14 +139,14 @@ become - [ ] **5. Check.** `git diff --stat` lists `crates/bxcore/src/log.rs`, `crates/loopd/src/baseline.rs`, `crates/loopd/tests/support/turn.rs`. - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1517** (1511 before, plus 6). + `gate: ok`. Test count **1518** (1512 before, plus 6). - [ ] **7. Log and commit.** Task cell `M5d2/02-bxcore-tool-summary`. Stage with `git add crates/bxcore crates/loopd docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1517 tests. +- `make gate` prints `gate: ok` with 1518 tests. - `git diff HEAD~1 --stat` lists only `crates/bxcore/src/log.rs`, `crates/bxcore/tests/tool_summary.rs`, `crates/loopd/src/baseline.rs`, `crates/loopd/tests/tool_summary_messages.rs`, `crates/loopd/tests/support/turn.rs` and the @@ -155,7 +155,7 @@ become ## Stop and report if - The branch check fails; a "before" block is not found exactly once; step 2 differs; `cargo - check` warns; a test fails; the gate count is not 1517; you replay a summary as a `User` or + check` warns; a test fails; the gate count is not 1518; you replay a summary as a `User` or `Tool` message; you add `truncated`; you change `Setup::turn`'s return type. ## What the given tests pin diff --git a/docs/plans/M5d2/03-loopd-heartbeat-config.md b/docs/plans/M5d2/03-loopd-heartbeat-config.md index cf29a12..9f00f0f 100644 --- a/docs/plans/M5d2/03-loopd-heartbeat-config.md +++ b/docs/plans/M5d2/03-loopd-heartbeat-config.md @@ -193,21 +193,21 @@ If `main.rs` already has `use loopd::tools::{Registry, ToolPort};`, write `Regis - [ ] **5. Check.** `git diff --stat` lists `crates/loopd/src/config.rs` and `crates/loopd/src/main.rs`. `git status --short` shows the new test and `config/heartbeat.md`. - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1525** (1517 before, plus 8). + `gate: ok`. Test count **1526** (1518 before, plus 8). - [ ] **7. Log and commit.** Task cell `M5d2/03-loopd-heartbeat-config`. Stage with `git add crates/loopd config/heartbeat.md docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1525 tests. +- `make gate` prints `gate: ok` with 1526 tests. - `git diff HEAD~1 --stat` lists only `crates/loopd/src/config.rs`, `crates/loopd/src/main.rs`, `crates/loopd/tests/config_heartbeat.rs`, `config/heartbeat.md` and the log. ## Stop and report if - The branch check fails; a "before" block is not found exactly once; step 2 differs; `cargo - check` warns; a test fails; the gate count is not 1525; you join `heartbeat.prompt` onto + check` warns; a test fails; the gate count is not 1526; you join `heartbeat.prompt` onto `system.md`'s directory instead of the config file's parent; you reject an empty `summarise` list; you check names inside `parse`. diff --git a/docs/plans/M5d2/04-loopd-cron.md b/docs/plans/M5d2/04-loopd-cron.md index bb6e786..1ba41bb 100644 --- a/docs/plans/M5d2/04-loopd-cron.md +++ b/docs/plans/M5d2/04-loopd-cron.md @@ -169,20 +169,20 @@ If `is_multiple_of` is not in scope on `u32` in this toolchain, use `value % n = - [ ] **5. Check.** `git diff --stat` lists `crates/loopd/src/cron.rs` and `crates/loopd/src/lib.rs`. - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1535** (1525 before, plus 10). + `gate: ok`. Test count **1536** (1526 before, plus 10). - [ ] **7. Log and commit.** Task cell `M5d2/04-loopd-cron`. Stage with `git add crates/loopd docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1535 tests. +- `make gate` prints `gate: ok` with 1536 tests. - `git diff HEAD~1 --stat` lists only `crates/loopd/src/cron.rs`, `crates/loopd/src/lib.rs`, `crates/loopd/tests/cron.rs` and the log. ## Stop and report if - The branch check fails; step 2 differs; `cargo check` warns; a test fails; the gate count is - not 1535; you add a dependency; you treat DOM and DOW as OR; you accept `@daily` or a sixth + not 1536; you add a dependency; you treat DOM and DOW as OR; you accept `@daily` or a sixth field; `cron.rs` exceeds 500 lines. ## What the given tests pin diff --git a/docs/plans/M5d2/05-loopd-jobs.md b/docs/plans/M5d2/05-loopd-jobs.md index e6ca485..ba61c94 100644 --- a/docs/plans/M5d2/05-loopd-jobs.md +++ b/docs/plans/M5d2/05-loopd-jobs.md @@ -194,21 +194,21 @@ Replace the four stub bodies in the same task. Do not leave a stub that returns - [ ] **6. Check.** `git diff --stat` lists `crates/loopd/src/jobs.rs`, `crates/loopd/src/lib.rs`, `crates/loopd/src/main.rs`, `docs/runbook.md`. - [ ] **7. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1543** (1535 before, plus 8). + `gate: ok`. Test count **1544** (1536 before, plus 8). - [ ] **8. Log and commit.** Task cell `M5d2/05-loopd-jobs`. Stage with `git add crates/loopd docs/runbook.md docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1543 tests. +- `make gate` prints `gate: ok` with 1544 tests. - `git diff HEAD~1 --stat` lists only `crates/loopd/src/jobs.rs`, `crates/loopd/src/lib.rs`, `crates/loopd/src/main.rs`, `crates/loopd/tests/jobs.rs`, `docs/runbook.md` and the log. ## Stop and report if - The branch check fails; step 2 differs; `cargo check` warns; a test fails; the gate count is - not 1543; you add a cron crate; a missing jobs directory is an error; `Display` for `Invalid` + not 1544; you add a cron crate; a missing jobs directory is an error; `Display` for `Invalid` does not end with the runbook pointer; `jobs.rs` exceeds 500 lines; you write a job file. ## What the given tests pin diff --git a/docs/plans/M5d2/06-loopd-scheduler-heartbeat.md b/docs/plans/M5d2/06-loopd-scheduler-heartbeat.md index 5b0fedc..da0e76f 100644 --- a/docs/plans/M5d2/06-loopd-scheduler-heartbeat.md +++ b/docs/plans/M5d2/06-loopd-scheduler-heartbeat.md @@ -190,14 +190,14 @@ pass so it runs once. `grep -c '^## heartbeat-prompt-unreadable$' docs/runbook.md` prints `1`. - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1549** (1543 before, plus 6). + `gate: ok`. Test count **1550** (1544 before, plus 6). - [ ] **7. Log and commit.** Task cell `M5d2/06-loopd-scheduler-heartbeat`. Stage with `git add crates/loopd docs/runbook.md docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1549 tests. +- `make gate` prints `gate: ok` with 1550 tests. - `git diff HEAD~1 --stat` lists only `crates/loopd/src/channel.rs`, `crates/loopd/src/scheduler.rs`, `crates/loopd/src/lib.rs`, `crates/loopd/src/main.rs`, `crates/loopd/tests/scheduler_heartbeat.rs`, `docs/runbook.md` and the log. @@ -205,7 +205,7 @@ pass so it runs once. ## Stop and report if - The branch check fails; a "before" block is not found exactly once; step 2 differs; `cargo - check` warns; a test fails; the gate count is not 1549; you sleep in a test; you post to + check` warns; a test fails; the gate count is not 1550; you sleep in a test; you post to Mattermost; you send `slots.main`; you set a speaker; you `chmod 000`; `Held` stays private. ## What the given tests pin diff --git a/docs/plans/M5d2/07-loopd-scheduler-cron.md b/docs/plans/M5d2/07-loopd-scheduler-cron.md index 5e9d16b..c8d90a0 100644 --- a/docs/plans/M5d2/07-loopd-scheduler-cron.md +++ b/docs/plans/M5d2/07-loopd-scheduler-cron.md @@ -82,20 +82,20 @@ Do not change heartbeat behaviour. Do not add a sleep. --test jobs --test cron`: every test passes, 6 in `scheduler_cron`. - [ ] **5. Check.** `git diff --stat` lists exactly `crates/loopd/src/scheduler.rs`. - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1555** (1549 before, plus 6). + `gate: ok`. Test count **1556** (1550 before, plus 6). - [ ] **7. Log and commit.** Task cell `M5d2/07-loopd-scheduler-cron`. Stage with `git add crates/loopd docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1555 tests. +- `make gate` prints `gate: ok` with 1556 tests. - `git diff HEAD~1 --stat` lists only `crates/loopd/src/scheduler.rs`, `crates/loopd/tests/scheduler_cron.rs` and the log. ## Stop and report if - The branch check fails; step 2 differs (tests do not compile, or a different assertion - fails); `cargo check` warns; a test fails; the gate count is not 1555; you reuse a session + fails); `cargo check` warns; a test fails; the gate count is not 1556; you reuse a session across runs; you send `slots.main`; you set a speaker; you skip leftovers that are not busy; a heartbeat test fails. diff --git a/docs/plans/M5d2/08-loopd-tool-summary.md b/docs/plans/M5d2/08-loopd-tool-summary.md index 4870862..398dd74 100644 --- a/docs/plans/M5d2/08-loopd-tool-summary.md +++ b/docs/plans/M5d2/08-loopd-tool-summary.md @@ -231,14 +231,14 @@ Facts). The `Err(TurnError::SessionFull)` arm gets the same `missing` call befor - [ ] **5. Check.** `git diff --stat` lists `crates/loopd/src/summarise.rs`, `crates/loopd/src/lib.rs`, `crates/loopd/src/compact.rs`. - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1561** (1555 before, plus 6). + `gate: ok`. Test count **1562** (1556 before, plus 6). - [ ] **7. Log and commit.** Task cell `M5d2/08-loopd-tool-summary`. Stage with `git add crates/loopd config/summarise.md docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1561 tests. +- `make gate` prints `gate: ok` with 1562 tests. - `git diff HEAD~1 --stat` lists only `crates/loopd/src/summarise.rs`, `crates/loopd/src/lib.rs`, `crates/loopd/src/compact.rs`, `crates/loopd/tests/tool_summary_call.rs`, `config/summarise.md` and the log. @@ -246,7 +246,7 @@ Facts). The `Err(TurnError::SessionFull)` arm gets the same `missing` call befor ## Stop and report if - The branch check fails; a "before" block is not found exactly once; step 2 differs; `cargo - check` warns; a test fails; the gate count is not 1561; you send tools on the summary + check` warns; a test fails; the gate count is not 1562; you send tools on the summary request; you send `slots.main`; you replay the summary in `messages()`; you summarise a name not in the list; you summarise twice; you compact before summarising. diff --git a/docs/plans/M5d2/09-memoryd-summary-index.md b/docs/plans/M5d2/09-memoryd-summary-index.md index 70f4cc9..a5e7e33 100644 --- a/docs/plans/M5d2/09-memoryd-summary-index.md +++ b/docs/plans/M5d2/09-memoryd-summary-index.md @@ -117,21 +117,21 @@ results are indexed. A comment that does not fit its code: stop. test passes, 5 in `tool_summary_index`. - [ ] **5. Check.** `git diff --stat` lists exactly `crates/memoryd/src/index.rs`. - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1566** (1561 before, plus 5). + `gate: ok`. Test count **1567** (1562 before, plus 5). - [ ] **7. Log and commit.** Task cell `M5d2/09-memoryd-summary-index`. Stage with `git add crates/memoryd docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1566 tests. +- `make gate` prints `gate: ok` with 1567 tests. - `git diff HEAD~1 --stat` lists only `crates/memoryd/src/index.rs`, `crates/memoryd/tests/tool_summary_index.rs` and the log. ## Stop and report if - The branch check fails; a "before" block is not found exactly once; step 2 differs; `cargo - check` warns; a test fails; the gate count is not 1566; you index `ToolResult` content; you + check` warns; a test fails; the gate count is not 1567; you index `ToolResult` content; you leave `kind` as `"session"`; a secret summary is searchable on a private index. ## What the given tests pin diff --git a/docs/plans/M5d2/10-memoryd-tiers.md b/docs/plans/M5d2/10-memoryd-tiers.md index 049c695..1278f62 100644 --- a/docs/plans/M5d2/10-memoryd-tiers.md +++ b/docs/plans/M5d2/10-memoryd-tiers.md @@ -203,20 +203,20 @@ becomes - [ ] **5. Check.** `git diff --stat` lists the files in "Every place that changes" except the new tests and starter (those are untracked until `git add`). - [ ] **6. Run the gate.** `cargo fmt --all`, then `make gate`, timeout 600000 ms. Last line - `gate: ok`. Test count **1572** (1566 before, plus 6). + `gate: ok`. Test count **1573** (1567 before, plus 6). - [ ] **7. Log and commit.** Task cell `M5d2/10-memoryd-tiers`. Stage with `git add crates/bxcore crates/memoryd crates/bxctl config/jobs docs/implementer-log.md Cargo.lock`, then commit as `AGENTS.md` says. ## Done when -- `make gate` prints `gate: ok` with 1572 tests. +- `make gate` prints `gate: ok` with 1573 tests. - `git diff HEAD~1 --stat` lists only the files this task names plus the log. ## Stop and report if - The branch check fails; a "before" block is not found exactly once; step 2 differs; `cargo - check` warns; a test fails; the gate count is not 1572; you edit `cli_memory.rs`; identity + check` warns; a test fails; the gate count is not 1573; you edit `cli_memory.rs`; identity entries show a non-zero hit count; untrusted notes are omitted; you add a cron crate; you special-case the name `tier` in `loopd`. diff --git a/docs/plans/M5d2/README.md b/docs/plans/M5d2/README.md index afcc1e4..56a41d4 100644 --- a/docs/plans/M5d2/README.md +++ b/docs/plans/M5d2/README.md @@ -56,20 +56,20 @@ branch this plan starts from. Every task below has been written to be replayed from its text. The gate count is the passed total of `cargo test --workspace` plus one, for the ignored `end_to_end` test the gate runs on -its own. Before task 01 it is **1507** (talos, rustc 1.98.1; M5d-1 task 08). +its own. Before task 01 it is **1508** (straylight, rustc 1.98.1 / clippy 0.1.98; M5d-1 task 08). | # | Delivers | Crates | Gate after | Tests added | |---|---|---|---|---| -| 01 | `run_turn` sends `session.slot()`; a session created on the background slot has `id_slot` of that slot; `mm-*` stays main | loopd | 1511 | 4 | -| 02 | `LogRecord::ToolSummary`; `messages()` ignores it; `types` names it; JSON round-trip | bxcore, loopd | 1517 | 6 | -| 03 | `[heartbeat]` (`every_s` 0, `prompt` `heartbeat.md`); unknown `[compact] summarise` names are a config error; starter `heartbeat.md` | loopd | 1525 | 8 | -| 04 | Five-field UTC cron matcher: `*`, `n`, `n-m`, `*/n`; day-of-week 0 is Sunday | loopd | 1535 | 10 | -| 05 | `{home}/jobs/.toml`, `runs.jsonl`, `jobs-invalid` pointer and runbook | loopd | 1543 | 8 | -| 06 | Heartbeat tick: time line, standing session `heartbeat`, skip if busy, unreadable prompt logged once | loopd | 1549 | 6 | -| 07 | Cron tick: new session per run, skip if previous live, leftover `started` becomes `failed` | loopd | 1555 | 6 | -| 08 | After a turn, opted-in `ToolResult` without a `ToolSummary` gets a background summary appended with the result's labels | loopd | 1561 | 6 | -| 09 | `memoryd` indexes `ToolSummary` as kind `summary`; `recall` finds it and taints when untrusted | memoryd | 1566 | 5 | -| 10 | `MemoryCommand::Tiers`, `bxctl memory tiers`, starter `config/jobs/tier.toml.example` | bxcore, memoryd, bxctl | 1572 | 6 | +| 01 | `run_turn` sends `session.slot()`; a session created on the background slot has `id_slot` of that slot; `mm-*` stays main | loopd | 1512 | 4 | +| 02 | `LogRecord::ToolSummary`; `messages()` ignores it; `types` names it; JSON round-trip | bxcore, loopd | 1518 | 6 | +| 03 | `[heartbeat]` (`every_s` 0, `prompt` `heartbeat.md`); unknown `[compact] summarise` names are a config error; starter `heartbeat.md` | loopd | 1526 | 8 | +| 04 | Five-field UTC cron matcher: `*`, `n`, `n-m`, `*/n`; day-of-week 0 is Sunday | loopd | 1536 | 10 | +| 05 | `{home}/jobs/.toml`, `runs.jsonl`, `jobs-invalid` pointer and runbook | loopd | 1544 | 8 | +| 06 | Heartbeat tick: time line, standing session `heartbeat`, skip if busy, unreadable prompt logged once | loopd | 1550 | 6 | +| 07 | Cron tick: new session per run, skip if previous live, leftover `started` becomes `failed` | loopd | 1556 | 6 | +| 08 | After a turn, opted-in `ToolResult` without a `ToolSummary` gets a background summary appended with the result's labels | loopd | 1562 | 6 | +| 09 | `memoryd` indexes `ToolSummary` as kind `summary`; `recall` finds it and taints when untrusted | memoryd | 1567 | 5 | +| 10 | `MemoryCommand::Tiers`, `bxctl memory tiers`, starter `config/jobs/tier.toml.example` | bxcore, memoryd, bxctl | 1573 | 6 | After task 10, the design model runs the M5d-2 device check (spec 7) on straylight: a heartbeat turn on the background slot leaves a following main-slot turn's `cache_n` near its previous @@ -124,9 +124,9 @@ has landed on master: ```sh git switch -c m5d2 master -OPENCODE_MODEL=straylight/ornith-1.5-35b-a3b RESUME=1 \ +OPENCODE_MODEL=llama.cpp/ornith-1.5-35b-a3b RESUME=1 \ SLOTS_URL='http://straylight:11434/slots?model=ornith-1.5-35b-a3b' \ tools/run-plan.sh docs/plans/M5d2 01 ``` -After task 10, the gate count is 1572. Then the device check above. +After task 10, the gate count is 1573. Then the device check above.