- Store: deployed chris-m2o (+gunnar staged); UI install executed a real
debit->grant->apply, with a truthful auto-refunded failure first
- Scout: Hermes plugin discovered+enabled (39 found/33 enabled), hooks
manifest fixed, thresholds calibrated on LIVE scores (0.60/0.30 —
defaults 0.78/0.55 gated out the correct match), proposal recorded to
outbox, opt-out + rate-cap verified live
- Fleet issues surfaced: chris m2-gpt key 401 (blocks real LLM turns),
root-owned ~/.claude on chris (fixed via chown)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Found by the T036 gate install on m2bd-m2o: $HOME is a bind of
/agent_home/home/developer; Path.home().resolve() followed the mount while the
expanded dest did not, false-positiving the safety guard. The failed install
correctly auto-refunded (the FR-005 compensation path proved itself live).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- CatalogClient: POST /memory/search, results via metadata.listing; tenant
visibility filter enforced in the one shared reader client (memory-api
tenant_id is scalar; deviation recorded in the module docstring)
- indexer MemoryClient: upsert = exists-check + store; drop/delete are WARN
no-ops (API has no delete) — reindex is an idempotent fill for now
- refund-overdraw decided: compensating refunds may push a seller negative
(debt, manual reconciliation); data-model amended, property machine updated
- probe doc stored in market:probe partition during API discovery (harmless)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
t031 worker found ZERO real competitor-scan evidence and correctly built
nothing (constitution III). Recommended substitute: Parlobyg email-triage
(real production run 2026-03-15..04-04) — tenant-derived, requires operator
owner-initiation + double scrub (constitution IV). Recorded as open question.
Tenant-named hosts scrubbed from agent-scaffold evidence. 29 tests green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Written inline after two headless workers died on API errors. Tests caught a
real cross-slice bug: ledger grants stored the full install ref as listing_id,
breaking GET /license/{op}/{listing} — fixed by parsing the listing prefix per
the ref convention in contracts/ledger-api.md. Also pinned the indexer test's
schema path (venv-installed package resolved outside the repo) — its earlier
pass was vacuous without jsonschema installed. 27 tests green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
T013 worker found record_install violating CHECK(amount>0) when platform_pct
rounds cut or seller_amount to zero (unhandled IntegrityError -> HTTP 500).
Fixed: skip zero rows, grant references the paying tx; regression test added.
9 ledger tests green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Verified on master: 14 tests green (schemas+cli+indexer); ledger API exercised
end-to-end via TestClient (grant admin-only, install 200/409/402, refund
restores balance, auth 401); adapter factory resolves local + raises
RailsNotLanded on the stub.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>