Skip to content

GUI-Native Language Roadmap — Execution Status

GUI-Native Language Roadmap — Execution Status

Section titled “GUI-Native Language Roadmap — Execution Status”

Provenance. Derived from the April 2026 roadmap authored by Bertrand Reyna-Brainerd. This file tracks what has actually been implemented versus what is planned. Updated by AI agent on 2026-05-01.

Canonical roadmap source. The full task specifications live in docs/src/architecture/vox-gui-native-roadmap-2026.md. This file is the status overlay.


TaskStatusCommitNotes
TASK-0.1 — ADR 024: Dashboard as Axum SPA✅ Doneb7536331docs/src/adr/024-dashboard-axum-spa.md created. Index updated.
TASK-0.2 — Replace loopback-auto-unauth with token auth✅ Donebb72c7e3token.rs created. DashboardToken::generate_or_load() implemented. Meta-tag injection in assets.rs.
TASK-0.3 — Strict Origin/Host allowlist middleware✅ Done327bf460Extracted origin check into origin_guard.rs with JSON error body, strict WS-upgrade check, and comprehensive unit tests.
TASK-0.4 — CSP, X-Frame-Options, Referrer-Policy, CORS✅ Doned152d272X-Frame-Options and Content-Security-Policy headers present in assets.rs. CorsLayer::new() with allow_origin(Any), allow_methods(Any), allow_headers(Any) installed in http_gateway/mod.rs.
TASK-0.5 — Fix vox dashboard CLI detachment + readiness polling✅ Doneb7536331DashboardLauncher struct with setsid()/Windows DETACHED_PROCESS flags implemented.
TASK-0.6 — Harden transport.ts: backoff, auth refresh🟡 Partialb7536331Needs verification of backoff caps and authStatus event emission.
TASK-0.7 — Fix App.tsx hooks violation + dead imports✅ Doneb7536331useVoxTransport() moved to top of component. Dead imports removed.
TASK-0.8 — Integration tests for dashboard crate✅ DoneHEADTests implemented in crates/vox-dashboard/tests/ (auth.rs, asset_serving.rs, origin_guard.rs) and pass successfully.

Phase 0 verdict: 7 complete, 0 partial, 0 not started.


TaskStatusCommitNotes
TASK-1.1 — Delete vscode.ts shim✅ Doneb7536331rg finds zero vscode.postMessage or getVsCodeApi references.
TASK-1.2 — Fix or delete vox-dashboard-d binary✅ N/ABinary never existed in the repo; no action needed.
TASK-1.3 — build.rs for include_dir! safety + ETag✅ Doneb7536331include_dir::include_dir!("$CARGO_MANIFEST_DIR/dist") in assets.rs. ETag confirmed: version-prefixed "pkg--path-size" format with If-None-Match check → 304 on match.
TASK-1.4 — Clean up index.css duplication✅ DoneHEADRemoved hand-rolled .text-violet-500, .bg-violet-500, .border-violet-500/30 (now generated by Tailwind JIT). Kept .glow-violet (custom, not in Tailwind palette).
TASK-1.5 — Pin workspace deps, remove tsconfig.tsbuildinfo✅ Doneb7536331tower-http uses workspace = true. tsbuildinfo removed and gitignored.

Phase 1 verdict: 5 complete, 0 partial, 0 not started. Phase 1 is complete.


Per LANGUAGE_DESIGN_PRIORITIES.md: Phase 2 is the P1 cleanup phase — every task collapses redundant shapes to a single canonical form. Where a task also removes a Python-recognizable keyword, it is also a P2 advance.

TaskPriorityStatusCommitNotes
TASK-2.1 — Delete Path B UI fields from HirModuleP1 (purge dual UI representation)✅ DoneHEADHirLoweringMigrationFlags removed. endpoint_fns unified. hir.components fully purged from codegen_ts, web_ir, and typeck.
TASK-2.2 — Unify @server/@query/@mutation@endpoint(kind: …)P1 (3→1 endpoint shapes), P2 (@endpoint distinctive surface)✅ Done00588f6aHirEndpointFn with EndpointKind unified. query_fns/mutation_fns/server_fns collapsed to endpoint_fns.
TASK-2.3 — Collapse HirExpr::DbTableOp into MethodCallP1 (collapse HirExpr variants)✅ DoneHEADHirExpr::DbTableOp removed entirely; operations lowered into MethodCall with HirDbQueryPlan. Obsolete comment removed.
TASK-2.4 — Resolve HirExpr::Pipe vs Binary(Pipe)P1 (one canonical pipe form)✅ DoneHEADRemoved redundant HirExpr::Pipe variant; pipeline expressions now strictly use HirExpr::Binary(HirBinOp::Pipe, ...). All matches updated safely.
TASK-2.5 — Retire http bare-keyword routingP1 (one route shape), P2 (removes Python-recognizable http keyword)✅ DoneHEADTombstoned in parser. Verified via test_parse_http_route_is_tombstoned.
TASK-2.6 — Align workflow/activity/actorP1 (collapse 3 declaration shapes to 1)✅ Donee7f3e884Full dead-code sweep complete: ActorDecl/WorkflowDecl/ActivityDecl AST types, HirActor/HirWorkflow/HirActivity HIR types, all codegen emit functions, typeck registration/checker code, validate/dead_code/db_op_walk walkers, and VoxIr schema fields all removed. Parser tombstones already in place since prior commit. Orphaned caller-side references (9 files) fixed in e7f3e884; downstream test suites (vox-workflow-runtime, vox-integration-tests) and grammar-export hash updated in 60fd439b.

Phase 2 verdict: 6 complete, 0 partial, 0 not started. Aggregate priority advance: 6 redundant shapes collapsed (P1), 2 Python-recognizable keywords removed (P2). Phase 2 is complete — all preconditions for Phase 3 and Phase 4 are satisfied.


TaskStatusNotes
TASK-3.1 — Add grammar unification rule to AGENTS.md✅ DoneHEAD

Per LANGUAGE_DESIGN_PRIORITIES.md: Phase 4 is the first phase that primarily advances P0 (structural prevention) — each task encodes a bug class as a type or grammar rule so the bug becomes unrepresentable. Source: vox-gui-native-roadmap-2026.md §Phase 4.

TaskPriorityStatusNotes
TASK-4.1 — Add state_machine first-class blockP0 (missing (state, event) handler unrepresentable via exhaustiveness), P1 (collapses ad-hoc reducer-hook patterns to one shape), P2 (state_machine keyword distinctive)✅ DoneHEAD
TASK-4.2 — Add effect annotations (uses net, db, mcp(...))P0 (“function secretly touches network” unrepresentable via effect propagation), P3 (effects declared locally on the signature; no global flow analysis), P2 (uses clause distinctive)✅ DoneHEAD
TASK-4.3 — Add typed URLs primitiveP0 (broken link to deleted route unrepresentable via URL variant graph), P1 (single URL algebra replacing string patterns + raw <Link to="/…">), P2 (url Path { … } block distinctive)✅ DoneHEAD
TASK-4.4 — Compile vox.tokens.json into typesP0 (unknown token name → compile error; pair contrast validated at token-load time — warning at <4.5:1, error at <3:1 on body text), P1 (collapses raw #rrggbb / rgb(…) / hardcoded-px to named tokens)✅ DoneTokenRegistry + WCAG 2.1 contrast engine + validate_web_ir_with_registry integrated into maybe_web_ir_validate. vox-tokens.css and tokens.ts emitted from codegen_ts/tokens_emit.rs. Schema at contracts/tokens/tokens.v1.json. Canon doc: docs/src/reference/token-system.md. 21 tests passing.

Phase 4 verdict: 4 complete (TASK-4.1, TASK-4.2, TASK-4.3, TASK-4.4), 0 partial, 0 not started.

Sequencing note. All four tasks listed “Phase 2 complete” as their only common precondition and were parallel-safe per the roadmap. Per LANGUAGE_DESIGN_PRIORITIES.md §C2 (the GUI wedge), TASK-4.4 was the first P0 demonstration — it landed the contrast-validated color type the audit identified as the highest-impact accessibility-error prevention (research cites contrast as 26.6% of WCAG violations). Phase 4 is now fully complete; Phase 5 is unblocked.

TaskPriorityStatusNotes
TASK-5.1 — Token resolution validatorP0 (literal CSS color/dimension → compile error)✅ Done2aca2730
TASK-5.2 — Route reachability validatorP0 (broken link → compile error, dead route → warning)✅ Done1e0d943d
TASK-5.3 — A11y validatorP0 (img_missing_alt, interactive_missing_label, role_button_missing_keyboard)✅ Done1e0d943d
TASK-5.4 — v0.dev output validatorP0 (integration gate — a11y + design-token checks on v0 output)✅ Doneab0454a8

Phase 5 verdict: 4 complete, 0 partial, 0 not started. Phase 5 is complete — all preconditions for Phase 6 are satisfied.


Phase 6 — GUI Primitive Authoring Surface

Section titled “Phase 6 — GUI Primitive Authoring Surface”

Per vox-gui-native-roadmap-2026.md §Phase 6.

TaskPriorityStatusNotes
TASK-6.1 — Semantic primitive setP0/P1 (GUI primitive authoring surface)✅ DoneHEAD
TASK-6.2 — Token-ref-only style valuesP0/P1✅ Done968cae6f
TASK-6.3 — Surface pair primitiveP0✅ Done0fd8bb1a
TASK-6.4 — Overlay block + z-index DAG validatorP0✅ Done9fb6e958
TASK-6.5 — Contrast ratio along ancestor chainP0✅ DoneHEAD

Phase 6 verdict: 5 complete, 0 not started. Phase 6 is complete — all preconditions for Phase 7 are satisfied.


Phase 7 — Dashboard Re-author Through vox-codegen-ts

Section titled “Phase 7 — Dashboard Re-author Through vox-codegen-ts”
TaskStatusNotes
TASK-7.1 — Re-author App.tsx as app.vox✅ Doneapp.vox created with tab switcher. build.rs integrates vox build. HirExpr::If IIFE bug fixed — codegen now emits nested ternaries. Reactive component pipeline restored in emitter. Generated AppShell.tsx produces clean (tab === "speak" ? <SpeakTab /> : ...) output.
TASK-7.2 — Port 13 tab panels to .vox✅ Done0951020b/f5c25275
TASK-7.3 — Delete Vite/Tailwind parallel setup🟡 Partial05c1ee60

Phase 7 verdict: 2 complete, 1 partial (TASK-7.3 component wiring done; full bundler replacement deferred).

TaskStatusCommitNotes
TASK-8.1 — Atomic corpus migration PR✅ Done135b7591Golden corpus .vox files were already clean. Migrated 9 training-eligible docs + vox_system_prompt.txt to fn-based actor/workflow/activity syntax and current component syntax. Created scripts/migrate-corpus.vox verification script. All 247 compiler tests pass.
TASK-8.2 — MENS training run on new corpus🔲 Not startedDeferred — awaiting operator MENS training run. Operator must run vox populi train --config qlora.toml and compare eval scores before this task can be marked complete.

Phase 8 verdict: 1 complete, 1 pending operator action (compute).


TaskStatusCommitNotes
TASK-9.1 — Wire Decl::Routes → HIR → WebIR✅ Done240375b0HirModule::client_routes added. Decl::Routes now lowers to hir.client_routes instead of being silently dropped. lower_client_routes in web_ir/lower.rs produces RouteNode::RouteTree. routes.manifest.ts now emitted on build. Duplicate routes {} correctly triggers web_ir_validate.route.duplicate_contract_id. is_advisory_diagnostic SSOT in web_ir::validate. 4 vox-cli test failures resolved; corpus digest golden updated.

FORGE_TOKEN is now stored in ~/.vox/auth.json (local vox-secrets vault, not committed to the repo). vox ci watch-run reads it automatically. No more $env:FORGE_TOKEN=... prefix required for CI polling.

The gho_* token is a GitHub OAuth token scoped to your existing gh session. It is safe to store in vox-secrets for local use — vox-secrets writes to ~/.vox/auth.json on your machine, never to the repository. You do NOT need to generate a new PAT. The existing OAuth token is sufficient for the workflow and repo scopes needed by watch-run.


  1. TASK-8.2 — MENS training run. Deferred — awaiting operator compute action. Operator must run vox populi train --config qlora.toml against the updated corpus and compare eval scores.
  2. TASK-7.3 (remaining partial) — Full bundler replacement. Deferred to Phase 9 of vox-gui-native-roadmap-2026.md §Phase 9; blocked on a vox-integrated bundler. Can be worked in parallel with TASK-8.2 once Phase 9 is scoped.
  3. test_agent_mcp_roundtrip pre-existing failurevox_complete_task called with integer task_id = 1 but orchestrator uses "T-0001" string format. Fix: parse vox_submit_task response to extract the real task ID. Tracked as side-task chip.
  4. vox-corpus synthetic_gen flakiness — Windows temp file contention in parallel workspace mode. Tests pass in isolation (cargo test -p vox-corpus). Pre-existing; not introduced in this session. Fix: serialize temp-file access in synthetic_gen tests.

  • 2026-04-24 — Initial status tracker created (commit 08c8ad87).
  • 2026-04-25 — Audit refresh against HEAD fa350de8. TASK-0.4, TASK-0.8 promoted to ✅ (commit d152d272). TASK-2.6 reclassified as half-done with retrospective + re-plan note. Hygiene flags surfaced. (Cowork session.)
  • 2026-04-29 — TASK-0.6 completed: typed transport events, clean backoff, missing types.ts exports, broken import paths fixed. TASK-2.1 re-confirmed ✅ Done: components field is Path C (HirFieldOwnership::SemanticCore), not a Path B residual. 9 stale .py scripts deleted. Stale compiler WIP discarded. .cargo/config.toml fixed (relative = true). Phase 0 verdict updated to 8/8. (Agent session.)
  • 2026-04-29 — TASK-1.2 N/A confirmed (bin/ empty; binary never created). TASK-1.3 ✅ Done confirmed (ETag + If-None-Match in assets.rs lines 26–76). TASK-3.1 ✅ Done: §“Grammar Unification” section added to AGENTS.md. Phase 1 verdict updated to 5/5 complete. Phase 3 verdict: 1/1 complete. Next-tasks list reduced to TASK-2.6 only. (Agent session.)
  • 2026-04-29 — TASK-2.6 Path B executed: 15 compiler files, −1 150 lines, cargo check -p vox-compiler 0 errors 0 warnings. HirActor, HirActorHandler, HirWorkflow, HirActivity structs and all lowering/typeck/codegen paths retired. BindingKind::Actor, ActorHandlerSig, lookup_actor preserved (live Claude built-in path). Phase 2 verdict: 6/6 complete. Commit 6524b3f7. Phases 4–8 now unblocked. (Agent session.)
  • 2026-04-30 — TASK-8.1 ✅ Done: Atomic corpus migration. Golden corpus .vox files already clean. 9 training-eligible docs + vox_system_prompt.txt migrated to fn-based syntax. scripts/migrate-corpus.vox created. All 247 compiler tests pass. Commit 135b7591. (Agent session.)
  • 2026-04-30 — TASK-9.1 ✅ Done: Decl::Routes → HIR → WebIR wired. HirModule::client_routes added. lower_client_routes produces RouteNode::RouteTree. routes.manifest.ts emitted on build. Commit 240375b0. (Agent session.)
  • 2026-05-01 — TASK-2.6 Path A audit (PR #47 CodeRabbit round 3). Restored Decl::Workflow, Decl::Activity, Decl::Actor variants (lost in merge), plus parsers in descent/decl/mid.rs and lowering arms in hir/lower/mod.rs+hir/lower/decl.rs. Fixed HirFn.effects stale field in workflow_tracker_tests.rs; fixed DefId import in effect_check.rs tests; fixed state_machine_check.rs test to use HirSmFrom::Named and correct function signature; fixed contracts/tokens/tokens.v1.json schema ("version" property added to satisfy "additionalProperties": false); fixed validate_a11y.rs (DomNode::Loop { body } field, case-insensitive attr lookup, anchor-href and input-label checks); added WebIrDiagnosticSeverity enum + computed method to web_ir/mod.rs; updated v0_tsx_validate.rs diagnostic codes and d.severity() call; added _emitAuthStatus('authorized') + moved getToken() inside onopen in transport.ts; populated BehaviorNode::EventHandler for keyboard attrs in tsx_to_web_ir_module; fixed validate.rs route-test fixtures (added dom_nodes[0] to view_roots-using tests); activity-name filtering in plan.rs. (Agent session, PR #47.)

Resolved (no action needed):

  • TASK-0.6: transport.ts backoff and authStatus already correct — exponential cap at 30s, authStatus emitted on init (no_token), WS close codes 1008/4001/4003/4401 (unauthorized), and HTTP 401/403 from callTool (unauthorized).
  • TASK-1.2: vox-dashboard-d binary never existed — decision N/A.
  • TASK-4.2 stdlib pass: complete (see above).
  • Post-4843d7ce orphan failures: all 9 caller-side files purged (e7f3e884); workflow-journal JSON schema repaired; grammar-export hash and rule names corrected (60fd439b). Workspace compiles cleanly.