Yesterday's report closed Waves 14-17 with PR #343 demo-ready and a list of "Mark territory" backend gaps. Tonight three of those gaps closed: fn 12993 (real update_pitch_profile) replaces the stub, ep 8545 (/summarize-pitch-profile) lights up system-rewrite-on-edit, and the travel class shipped end-to-end as outcome #16. Twelve frontend branches integrated on top.
Yesterday's Wave 14-17 report flagged five backend-owned blockers (fn 12918 stub, /summarize endpoint, travel class #16, getMostRecentPitchProfile BFF, welcome-strip design). Tonight, three landed:
pitch/update-pitch-profile (NEW). Replaces the inline stub that ep 8497 was calling for update_pitch_profile. Real diff-apply with NULL semantics; no more identical {status: "deferred_to_fn_12918"} for real vs. bogus ids./summarize-pitch-profile (NEW). Haiku 4.5 backed real LLM regen. The frontend's debounced field handlers + amber "pending backend" badge (pre-wired in Wave 19) now hit a live endpoint.travel. Classifier prompts updated to emit 16 classes; tile + sky-blue accent + chief-of-staff voice prompts shipped.End-state: 1,391 tests passing, tsc --noEmit 0 errors, Biome 0 errors, PR #343 still MERGEABLE / CLEAN. Frontend canvas at /network?active-view=anything-engine now exercises a complete deck-upload → Path A 12-batch confirmation → edit-with-system-rewrite → dispatch → cards path with no stub fallbacks on the rewrite leg.
No scaffold, no fake success. The Wave 19 pre-wire shipped with an explicit amber "pending backend" badge so users could see what was wired vs. what was waiting. Wave 20 swapped that for a live LLM call. The amber badge is now gone from the path where the backend exists; remaining edit fields still surface it where the backend isn't built yet.
Wave 18 hit three low-glamour but high-impact quality gaps. Each ran as an independent sub-agent branch with a clean verify.
| Scope | Merge SHA | What it does |
|---|---|---|
| Auth-flicker | 1b987131 | staleTime on _authed + network route loaders. Prefetch on hover no longer flashes a sign-in redirect frame when the session is fresh but cached. |
| Env-tests | 88c86f81 | Skip env validation under Vitest (VITEST=true skipValidation path). Unblocks 5 pre-existing test files that had been silently skipped at boot due to missing required env vars in CI. |
| MemoryPanel parity | a504aa5b | Ports the MemoryPanel slide-out from chat-shell onto the canvas surface. /network?active-view=anything-engine can now read Xano native memory (matching the chat-shell standalone behavior). |
Wave 19 split into five parallel sub-agents covering the last set of polish items + the system-rewrite-on-edit frontend pre-wire that hands off to Wave 20's backend ship.
| Scope | Merge SHA | What it does |
|---|---|---|
| Pitch-confirm race | 44f5f528 | Per-thread gate on the ae-pitch-confirm handler. Previously, switching threads while one was confirming could leak the confirm lang into the wrong conversation. Now gated by conversation id. |
| useEffect audit | 40c0fc9a | Destructure speak / voiceEnabled from useVoice() so the TTS effect doesn't re-fire on every render. Closes a perf leak that was firing TTS synthesis 20-40× per assistant turn. |
| Right-rail content | d2e7f180 | Bridges canvas state (attachments + pitch profile) to the right rail via a typed ae-canvas-rail-state custom event. Modify / Context tabs now reflect live canvas state instead of stale fallbacks. |
| Mobile CSS | b1bb8cff | Responsive breakpoints across .ae-outcome-grid + canvas shell. Tile grid stacks on tablet/mobile; composer text 16px to suppress iOS auto-zoom; dedupe of orphaned shell rules. |
| System rewrite (pre-wire) | abbeb809 | summarizeFn BFF wrapper + debounced field handlers on InterviewSummaryConfirm + amber "pending backend" badge. Frontend was wired this wave; Wave 20 dropped in the live Xano endpoint. |
Page feedback shipped this wave. Robert flagged four items live; all four closed before Wave 20 opened. See the "Page feedback" section below for the full list.
Wave 20 is the convergence wave. Xano workspace 3 shipped two new endpoints + extended classify to 16 classes; the frontend wave landed four merges that consume them, persist Path A confirmation state, retire dead CSS, and update docs to retire the "fn 12918 STUB" claim.
| Endpoint / fn | State | What it does |
|---|---|---|
fn 12993 — pitch/update-pitch-profile |
NEW | Replaces the inline stub that ep 8497 was calling. Real diff-apply with NULL semantics. The "fn 12918 STUB" claim from yesterday's report is retired; the live function now lives under pitch/update-pitch-profile and writes the profile delta to the fundraising_pitch_profiles row. |
ep 8545 — /summarize-pitch-profile |
NEW | Real LLM regeneration of the summary on field edit. Haiku 4.5 backed. Called by the Wave 19 summarizeFn BFF wrapper. End-to-end edit → rewrite → display loop is now live on the find_investors leg. |
| ep 8400 — classifier | EXTENDED | Now emits 16 classes. travel added with chief-of-staff voice; classifier prompts + sample-result.md shipped under prompts/travel/. |
| Scope | Merge SHA | What it does |
|---|---|---|
| Path A persist | 61d60d7d | Persists Path A DispatchConfirmation lang to Xano so a refresh restores the deck-confirmation step. Closes the last "refresh = lost progress" gap on the Path A loop. |
| CSS dead-rules | d2d32ad7 | Removes 15 dead .ae-scanning-card rules (254 LOC). The component was retired earlier in the wave series; the CSS hung around. |
| update-pitch-profile docs | 88493a5c | Corrects the stale "fn 12918 STUB" claim in CLAUDE.md. Documents that the live function is now fn 12993 at pitch/update-pitch-profile. |
| Travel class #16 | 18226611 | Tile + sky-blue class accent + classifier integration + prompts. The 16th outcome class is shipped end-to-end (classifier → interview → dispatch). |
Live page-feedback comments landed mid-session. Each closed as a small commit on the canvas branch:
| Feedback | SHA | Resolution |
|---|---|---|
| QueryInput filter button | 645b6b50 | Search filters trigger swapped from SlidersHorizontal → Plus icon to read as "attach", not "filter". |
| InterviewTurn freetext margin | 3b84e5dc | +12px top margin on the InterviewTurn freetext form so it doesn't crowd the question. |
| Taking-longer pill | 34b5d46e | REMOVED. The 20s "Taking longer than usual..." badge was noise on real flows; the actual scanning loader (3-phase carousel from Wave 15) is sufficient. |
| System-rewrite "why aren't we doing it?" | c1a6e28f → abbeb809 → ep 8545 | Pre-wired the frontend in Wave 19 with an explicit amber badge; Wave 20 shipped the live Xano endpoint behind it. Edit a confirmation field → debounced → LLM regen → new summary lands. |
The shape of the next move hasn't changed since yesterday's report — but the gap list has materially shrunk. Three of the five "Mark territory" blockers from the Wave 14-17 page are now closed.
/network?active-view=anything-engine and runs the find_investors flow end-to-end on his own deck. The full path now exercises: starter tile → deck upload → Path A Opening Move turn → ready state → summary card → edit a field → system rewrites via ep 8545 → confirm → dispatch → cards. No stubs in that path.Three of five Mark-territory blockers from Wave 14-17 closed tonight. These four remain:
getMostRecentPitchProfile BFF wrapper. In flight. Path A 12-batch loop is rendering the full 32-prop pitch_profile via buildDispatchConfirmationLang, but the BFF wrapper that hydrates the most-recent profile by user_id is still being built (task #40 in flight).
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 yesterday.
Eight lightweight outcome classes. find_co_investors, find_event_attendees, find_warm_intros, plan_outcome, research_company, research_person, research_topic, summarize_meeting. Queued for Wave 21.
Per-mode context floors (v0). Mark's Apr 30 directive. Pending; queued for Wave 21.