Substrate Audit — July 2026
Findings from VividRaven's ~7-hour substrate session (Opus 4.7 → 4.6), 2026-07-01/02.
Session Output Summary
| Deliverable | Commit | Status |
|---|---|---|
| Identity-continuity extension | ae21c02 | Shipped |
| Ghostty QoL (scrollback 100M, image-storage 640MB) | ae21c02 | Shipped |
| TP-391: pi TUI code-render uplift | d2df553 | ✅ Done (regression fixed by substrate-GUY 3367295b0) |
| TP-392: ClickHouse schema cleanup | 8b72a69 | Staged (P2) |
| TP-393: GPT-5.5 empty-output retry | 29ee3baea | ✅ Closed |
| Moneypenny brand corpus → ClickHouse | 7c4132f | Shipped |
| Brand north-star archaeology (14.6M tokens, 8 agents) | — | Complete |
| Moneypenny/BatonPass naming locked | — | Decision |
| OMP updated 14.7.7 → 16.2.13 | — | Shipped |
| BlueBubbles Flatpak killed (37% CPU reclaimed) | — | Shipped |
| EasyEffects killed (39% CPU reclaimed) | — | Shipped |
| ClickHouse tools installed (clickhouse binary + clickhousectl) | — | Shipped |
Azure Endpoint Smoke Results
Tested 2026-07-02. 12 live, 3 dead.
Live Endpoints
| Endpoint | Status |
|---|---|
azure-anthropic/claude-opus-4-6 ×3 | ✅ |
azure-anthropic/claude-opus-4-7 | ✅ |
azure-anthropic/claude-sonnet-4-6 ×2 | ✅ |
azure-openai-responses/gpt-5.5 ×2 | ✅ |
azure-openai-responses/gpt-5.4 | ✅ |
azure-openai-responses/gpt-5.4-mini | ✅ |
azure-openai-responses/gpt-5.4-nano | ✅ |
azure-openai-responses/gpt-5.5-mini | ✅ |
Dead Endpoints
| Endpoint | Status |
|---|---|
azure-anthropic/claude-haiku-4-5 ×3 | ❌ All copies down |
Impact: Small-reactive fallback chain is gpt-5.5-mini → gpt-5.4-mini → gpt-5.4-nano → gpt-5.4.
Identity Bug Fix
Problem: Agent names cycled randomly on /reload-runtime. Root cause: pi-messenger-swarm's findContinuityRegistration() matches on cwd + gitBranch + pid. PID changes on /reload, and multi-agent-same-cwd shares the continuity slot — identity flips randomly (observed: TrueYak → VividRaven, MintIce → ZenEagle).
Fix: The identity-continuity extension:
- Derives a stable anchor from
process.ppid + hostname(cross-platform, Bun/Node) - Linux enhancement: tty-path + start-time from
/procfor per-cmux-tab uniqueness - Persists name ↔ anchor mapping in
~/.pi/messenger/identity-by-key/ - Extension factory sets
PI_AGENT_NAMEfrom disk before swarm registers /rename NewNamepersists identity, updates env, emits OSC 2/1 for tab title
Performance Wins
| Action | CPU Reclaimed |
|---|---|
| Killed BlueBubbles Flatpak | 37% |
| Killed EasyEffects | 39% |
| Total | ~76% CPU freed |
TP-400 closed — measurement artifact
PipeWire is not currently hot. TP-400 found ps %CPU was a lifetime average from the earlier EasyEffects/spatializer active period; pw-top showed PipeWire idle at ~0% / 0 ctx/s, with 16 clients but 0 active streams and no PipeWire/WirePlumber journal errors. Remaining risk is latent: spatializer-7.1.conf uses 8 SOFA HRTF convolvers and may spike CPU when headphone playback resumes.
ClickHouse State
Brand corpus ingested into ClickHouse:
discover.moneypenny_brand_docs— 5 rows (north-star, brand-system, generation-prompts, tokens-css, tokens-json)discover.kg_taste_signals— 15 archaeology quotes (domain:moneypenny_aesthetic)discover.joe_voice_model— dry-competent-warm register, 13 canonical examplesdiscover.images— Brandmark PNG (category:moneypenny_asset)
Data Quality Issues Found (TP-392)
| Issue | Scope |
|---|---|
HuggingFace training data in corpus.* | ~2.89M rows of public HF corpora mingled with Joe's corpus |
Duplicate rows in memory.agent_jsonl_raw | 806k rows (~38% duplication) |
| Identity split | josephlanzone (work-Mac) vs joe (personal-Mac) = same person |
Codex OAuth
Refreshed via codex login --device-auth. Known issue: personal OPENAI_API_KEY poisons Codex fallback with 401 no_organization. Alias fix recommended.
GPT-5.5 Failure Diagnosis
Symptom: status: "failed", output: [], no error, no incomplete_details.
Not the cause: pi's adapter already sets include: ["reasoning.encrypted_content"] correctly.
Actual cause: OpenAI-side capacity allocation on xhigh reasoning tier combined with multi-tool loops.
Fix Timeline
- Step 1 shipped (
fe62200): Effort-clamp patch — caps reasoning effort when tools present. Also setsstore: true(store:false was causing 8 consecutive failures). - Step 2 staged (
6c8680c): Empty-output retry-with-degrade (GPT-5.5 → GPT-5.4 → GPT-5.4-mini). - store:true initially verified by substrate-GUY (5 tool calls across 2 turns passed).
- store:true regressed — opaque
response.failedreturned despite prior success. Azure Responses 1M path remains unstable for tool-heavy workloads.
Current Model Routing (as of fleet activation)
| Use Case | Route |
|---|---|
| Routine fleet work | azure-anthropic/claude-opus-4-6 |
| Cheap/non-long-context | openai-codex (harness-login, cheapest/free) |
| Long-context synthesis (1M) | azure-openai-responses/gpt-5.5 (unstable — prefer codex fallback) |
| Small-reactive fallback | gpt-5.5-mini → gpt-5.4-mini → gpt-5.4-nano |
Incidents (Fleet Session)
Pi 0.80.3 Crash on Node 24
Discovered: By Joe (operator) after repo-steward-GUY push triggered /reload on Mac agents.
Root cause: createRequire not imported in theme.js:861 — upstream pi build bug in 0.80.3, not caused by fleet pushes.
Fix: Pin pi 0.80.2 via mise. Applied to personal-Mac via SSH by repo-steward-GUY. Steambox already on 0.80.2.