← Orbiter Dev Hub
feat/anything-engine · PR #343 · 2026-05-12
Anything Engine — Waves 14-17 DEMO READY

22 sub-agent branches.
132 new tests. PR #343 demo-ready.

A continuous overnight cron loop closed the last P0 ship-blocker (interview-gate auto-dispatch), shipped the Path A Opening Move turn, wired full pitch_profile into the confirmation card, ported the right-rail tabs, fixed three dogfood-surfaced state-machine bugs, and finished with zero typecheck/lint errors and all CI green.

22
Sub-agent merges
132
New tests added
0
Lint / tsc errors
3
Dogfood rounds
The Headline

From "1 P0 ship-blocker" to "demo-ready (pending Mark dogfood)"

Yesterday PR #343 was carrying a single, named P0: the interview-gate auto-dispatched the moment the backend said ready=true — users never got to review or edit the summary card before vector search fired. Tonight that's closed, plus the Path A Opening Move intake turn (deck-first confirmation) Mark called out from his May 5 Loom, plus three regression P0s that surfaced through two browser dogfood passes (state-collapse on thread switch, classifier re-fire on free-text answers, and history-replay only restoring the last turn).

End-state: 1,241 tests across 72 files (132 added this session), Biome lint at 0 errors across 935 files, tsc --noEmit exits 0, build clean in ~1m, all CI green on PR #343. The canvas at /network?active-view=anything-engine is ready for Mark to dogfood the find_investors flow end-to-end.

Bar held this session. Every wave gated on a verification pass before merge — tsc, biome, vitest, build, and (where applicable) a browser dogfood on localhost:3000/network?active-view=anything-engine. No scaffold-first-wire-later. No "agent says it works." When the dogfood agent surfaced regressions we built fixes inside the same wave.

Wave 14 — The Mark Spec Bundle

Interview-gate + intake + voice + tabs + MCQ

The five overdue Mark spec items that had been blocking dogfood. All five landed as independent sub-agent branches, each merged after a clean verify pass.

ScopeMerge SHAWhat it does
Interview gate 7d2192f1 Blocks auto-dispatch when interview returns ready=true. Renders InterviewSummaryConfirm primitive; user reviews/edits before dispatch. Adds 4-button option set + result-count picker (20 / 100 / As many) to DispatchConfirmationCard.
Opening Move cd46c462 Path A find_investors gets the intake turn Mark spec'd: deck-first confirmation before the engine fires. New OpeningMoveIntake primitive.
find_talent MCQ 67e5fd68 Multi-class interview options now flow through the canonical InterviewTurn primitive instead of falling back to plain text.
Voice (TTS + STT) 53b113bd TTS auto-plays on assistant turns; STT auto-submits on final transcription. The mic-state arc + composer recording glow now run on the canvas (previously only in /chat).
Right-rail tabs abc0f473 Summary / Context / Modify tabs ported from sandbox, with rail-tab URL param for deep-linkability.

Backstop: be732dcf wraps the OpenUI Renderer in an ErrorBoundary so a primitive throw can no longer black-canvas the user.

Wave 15 — Quality + Polish + R1 Hot-Fix

A11y, persistence, loader carousel — plus a same-wave hot-fix

Wave 15 split into five parallel sub-agents covering a11y, summary-confirm persistence, unit tests for Wave 14 logic, a 3-phase loader carousel, and tests for the confirm-summary payload path. Dogfood R1 (R1 results below) surfaced two P0s mid-wave; a sixth sub-agent fixed them and merged before Wave 15 closed.

ScopeMerge SHAWhat it does
A11y on Wave 14 primitives 9f300c39 ARIA + keyboard + focus on InterviewSummaryConfirm, OpeningMoveIntake, DispatchConfirmationCard, InterviewTurn. aria-pressed on toggle buttons; role="radiogroup" on option sets.
Tests for Wave 14 logic 323ed27d 51 new unit tests covering confirm-summary payload parsing, open_move sentinel routing, opening-move gate, useRailTab URL round-trip, and find_talent options normalization.
3-phase loader carousel b4f25756 Deck / vector / dispatch phrase pools cycle while the engine runs — ports the sandbox PhaseLoader with the same phrase corpus.
Summary-confirm persistence 1a68f359 Persist dispatched state across reload so a refresh after confirmation doesn't re-fire dispatch.
R1 hot-fix 8a92dbdb Dogfood R1 P0. Required __confirm_summary__: prefix to dispatch from awaiting state (closes auto-dispatch leak); restored Opening Move intake emission on first find_investors classify.
Wave 16 — Broader Quality

State-machine audit, PATH B fix, 12-batch loop, A11y sweep, PDF auto-classify

Wave 16 widened the lens past Wave 14's five primitives into the rest of the canvas surface. Six sub-agents landed in parallel, every one merged after dogfood-clean.

ScopeMerge SHAWhat it does
PATH B id creation d1f59a83 Creates suggestion_request_id on the intake "Interview me" lane and adds an idempotency safety net. Closes the gap where PATH B dispatches went out unlinked to a pitch profile.
State-machine audit a7ea7e44 Includes intake + format refs in the thread-switch reset; re-seeds awaitingConfirmRef on replay so reload-mid-confirm doesn't desync the gate.
Path A 12-batch loop adffb819 buildDispatchConfirmationLang helper wires the full 32-prop pitch_profile into the Path A DispatchConfirmation render — previously only a subset shipped.
A11y focus rings 108775db :focus-visible utility + applied to Wave 14/15 primitives, ContactCard, ScanningCard, ErrorState, NoMatchesCard, ButtonGroup.
A11y sweep b3d49caf ContactCard heading + avatar + chip semantics, ScanningCard live region, ErrorState semantic structure, ButtonGroup fieldset/legend, UserMessage "You said" prefix.
PDF auto-classify 0c860388 Uploaded PDF content now auto-classifies and routes to the correct outcome class — previously the engine waited on an explicit prompt after the upload.
Wave 17 — R2 Dogfood Hot-Fixes

Three regression P0s caught by the dogfood agent

The R2 dogfood pass turned up three real state-machine regressions that R1's mid-wave hot-fix hadn't covered. Wave 17 fixed all three and added an a11y backport that should have been in Wave 15.

ScopeMerge SHAWhat it does
State collapse 12b1e9f2 R2 P0. Canvas thread-switch reset was firing on transient remounts — guarded with previousSelectedIdRef so the state only resets when selectedId actually changes.
Context loss d4abc25b R2 P0. Classifier was re-firing on free-text answers mid-interview, switching outcome class mid-conversation. recoverClassFromHistory on replay keeps the classifier sticky during an active interview.
History replay 793324c8 R2 P0. Sidebar click on a saved conversation was only restoring the last turn. New messagesToTurns helper replays the full multi-turn conversation.
InterviewTurn a11y 5ca5a29c Mirrors the Wave 15 a11y patterns (h3 + aria-labelledby + aria-live + focus-ring) onto the InterviewTurn primitive (missed in the original Wave 15 pass).
Dogfood Rounds

Two passes, five regressions caught, all closed inside the wave that surfaced them

The dogfood agent ran continuously against localhost:3000/network?active-view=anything-engine. Each round exercised: starter tile click → composer turn → classify → interview → ready state → summary confirm → dispatch → cards render. The bar: it has to feel like Mark wrote it.

Round 1 — mid-Wave 15
2 P0 surfaced · both closed before Wave 15 merged

Wave 14 closed clean on its own verify, but R1 against the integrated bundle found:

  • Auto-dispatch leak. Even with the interview-gate primitive rendering, any payload that didn't carry an explicit confirm sentinel was getting through — the awaiting state needed a strict __confirm_summary__: prefix gate. Closed in 421fb077 / merged 8a92dbdb.
  • Opening Move emission regression. The deck-first turn wasn't firing on the first find_investors classify after a fresh page load (only on subsequent ones). Closed in 19e7b04f.
Round 2 — post-Wave 16
3 P0 surfaced · all closed in Wave 17

R2 exercised the multi-thread flow that R1 hadn't covered — switching between saved conversations in the sidebar:

  • State collapse on thread switch. Clicking a sidebar item triggered a transient mount that the reset effect treated as a real thread change, wiping mid-conversation state. Closed by 4ae48bb0.
  • Classifier re-fire mid-interview. Free-text answers to interview questions were going through the classifier, sometimes flipping the outcome class. Closed by 9f2340ec.
  • History replay losing turns. Restoring a saved thread only showed the most recent turn. Closed by db583cd6.
Round 3 — pending
queued · verifies the Wave 17 fixes hold

R3 is queued to re-run the same surface that surfaced R2's three P0s. The expectation is a clean pass; if anything trips, it lands as Wave 18.

Known Blockers — Mark Territory

What the frontend can't close on its own

The frontend reached the bar this session. The remaining gaps are backend-owned and need Mark to land before the final demo polish lights up.

fn 12918 is still a stub. OpenUI endpoint 8497 calls it for update_pitch_profile, but it returns identical {status: "deferred_to_fn_12918"} for real ids, bogus ids, and no id. The PATH B rich pipeline doesn't unlock until Mark wires this in Xano workspace 3.

travel class #16. Mark added it May 6; the classifier still emits 15 classes and there's no prompts/travel/*.md anywhere. Mark owns the prompt write; we wire when it lands.

Xano /summarize endpoint. Needed for the "system rewrites summary when user edits a confirmation field" flow. Owned by Mark.

getMostRecentPitchProfile BFF wrapper. Path A 12-batch loop is rendering from buildDispatchConfirmationLang with the full 32-prop pitch_profile, but the BFF wrapper that hydrates the most-recent profile by user_id is still a Mark deliverable.

Welcome-strip persistence (May 7 defect #5). Design-blocked. Needs a Mark/Robert call on whether the layout becomes inline, banner, or drawer.

What's Next

Mark dogfoods → merge PR #343 to dev

The agent loop's job is done for this surface. The next move is a real human pass:

  1. Mark opens /network?active-view=anything-engine and runs the find_investors flow on his own deck. Starter tile click → deck upload → Opening Move turn → ready state → summary card → edits a raise field → confirms → engine dispatches → real Founders-Fund-grade cards render in the canvas.
  2. Robert reviews PR #343 once Mark signs off. Branch is up-to-date with origin, mergeStateStatus is CLEAN, 0 reviews, lint/build/CodeRabbit/Netlify-preview all SUCCESS.
  3. Merge to dev. No remaining ship-blockers on the frontend side.

Don't send Mark to /chat standalone. The /network?active-view=anything-engine canvas is the Mark-spec-compliant surface. /chat still has some drifts vs. canvas that aren't backported and isn't the dogfood target.