This morning we had 6 of 15 outcome classes with working dispatch pipelines — the rest stuck at clarify-gate or zero-results. Tonight: 24 of 24. Plus 8 lightweight tiles shipped, Sentry wired (DSN-gated), MemoryPanel ported, refresh-resilience hardened on the standalone /chat, context floors v1 populated, classify.md extended to all 24 classes, and 17+ stale CLAUDE.md claims corrected. Nine new Xano endpoints, three Xano bug fixes, one FalkorDB "data gap" myth busted.
The Wave 13 audit on May 11 said: "find_investors REAL DATA. find_partners CLOSE. find_talent PARTIAL. 9 classes stuck at clarify gate. find_advisors + find_journalists zero results (FalkorDB data gap). find_customers wrong entity type." That snapshot held through Waves 14-20.
Tonight closed every stuck dispatch pipeline. The "FalkorDB data gap" claim for find_advisors / find_journalists turned out to be wrong — pipelines were missing, not data. Once the synthesizers were written, both started returning real cards. find_customers had a wrong-entity-type bug (looking for person nodes; should have been company nodes) that took one synth-prompt fix. find_acquisition / find_deal_flow / get_advice were stuck behind a missing classifier → pipeline wiring step that landed as three new endpoints. find_cofounder / find_job / find_collaborators / make_purchase / find_speakers / purchase_real_estate landed in a single batch as six more new endpoints.
End-state: 1,411 tests passing, tsc --noEmit 0 errors, Biome 0 errors, PR #343 still MERGEABLE / CLEAN. 9 new Xano endpoints (ep 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557) plus 3 Xano bug fixes (ep 8493 node-type bug, ep 8495 threshold relax, ep 8496 threshold relax) plus fn 12993 live as pitch/update-pitch-profile.
The "FalkorDB data gap" myth was wrong. Wave 13 audit had find_advisors and find_journalists labelled "FalkorDB data gap — zero results." Wave 24 wrote both synthesizers and both came back with real cards. The data was there. The pipelines weren't.
Wave 21 added the eight lightweight outcome classes Mark itemized on Apr 30. The classifier prompt now enumerates 24 classes (15 heavy + 8 lightweight + travel). Per-mode context floors got their initial hook + Xano input wiring.
| Scope | SHA | What it does |
|---|---|---|
| 8 lightweight classes | 9d94d6d0 / b1bb8cff / 47a38c33 | find_co_investors, find_event_attendees, find_warm_intros, plan_outcome, research_company, research_person, research_topic, summarize_meeting. Classifier now emits 24 classes. |
| useContextFloor hook | 48c0c740 | Hook computes mode-specific context floor from selected person + active conversation; threads it into classify + interview calls. Mark's Apr 30 directive. |
| context_floor input on ep 8490 | b7c377e9 | JSON-encode context_floor for Xano text input. Aligns frontend shape with the new endpoint argument; structural assignability widened to unknown (8b634716). |
| Use existing pitch profile lane | fcc99448 | Wires the "Use existing pitch profile" Opening Move tile to ep 8548 BFF round-trip. Path A no longer dead-ends when the user has a saved profile to dispatch against. |
Why context floors matter. Mark's spec: every dispatch should carry a minimum floor of relational signal (selected person + their company + recent meetings/notes), so the synthesizer never starts from "who is this person?" Wave 21 set the wiring. Wave 23 populated the first two modes.
Frontend half of Wave 21. The 8 lightweight outcome tiles needed icon + accent + displayText metadata, plus the 16-tile copy in the canvas needed to become 24-tile copy.
| Scope | SHA | What it does |
|---|---|---|
| 8 lightweight tiles + class accents | b1cf6f2d | Adds tiles, accent colors, and starter prompts for the 8 lightweight outcomes. 15 heavy + 8 lightweight + travel = 24 total. |
| Canvas tile-count copy | bf55a67d | Sweep of every "15 tiles", "16 tiles", "16 outcomes" string in the canvas / right-rail copy → "24 outcomes." Includes the hamburger toggle label. |
| classify.md enumerates 24 | 4c46b0aa | Local prompts/anything_engine/classify.md header + class list now match Xano (which already had all 24 after Wave 21). Closes the "14 vs 15 vs 16" doc drift. |
Wave 23 ran in parallel: Sentry observability got its first commit (with the actual init landing in Wave 24), a 17-item CLAUDE.md doc-drift sweep retired stale Wave 13-era claims, the standalone /chat shell got a full drift audit against the canvas (3 of the 8 drifts had already been fixed — 2 new ones found), and the find_investors + find_talent modeAdds got their first populated values.
| Scope | SHA | What it does |
|---|---|---|
| Context-floor v1 populate | 2e218ab7 / 7cfa4170 | Populated modeAdds for find_investors and find_talent. First two modes with real context-floor payload, not just the hook scaffold. |
| CLAUDE.md drift sweep | 74b7c344 / 5f5bcdc4 | 17 stale Wave 13-era claims corrected: 14 vs 24 class count, "fn 12918 STUB" (retired), "FalkorDB data gap" (retired), "find_customers wrong entity" (retired), find_advisors / find_journalists status, and the chat-shell drift count. |
| chat-shell drift audit | N/A (audit doc) | Re-audited the 8 drifts called out in Wave 13. 3 already shipped (MCQ multi_select, DiceBear fallback, conversation persistence). 2 new drifts found, queued for Wave 24 (envelope persistence for interview + dispatch — both shipped same wave). |
| Sentry verification | 2ae40b58 (added in Wave 24) | Confirmed there was no existing Sentry init in the repo (Wave 13 audit had implied otherwise). Set up the work brief; the actual @sentry/react dependency + init landed in Wave 24. |
/chat. Sentry live.Wave 24 is the first of two big backend-ship waves. Three outcome classes that had been stuck at clarify-gate since the May 11 audit got working dispatch pipelines. The standalone /chat route picked up structural envelope-based persistence for interview MCQs + dispatch result events. Sentry got its real init and ErrorBoundary capture.
| Endpoint | State | What it does |
|---|---|---|
| ep 8549 — find_acquisition | NEW | Corp-dev VP / PE deal originator voice synthesizer. Returns ranked acquisition targets with strategic-fit rationale + signal-dim chips. Outcome class unstuck from clarify-gate. |
| ep 8550 — find_deal_flow | NEW | GP / IC chair voice synthesizer. Returns ranked deal-flow leads with thesis-fit rationale. Outcome class unstuck from clarify-gate. |
| ep 8551 — get_advice | NEW | Chief-of-staff routing synthesizer. Returns the right person to ask for advice on a specific question. Outcome class unstuck from clarify-gate. |
| FalkorDB "data gap" myth busted | RESOLVED | The Wave 13 claim that find_advisors / find_journalists returned zero because of a FalkorDB data gap was wrong. Both pipelines built; both returned real cards. The data was there. The pipelines weren't. |
| Scope | SHA | What it does |
|---|---|---|
| Sentry @sentry/react | 2ae40b58 / ee0f3119 / 176c4619 / 07e0db43 | Dependencies added, client + server init, ErrorBoundary routes componentDidCatch through Sentry.captureException. DSN-gated — no-op when VITE_SENTRY_DSN is empty so dev/test stays silent. |
| chat-shell envelope persistence | 9d76c711 / 33268ba2 / dc198afd / 298f3f57 | Envelope helpers for structured interview-MCQ + dispatch-result persistence. Standalone /chat refreshes now replay the interview turn structurally (selections preserved) and the dispatch result events (cards rerender from saved envelopes, not a blank slate). |
| Scope | SHA | What it does |
|---|---|---|
| Tile metadata polish | a25de00e / 30573767 | find_acquisition displayText refined. get_advice switched to IconMessageQuestion (resolves icon clash with another tile using IconHelp). |
| ADDENDUM doc sync | 7b69264d / 1a23bccb | 11 corrections to state-of-the-program-202605121515-ADDENDUM.md: 15-16 → 24 classes, the 3 Wave 24 dispatch pipelines noted, FalkorDB myth retired, new §6 "Wave 24 closes" added. |
Wave 26 closes every remaining dispatch gap. Six new Xano endpoints. Plus three bug fixes on existing endpoints that Mark had flagged: a node-type bug on ep 8493 (find_customers was hitting person nodes instead of company nodes), and threshold relaxations on ep 8495 and ep 8496 that were over-filtering on synth-prompt match scores.
| Endpoint | State | What it does |
|---|---|---|
| ep 8552 — find_cofounder | NEW | Co-founder evaluator voice synthesizer. Returns ranked co-founder candidates with fit + complementarity rationale. |
| ep 8553 — find_job | NEW | Executive-search partner voice synthesizer. Returns ranked job opportunities with role/comp/fit rationale. |
| ep 8554 — find_collaborators | NEW | Creative director / lab PI voice synthesizer. Returns ranked collaborators with project-fit rationale. |
| ep 8555 — make_purchase | NEW | Chief-of-staff buyer-side voice synthesizer. Returns ranked sellers/vendors with decision-criteria rationale. |
| ep 8556 — find_speakers | NEW | Event programmer / executive booker voice synthesizer. Returns ranked speakers with event-fit rationale. |
| ep 8557 — purchase_real_estate | NEW | Real-estate-focused make_purchase variant. Returns ranked properties / brokers / lenders with deal-fit rationale. |
| ep 8493 — find_customers | FIXED | Node-type bug. Was querying person nodes; now correctly queries company nodes. Mark flagged this in the Wave 13 audit as "wrong entity type" — closed. |
| ep 8495 + ep 8496 — threshold relax | FIXED | Synth-prompt match thresholds were over-filtering. Relaxed both for consistent baseline behavior across classes. |
This wave is the headline. Before tonight: 6 / 15 outcome classes had working dispatch pipelines. After this wave: 24 / 24. Every class on the canvas can now dispatch and return real cards.
Wave 27 cleaned up the trailing edges: synth-prompt threshold consistency between the new endpoints + the Wave 26 fixes, a final PR #343 description refresh covering the Wave 14-26 ledger, and a final CLAUDE.md delta noting the 24/24 state.
| Scope | SHA | What it does |
|---|---|---|
| Synth-prompt threshold parity | (in ep 8495/8496 fixes) | Threshold values reconciled across all 24 synthesizers so a score of 0.7 means the same thing in find_acquisition as in find_journalists. |
| PR #343 description refresh | N/A (gh edit) | Description rewritten to cover Wave 14-26: 22 sub-agent branches, 24/24 dispatch pipelines, 9 new endpoints, 3 Xano bug fixes, 1,411 tests passing, MERGEABLE / CLEAN. |
| CLAUDE.md final delta | 5bf53329 / e33200a0 | Documents the 24/24 dispatch state, the 9 new endpoints, the 3 Xano bug fixes, the FalkorDB myth retirement, and the chat-shell envelope-persistence ship. |
Every dispatch pipeline is wired. These are the remaining gaps, all narrow:
find_advisors / find_journalists / purchase_real_estate — data enrichment depth. Pipelines wired and returning cards, but the underlying entity coverage is thinner than for find_investors / find_talent. Mark territory: needs FalkorDB enrichment passes for these three node types before they hit the quality bar of the heavy classes.
Welcome-strip persistence (May 7 defect #5). Design-blocked. Needs a Mark/Robert call on whether the layout becomes inline, banner, or drawer. Unchanged from Wave 18-20.
ep 8497 auth-gate proper. Currently the OpenUI 0.5 endpoint accepts user_id in the request body instead of deriving it from the WorkOS auth token. Wave 28 task: BFF token forwarding + Xano header check + a shared secret for the BFF↔Xano hop. Coordinated across BFF wrapper, Xano endpoint, and an environment variable.
Sentry DSN needs to be set. The init code is live and gated — setting VITE_SENTRY_DSN in Netlify env flips Sentry on for production. Until then, ErrorBoundary captures are no-ops in prod.
Every class can dispatch. Every BFF is wired to a live Xano endpoint. Every test passes. PR #343 is MERGEABLE / CLEAN.
/network?active-view=anything-engine across multiple classes. With 24/24 wired, he can test any tile end-to-end, not just find_investors.signal_dim chip surface in ContactCard, context-floor v2 populating modeAdds for the remaining high-traffic classes.