Changelog
Changelog
Section titled “Changelog”All notable changes to the Vox project are documented here.
[Unreleased]
Section titled “[Unreleased]”mens-candle-cpuplugin for Linux hosts without an NVIDIA GPU: the Candle backend built without CUDA, published asmens-candle-cpu-v<version>-linux-x86_64.zipfrom a second leg of the existing CUDA release job. The CUDA build linkslibcudaat load time and cannot load on such hosts, so until now MENS training, serving and merging had no backend there at all. On macOS the Metal plugin already covers CPU; the CUDA plugin’s manifest no longer claims a macOS artifact.@ai(structured_output = T)now emits a real JSON-schema-constrained LLM call — the generatedLlmConfig.response_formatcarries{"type":"json_schema","json_schema":{"name":…,"strict":true,"schema":{…}}}derived fromT’s typedef (scalars,list[…],Option[…], nested structs; closed objects withrequired), andmax_iterations = Nnow emits a bounded re-prompt loop that retries when the reply is not valid JSON.- Uniform
--jsonacross the build lane —vox --json build,vox --json test, andvox --json run(script lane) emit stable single-lineBuildLaneEnvelopeJSON (envelope_version,command,ok,error_count,warning_count,diagnosticsusing the sameVoxCompilerDiagnosticPayloadasvox check, optionalexit_code) on stdout; human progress notes move to stderr so stdout stays JSONL-parseable.vox buildguarantees exactly one envelope line per invocation regardless of which stage fails. - KB Library index and tools. New MCP tools
vox_kb_search,vox_kb_get,vox_kb_cite,vox_kb_statusandvox_kb_reindex,kb://doc/kb://chunkresources, and the CLIvox kb status/vox kb reindex(both go through the orchestrator daemon, the single index writer;--jsonprints the raw payload). The lexical leg is Tantivy 0.22 (the turso FTS5 probe found no FTS5 module), on by default invox-search.docs/src/library/and theLibrarydocs category hold general curated knowledge pages.vox-dbschema baseline is now 95 (library index columns andkb_index_state). - KB facet contract (KB Phase 4). A SKOS-lite taxonomy (
contracts/documentation/kb-taxonomy.v1.yaml) and typed doc facets (topic,domain,authorship, provenance, 40-120 wordkb:summaryblock) enforced by thevox-doc-pipelinefacet lint (facet-*rule ids) with a seeded, shrink-only backlog for existing docs (contracts/documentation/kb-facet-backlog.v1.yaml, fast pre-push gate).vox_kb_searchexpands taxonomy altLabel synonyms, MENS training excludes web-promoted and unattested LLM-authored pages and strips the summary block, and the GUI gets a generatedkbFacetstype. vox doctor --diag <id>— run and report only the build-health check that can produce a given[diag id=…](e.g.sccache.pathological); exits non-zero when the diagnosis fires, and unknown ids list the registered-id registry.
Removed
Section titled “Removed”- The 12 legacy
vox_kb_*CRUD tools are retired, with no aliases (KB Phase 3, D-02). Retired tools:vox_kb_create,vox_kb_list,vox_kb_delete,vox_kb_add_entry,vox_kb_delete_entry,vox_kb_list_entries,vox_kb_review_entry,vox_kb_get_feed,vox_kb_add_rule,vox_kb_list_rules,vox_kb_queryandvox_kb_clip; the model-callable writers among them (vox_kb_clip,vox_kb_add_entry) are retired with the rest. A call to any of them now answers as an unknown tool. External MCP allowlists and prompts must switch tovox_kb_search/vox_kb_get/vox_kb_citefor reading the Library index. - The legacy VoxKB store is retired. The
KbStoreLIKE-search store, theKbRouterkeyword router, the three model-output signal adapters and their vox-db CRUD and row types are retired and deleted. A fresh database no longer createsknowledge_bases,kb_entriesorkb_routing_rules(the DDL moved behind thequarantinefeature); an existing database keeps them and its rows are copied into the findings inbox on every attach. - Tantivy docs mirror in
vox-search, which had no writer: the module is gone, along with the publicSearchExecutionsupplemental Tantivy lines field (tantivy_doc_lines) andSearchPolicy::tantivy_index_root. The Library indexer owns the Tantivy index now.
- After upgrading, restart a running
vox-orchestrator-d; an old daemon keeps serving the previous tool table and answersvox_kb_*calls as unknown tools. vox_config::sanitize_chatmland thevox-corpusarca replay copy remain separate prompt sanitizers outside the KB path; the one KB-text sanitizer isvox_db::kb_text::sanitize.
- CUDA Candle plugin compiles again, with Dense Qwen3 Q/K RMSNorm applied once. Merge
a7cdfdb8ecombined two Q/K-norm implementations invox-plugin-mens-candle-cuda: duplicateq_norm/k_normstruct fields, which broke the build, plus a second norm inQwen2Attention::forwardafter the head transpose. No build ever ran that code. The pre-transposerms_norm_f32path (matching Metal) is kept, and a test pins it as applied once. vox init my-app && cd my-app && vox run src/main.voxno longer fails with “No fn main() found”.vox run’s auto-mode app-vs-script arbiter (is_script_file_by_page_heuristic) only recognized@pageas an app-lane signal, so any service-shaped file without it — includingvox init’s own default full-stack template (table/server/component/routes, no@page, nofn main()) — was misrouted to the script lane, which requiresfn main(). It now shares the same service-surface detection (table/server/query/mutation/actor/workflow/activity/routes/@page) already used byis_script_shaped, matching the documented--mode autocontract: service-shaped files stay on the native/app lane.vox build’s generatedCargo.tomlnow resolves outside a vox checkout. Path deps on vox runtime crates (vox-db,vox-actor-runtime, …) were hardcoded relative paths (../../crates/vox-db) that only resolved when the generated project happened to sit at a fixed depth inside this repo;cargo checkfailed immediately anywhere else. Now resolved viaVOX_REPO_ROOTor the path the localvoxbuild was compiled from (falling back to the old relative path inside a checkout). Also:vox-orchestratorandvox-speechare only listed when the generated code actually references them (an@aisubagent/memory-search fixture orSpeech.transcribe(...)), not unconditionally for every app. Seegenerated-project-runtime-deps.md.vox mens serveno longer advertises aPOST /v1/completions/streamroute that hung forever. The handler set astream_txon the worker request but the worker loop only ever replied on the non-streaming channel, so callers got a200SSE response that emitted keep-alives and never a token. The route, its handler, and the unusedstream_txfield are removed;vox mens servehas no streaming endpoint today —/v1/completions(and/generate) return a single non-streaming JSON body. Seemens-serving-ssot.md.- Interpreter:
Option::Nonenow compares equal to thenullliteral.VoxValue’sPartialEqhad no cross-variant arm forNullvsOption(None), sox == null/x is nullwas alwaysfalseandx isnt nullalwaystruefor anyOption[T]— which made the idiomaticif x isnt null { x.unwrap() }guard onenv.get()/process.run()results dead code that unwrapped a genuineNoneand panicked. This changes control flow in existing.voxscripts: a null-check on anOptionthat silently never fired now fires correctly, so branches that were unreachable become reachable.Some(_)still never equalsnull. Audited all 109is null/isnt null/== null/!= nullsites in this repo — every one was a brokenNoneguard, none depended on the old behavior. - QLoRA training now loads the real
lm_head.weightfor untied checkpoints (Metal and CUDA trainers). Previously the LM head was always derived from the embedding matrix, which is wrong for every currently-shipping Qwen3 base:Qwen3-8B(the 16 GBDEFAULT_MODEL_ID),Qwen3-14B,Qwen3-32B, andQwen3.8-27Ball shiptie_word_embeddings: falsewith a real, distinctlm_head.weight, so training optimized logits against the wrong matrix while serving used the right one. Adapters trained before this change are not numerically comparable to adapters trained after it — re-train rather than comparing across the boundary. Genuinely tied checkpoints (nolm_head.weightpresent) keep the previous derive-from-embeddings behavior. The untied head is loaded CPU-side (vb_mmap_cpu) like the projection weights, so it does not add a multi-GiB device-buffer peak during graph construction (~4.7 GiB for Qwen3.8-27B’s 248320x5120 head).
Changed
Section titled “Changed”- Model and web text reaches the knowledge base only as a pending,
Untrustedfinding (KB Phase 3). Web hits from the search web leg and the Tavily path, every research turn and the GUI side doors file rows in the newkb_findingsinbox instead of the corpus.persist_web_hits(VOX_SEARCH_PERSIST_WEB_HITS_DISABLED) therefore means “capture into the inbox when a sink is injected”, not “mirror intosearch_documents”. A chat turn no longer writes model output into the knowledge base, and the legacy KB text (keyword enrichment,@namedumps) no longer reaches any chat prompt. - Trust tiers decide what the automatic chat preamble may inject. Every
search_documentsrow carries a storedtrust_tier(SystemVerified, Trusted, Advisory, Untrusted). Legacy web rows are re-tieredUntrusted(not purged) and dropped from the automatic chat context; explicit tools still return them, labelled[tier:untrusted]. The envelope tier is the minimum of the kept hits. Retrieved text and everyvox_kb_*tool result pass one KB-text sanitizer. Facts an agent stores through the memory store tool enter the knowledge graph asUntrustedand no longer reach the automatic chat context as graph nodes (memory-file lines are unchanged). Library docs count as curated only when committed and unmodified; everything else indocs/srcis indexedUntrusted. Tavily never runs for the automatic chat context. - GUI Ingest URL, Ingest Text and Publish research doc file pending findings. They no longer write
docs/srcor the knowledge graph, and the caller-lesssave_research_doccommand is deleted. Until the Phase 12 Inbox GUI, filed findings are visible only through the toast andvox kb status.vox research publishwrites a local draft under.vox/cache/research-drafts/instead ofdocs/src. @kbbucket mentions are inert until Phase 7. The mention still parses but injects nothing.- MENS
KbSignalsreads reviewed findings only and emits DPO pairs, never SFT. SFT data already exported from legacymens_queued=1rows cannot be recalled. vox kb statusandvox_kb_statusreport the legacy VoxKB row counts and the pending/total inbox counts (newlegacy_voxkbandinboxobjects; every Phase 2 field is unchanged).vox_kb_statusstays off the HTTP read role.- vox-db schema baseline 96 (
kb_findings,search_documents.trust_tier). Existing databases migrate in place; the legacy VoxKB tables are quarantined, never dropped. - MENS picks its Candle backend the same way everywhere.
vox mens train,vox mens serve,merge-qloraandeval-localnow sharevox_populi::mens::select_mens_backend: an explicit--devicewins; otherwise CUDA on an NVIDIA host, Metal on any Mac (Intel included), and a CPU plugin elsewhere (--device cpuon an NVIDIA host reuses the CUDA plugin). Previously training guessed from the OS (CUDA on every non-Mac host, GPU or not) while serving probed hardware and failed outright on a host with no GPU. The pre-train plugin self-heal now also runs for the default--device best(previously only for an explicit--device cuda/metal), and is skipped where no prebuilt plugin is published for the platform; there, and on Windows hosts without a GPU (which used to get a from-source CUDA build and now selectmens-candle-cpu), the load error explains how to build the plugin from source. VOX_MENS_FORCE_TRAINoverridesvox mens train’s VRAM-fit refusal. When the accelerator lane is calibrated (has a row incontracts/mens/memory-model.v1.yaml) and the real, measuredmemory_model::sweep/plan_forverdict refuses the config even atbatch_size=1,vox mens trainrefuses to proceed unlessVOX_MENS_FORCE_TRAIN=1(ortrue) is set; unset or0still rejects. An uncalibrated lane (no measured basis to accept or refuse) is a separate, warn-and-proceed case, not a refusal. This replaced the earlier params_b-onlybudget_gate/ModelPlan.over_budgetgate intrain_arm.rs, deleted as part of the 2026-09-11 memory-model SSOT migration, with the same operator-override contract applied to the new measured entry point.
[0.6.0] - 2026-05-26
Section titled “[0.6.0] - 2026-05-26”Release theme: Single-machine multi-agent with no data loss; @endpoint decorator surface retired; language hardening. All Phase 0 (foundations), Phase 1 (language spine), Phase 3 (VCS gossip), Hopper Hp-T1..T4 (unified task intake), and Telemetry unification Phases A–D deliverables from the mesh SSOT.
Language surface changes
Section titled “Language surface changes”@endpoint(kind: server|query|mutation)retired — the canonical bare-form decorators@server/@query/@mutation(introduced in Phase B, audit doc §11.2, 2026-05-23) are now the only endpoint declaration surface. See the v0.5 → v0.6 migration guide.- Other language surface changes (typed list subscript
Option[T], strict-OptionJsonAPI,@json_as, raw strings, intra-project imports) are detailed in the same migration guide.
Removed
Section titled “Removed”- Lexer:
AtEndpointtoken +#[token("@endpoint")]annotation deleted fromcrates/vox-compiler/src/lexer/token.rs. Any remaining@endpointtext in user source now fails to lex. - Parser:
parse_endpointfunction deleted fromcrates/vox-compiler/src/parser/descent/decl/head.rs;Token::AtEndpointremoved from the two decl-leading token sets and the dispatch arm indescent/mod.rs. - Detector severity escalation:
retired/decorator-usageraises@endpoint(kind: …)findings fromSeverity::WarningtoSeverity::Errorper the CR-L6 retirement-guard parity gate (vox-stdlib-gap-audit-2026-05-23.md §Phase H step 18).
Deliberately not removed (still alive in production for the canonical bare-form decorators): EndpointDecl AST node, EndpointKind enum, parse_query / parse_mutation / parse_server_endpoint, all codegen handlers for Decl::Endpoint, and the auth_endpoint / effect_net_decl / id_at_boundary detectors.
scripts/show/— Raw Nerve content automation: Three Vox programs supporting the project’s weekly publication surface.scripts/show/script.voxreads OBS recordings, runs Whisper-local transcription, and drafts a 3-act episode outline from a per-segment template.scripts/show/topic-suggest.voxreads the past week of repo signals (commits, closed issues, merged PRs, doc changes) and proposes 3 ranked episode candidates.scripts/show/title-workshop.voxproduces 10 ranked title candidates from an outline. All three passvox checkwith 0 errors, follow canonical script idioms (// vox:caps,import X;,let mut p = ""for prompt building,process.run+ Option unwrap,env.getfor inputs), and route LLM calls throughvox mens prompt. Scripts produce DRAFTS only; never auto-publish. Seescripts/show/README.md.
Changed
Section titled “Changed”-
Website domain migration:
vox-lang.org→voxlang.org. The domain without a hyphen is the single source of truth for the project website. Touched 116 source files (schemas undercontracts/, Rust doc-comments referencing schema$idURIs,CITATION.cff,CNAMEfiles, GitHub/GitLab CI workflows, top-levelREADME.md, alldocs/src/anddocs-astro/src/files) plus 16docs-astro/public/static HTML files andpublic/CNAME. Build artifacts underdocs-astro/dist/regenerate cleanly onpnpm/npm run build. Internal project namespace identifiers (VS Code extensionname/publisher,vox-language-surface.v1.jsonfile path,vox-language-rules-*-2026.mddoc paths) intentionally left unchanged — they are not website URLs and renaming them has external consequences requiring separate decisions. -
Stale
crates/vox-py/.venv/ignore entries: Removed from.voxignore(SSOT), then propagated viavox ci sync-ignore-filesto.aiignore,.aiexclude,.cursorignore. Also removed from.gitignore(not auto-synced). Thevox-pycrate was archived 2026-04-13 (docs/src/archive/vox-py.md). -
Telemetry unification (Phases A–D):
vox-telemetryL1 facade crate withTelemetryEventenum (ResearchMetric,ModelCall,TaskRootSummary,BuildSummary,Error),TelemetryRecordertrait,record_event!macro,TRACE_CTXtask-local for distributed tracing, andTaskTelemetryAggregatorfor per-task token/cost rollup. -
VOX_TELEMETRYmaster switch:off/0/falsesilences all telemetry paths. Overrides all per-category env vars (VOX_BENCHMARK_TELEMETRY,VOX_MCP_LLM_COST_EVENTS). Seeenv-vars.md. -
vox telemetry doctor: new subcommand that prints the effectiveTelemetryConfig, recorder registration status, and spool path. Exits 1 when master switch is off. -
ModelCallEvent: per-LLM-call telemetry with split prompt-cache tokens (cache_read_input_tokens/cache_creation_input_tokens), latency, cost, and trace context. -
TaskRootSummaryEvent: emitted oncomplete_task,fail_task,doubt_taskwith real token/cost totals populated by theTaskTelemetryAggregator. -
BuildSummaryEvent: emitted aftervox ci build-timingswith wall time and compiled-crate count. -
ErrorEvent: emitted at HTTP 429 (infer.rs), non-2xx HTTP (actor-runtime chat.rs), and circuit-breaker trips. -
Trace propagation:
RemoteTaskEnvelopeextended withparent_task_id,caller_agent_id,trace_id,span_depth; MCP dispatch wraps sub-agent calls inTRACE_CTX::scope;SubAgentDispatchEventenriched withparent_task_idandspan_depth. -
Unified Task Hopper — Option A (Hp-T1..T4):
InMemoryHopperinvox-orchestratorimplements theHopperIntaketrait. Items progress throughInbox → Assigned → Done / Overriddenstates. HTTP intake endpoints surface the hopper at/api/v2/hopper/{inbox,assigned,history,submit,reprioritize,assign,complete}. -
PrioritySourcetyped partial order (Hp-T3): CanonicalPrioritySourceenum (Developer(2) > Orchestrator(1) > LearningPolicy(0)) invox-orchestrator-types; dominance encoded viaOrdso policy checks are a one-liner (source.dominates(other)).ReprioritizationActoris now a backward-compat type alias pointing atPrioritySource. -
DeveloperOverridecapability token (Hp-T4):reprioritizerequires a token minted byDeveloperOverrideMint. Each override is stamped with actor, reason, audit-id, and timestamp inoverride_history; after a developer overridepriority_sourceflips fromOrchestratortoDeveloperand subsequent automated policy must not overwrite it without a newDeveloper-level cap. -
Intra-project imports (Phase 1 — P1-T1):
import "./foo.vox"+pub fnresolution works under--mode interp. Typecheck and--mode scriptparity tracked in Phase 2. -
JSON ergonomics (Phase 1 — P1-T2): Strict-Option
JsonAPI —get/at/pointer+as_str/as_int/has; legacyget_str/get_intretired. Corpus pass rate 41/55. -
Two-daemon lock-contention guard (Phase 3 — P3-T4): Integration test
two_daemon_lock_contentionverifies that a second orchestrator daemon on the same repository correctly loses the exclusive lock and exits cleanly rather than corrupting shared state. -
Effect-row enum extensions (P1-T6):
GpuComputeandMutatevariants added to the effect-row enum; supports MENS distributed-training capability tagging (Mn-T1/Mn-T2 prerequisite). -
ACI envelope on by default — CR-L5:
OrchestratorConfig::agentos_aci_envelope_enableddefaults totruestarting in v0.6. Theattach_aci_envelope()path invox-orchestrator-mcpadds theaciJSON block to tool responses (purely additive; gracefully skips non-JSON outputs). Feature flagvox.orchestrator.agentos.aci_envelope.enabledupdated to match. -
vox audit aci-defaultgate (CR-L5):CrlGate::L5AciDefaultinvox-auditreads the workspace version; passes when v0.5.x hasfalseand v0.6+ hastrue. Prevents accidental rollback.
Changed
Section titled “Changed”- Workspace version:
0.5.0→0.6.0. All published crates inherit the bumped version via[workspace.package]. - vox-db schema:
BASELINE_VERSION = 67(all P3-T1 schema migrations applied). Dashboard route convention (/api/v2/<surface>REST +/v1/wstopic-multiplex WS) in effect per SSOT §5.6.
[0.5.0] - 2026-04-18
Section titled “[0.5.0] - 2026-04-18”- V0.5 Core SSOT: Created
docs/src/architecture/v0.5-core-ssot.mdas the authoritative architecture summary for the v0.5 release. - Golden Path Validation: Verified end-to-end build and dry-run deployment for
marquee_appvia Fly.io target.
- CI/SSOT Stability:
- Resolved 270+ documentation drift errors by archiving stale research into
docs/src/archive/research-2026-q1/. - Bulk-fixed metadata (
training_eligible,archived_date) for all archived research documents. - Cleaned up
contracts/documentation/canonical-map.v1.yamlto match the current documentation tree. - Fixed orphan surface inventory check to handle missing files gracefully.
- Resolved 270+ documentation drift errors by archiving stale research into
- CLI/Constants: Pruned stale document references from
crates/vox-cli/src/commands/ci/constants.rs.
Changed
Section titled “Changed”- vox-db / Mens training: Removed
VoxDb::connect_default_with_training_fallbackand automaticvox_training_telemetry.dbsidecar attach; training usesconnect_defaultonly. Legacy primary returnsLegacySchemaChainuntil codex export/import cutover.VOX_DB_TRAINING_TELEMETRY_SIDECARis unused (docs removed). - Operations SSOT / CI:
contracts/operations/catalog.v1.yamlis the only hand-edited source for first-party MCP +vox-cli+ capability registry rows;contracts/mcp/tool-registry.canonical.yaml,contracts/cli/command-registry.yaml(vox-cli section), andcontracts/capability/capability-registry.yamlare generated viavox ci operations-sync --target {mcp,cli,capability,all} --write.vox ci operations-verifynow enforces strict file parity,input_schemas.rscoverage per tool, andhttp-read-role-governance.yamlvs catalog; the catalog carries acapability:block (runtime builtin maps + capability exemptions). Removed transitionalcontracts/capability/curated-from-operations.generated.yaml. vox-orchestrator/ daemon parity: Populi mesh federation poll,VOX_ORCHESTRATOR_EVENT_LOG, and Codex clarification inbox drain live inmesh_federation_poll,orchestrator_event_log, andclarification_db_inbox_poll;vox-mcpdelegates to them andvox-orchestrator-druns the same background sidecars when config/DB apply. ADR 022 Phase B item 1 updated accordingly.vox-mcp/ daemon probe:ServerState::probe_external_orchestrator_daemon_if_configuredcomparesorch.pingrepository_idto the MCP embed (WARN on mismatch;VOX_MCP_ORCHESTRATOR_DAEMON_REPOSITORY_ID_STRICT→ ERROR) and recordsorch_daemon_repo_id_alignedfor optional RPC.VOX_MCP_ORCHESTRATOR_RPC_READSenables all aligned read pilots (or set per-toolTASK_STATUS/START/STATUS_TOOLflags).vox_orchestrator_startalso callsorch.agent_ids(daemon_reported_agent_ids, mismatch note inhonest_message). Sharedorch_daemon_tcp_client_when_repo_aligned.OrchDaemonClienthasorchestrator_status,task_status,spawn_agent_named,agent_idshelpers.- IPC-first write pilots:
vox_protocol::orch_daemon_methodaddsorch.submit_task,orch.complete_task,orch.fail_task,orch.cancel_task,orch.reorder_task,orch.drain_agent,orch.rebalance,orch.spawn_agent_ext,orch.retire_agent,orch.pause_agent,orch.resume_agent; daemon dispatch + client helpers implemented, MCP routes task/agent lifecycle through backend selectors withVOX_MCP_ORCHESTRATOR_RPC_WRITES(and per-slice overrides). Added contract schemacontracts/orchestration/orch-daemon-rpc-methods.schema.jsonand protocol catalog entryorchestrator-json-line-rpc. - Workspace:
vox-deiis a normal workspace member (minimallib.rs);vox-pyremains the only rootexclude. Docs andvox-clicomments updated;vox ci no-vox-dei-importunchanged. ServerState::new_test: usesOrchestratorConfig::for_testing()(toestub_gate: false, tight limits) so MCP tests do not inherit production post-task behavior that can run nestedcargo check --workspacefor Rust manifests. Theconflict_diff_success_payload_has_expected_keyscontract test no longer callscomplete_task; it builds an in-memory snapshot +record_conflictonly (avoids multi-minute / LNK1104-prone paths). ProductionServerState::newis unchanged.- Eval benchmark matrix:
contracts/eval/benchmark-matrix.schema.jsonnow uses a fixedenumfor eachbenchmark_classesentry (no arbitrary strings).vox-clieval_matrixcentralizes crate / feature / test-filter literals, runsci command-compliancechecks in-process (command_compliance::run) soeval-matrix rundoes not spawncargo run(avoids Windowsvox.exereplacement locks), and has drift tests (matrix JSON ∪ milestones ↔ Rust SSOT ↔ schema enum). GitLabvox-ci-guardsrunsci line-endingsandci command-complianceto match the GitHub guard slice. vox fmt: wired tovox_compiler::fmt::try_format(parse → print → re-parse; atomic in-place write;--check). Packaging Phase B:vox installremoved from the CLI (usevox add/vox lock/vox sync/vox pm);command-registry.yamlrow dropped;vox ci command-complianceaddscheck_project_pm_commands_no_toolchain_lane(WP5) andcheck_operator_docs_no_legacy_vox_install_pm_nudge(WP4).cargo check -p vox-cli --all-features: stubserve/inference(Burn loader retired),workflowusesvox_db::LogExecutionParams,deiundo/redouseOrchestrator::init_db+sync_lock::rw_read(&orch.oplog).- Examples:
examples/actor.voxandexamples/mcp_tool.voxmoved toexamples/archive/legacy_syntax/(non-parseable on current grammar); addedexamples/STYLE.md,FEATURE_INDEX.md,PARSE_STATUS.md, archive READMEs. vox-compilergolden_examples_strict_parse: optionalVOX_EXAMPLES_STRICT_PARSE=1requires everyexamples/golden/*.voxto parse (default CI remains golden-only).vox-cli: default features aremens-baseonly (nogpu). Native Mens train / probe / merge / eval-local requirecargo build -p vox-cli --features gpu.vox-mensbinary (prependsmenssubcommand).vox-codexremoved as avox-clidependency (codex/stub-checkusevox-db); OS keyring helpers live invox_db::secrets(vox-codexstill re-exports for other crates).vox-corpusandvox-runtimeare always linked so grammar / training JSONL paths work even with--no-default-features(mens-baseremains the command-surface gate).vox-ludus: depends onvox-dbinstead ofvox-codex.- Clippy (
-D warnings):cargo clippy --workspace --all-targetsis clean — auto-fixedcollapsible_*,manual_clamp,iter_cloned_collect,lines_filter_map_ok,double_must_use,ptr_arg,manual_find,field_reassign_with_default,match_like_matches_macro,unnecessary_to_owned; targetedallowfor intentional async tests (await_holding_lock),Qwen35AttentionBlockenum size,maybe_refresh_openrouter_modelsundercfg(test), and serializedunsafeenv updates invox-integration-tests. CI: GitHubci.ymland GitLabclippyjob use--all-targetsso integration / bench targets match local gates (workflow-enumeration.mdupdated).
- Codex / data-plane CI:
vox ci query-all-guardandvox ci turso-import-guard(diff-scoped;--allfor full tree), both run fromvox ci ssot-drift; allowlists underdocs/agents/query-all-allowlist.txtanddocs/agents/turso-import-allowlist.txt. Ludus periodic reward SQL moved tovox-dbgamify_periodic_conditionssovox-ludusno longer callsquery_all. - Clavis cloudless vault env:
VOX_CLAVIS_VAULT_PATH,VOX_CLAVIS_VAULT_URL,VOX_CLAVIS_VAULT_TOKEN(precedence over deprecatedVOX_TURSO_*/TURSO_*when compat aliases allowed);vox clavis doctorprintscloudless_vault_storediagnostics. - Telemetry (optional remote upload):
vox telemetry status|export|enqueue|uploadwith local JSON spool (crates/vox-cli/src/telemetry_spool.rs), ClavisVoxTelemetryUploadUrl/VoxTelemetryUploadToken, ADRdocs/src/adr/023-optional-telemetry-remote-upload.md, wire spec indocs/src/archive/research-2026-q1/(archived; do not ingest). Regenerate CLI/capability rows fromcontracts/operations/catalog.v1.yamlviavox ci operations-sync --target cli --write(and capability/MCP targets if you changed catalog tool rows). Release discipline: any change to telemetry contracts, upload behavior, or related env/Clavis IDs gets a bullet under Telemetry in this file’s[Unreleased]section. - Telemetry (Agent Budgeting): Added
agent_exec_history(S1) collection with 3-pillar tracking (time, compute tokens, vendor USD logic). Validated byvox ci data-ssot-guardswith native 90-day retention aging. - Docs (research): Terminal execution policy research (archived in
docs/src/archive/research-2026-q1/; do not ingest) — PowerShell-first agent shells, Cursor/Gemini/Codex policy evidence, allowlist bypass lessons, alignment with operations SSOT. - Telemetry trust SSOT (docs): architecture pages for trust boundaries, taxonomy (roadmap), retention/sensitivity (roadmap), client disclosure, implementation blueprint, and executable backlog;
VOX_BENCHMARK_TELEMETRY/VOX_SYNTAX_K_TELEMETRYdocumented indocs/src/reference/env-vars.md. Entry points:docs/src/architecture/telemetry-trust-ssot.md,AGENTS.md, contributor hub. - LLM premature-completion SSOT:
contracts/operations/completion-policy.v1.yaml+ telemetry JSON Schemas;vox ci completion-audit(writescontracts/reports/completion-audit.v1.json),completion-gates(Tier A + Tier B baselinecontracts/reports/completion-baseline.v1.json),completion-ingest→ VoxDBci_completion_*; wired intocommand-compliance,ssot-drift, and GitHubci.yml. Architecture:docs/src/archive/research-2026-q1/completion-policy-ssot.md. Mens scorecardsummary.jsonadds optionalcompletion_policycrosswalk.--features completion-toestub: merges TOESTUBvictory-claiminto audit (Tier C per policy); CI uses it forcompletion-audit.completion-ingestfills snapshotnew_count/resolved_countvs prior run fingerprints.contracts/reports/completion-task-ledger.v1.json: 768 explicitT-WS###-NNIDs. MCP chat system prompt adds anti-skeleton rider pointing at the policy.vox ci completion-audit --scan-extra <dir>(repeatable): audit generated trees under the repo (canonical paths must stay inside root). vox-orchestrator-d— TCP or stdio newlineDispatchRequest(orch.ping,orch.status,orch.task_status,orch.spawn_agent,orch.agent_ids); sharedVOX_MCP_AGENT_FLEETAgentFleetspawn with MCP; MCPprobe_external_orchestrator_daemon_if_configuredskips stdio peer.- Docs / scripts:
docs/src/how-to/examples-corpus.md,docs/src/how-to/first-full-stack-app.md; - Tests:
budgets_json_loads_and_defines_all_timing_lanes,tool_registry_slice_tolerates_bracket_in_description(LLM-audit hardening). vox ci build-timings— wall-clockcargo checkfor defaultvox-cli, GPU+stub lane, optional CUDA lane (--jsonsupported).--cratesaddsvox-cli --no-default-features,vox-db,vox-oratio,vox-mens --features train, andvox-cli --features oratiolanes. Optional soft budgets:docs/ci/build-timings/budgets.jsonwithVOX_BUILD_TIMINGS_BUDGET_WARN=1/VOX_BUILD_TIMINGS_BUDGET_FAIL=1. GitHub CI runsbuild-timings --cratesin place of the standalone GPU/stub check step.oratiofeature — Oratio /vox-oratiois no longer pulled by defaultmens-base; enable--features oratioforvox oratio(canonical speech CLI; aliasvox speech). CI feature matrix includes anoratiocompile lane.- Docs:
docs/src/architecture/vox-cli-build-feature-inventory.md(feature / compile-impact map);docs/src/architecture/crate-topology-buckets.md(workspace crate buckets);docs/ci/build-timings/(budgets.json,snapshot-metadata.json, optionallatest.jsonl); migration matrix + deviation notes incrate-build-lanes-migration.md. - CLI / Mens:
vox mens pipeline— dogfood corpus → eval → optional native train (replaces PS1 orchestration);scripts/run_mens_pipeline.ps1is a thin delegate. - Scripts / builtins:
std.process.run_capture(stdout/stderr/exit record; non-zero exit stillOk);std.fs.glob(sorted paths);vox-runtimehelpersvox_process_run_capture,vox_fs_glob. - Compilerd: JSON
runparams accept optionalmode(auto|app|script) aligned withvox run --mode. - CI:
vox ci check-docs-ssotscansdocs/srcand.github/workflowsfor retired Python inventory /populi_release_gate.shreferences;FEATURE_SETSincludesscript-executionmatrix rows; docs command surface duals. - GitLab:
vox-ci-guardsaligned with GitHub (toestub-scoped,cuda-features,mens-gate --profile ci_full);NATIVE_TRAIN=falserejected onml-train. - CLI / CI:
vox ciguard commands (manifest, SSOT checks, doc-inventory, workflow allowlist, Mensgates.yamlrunner, TOESTUB scoped, CUDA probes); cratevox-doc-inventory. - Scripts:
ci_fullMens profile; GitHubci.ymlcut over tocargo run -p vox-cli -- ci …; thin shell/ps1 delegates;docs/agents/script-registry.json+ baseline metrics. - Run:
vox run --mode {auto,app,script};vox script(featurescript-execution); frontend bundle path uses pnpm; script builtins:print,std.env.get,std.process.run/exit,std.fs.list_dir,std.args. - Parser: Trailing comma support in function parameter lists (A-072/A-100)
- Parser: Duplicate parameter name detection with clear error message (A-074/A-101)
- Parser: Error recovery test coverage (A-099)
- Parser:
filter_fieldssupport inVectorIndexDeclparsing - Typeck: Lambda parameter type checking test (A-092)
- Typeck: Lambda outer scope capture test (A-093)
- Typeck: Match arm variable binding test (A-094)
- Typeck: Match exhaustiveness error test (A-095)
- Store:
CodeStore::dry_run_migration()— report pending migrations without applying (B-059) - Store:
CodeStore::health_check()—PRAGMA integrity_checkwrapper (B-060) - Store:
CodeStore::batch_insert()for bulk artifact insertion (B-062) - Store: Pagination support (
LIMIT/OFFSET) inlist_components(B-063) - Store: Relevance threshold filtering in
recall_memory(B-064) - VoxDb:
DbConfig::from_env()for environment-based configuration (B-065) - VoxDb: Retry logic (3× with backoff) in
VoxDb::connect(B-066) - VoxDb:
VoxDb::transaction()wrapper for atomic operations (B-067) - VoxDb: Integration test for in-memory connection (B-068)
- AGENTS.md: Phase 5 VoxPM roadmap merged from
PLAN.md(B-076) - Docs:
vox-runtime/README.md— actor model architecture (B-112) - Docs:
vox-pm/README.md— CAS store architecture (B-113) - Docs: mdBook search enabled with full-text indexing (A-136)
- Docs: Automated API reference pipeline
vox doc(A-142) - Docs: Decorator and Keyword manifests in JSON format (B-121/B-122)
- Docs: OpenGraph/SEO metadata and social sharing support (B-125)
- Docs: RSS/Atom feed generation for release notes (B-124)
- CI: Documentation build check and Rustdoc integration (B-117/B-118)
- CI: Dashboard API
dead_codewarnings suppressed (future integration) - OpenCode CLI:
vox opencodesubcommand tree (install, setup, doctor, status, dashboard, spawn, review, config, sync, logs, share) - OpenCode CLI:
vox opencode install— downloads OpenCode AI and scaffolds config - OpenCode CLI:
vox opencode doctor— preflight check (binary, MCP, LSP, config, version) - OpenCode CLI:
vox opencode dashboard— launches embedded real-time agent dashboard - OpenCode CLI:
vox completions <shell>— generate shell completion scripts - OpenCode CLI:
vox mcp-docs— auto-generate MCP tool reference markdown table - OpenCode Integration:
opencode.jsonwith version pinning (opencode_version: >=0.2.0) - OpenCode Integration: Plugin API compatibility shim for OpenCode < 0.2.0
- OpenCode Integration: GitHub Actions workflow for
vox opencode doctorin CI - MCP Server: Protocol version negotiation (server echoes client’s
protocolVersion) - MCP Server: 34 new tools (102 total): A2A messaging, VCS snapshots, JJ-inspired oplog/conflicts/workspaces, OpenCode bridge tools
- MCP Tools:
vox_map_agent_session,vox_record_cost,vox_heartbeat,vox_cost_history(older docs/plugins may referencevox_map_opencode_session— use the canonical name) - MCP Tools:
vox_a2a_send,vox_a2a_inbox,vox_a2a_ack,vox_a2a_broadcast,vox_a2a_history - MCP Tools:
vox_snapshot_*,vox_oplog,vox_undo,vox_redo - MCP Tools:
vox_workspace_*,vox_conflict_*,vox_change_*,vox_vcs_status - Dashboard: Redesigned with dark theme, glassmorphism, D3.js topology, SSE event log
- Dashboard: VCS panel, gamification panel, cost charts
- Docs:
docs/opencode-integration.md— user-facing setup guide - Docs:
docs/architecture/opencode-bridge.md— technical deep-dive - Docs:
docs/mcp-tool-reference.md— auto-generated from 102 MCP tool schemas - Docs:
docs/troubleshooting-faq.md— common issues: port conflicts, MCP timeouts, LSP crashes - AGENTS.md: Updated with 102 MCP tool list, OpenCode bridge section, new documentation links
- CLI UX: Colored output with actionable error suggestions in
vox opencodecommands
- Codex / CI SSOT: Restore
scripts/check_codex_ssot.sh(bash delegate tovox ci check-codex-ssot); aligncontracts/db/baseline-version-policy.yamlwithBASELINE_VERSION45 and the current baseline SQL Keccak digest; refreshcontracts/capability/model-manifest.generated.jsonsovox ci ssot-driftstays green. - Telemetry trust SSOT:
docs/src/architecture/telemetry-trust-ssot.mdmaps build timing /build_*observability,VOX_BENCHMARK_TELEMETRY, and MCPvox_benchmark_listsourceselectors. - Tests:
vox-test-harnesshir_fninitializer matchesHirFn::is_mobile_native;vox-dblocal_testsfixesVOX_DATA_DIRset_vardelimiter typo. - Docs SSOT:
orphan-surface-inventory.mdworkspace crate list includesvox-deisovox ci check-docs-ssotmatches filesystem inventory. vox ci build-timings: Soft budgets load only fromdocs/ci/build-timings/budgets.json(no duplicate Rust const);VOX_BUILD_TIMINGS_BUDGET_FAIL=1works withoutBUDGET_WARN;--jsonserialization errors surface with context;nvccprobe usesCUDA_PATH/CUDA_HOMEwhenPATHis stripped.vox ci command-compliance:TOOL_REGISTRYslice uses stable anchor beforepub fn tool_registryso]inside description strings cannot break parsing.vox ci command-compliance: MCP wiring validatesTOOL_REGISTRYvs canonical-onlyhandle_tool_callarms and checkscrates/vox-mcp/src/tools/tool_aliases.rs(TOOL_WIRE_ALIASES→ canonical names).vox-cli:benchmark_telemetry::record_opt_blockingno longer mixesstd::io::Errorwith CodexStoreErrorin a singleResultchain.- Store: Replaced
.unwrap()on embeddingtry_into()with proper error handling (B-056) - Normalize: All
AstNodevariants now have explicit cases (no wildcard fallthrough) (B-058) - LSP: Removed unused imports in
main.rs
Removed
Section titled “Removed”PLAN.md— content merged intoAGENTS.md§3 (B-076)