All notable changes to CAS are documented in this file.
The format is based on Keep a Changelog, and this project follows Semantic Versioning.
Closes the silent data-loss vector where task action=close bypass_code_review=true could mark tasks Closed without verifying the worker's factory/<assignee> branch was merged into the parent epic. Field evidence from gabber-studio cas-6e07 (2026-05-01): 7 stranded tasks, ~21 commits, ~3000 LOC nearly disappeared. Second occurrence in 48h.
- Per-task close-merge gate (cas-95ce):
mcp__cas__task action=closeon a non-epic task now rejects whenfactory/<assignee>has commits not on the parent epic. Bypass-immune at the type level (the helper signature does not consume a bypass flag) and at the physical level (gate runs structurally upstream ofbypass_code_reviewevaluation). Error names the stranded commit count, factory branch, parent epic branch, and remediation. - Epic-close gate (cas-8f8f):
mcp__cas__task action=closeon an Epic-type task walks every child's factory branch and rejects when any child is stranded. Same bypass-immunity. Caught a P1 critical in autofix: the originalunwrap_or_default()on a SQLite-backed lookup would have failed open and defeated the entire enforcement. Now propagates asINTERNAL_ERROR. mcp__cas__coordination action=epic_status id=<epic-id>diagnostic (cas-8f8f): new callable surface returning a markdown table per child task (assignee | factory branch | unmerged count | last commit | task ID + status). Useful for in-flight audits before attempting epic close.cas-supervisor-checklistskill update (cas-8f8f): "Before Closing an EPIC" section now referencesepic_statusas the canonical check and notes that the gate is automatic (defense-in-depth, no longer manual-only).
mcp__cas__verification action=addauthz error (cas-a90f3): the misleading "Supervisors can only verify epics, not individual tasks" rejection has been replaced with a message that names the actual rule (active-assignee-based) and lists the three exemptions (orphaned / inactive assignee / supervisor IS the assignee). Error embeds the offending assignee ID, gives concrete remediation (mcp__cas__task action=release), and clarifies that epics remain always supervisor-verifiable. Predicate renamedassignee_inactive→assignee_inactive_or_absentto makeunwrap_or(true)semantics self-documenting (logic unchanged).
After upgrading, the new gates fire on task.close calls. If a worker hits the gate during close, the supervisor must merge factory/<assignee> into the parent epic before the close will succeed (this is the desired ordering and matches how the other workflow guidance now reads). For pre-existing stranded factory branches (e.g. gabber-studio cas-6e07), salvage with: git checkout <epic-branch> && git merge --no-ff factory/<worker>.
- Shared proxy transport (cas-36fd0): new
cli/integrate/proxy.rsmodule exposesProxyClientwith the proxy lifecycle (proxy_config_path,call,block_on,unwrap_envelope). BothProxyVercelClientandLiveNeonClientare now thin wrappers — ~165 LOC of duplicated boilerplate retired. FutureLive<X>Clientimplementations inherit the wiring. - Speculative neon parser tolerance shapes (
orgs/dataalias, flatdescribe_project) removed until proven against real envelopes; bail messages cite cas-36fd0 and request bug filing on real upstream drift. default_database"neondb" silent fallback → explicit bail with provisioning recovery hint.
cas integrate <vercel|neon|github> [init|refresh|verify]standalone subcommands.- Vercel: detects
vercel.json/@vercel/*deps, fuzzy-matches viamcp__vercel__list_projects, captures team + project + env→branch mapping. - Neon: detects Prisma +
@neondatabase/*/@prisma/adapter-neon, prompts for org when multiple exist, capturesorg_id+projectId+databaseName+ branches viamcp__neon__{list_organizations,list_projects,describe_project,describe_branch}. - GitHub: parses
git remote -v(https + ssh forms), recordsowner/repo.
- Vercel: detects
cas initruns platform detection and prompts Y/N per detected platform, delegating to the correspondingcas integrate <platform> initin-process. Idempotent on re-run: existing populated SKILL.md flips the prompt to "Refresh? [y/N]" with default N.--no-integrations,--vercel <id>,--neon <id>,--github <repo>flags for non-interactivecas inituse.- Generated SKILL files land in both
.claude/skills/<name>/and.cursor/skills/<name>/so both harnesses pick them up. <!-- keep <name> -->…<!-- /keep <name> -->named keep blocks preserve user-owned IDs acrossrefreshregenerations.--update-idsopts into re-fetching IDs from the platform MCP.<!-- cas:full_name=... -->identity tag convention for canonical project identity inside keep blocks; sanitized to neutralize markdown injection.cas doctoraudits integration freshness via per-platformverify_reportand surfaces stale IDs as warnings (not errors); MCP-down reports asskipped — MCP not configuredrather than failing the doctor run.- Optional opt-in
[integrations] session_start_warn = truein.cas/config.tomlemits a low-severity SessionStart banner when integrations go stale. Default off — preserves the codemap banner's signal.
/codemapskill ships in.claude/skills/codemap/, builtins, and codex variant. Generates.claude/CODEMAP.mdand resets the freshness counter viacas codemap clearafter writing. Closes the long-standing gap where hooks referenced a/codemapslash command that did not exist.
cas-supervisor.mdsplit from 44 KB into a 6.8 KB SKILL.md + six references (preflight,intake,planning,workflow,worker-recovery,reference).cas-worker.mdsplit from 22 KB into a 5.7 KB SKILL.md + three references (close-gate,recovery,details).supervisor_guidance()andworker_guidance()no longer bundlecas-task-tracking,cas-memory-management, orcas-search— those are autonomous skills the agent invokes via the Skill tool. Bundled payload dropped from ~61 KB / ~35 KB to ~10 KB / ~5.5 KB respectively.- Test ceiling at 12 KB enforces the bundle stays small enough that the Claude Code harness does not truncate the SessionStart additionalContext to a 2 KB preview.
- New
cli/integrate/fs.rsshared module:atomic_write,atomic_write_create_dirs,read_capped(4 MiB cap with symlink rejection),is_regular_file,locate_repo_root[_from](withgit -Cdiscipline that resolves the inner repo on submodule / nested-worktree invocations). - New
cli/integrate/md.rsshared module:escape_md_cell,escape_md_cell_code,emit_cas_full_name_tag,parse_cas_full_name_tag. IntegrationStatussplit:TransportErrordistinct fromStaleso a failed MCP call is no longer misreported as a stale ID.- All three platform handlers consume the shared helpers — atomic-write semantics, symlink defense, file-size cap, markdown escaping, and identity tag behave uniformly.
cas cloud team set|show|clearsubcommands to configure the active team (UUID input; slug resolution deferred pending cloud-side endpoint).cas memory share <id>|--since <duration>|--all [--dry-run]for retroactive backfill of pre-existing personal memories to the team push queue.cas memory unshare <id>to mark a memoryshare=Private(blocks future team dual-enqueue; does not retract cloud-side copies).share: Option<ShareScope>(Private/Team) persisted on Entry, Rule, Skill, and Task via SQLite migrationsm037/m060/m082/m121.- Automatic dual-enqueue: when a team is configured via
cas cloud team set,cas memory rememberin any Project-scoped non-Preference context queues the entry to both personal and team push queues.cas cloud syncdrains both. - Coarse kill-switch:
cloud.json.team_auto_promote: falsedisables the automatic promotion without requiring the team to be cleared. - Integration test suite:
team_sync_test.rs,memory_share_test.rs,team_memories_e2e_test.rscover the full push → pull pipeline.
mcp-proxyis now a default Cargo feature socas integrate vercel|neonships out of the box — the wiredProxyVercelClient/LiveNeonClientrequire it.cas cloud team-memories's "no team configured" error now correctly directs users tocas cloud team set <uuid>(previously referenced a non-existent subcommand with<slug>argument).cas cloud team set|show|clearsubcommands to configure the active team (UUID input; slug resolution deferred pending cloud-side endpoint).cas memory share <id>|--since <duration>|--all [--dry-run]for retroactive backfill of pre-existing personal memories to the team push queue.cas memory unshare <id>to mark a memoryshare=Private(blocks future team dual-enqueue; does not retract cloud-side copies).share: Option<ShareScope>(Private/Team) persisted on Entry, Rule, Skill, and Task via SQLite migrationsm037/m060/m082/m121.- Automatic dual-enqueue: when a team is configured via
cas cloud team set,cas memory rememberin any Project-scoped non-Preference context queues the entry to both personal and team push queues.cas cloud syncdrains both. - Coarse kill-switch:
cloud.json.team_auto_promote: falsedisables the automatic promotion without requiring the team to be cleared. - Integration test suite:
team_sync_test.rs,memory_share_test.rs,team_memories_e2e_test.rscover the full push → pull pipeline.
cas cloud team-memories's "no team configured" error now correctly directs users tocas cloud team set <uuid>(previously referenced a non-existent subcommand with<slug>argument).
2.0.0 - 2026-04-12
- Multi-agent factory with supervisor/worker architecture and isolated git worktrees.
- Director event system for task dispatch, worker lifecycle, and epic completion notifications.
- Worker startup confirmation flag to detect crash-on-startup failures.
- Orphaned task reclamation — supervisor can claim tasks from dead workers.
- Coordinator messaging system with priority levels, delivery confirmation, and outbox replay.
- Verification jail exemption for factory workers to prevent universal tool blocking.
- Worker idle/stale notification dedup and suppression.
- Minions theme with ASCII art and themed boot screen for factory workers.
- Bidirectional cloud sync with Petra Stella Cloud — push/pull tasks, memories, rules.
- Cloud sync queue with shutdown drain, startup push, 10s idle gate, 60s interval.
- Circuit breaker for TLS retry spam with capped event buffer.
cas cloud projectsandcas cloud team-memoriescommands.cas cloud purge-foreignfor orphaned dependency cleanup.- Project-scoped pull requests to prevent cross-project data leaks.
cas-mcp-proxycrate — proxies upstream MCP servers (Playwright, Neon, GitHub, Vercel, Context7) through CAS. Workers get 2 tools instead of 50+.- Config-aware hot-reload for proxy server connections.
- Search with keyword matching and server filtering.
- Integration tests, catalog caching, and README.
- Tokyo Night theme variant.
- OSC 52 clipboard copy and auto-inject on image paste.
cas openinteractive TUI project picker.- Tab forwarding to PTY for autocomplete (Ctrl+P for sidecar).
- Clipboard fallback via client-side write with visual feedback.
- Mouse click to focus panes, Ctrl+Arrow pane cycling, Shift+drag text selection.
- Native terminal selection (replaces custom selection implementation).
cas-code-reviewskill — multi-persona code review with 7 reviewer personas (correctness, testing, maintainability, project-standards + conditional security, performance, adversarial). Includes bounded autofix loop, confidence gates, fingerprint dedup, and review-to-task routing.cas-brainstormandcas-ideateskills for structured ideation.git-history-analyzerandissue-intelligence-analystagent types.- Multi-persona review merge pipeline with cross-reviewer agreement boost.
- Pre-insert memory overlap detection with configurable threshold actions.
- Implementation Unit Template for EPIC subtask specifications.
execution_notefield on tasks:test-first,characterization-first,additive-onlypostures with enforcement at close.
- Comprehensive
cas-workerskill with build failure triage, MCP connectivity guidance, tool selection guide, context exhaustion detection, task reassignment protocol, and section reorder for critical-path-first flow. - Adversarial supervisor posture with intake gate, scope lock, and rejection authority.
- Partnership posture for supervisor — counter-propose, trajectory gate, situational awareness.
cas-supervisorskill with EPIC sizing heuristics, worker failure recovery, and merge conflict guidance.cas-memory-managementskill with multi-file schema and overlap workflow.cas-searchskill with filter grammar, code symbol search, and module-scoped candidate API.- CODEMAP system — auto-maintained breadcrumb navigation map with structural change detection hooks.
- Hetzner CCX23 provisioning script for remote CAS server (Ashburn VA).
- Slack bridge: Bolt app scaffolding with per-user daemon architecture, SSE adapter, message formatter, file upload passthrough with security sanitization.
cas-install.sh— portable curl one-liner installer.- WebSocket endpoint for factory daemon.
- SSE plain-text pane output and tail endpoint.
- Auto-attach prompt with
--attach/--newflags for existing sessions. cas serveHTTP bridge for Slack integration.
- Sequence table for ID generation (replaces per-insert MAX+LIKE scan).
- SQLite
prepare_cached()for all statement caching. - Jitter on SQLite write-retry backoff to break convoy pattern.
- Recursive CTE for dependency cycle-check (replaces iterative BFS).
- Tantivy IndexWriter caching (saves 50MB per write allocation).
- BM25 search index caching and QueryParser reuse.
- Batch code symbol DB inserts in indexing daemon.
ImmediateTxwrapper for atomic store operations.
- Bumped version to 2.0.0 with simplified release workflow targeting
pippenz/cas. - Config format migrated from YAML to TOML (automatic merge of stale settings).
project_canonical_idderived from folder name instead of git remote URL (required on all cloud pushes).- Default cloud sync interval reduced from 300s to 60s.
- MCP tool prefix standardized to
mcp__cas__. - Worker skill reordered for critical-path-first flow: Task Types and Execution Posture before close procedures.
- Code review section compressed from 65 to 30 lines — pipeline internals moved to
cas-code-reviewskill. - Rules section merged into Rules of Engagement; Valid Actions merged into Schema Cheat Sheet.
- Legacy
code-revieweragent deprecated in favor ofcas-code-reviewskill.
- TUI: Off-by-one in Ghostty VT style run column indices clipping left edge of pane content. Tab click detection using variable-width positions instead of equal-width assumption. Scroll viewport double-compensation when Ghostty preserves viewport position. Task panel flashing empty due to read race between task list and dependency queries. Dark theme contrast —
border_default,border_muted,hint_descriptionbumped for readability. Epic state updated before filter inrefresh_data(). - Factory: Verification jail cascade where one task's pending verification blocked all tools.
CAS_FACTORY_MODEphantom env var —pre_tool.rsrequired it alongsideCAS_AGENT_ROLEbut no code ever set it. Director dispatching blocked/closed tasks (terminal-status guard added). Supervisor self-verification deadlock. Worktree workers missing MCP access due to gitignored.mcp.json/.claude/(fixed with symlinks). Duplicate hooks causing PreToolUse errors (cas hook cleanupadded). - Cloud: WebSocket TLS for
tokio-tungstenite. HTTP TLS forureqclient. Fallbackproject_idfor filesystem-root CAS projects. 403/404 error handling with pluralized labels. - Store: N+1 queries in
task_store.rs. UnboundedINclauses andLIKEscans. 8 excessive indexes dropped to reduce write amplification. Lease races and cleanup/prune methods with transaction safety. - Close: Additive-only gate now diffs worker branch commits (not main). Skip close-gate checks for non-isolated tasks. Reject close when worker tree has uncommitted work. Status-update race condition where
status=blockedoverwrites concurrent supervisor close. - Other:
rustlsCryptoProvider installed at startup to prevent daemon crash. Secrets moved from provision script to~/.config/cas/env(push protection). GitHub auth token used in self-update to avoid API rate limits.
1.0.0 - 2026-03-12
- Initial open-source release of CAS.
- Factory TUI screenshot in README.
.env.worktree.templatefor worker environment setup.
- Release workflow updated for GitHub Actions with Homebrew auto-update.
- MCP config sync added to
cas updateflow.
- Migration v165 crash when
verificationstable doesn't exist. - Release workflow secret check moved from job-level to step script.
0.6.2 - 2026-02-25
- Interactive terminal dialog (Ctrl+T) in factory TUI with show/hide/kill.
- MCP proxy catalog caching for SessionStart context injection.
- Billing interval switching buttons (monthly/yearly) with savings display.
- Resume subscription button on cancellation notice.
cas changelogcommand to show release notes from GitHub releases.
- Cloud sync on MCP startup runs in background with 5s timeout (non-blocking).
- Heartbeat uses shorter 5s timeout and spawn_blocking to avoid stalling async loop.
- Refactored cloud routes: org_billing_settings → billing_settings, org_members → members.
- Release bump workflow now requires a matching CHANGELOG.md section.
- Debounced Ctrl+C interrupt to prevent accidental double-sends.
- Update version check now compares versions properly.
- Stripe portal return URL redirects back to billing page instead of settings.
- Removed duplicate type export in types/index.ts.
0.5.7 - 2026-02-15
- Avoided macOS factory startup crash by using subprocess daemon mode with attach/socket retries.
- Hardened UTF-8-safe truncation behavior in touched UI/tooling paths to prevent char-boundary panics.
- Standardized release-train crate versions to
0.5.7.
0.5.6 - 2026-02-15
- Cleared clippy warnings under
-D warningsacross touched workspace crates.
- Standardized release-train crate versions to
0.5.6. - Updated local git hook rustfmt invocation to use Rust 2024 edition.
0.5.5 - 2026-02-15
- Published
0.5.5release and synchronized release-train crate versions.
0.5.4 - 2026-02-15
- Improved Supabase auth login UX and callback branding.
0.5.3 - 2026-02-15
- Initial release carrying Supabase auth login UX and callback branding improvements.
0.5.2 - 2026-02-13
- Bumped release-train versions to
0.5.2.
0.5.1 - 2026-02-11
- Fixed Sentry transport panic triggered during
cas login.
0.5.0 - 2026-02-11
- Added missing Sentry transport feature to prevent login-time crash.
0.4.0 - 2026-01-10
- Consolidated MCP tool format with unified naming.
- Sort and task type filtering for MCP and CLI.
- ID-based search and CLI/MCP feature parity.
- Git worktree support for task isolation.
- Schema migration system for database upgrades.
- Verification system with task-based exit blocking.
- Statusbar anchoring support.
- Extracted
cas-coreandcas-mcpcrates for better modularity. - Removed
#[tool_router]macro from CasCore for compile-time improvement. - MCP enabled by default in
cas init --yes. - Removed legacy MCP mode and added
list_changednotifications.
- Removed duplicate store implementations from
cas-cli. - Fixed scope persistence in crate extraction.
- Task verifier now uses CLI and checks project rules.
- Initial stable release with core functionality.