|
| 1 | +# Changelog - v0.5.3 |
| 2 | + |
| 3 | +## Release Date |
| 4 | +2026-06-03 |
| 5 | + |
| 6 | +## Overview |
| 7 | + |
| 8 | +v0.5.3 is a pure surface-shrink release. **Workspace shrinks from 17 → 12 crates** across v0.5.2 + v0.5.3 (the in-tree `oai-runner` extraction lived in v0.5.2; the `orchestrator-git-ops` delete + three folds land in v0.5.3 as the cleanup wave). The kernel is now mostly **CLI + daemon + plugin-host + core + config + a small support tail**. |
| 9 | + |
| 10 | +Per Sami's coding philosophy ("clean smaller surfaces are easier and smaller surfaces that can be made bulletproof or hot swapped"), every change here is **net-shrink, no behavior change**. |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | +## Surface-shrinks landed |
| 15 | + |
| 16 | +### Delete `orchestrator-git-ops` (1472 LOC) |
| 17 | +The crate had **zero Rust consumers** — only its own `Cargo.toml` referenced it. The docs claimed it "owns git automation helpers" but no code imported it; actual worktree management lives in `animus-workflow-runner-default` (out-of-tree plugin) and the daemon dispatch path. Pure delete. |
| 18 | + |
| 19 | +### Extract in-tree `oai-runner` (5483 LOC) |
| 20 | +`crates/oai-runner/` was the standalone OpenAI-compatible agentic runner binary. `launchapp-dev/animus-provider-oai-agent` v0.1.3 already ships the same code wrapped in the stdio plugin protocol, plus a separate `animus-oai-runner` release archive. The in-tree crate became redundant when the plugin was published. |
| 21 | + |
| 22 | +- Pinned `animus-provider-oai-agent` v0.1.3 in `default-install.json` + `plugin_registry::DEFAULT_OAI_AGENT_PLUGINS` (constant already existed). |
| 23 | +- New `resolve_oai_runner_binary()` helper in `orchestrator-core::runtime_contract`: searches `$ANIMUS_OAI_RUNNER_BIN` → `~/.animus/plugins/animus-provider-oai-agent/bin/animus-oai-runner` → legacy flat path → `$PATH`. |
| 24 | +- `agent-runtime-config.v2.json` cleared the hardcoded `"executable": "animus-oai-runner"` so the resolver kicks in. |
| 25 | +- Stripped `animus-oai-runner` from `.cargo/config.toml`, `Dockerfile`, `.github/workflows/release.yml`, `scripts/install.sh` (legacy archive support kept for upgraders). |
| 26 | + |
| 27 | +**Known v0.6+ gap:** `animus plugin install` is currently single-binary-per-plugin. The plugin's release ships TWO archives (`animus-provider-oai-agent-*.tar.gz` + `animus-oai-runner-*.tar.gz`); only the first is pulled by `animus plugin install launchapp-dev/animus-provider-oai-agent`. After install, the `animus-oai-runner` binary is NOT on disk. v0.6 will add multi-binary plugin install support OR publish `animus-oai-runner` as its own repo. Existing operators may need a manual install in the interim. |
| 28 | + |
| 29 | +### Fold `orchestrator-providers` → `orchestrator-core::subject_adapter` (2006 LOC) |
| 30 | +The crate was misnamed (not "providers" — provider plugins live out-of-tree). 73% of it was `subject_adapter.rs` (subject backend routing trait + impl); 11% was the git project adapter; 9% was the builtin project adapter. Only `orchestrator-core` depended on it. Folded as a sub-module: |
| 31 | + |
| 32 | +- `subject_adapter.rs` → `crates/orchestrator-core/src/subject_adapter/adapter.rs` |
| 33 | +- `git.rs` → `crates/orchestrator-core/src/subject_adapter/git.rs` |
| 34 | +- `builtin.rs` → `crates/orchestrator-core/src/subject_adapter/builtin.rs` |
| 35 | +- `lib.rs` → `crates/orchestrator-core/src/subject_adapter/mod.rs` |
| 36 | + |
| 37 | +2 callers updated: `orchestrator-core` itself + `animus-runtime-shared::ensure_execution_cwd`. **Known v0.6+ follow-up:** `subject_adapter::TaskServiceApi` and `services::TaskServiceApi` now coexist in `orchestrator-core` (identically named); disambiguation via `as Provider...` aliases preserved. Worth a rename pass. |
| 38 | + |
| 39 | +### Fold `orchestrator-store` → `orchestrator-core::store` (180 LOC) |
| 40 | +Trivial — 180 LOC of persistence primitives, smaller than most files in the kernel. Folded into `orchestrator-core/src/store/mod.rs`. `tempfile` dep promoted from dev-only to prod in `orchestrator-core` (the store helpers use it in production paths). 2 callers updated: `orchestrator-core` + `animus-runtime-shared`. |
| 41 | + |
| 42 | +### Fold `orchestrator-session-host` → `orchestrator-plugin-host::session` (2406 LOC) |
| 43 | +The crate's own lib.rs docstring said _"Host-side glue that wires the upstream SessionBackend trait to the Animus STDIO plugin protocol"_ — literally plugin-host glue. All 5 source files (incl. `plugin_supervisor.rs` and `session_backend_resolver.rs`) folded under `crates/orchestrator-plugin-host/src/session/`. |
| 44 | + |
| 45 | +- 6 import sites updated across `agent-runner`, `orchestrator-cli`, `orchestrator-daemon-runtime`. |
| 46 | +- `animus-session-backend`, `orchestrator-logging`, `async-trait`, `uuid` (+ `rt-multi-thread` tokio feature) absorbed into plugin-host's deps. |
| 47 | +- Re-exports inside `session/mod.rs` preserve the old top-level surface; consumers use `orchestrator_plugin_host::session::...` (no top-level plugin-host re-export — keeps the namespace boundary visible). |
| 48 | + |
| 49 | +--- |
| 50 | + |
| 51 | +## Codex round 1 P2 fix (main loop) |
| 52 | + |
| 53 | +- **`docs/architecture/crate-map.md`** claimed "13 crates" and still listed `orchestrator-session-host` as a current crate. **Fixed:** "12 crates" + removed the stale row; consolidated the description into the `orchestrator-plugin-host` row. |
| 54 | + |
| 55 | +Codex round 1: 0 P1, 1 P2 (fixed inline). |
| 56 | + |
| 57 | +--- |
| 58 | + |
| 59 | +## Numbers |
| 60 | + |
| 61 | +- **Workspace members:** v0.5.0: 17 → v0.5.1: 17 → v0.5.2: 15 → **v0.5.3: 12**. |
| 62 | +- **Net LOC delta on main vs v0.5.2:** ~−1700 (the folds are roughly LOC-neutral as moves; the wins come from deleted Cargo.toml + README files and tightened doc tables). |
| 63 | +- **ao-cli tests:** **1774 passing** (down from 1917 at v0.5.1; the delta reflects the deleted in-tree oai-runner tests + the deleted store + providers test modules). 6 pre-existing testkit-binary failures unchanged. 11 ignored. |
| 64 | +- **Codex rounds on main merge:** 1 → 0 P1, 1 P2 (fixed inline). |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +## Architectural shape after v0.5.3 |
| 69 | + |
| 70 | +The remaining 12 crates, grouped: |
| 71 | + |
| 72 | +**Core (5):** `orchestrator-cli`, `orchestrator-core` (with the folded `subject_adapter` + `store` modules), `orchestrator-config`, `orchestrator-daemon-runtime`, `agent-runner` |
| 73 | + |
| 74 | +**Plugin foundation (4):** `orchestrator-plugin-host` (with the folded `session` module), `animus-plugin-protocol`, `animus-plugin-runtime`, `animus-runtime-shared` |
| 75 | + |
| 76 | +**Support (3):** `orchestrator-notifications`, `orchestrator-logging`, `protocol` |
| 77 | + |
| 78 | +That's the "glue" shape Sami's coding philosophy was after — the kernel is CLI + daemon + plugin host + core. Everything else is a plugin (out-of-tree) or shared infrastructure consumed by both kernel and plugins. |
| 79 | + |
| 80 | +--- |
| 81 | + |
| 82 | +## 🚧 v0.6 carry-forwards from this release |
| 83 | + |
| 84 | +- **Multi-binary plugin install.** Today `animus plugin install` is single-binary; the OAI agent plugin ships two binaries (`animus-provider-oai-agent` + `animus-oai-runner`). v0.6 should add multi-binary install support OR `animus-oai-runner` should be published as its own repo. |
| 85 | +- **Subject adapter trait rename.** `subject_adapter::TaskServiceApi` / `services::TaskServiceApi` collide in `orchestrator-core` post-fold. The `as Provider...` aliases work today; a clean rename would close the disambiguation surface. |
| 86 | +- **Standalone `launchapp-dev/animus-runtime-shared`** repo needs Cargo.toml updated when this ships: drop the `orchestrator-store` git dep — `fsync_rename` now lives under `orchestrator_core::store::fsync_rename`. |
| 87 | +- **`orchestrator-notifications` extraction** (1.5k LOC) — could be a `notifier` plugin (the symmetric inverse of triggers). Not done in v0.5.3. |
| 88 | +- **`agent-runner` extraction** to a runner plugin (10.5k LOC) — biggest single-crate move; would mirror the `workflow-runner-v2` → `animus-workflow-runner-default` swap in v0.5.1. Architectural cleanup; deferred. |
| 89 | + |
| 90 | +--- |
| 91 | + |
| 92 | +## Upgrade |
| 93 | + |
| 94 | +```bash |
| 95 | +animus daemon stop |
| 96 | +curl -fsSL https://raw.githubusercontent.com/launchapp-dev/animus-cli/main/scripts/install.sh | bash |
| 97 | +animus plugin install-defaults --include-subjects --include-transports |
| 98 | +# OAI users: also install the agent plugin |
| 99 | +animus plugin install launchapp-dev/animus-provider-oai-agent |
| 100 | +animus daemon preflight |
| 101 | +animus daemon start --autonomous |
| 102 | +``` |
0 commit comments