M5c-2 plan: task 04, maxItems verified; a comment kept to 100 columns

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-28 18:08:32 -07:00
co-authored by Claude Opus 5.5
parent 9cab92f735
commit c6f43002a8
+7 -2
View File
@@ -64,7 +64,10 @@ This is the complete list.
- **The schema's JSON.** `serde_json::json!` sorts object keys (the crate is built without - **The schema's JSON.** `serde_json::json!` sorts object keys (the crate is built without
`preserve_order`), so the request carries the keys in alphabetical order whatever order the `preserve_order`), so the request carries the keys in alphabetical order whatever order the
source writes them in. The given test compares the whole schema, byte for byte. source writes them in. The given test compares the whole schema, byte for byte.
- **`maxItems`** is JSON Schema's limit on an array's length. `brokerd` refuses a third name - **`maxItems`** is JSON Schema's limit on an array's length. `llama-server` turns the tool
schemas into a grammar, and its converter supports it: llama.cpp's `grammars/README.md`
(master) shows `minItems: 10` and `maxItems: 100` becoming the repetition `{9,99}`, and its
list of the converter's limitations does not name either. `brokerd` refuses a third name
anyway, with a sentence telling the model to ask again (task 01). anyway, with a sentence telling the model to ask again (task 01).
- **Where `ask_memory` goes.** It is a core tool, but not one `loopd` answers itself: like - **Where `ask_memory` goes.** It is a core tool, but not one `loopd` answers itself: like
`recall`, a call is sent to `brokerd` as a `ToolRequest` whose `tool` is `"ask_memory"` `recall`, a call is sent to `brokerd` as a `ToolRequest` whose `tool` is `"ask_memory"`
@@ -99,6 +102,7 @@ This is the complete list.
| Item | Where | | Item | Where |
|---|---| |---|---|
| `serde_json::json!` | S2, as in `recall_schema` | | `serde_json::json!` | S2, as in `recall_schema` |
| JSON Schema `maxItems` on an array, in a tool's `parameters` | S2; supported by llama.cpp's schema-to-grammar converter (`grammars/README.md`, master) |
| `crate::llama::ToolSchema { name, description, parameters }` | S2, as in `recall_schema` | | `crate::llama::ToolSchema { name, description, parameters }` | S2, as in `recall_schema` |
| `Entry { schema, core }`, `Vec::insert(index, value)` | T2, as in `m5a` | | `Entry { schema, core }`, `Vec::insert(index, value)` | T2, as in `m5a` |
| `Duration::max(self, other) -> Duration` | P4 | | `Duration::max(self, other) -> Duration` | P4 |
@@ -257,7 +261,8 @@ become
```rust ```rust
/// The longest `BrokerPort` waits for an `ask_memory` answer, unless `[broker] timeout_ms` is /// The longest `BrokerPort` waits for an `ask_memory` answer, unless `[broker] timeout_ms` is
/// longer: `brokerd` waits 170 s for `memoryd`, whose Honcho chats have 150 s (M5c spec, section 9). /// longer: `brokerd` waits 170 s for `memoryd`, whose Honcho chats have 150 s (M5c spec,
/// section 9).
pub const ASK_MEMORY_WAIT: Duration = Duration::from_secs(180); pub const ASK_MEMORY_WAIT: Duration = Duration::from_secs(180);
/// The runbook entry every outage line ends with. /// The runbook entry every outage line ends with.
pub const POINTER: &str = "see docs/runbook.md#broker-unavailable"; pub const POINTER: &str = "see docs/runbook.md#broker-unavailable";