diff --git a/CLAUDE.md b/CLAUDE.md index 93d86db..715e58f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,7 +43,7 @@ are the work. Both halves are wired as of 2026-08-03. Routing and replies prefer the workstation silently through `modelSeam`; nudge and reminder phrasing prefer it silently inside the phraser. A world question goes through `LLMPhraser.PhraseWorld` and names the gap when the card is not -free — `worldGap` in `cmd/mavend/worldmodel.go`, which he hears instead of an invented +free — `worldGap` in `cmd/mavend/worldmodel.go`, which the owner hears instead of an invented answer. A box with no `workstation` block behaves exactly as it did before the seam: naming a gap requires a gap. The offload table in `docs/offload.md` says which caller is which. @@ -90,7 +90,7 @@ protocol; the config in `deploy/mavend.json` (with `${VAR}` env expansion from g **Seven of the nine run on homesrv. `mavwaked` and `mavenclient` do not, and that is the decision, not an oversight** (Vikunja #463, `docs/plans/17-where-the-voice-loop-runs.md`). homesrv has a microphone — it is a laptop — but it is in the wrong room, so a wake-word -daemon there listens to nobody. They belong on a client machine where he is standing. +daemon there listens to nobody. They belong on a client machine where the owner is standing. `ipc.Dial` already takes `tcp://host:port?token=...` through the netaddr seam, so nothing needs building to allow it, but no such machine exists yet. **The consequence: the wake word and the VAD gate are covered by unit tests and by nothing else, and no amount of @@ -281,7 +281,7 @@ Seeds are scoring data. Editing one moves a recogniser and must be re-measured a Not a nag, not autonomous. Maven's persona is **feminine** — Russian self-reference must use feminine forms — `рада`, not `рад`; `поняла`, not `понял`. The owner is male and is addressed informally: "ты", singular, never "вы"/"ваш" and never "он"/"его" -(she talks TO him, not about him). Pet names ("милый", "дорогой") are forbidden; his name +(she talks TO the owner, not about the owner). Pet names ("милый", "дорогой") are forbidden; the name ("Ками") is not. The eval enforces this: `CheckAddress`, `CheckFeminine` and `CheckCringe` in `internal/phraser/eval/checks.go`, scored by `make eval-phrasing`. @@ -291,7 +291,7 @@ world questions, so she needs to read external sources. What replaces it: - **No telemetry, no cloud model, no third-party account.** That part never changes. Nothing about Maven is reported to anyone, and inference stays on the box. -- **His data first, then the world.** Every source that reads his facts, notes, calendar, +- **The owner's data first, then the world.** Every source that reads the owner's facts, notes, calendar, tasks or house runs before anything outside, and the personal boundary sits between them. Reading beats recalling for a small model. - **In the world, live search leads and the ZIMs are the fallback** (owner's call, @@ -299,7 +299,7 @@ world questions, so she needs to read external sources. What replaces it: homesrv answer when the search is empty, unreachable, or the line is down. **Verified with the line down on 2026-08-05** (V-508, `docs/evals/2026-08-05-kiwix-offline-fallback.md`): a stopped SearXNG costs nothing, - the ZIM answers in the same turn budget. A blackholed host cost 8 seconds he waited + the ZIM answers in the same turn budget. A blackholed host cost 8 seconds the owner waited through. So the connect phase alone is capped at `dialTimeout` (1.5s), while a slow instance that did connect keeps the full 8. **A Russian question reads `wikipedia_ru_all_maxi_2026-02` verbatim** through `kiwix.book_ru`. The RU→EN rewriter @@ -318,8 +318,8 @@ world questions, so she needs to read external sources. What replaces it: capabilities. The code default is still off. `deploy/mavend.json` now ships a `search` block (owner's call, 2026-08-02), so it is on for this box and deleting the block turns it off again. -- **His notes and facts are never search input.** Looking up why the sky is blue and sending - his stored personal notes to an upstream engine are different acts. Only the utterance goes +- **The owner's notes and facts are never search input.** Looking up why the sky is blue and + sending the owner's stored personal notes to an upstream engine are different acts. Only the utterance goes out, never the persona block, history, or matched notes. ## Web UI conventions