T3 Ecosystem Wave 5 Deep Review & End-to-End Parity Closure (2026)
This document records the Wave 5 adversarial code-first review comparing Vox’s T3 implementation (vox-orchestrator, vox-orchestrator-mcp, vox-code-audit, and vox-gui) against the six upstream T3 reference repositories (t3code, t3router, pi-t3chat, NotT3Chat, t3-chat-tomdoestech, and t3-cloneathon) and our T3 architecture specifications. It identifies six concrete defect clusters—prompt/sanitizer bugs and missing loop guards, split-brain resumable streams and stranded follow-up queues, async worktree lock drops and colliding checkpoint refs, UTF-8 byte-slice panics and synthetic tool fallbacks, frontend-backend message ID mismatches and unwired RPCs, and 43 live vox-code-audit violations—and defines the 24 requirements of Milestone v5.1 (Phases 283–288).
1. Executive Summary & Audit Methodology
Section titled “1. Executive Summary & Audit Methodology”Following the completion of Milestone v4.8 (Phases 265–270), we conducted a three-axis adversarial audit comparing:
- Backend Orchestration & MCP Pipeline:
crates/vox-orchestrator/src/andcrates/vox-orchestrator-mcp/src/vs./Users/brbrainerd/dev/t3code,/Users/brbrainerd/dev/t3router, and/Users/brbrainerd/dev/pi-t3chat. - Frontend GUI & Rust Tauri Bridge:
crates/vox-gui/ui/src/andcrates/vox-gui/src/commands/vs./Users/brbrainerd/dev/t3code/apps/web,/Users/brbrainerd/dev/NotT3Chat,/Users/brbrainerd/dev/t3-chat-tomdoestech, and/Users/brbrainerd/dev/t3-cloneathon. - Static Enforcement (
vox-code-audit):crates/vox-code-audit/src/detectors/anddiagnostics/catalog.rsvs./Users/brbrainerd/dev/t3code/oxlint-plugin-t3codeandt3-vox-toestub-rules-and-enforcement-research-2026.md.
While Waves 2–4 established the core domain structures and initial MCP/UI wiring, the audit uncovered critical subtle bugs, split-brain data stores, un-wired domain engines, and 43 live static-analysis violations that prevent full production parity.
2. Cluster-by-Cluster Findings (file:line Grounded)
Section titled “2. Cluster-by-Cluster Findings (file:line Grounded)”Cluster 1: Prompt Variable Target Bug, Sanitizer Tag Gaps, ToolRefusalDetector & Lazy MCP Meta-Tools (Phase 277)
Section titled “Cluster 1: Prompt Variable Target Bug, Sanitizer Tag Gaps, ToolRefusalDetector & Lazy MCP Meta-Tools (Phase 277)”$variableInterpolation Applied to User Prompt Instead ofsystem_prompt(preamble_and_retrieval.rs:395-407&message.rs:283):interpolate_system_prompt_variablesis called onexpanded_promptandturn_user_prompt(the user prompt), and is never called onsystem_prompt(message.rs:283). Placeholders like$workspace_root,$git_branch,$session_id, and$current_datetimeinsystem_promptremain literal strings.current_datetime(preamble_and_retrieval.rs:402) callsts_to_date_str, which formats onlyYYYY-MM-DD, omittingHH:MM:SSZ.detect_workspace_git_branch(system_prompt_vars.rs:36) readsworkspace_root.join(".git").join("HEAD")directly. In linked Git worktrees (DelegationWorktreeorgit worktree add),.gitis a regular file containinggitdir: /path/to/repo/.git/worktrees/<name>, so.join("HEAD")fails withENOTDIRand falls back to"unknown".
- Incomplete
context_sanitizerSpecial-Token Escaping,<WebFetch>Compaction & Active-Turn Bypass (context_sanitizer.rs&conversation.rs):escape_user_prompt_special_tokens(context_sanitizer.rs:109-120) only escapes<|im_start|>,<|im_end|>,<|endoftext|>, and<|system|>, missing<tool_call>,</tool_call>,<tool_response>,</tool_response>,<think>, and</think>(NotT3ChatProgram.cs:467), which allows user input to forge tool call blocks or reasoning tags.compact_historical_web_search(context_sanitizer.rs:20-39) strips<WebSearch>but ignores<WebFetch>...</WebFetch>(NotT3ChatProgram.cs:573-586).- Active-turn user messages (
turn_user_promptpushed atagent_loop.rs:146andmessage.rs:367) bypassescape_user_prompt_special_tokens, andpersist_and_envelope.rs:63, 75hardcodesthought_signature: Noneinstead of persistingparse_special_entity_tags(&response_text).extracted_reasoning.
- Missing
pi-t3chatToolRefusalDetector([SYSTEM TOOL CORRECTION]) &NotT3ChatSearch Circuit Breaker (totalSearches >= 3) (agent_loop.rs):agent_loop.rs:235-290breaks out immediately on the first response with zero tool calls (if tool_calls.is_empty()), even when a model hallucinates a capability refusal ("I don't have access to your filesystem or terminal").pi-t3chat(tools.ts:270-278, 461-473) detectsREFUSAL_RE && CAPABILITY_REwhen tools are registered and re-prompts with[SYSTEM TOOL CORRECTION](max_corrections = 2).NotT3Chat(Program.cs:554-560) tracks per-turn search tool invocations and strips search/retrieval tools oncetotal_searches >= 3so the model synthesizes an answer instead of looping untilmax_iterations.
- Dead
LazyMcpGroupRegistry&sanitize_mcp_tool_search_env(external_mcp.rs:74, 118-327):LazyMcpGroupRegistry(list_mcp_servers,list_mcp_tools,resolve_call_mcp) andsanitize_mcp_tool_search_envhave zero production callers outside#[cfg(test)], whileexternal_mcp.rs:74still hardcodescmd.env("ENABLE_TOOL_SEARCH", "true").
Cluster 2: Sequenced ResumableTurnStreamRegistry, ThreadRunQueue Follow-Up Draining, ModelSpec Cost Ledger & SessionPrivacyPosture (Phase 278)
Section titled “Cluster 2: Sequenced ResumableTurnStreamRegistry, ThreadRunQueue Follow-Up Draining, ModelSpec Cost Ledger & SessionPrivacyPosture (Phase 278)”- Split-Brain
ServerState::resumable_streamsvs.ResumableTurnStreamRegistry(server_state.rs:154,salvage_and_stream.rs:33-37,message.rs:366):vox_orchestrator::models::spec::ResumableTurnStreamRegistry(SequencedTurnChunk,TurnStreamEventKind,subscribe_or_replay,replay_after,cancel_turn) has zero production callers.ServerState::resumable_streamsuses a rawHashMap<String, (String, bool)>that resets on everystream_final_answeriteration (salvage_and_stream.rs:33-37), wiping iteration 1’s output on iteration 2+, and is never updated on non-agent-loop turns (message.rs:366).
- Stranded
FollowUpTurnPrompts & Dead Background Settlement inThreadRunQueue(thread_run_queue.rs:105-169,persist_and_envelope.rs:356):pop_next_follow_up,set_limit_recovery,take_ready_limit_recovery,register_background_work,complete_background_work, andcan_settle_turnare never called in production. Prompts enqueued withpromote_to_steer: false(QueueDisposition::FollowUpTurn) sit instate.thread_run_queueforever aftercomplete_active_turnruns.
- Hardcoded
$0.001 / $0.002Cost Rates,"auto"Preflight False Rejections & Missing 4-Hour Burst Window (message.rs:259,persist_and_envelope.rs:346-352,budget/tracker.rs):message.rs:259callscheck_preflight_balance("local_user", req.model_override.as_deref().unwrap_or("auto"))before model resolution (L354), so"auto"returnsis_zero_cost_local_model("auto") == falseand blocks local Ollama/MENS models when platform credits are 0.persist_and_envelope.rs:346-352passes hardcoded0.001and0.002USD/1k rates instead of callingModelRegistry::compute_turn_cost_delta(registry.rs:326, currently dead outside unit tests).BatteryAndCostLedgerlackspi-t3chat’s dual-window tracking (four_hour_burst_used_bu/four_hour_reset_ms+monthly_used_bu) and has novox_battery_statusMCP tool.
SessionPrivacyPosture::EphemeralIgnored During SQLite Persistence (persist_and_envelope.rs:43-185):persist_and_build_chat_envelopeunconditionally writes user/assistant messages, workspace turns, telemetry events, and memories tostate.db(VoxDb) even whenprivacy_posture == SessionPrivacyPosture::Ephemeral(!privacy_posture.allows_disk_persistence()).
Cluster 3: Worktree Async Lock Drop, Colliding Sparse Checkpoint Refs, Real MultiVariantWorktreePool & Compact Snapshot Fix (Phase 279)
Section titled “Cluster 3: Worktree Async Lock Drop, Colliding Sparse Checkpoint Refs, Real MultiVariantWorktreePool & Compact Snapshot Fix (Phase 279)”DelegationWorktree::createDrops Sync Mutex Before.await&WebhookDedupeAndRateGateResets Every 250ms (agy_worktree.rs:163-171,webhook_intake.rs:190):- In
agy_worktree.rs:163-171,GitExec::new(repo_root).run(...)returns an unpolledFutureinside{ let _guard = lease.lock()... }, dropping_guardat line 170 beforeworktree_res.await?at line 171! Concurrentgit worktree addcalls execute completely unserialized. - In
webhook_intake.rs:190,submit_webhook_eventscreates a fresh localWebhookDedupeAndRateGate::default()on every 250ms poll tick, resetting delivery deduplication and rate limits every 250ms.
- In
- Sparse Git Checkpoint Turn Collision (
ckpt_turn = 1), NTFS Colon Failure, Orphan Commits & Dirty Restore (batch_and_eval_gate.rs:189,checkpoint_engine.rs:72, 86, 125, 155):batch_and_eval_gate.rs:189computeslet ckpt_turn = (seq.len() as u32) + 1;from the local per-iterationseqvector, overwritingrefs/vox/checkpoints/<session_id>/turn/1on every turn!checkpoint_engine.rs:72only replaces/inthread_id(vox_ckpt_index_{}_{}), leaving:and%fromVoxIdAllocatorV2IDs, which fails on Windows paths.checkpoint_engine.rs:86omits-p HEADongit commit-tree,restore_checkpoint(L155) leaves behind newly created untracked files not present in<target_ref>, anddiff_checkpoints(L125) is never called byhandle_vcs_checkpoint_diff_summary(t3_wave3_tools.rs:896).
- In-Memory Mirage in
vox_muse_pool_spawn&vox_muse_pool_adopt(t3_wave3_tools.rs:442-514&muse_pool.rs):handle_muse_pool_spawnonly constructsVariantWorktreeSlotpath structs in memory without persisting the pool onServerStateor materializing worktrees on disk, andhandle_muse_pool_adoptre-plans a fresh pool from scratch without applying or pruning worktrees.
- Double
ToolResultEnvelope & Subagent Filter Bug inorchestrator_status_compact(orchestrator_snapshot.rs:312-344,dispatch.rs:815-825):orchestrator_status_compactcompresses the outer{"success": true, "data": ...}wrapper fromorchestrator_status, whichdispatch.rs:822wraps a second time, and filters idle subagents only byname.contains("subagent")instead of checkingparent_agent_id(LiveBodyDeduperis also un-wired).
Cluster 4: UTF-8 Byte-Slice Panics, Multi-Provider Consensus Synthesizer, Recursive Session Discovery & Real Diagnostics (Phase 280)
Section titled “Cluster 4: UTF-8 Byte-Slice Panics, Multi-Provider Consensus Synthesizer, Recursive Session Discovery & Real Diagnostics (Phase 280)”- UTF-8 Boundary Panics in
context_handoff.rs:84&mcp_tool_access.rs:165, 172+ StubHandoffStrategy::Summarized(context_handoff.rs:56-62):body.truncate(HANDOFF_BYTE_CAP - SUFFIX.len())(context_handoff.rs:84) and&l[..160]/&pass2[..MAX_DOM_SNAPSHOT_BYTES - 24](mcp_tool_access.rs:165, 172) slice at raw byte offsets that panic whenever a multi-byte UTF-8 character (—,…,•, emoji, non-ASCII text) straddles the boundary.HandoffStrategy::Summarizedexecutes the exact same 4-turn tail slice asCustomPromptwithout summarizing earlier turns, andt3_wave3_tools.rs:306persists handoff entries withmessage_id: None.
handle_consensus_runOpenRouter-Only Check & Missing Synthesizer Pass (t3_wave3_tools.rs:101-245,consensus.rs:163-209):- Checks only
SecretId::OpenRouterApiKey(L143), ignoring Gemini, Anthropic, OpenAI, Groq, and local Ollama/MENS providers, andConsensusOrchestrator::evaluate_legsonly picks a single leg by heuristic regex score instead of synthesizing a combined consensus response across completed legs.
- Checks only
- 1-Level
discover_latest_external_jsonlBug (~/.claude/projects/<slug>/<uuid>.jsonl) & Fake Guest Moderation (t3_wave3_tools.rs:545-724):discover_latest_external_jsonl(L704) only scans depth-1 files in~/.claude/projectsand~/.codex/sessions, whereas Claude Code and Codex store.jsonltranscripts 2–3 levels deep!handle_guest_share_moderate(L582-589) fabricates a fake invite and fake guest prompt wheneverpending_messagesis empty becausevox_guest_share_redeemandvox_guest_share_submitwere never exposed as MCP tools.
- Caller-Controlled Privilege Escalation in
authorize_wave3_call, EphemeralPullRequestReviewGuideService& Empty Diagnostics (t3_wave3_tools.rs:49-69, 869, 964):authorize_wave3_calltrustsruntime_modeandgranted_capabilitiesfrom caller arguments,handle_pr_review_guiderecreatesPullRequestReviewGuideService::default()on every call, andhandle_file_diff_and_diagnosticshardcodes"diagnostics": []instead of runningvox-code-audit/ workspace diagnostics on the file.
Cluster 5: Frontend-Backend message_id Unification, Live Transcript Actions, Mid-Turn Steer Composer & Stream Watchdog (Phase 281)
Section titled “Cluster 5: Frontend-Backend message_id Unification, Live Transcript Actions, Mid-Turn Steer Composer & Stream Watchdog (Phase 281)”- Split-Brain
message_idBetweenchat_history:{session_id}(usr:.../ast:...) and GUI SQLite ("1","2","gui-run-1:asst") (chat.rs:335-383,chat_turn.rs:317-337,history.rs:193, 247):parse_chat_message_envelopeincrates/vox-gui/src/commands/chat.rsdiscardsdata.message_id(ast:...),battery_spent_bu,remaining_balance_bu,quality_score,flesch_kincaid_grade,compaction_audit, andposture_audit.history.rs(chat_edit_message_in_place,chat_regenerate,chat_compact_up_to) only matches exacte.message_id == Some(message_id)and never syncs mutations tostate.db.
- Broken
ChatTranscript.tsxTurn Actions (✎ Edit,↻ Regenerate,✂ Compact Here,⑂ Compare Branches) &/compactSlash Command:ChatTranscript.tsx:186hides✎ Editon user messages (!isUser),handleRegenerateTurn(L410-422) passesexecute: falseand only displays a banner without updating messages or generating a new reply,✂ Compact Here(compactChatUpTo) is missing from message bubbles,/compactinLoquela.tsxis unhandled inApp.tsx:1500-1664, andhandleOpenBranchComparison(L311-331) fabricates a hardcoded node instead of comparing forked sessions.
Loquela.tsxEnter-Key Task Abort Bug & Missing[⚡ Steer]/[+ Queue Next]Controls (Loquela.tsx:1216-1224, 1338-1367,App.tsx:1316-1324):- Pressing
EnterinLoquela.tsx:1216-1224whiletaskInProgress === truecallsonInterrupt(currentTaskId)— aborting the active run instead of steering or queueing the typed prompt! AndsteerChatQueue(t3Wave3Rpc.ts:765) has zero.tsxcallers.
- Pressing
- Missing
streamWatchdog.ts, UnwiredresumeChatStream& IncompleteChatExecutionRail/SessionInteropModal/ConsensusGridView(t3Wave3Rpc.ts):crates/vox-gui/ui/src/lib/chat/streamWatchdog.ts(30sfirst-token /120sidle timeout) does not exist on disk,resumeChatStreamhas zero.tsxcallers,ChatSurface.tsx:695-703never passescompactionAudit/postureAudit/batterySpentBu/qualityScoretoChatExecutionRailorContextWindowMeter,SessionInteropModalis mounted withoutmessagesoronSessionImported(and lackssessionImportBundle+ external session list discovery), andConsensusGridView’sonAdoptVariant(vcsMusePoolAdopt) is unwired.
Cluster 6: vox-code-audit T3 Detector Catalog Registration, Rule Completeness & 43 Live Workspace Violations (Phase 282)
Section titled “Cluster 6: vox-code-audit T3 Detector Catalog Registration, Rule Completeness & 43 Live Workspace Violations (Phase 282)”- Missing
diagnostics/catalog.rsRegistration &diagnostic_id: Noneon All 4 T3 Detectors:vox/lint/unreasoned-suppression,vox/test/flaky-wait-and-unreasoned-skip,vox/mcp/access-and-error-safety, andvox/ui/layout-and-perf-hazardsare missing fromALL_KNOWN_IDSincrates/vox-code-audit/src/diagnostics/catalog.rs:291-350and emitdiagnostic_id: None.
- Incomplete Rule Coverage & False Positive in
unreasoned_suppression.rsandtest_clock_and_skip.rs:unreasoned_suppression.rsignores.voxfiles, ignores Rust#[expect(, fails to enforce-- <reason>on// toestub-ignore(...), ignores preceding-line explanation comments (explainedAbove), and falsely flags valid// @ts-expect-error <explanation>comments lacking--.test_clock_and_skip.rsskips inline Rust#[cfg(test)]modules, omits unreasoned.skip(/.todo(/xit(/xdescribe(, omits sleep-polling loops (tokio::time::sleep/setTimeoutinsidewhile/loop/for), and omitsrequestAnimationFramebrowser waits.
- Incomplete
mcp_access_and_error_safety.rs&ui_perf_hazards.rs+ RawCommand::newint3_wave3_tools.rs:mcp_access_and_error_safety.rschecksCallToolResult::errorinstead ofToolResult::errand omits thick-handler subprocess detection (std::process::Command::newdirectly insidet3_wave3_tools.rs:895, 940, 985, 1010).ui_perf_hazards.rsomits.css:has(...)(vox/ui/unscoped-has) andscrollbar-gutter: stable+mx-autowithoutboth-edges(vox/ui/centered-scroll-gutter).
- 43 Live Workspace Violations Across
crates/vox-gui/ui/src/,crates/vox-cli/, andcrates/vox-orchestrator-mcp/:- 15 unreasoned lint suppressions in
crates/vox-gui/ui/src/+ 4 baretoestub-ignore(scaling)comments incrates/vox-cli/. - 1
tracing::warn!(error = ?e, ...)violation incrates/vox-orchestrator-mcp/src/chat_tools/chat/harness_issue_judge.rs:137. - 21
transition-allviolations and 5new ResizeObserver(violations acrosscrates/vox-gui/ui/src/.
- 15 unreasoned lint suppressions in
3. Milestone v5.1 Phase Architecture (Phases 283–288, 24 Requirements)
Section titled “3. Milestone v5.1 Phase Architecture (Phases 283–288, 24 Requirements)”| Phase | ID Prefix | Scope |
|---|---|---|
| Phase 283 | T3-PROMPT-LOOP-01..04 | Fix system_prompt $variable interpolation + worktree .git file branch resolution + ISO-8601 $current_datetime, expand context_sanitizer (<tool_call>, <tool_response>, <think>, <WebFetch>, active-turn user prompt escaping, thought_signature extraction), wire pi-t3chat ToolRefusalDetector ([SYSTEM TOOL CORRECTION]) + NotT3Chat search circuit breaker (total_searches >= 3), and wire LazyMcpGroupRegistry (vox_list_mcp_servers, vox_list_mcp_tools, vox_call_mcp_lazy) + sanitize_mcp_tool_search_env |
| Phase 284 | T3-STREAM-QUEUE-01..04 | Replace primitive ServerState::resumable_streams with ResumableTurnStreamRegistry (SequencedTurnChunk, multi-iteration accumulation, vox_chat_stream_resume + vox_chat_stream_cancel), wire ThreadRunQueue (pop_next_follow_up, register_background_work/can_settle_turn, 429 LimitRecoveryState), wire ModelRegistry::compute_turn_cost_delta + post-resolution preflight check + 4-hour/monthly quota windows + vox_battery_status, and enforce SessionPrivacyPosture::Ephemeral disk-persistence gating |
| Phase 285 | T3-WORKTREE-CKPT-01..04 | Fix DelegationWorktree::create async tokio::sync::Mutex lock across .await + persistent ServerState::webhook_gate (WebhookDedupeAndRateGate + HMAC/filter helpers), fix monotonic per-session sparse Git checkpoint turn counter + Windows NTFS temp-index sanitization + -p HEAD parent lineage + clean untracked-file restore + diff_checkpoints, materialize real worktrees in MultiVariantWorktreePool (vox_muse_pool_spawn / vox_muse_pool_adopt), and fix orchestrator_status_compact double-envelope + parent_agent_id subagent filtering + LiveBodyDeduper |
| Phase 286 | T3-TOOLS-HARDENING-01..04 | Fix UTF-8 char-boundary truncation panics in context_handoff.rs & mcp_tool_access.rs + real multi-turn digest in HandoffStrategy::Summarized, multi-provider secret check + synthesizer pass in handle_consensus_run, recursive depth-4 external session discovery (~/.claude/projects, ~/.codex/sessions, ~/.cursor/chats + vox_session_list_external) + real vox_guest_share_redeem / vox_guest_share_submit, and server-enforced authorize_wave3_call + persistent PullRequestReviewGuideService + real diagnostics in handle_file_diff_and_diagnostics |
| Phase 287 | T3-GUI-PIPELINE-01..04 | Unify message_id + telemetry fields across vox_chat_message, vox-gui (chat.rs/chat_turn.rs), history.rs (with turn-index fallback & SQLite sync), wire live user+assistant ✎ Edit, executing ↻ Regenerate (execute: true), ✂ Compact Here (compactChatUpTo), /compact slash command, and real branch comparison in ChatTranscript.tsx, wire mid-turn [⚡ Steer] & [+ Queue Next] (steerChatQueue) in Loquela.tsx (fixing the Enter-key task abort bug), and implement streamWatchdog.ts + resumeChatStream + full ChatExecutionRail / SessionInteropModal / ConsensusGridView / GuestShare wiring |
| Phase 288 | T3-AUDIT-PARITY-01..04 | Register all T3 detector IDs in diagnostics/catalog.rs (ALL_KNOWN_IDS), upgrade unreasoned_suppression.rs, test_clock_and_skip.rs, mcp_access_and_error_safety.rs, and ui_perf_hazards.rs to full oxlint-plugin-t3code parity, refactor raw Command::new calls in t3_wave3_tools.rs, and remediate all 43 live workspace violations across vox-gui, vox-cli, and vox-orchestrator-mcp |