- prune stale generated Gemini preview clusters during config regeneration
- preserve manual preview overrides on built-in Gemini alias names
- add regression coverage for stale cluster cleanup and manual pins
- add guided editors for top-level settings, trust, profiles, providers, MCP, and features
- refresh raw snapshots after patch saves to avoid stale mtime conflicts
- block structured saves while raw TOML is dirty and add route plus hook coverage
- update CLI, API, route, and dashboard surfaces to recognize the Codex runtime target
- normalize persisted codex targets back to claude so runtime-only behavior stays truthful
- add regression coverage for help text, route parsing, and profile storage normalization
Refs #773
Cover all 4 combinations: localhost+disabled, remote+disabled,
remote+enabled, localhost+enabled. Also tests isLoopbackRemoteAddress
helper for IPv4, IPv6, mapped addresses, LAN, and undefined.
- Add test assertion for --host auth reminder message
- Use Node module resolution for bcrypt in README (not hardcoded path)
- Replace cat|grep with direct grep in verification commands
- fail enabled settings-profile create and launch flows when hook preparation is still unusable
- refresh stale shared hook binaries without rewriting unchanged installs or failing benign races
- add rollback and regression coverage for disabled, stale, invalid, copy, import, and launch paths
Verify all four integrated Docker assets (compose file, Dockerfile,
supervisord config, entrypoint script) resolve and exist on disk.
Prevents silent exclusion from future packaging changes.
- verify the hook binary before migrating global WebSearch hook state
- centralize migration-marker helpers in hook-installer exports
- expand regression coverage for existing-hook, disabled, invalid-name, and failed-install paths
- ensure profile hook injection installs the transformer binary before writing the command
- keep migration marker cleanup in the installer to avoid a circular import
- add a regression test for isolated CCS_HOME settings profiles
- add default local and remote sync-command timeouts with clearer timeout diagnostics
- remove extra synchronous fs and process.exit patterns from docker assets/bootstrap helpers
- register the docker help handler in CLAUDE.md for the repo help-location reference
- add masked dashboard-managed API key state for Exa, Tavily, and Brave
- persist WebSearch keys through global_env while keeping WebSearch as the UX surface
- treat dashboard-managed keys as ready in status checks and cover the flow with route/UI tests
Root cause: Bun's test runner fails to resolve exports from directory
index.ts files during parallel test execution. The api-command/index.ts
imports 8 subcommand modules — if any fail to load during concurrent
test runs, the entire module fails with "Export not found."
Fix: extract createApiCommandHandler into handler.ts (lightweight, only
imports named-command-router). Test imports from handler.ts directly,
bypassing the heavy index.ts that loads all subcommand modules.
Also:
- Remove stale api-command.ts barrel file
- Use explicit /index import paths in source
- Migrate CI validate to self-hosted runner with clean artifact step
- Disable Bun cache (no-cache: true) on self-hosted runner