Conversation
- docs: add macOS quick-start, drop Linux-only paths, drop the fake non-serde test tier, stop pointing the dev UI at void-box cross-origin. - AGENTS.md: consolidate environment variables (adds VOID_CONTROL_LLM_PROVIDER and the VITE_* / VOID_BOX_BASE_URL docs); CLAUDE.md slimmed to a routing file matching void-box's pattern. - bridge.rs: create_dir_all spec_dir + execution_dir at startup. - runtime/mod.rs: VOID_CONTROL_LLM_PROVIDER env patches llm.provider on every candidate at launch; per-candidate overrides still win. - contract tests: rename step `produce` -> `main` in the StructuredOutput* fixtures to fix stage-name drift. - RunsList.tsx: dedup items by kind:id to stop duplicate React keys. - .gitignore: ignore *.local.md, examples/**/*.local.yaml, and **/*.tsbuildinfo; untrack the stray tsbuildinfo copy. - .github: add PR template (repo had none).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Set of small dev-UX and correctness fixes discovered while walking through the void-control quick-start end-to-end on macOS (Apple Silicon, VZ backend,
claude-personal). No behavior change to the control-plane contract; additions are opt-in or fix existing drift.Type of Change
Related Issues
Fixes #
Related to #
Changes
<workspace>sibling-layout prerequisite; add a macOS section coveringVOID_BOX_KERNEL/VOID_BOX_INITRAMFSand the macOS-specificvoid-box-claude.cpio.gzinitramfs filename.VITE_VOID_BOX_BASE_URLfor local dev so the existing Vite/apiproxy is used. void-box serves no CORS headers; setting the env var puts the browser in the CORS pit. Bridge (VITE_VOID_CONTROL_BASE_URL) still works direct since it sets CORS.cargo teststory. Every test target is#[cfg(feature = "serde")]-gated today, so barecargo testruns zero tests. Documentcargo test --features serdeas the single validation path.create_dir_allspec_dirandexecution_dirat bridge startup. Prevents the worker from logging "bridge worker tick failed: No such file or directory" twice a second on a fresh machine where/tmp/void-control/{specs,executions}does not yet exist.VOID_CONTROL_LLM_PROVIDERenv var. When set, patchesllm.provideron every candidate's runtime template at launch. Lets local developers opt intoclaude-personalwithout editing tracked templates. Per-candidatevariation.explicit[].overridesstill take precedence over this default.producetomainin the fourStructuredOutput*fallback fixtures. void-box fills in an artifact'sstagefrom the emitting step, so assertingstage == "main"against a step namedproducewas drift. Renaming keeps the fixture consistent with the/stages/main/output-fileretrieval path.kind:idbefore rendering. A run can briefly appear in both the active and terminal slices during a state transition, which produced duplicate React keys.VOID_BOX_BASE_URL,VOID_CONTROL_LLM_PROVIDER, theVITE_*URLs (with the CORS caveat), and the existing contract-test fixture overrides..claude/rules so contributors can freely add files under.claude/; the only exclusion is.claude/scheduled_tasks.lock(Claude Code's per-machine local scheduler state). Broaden local-only scratch to*.local.*(covers*.local.md,*.local.yaml, etc. anywhere in the tree), replacing the narrowerCLAUDE.local.md/examples/**/*.local.yamlpair. Add**/*.tsbuildinfoand stop trackingweb/void-control-ux/tsconfig.app.tsbuildinfoviagit rm --cached— TypeScript's per-machinetsc -bincremental build cache was tracked by accident and produced a noisy diff on every local build.Test Plan
cargo test --features serde— 52 passedcargo clippy --features serde --all-targets -- -D warnings— cleancargo fmt --all -- --check— cleancd web/void-control-ux && npx tsc -b --noEmit) — cleanexamples/swarm-transform-optimization-3way.yamlend-to-end on macOS withclaude-personalafter all fixes + the paired void-box OCI fix; swarm completed and metrics were collected from measured benchmark output.Commands run
```bash
cargo fmt --all -- --check
cargo clippy --features serde --all-targets -- -D warnings
cargo test --features serde
cd web/void-control-ux && npx tsc -b --noEmit
```
Documentation
Compatibility
No contract change.
VOID_CONTROL_LLM_PROVIDERis opt-in; unset behavior is unchanged from today. Depends on the paired void-box PR (fix: mount OCI rootfs on macOS/VZ + reconcile orphan runs) for end-to-end validation ofsandbox.image-based specs on macOS; for Linux-only validation the two PRs are independent.Notes for Reviewers
<workspace>in the rewritten examples/README.md prereqs with whatever placeholder convention you prefer if this form is unconventional for the project.manifest_lists_named_artifactslive gate that was drifting. Themalformed_result_json_is_typed_failurecase still depends on void-box returning a typed error body for malformedresult.json; that is a separate void-box behavior to verify after rebuilding the initramfs with the paired PR.