Development summary
v1.10 — Operator Command & Closed Loops shipped.
Shipped June 13, 2026: a single command surface across every brand, and the follow-through on v1.9. The decisions that v1.9 could only recommend now act when you accept them — a prompt-A/B winner gets pinned, an experiment opportunity gets drafted. Plus a brand health score, a portfolio view, global search, CSV export, and rework analytics that show which prompts to fix.
typecheck + lint + 391 tests + build cleanVerification
pnpm typecheck # tsc --noEmit — clean pnpm lint # biome — clean (347 files) pnpm test # 391 passed (56 files) pnpm build # production build — clean; /portfolio, /search, /exports emitted pnpm db:migrate # migration 0031 applied + brands columns verified
What shipped
Closed loops
- Prompt pinning: accept a winner → it's applied (brands.prompt_pins).
- Experiment bootstrap: accept → a title A/B drafted from real options.
- Decision mutes: silence a recommendation kind per brand, forever.
- Decisions now appear in the weekly briefing.
Command surfaces
- Brand health: a 0–100 composite per brand, weights documented.
- /portfolio: every brand on one screen, each cell a link.
- /search: exact recall across sources, assets, topics, ideas.
- CSV export of performance — costs stay operator-only.
Sharper signal
- Edit-rate: how much each asset type gets rewritten = which prompt to fix.
- Vertical posting times: B2B mornings, fitness early/evening, before generic defaults.
Data model
Migration
0031_v110_operator_command.sql: brands.prompt_pins ({asset_type: version}) and brands.decision_mutes (string[]). Both default empty, so pre-v1.10 brands are unchanged. New routes: /portfolio, /search, /exports/performance. No new job kinds — v1.10 builds on v1.9's helm_decisions worker.Operational rules preserved
Prompt resolution is experiment > pin > latest, and the used version is always recorded in provenance. Decision mutes filter only at the engine boundary — no rule's logic changes. Brand health and the portfolio are read-only. The CSV export never touches the Ledger. A drafted experiment still needs a manual start. Brands without a vertical see unchanged posting defaults and briefings.