Two false-positive degraded reports surfaced during the second
Round 4 dogfood run:
1. Ollama probe was exact-string matching against required model
names. `requiredModels` had `"nomic-embed-text"` (no tag), but
`/api/tags` returns `"nomic-embed-text:latest"` (with default
tag) — so the probe reported "missing models: nomic-embed-text"
even after `ollama pull` succeeded. Fix: when a required name
has no `:tag`, accept any tag (`name == required OR
name.hasPrefix(required + ":")`). Required names that DO
include a tag (e.g., `qwen3.6:latest`) keep their strict match.
2. MCP probe was reading ONLY `runtime.client.registeredToolNames()`
— the stdio side (3 helpers: get_clipboard, get_time,
run_applescript). The other 4+ in-process tools (self-knowledge
+ memory) live in `InProcessToolRegistry` and are routed
through `InProcessAwareToolDispatcher` (commit 1b7fb81's B-01b
fix). Probe now reads both registries, unions the names, and
reports the combined count. Evidence line breaks out stdio vs
in-process counts so the operator can see the split.
Verified: app build clean, app target compiles. Re-launch should
show ollama=ok (all 3 models present) and mcp=ok (8 tools after
self-knowledge tools register at install step 15).
The Toby fix verification mid-dogfood: the model received the
degradation summary in its system prompt and truthfully reported
"my memory subsystem is currently degraded (nomic-embed-text is
missing)" instead of yesterday's fake "Got it" promise. Round 4
slice 3 confirmed working end-to-end.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>