- Agent plugin channel retired: Orbit no longer ships Claude, Codex, or Cursor agent plugins; install and use the standalone Orbit CLI instead. ([ORB-10995])
- Built-in code-review sweep: fresh workspaces include a disabled code-review auto-task that teams can enable to schedule recurring reviews. ([ORB-10997])
- Reliable concurrent task updates: task writes now coordinate safely across simultaneous CLI, MCP, and dashboard activity. ([ORB-10988])
- Simpler binary-first onboarding: the Quick Start now leads with installing the standalone CLI and brings your existing repository conventions into Orbit. ([ORB-10992])
- Fresh installs no longer seed the legacy
qacrew: neworbit initworkspaces use the supportedsystemcrew; update prompts that name the seededqacrew. Existing user-authoredqaconfiguration remains compatible. ([ORB-10955]) proc.spawnactivities now require an allowlist: v2 activities that grantproc.spawnmust declareproc_allowed_programs; add the allowed programs explicitly. ([ORB-10959])
- Cursor Agent Plugin support: Orbit now ships as a Cursor-compatible Agent Plugin alongside the Claude and Codex plugin formats. ([ORB-10943])
- More managed CLI executors: GitHub Copilot CLI and Cursor Agent CLI are first-class workflow executors, with improved installed-agent detection. ([ORB-10946])
- Operator-authorized MCP setup:
orbit workspace init --mcpcan generate MCP configuration for a workspace. ([ORB-10960]) - Dashboard workspace shell: the dashboard gains a command rail, two-mode dock, and log status bar for faster operator navigation. ([ORB-10972])
- Security-review automation: fresh workspaces include a disabled security-review auto-task that teams can enable when ready. ([ORB-10950])
- Store schema 15 → 16: audit actor identity splits
roleintoactor_kindplus a normalized actor. Workspaces migrate on open; a newer store still refuses an older binary. ([ORB-10888]) - Store schema 16 → 17: unauthenticated MCP calls persist a self-reported actor. Same migrate-on-open / no-downgrade rule. ([ORB-10890])
- Task complexity is required: CLI
task add, webPOST /api/tasks, andorbit.task.addreject a missingcomplexity— passlow,medium, orhard. ([ORB-10892])
- Dashboard delivery controls: inspect, toggle, and mint auto-tasks; operate routines and the sweep clock; the Tasks view is clearer with safer live-log and inline edits. ([ORB-10876])
- Complexity is first-class: every new task must set it, and the dashboard charts it as a dimension. ([ORB-10892])
- Governed MCP tools need an operator: unauthenticated sessions can no longer invoke those tools. ([ORB-10916])
- Claude Keychain OAuth under sandbox: Claude can read the user Keychain for OAuth; an explicit
denyReadstill wins. ([ORB-10929]) - System crew is seeded: jobs can name a portable
systemcrew;qastays for compatibility. ([ORB-10877])
- Release cut: version files and the GitHub tag aligned at 0.12.1. ([ORB-10870])
- Seeded skill directories retired:
orbit-task,orbit-search,orbit-workflow, and the pluginorbit-task-pilotskill are gone — use theorbitrouter skill and itsreferences/. ([ORB-10860])
- One Orbit skill: four seeded skills collapsed into a single
orbitrouter with on-demand references. ([ORB-10860]) - Stale skill links cleaned on upgrade:
workspace initremoves dangling Claude/Codex skill symlinks left after skill retirement. ([ORB-10869]) - Doctor reports leftover skill directories: orphaned skill dirs without SKILL.md are a warning, not a clean bill of health. ([ORB-10862])
- Safer artifact redaction: env-value redaction no longer silently eats ordinary words in task prose. ([ORB-10867])
- Store schema 11 → 15: workspaces migrate on open (friction SQLite, workspace-claim scope, learning-projection removal, invocation audit context). A newer store still refuses an older binary. ([ORB-10680])
- Native project learnings removed:
orbit learning,orbit.learning.*, and learning search are gone — use tasks, docs, feature ADRs, and frictions. ([ORB-10736]) - Native ADR store and tools removed:
orbit adr/orbit.adr.*and.orbit/adrs/are gone — author decisions in each feature's4_decisions.md. ([ORB-10726]) - Duel, independent review, and
role:retired: planning-duel and review CLI/MCP/jobs are gone; activity YAMLrole:no longer loads — usecrew:or the run-resolved crew, and ship viatask_pr_pipeline. ([ORB-10628]) - Jobs are asynchronous by default:
orbit run jobreturns a durable run immediately;--backend http|cli|autois gone — useagent_cliand pass--waitwhen you need to block. ([ORB-10801]) - MCP and
fs.*builtins trimmed: auto-task MCP advertises only list+mint;fs.read,fs.delete, and remainingfs.*tools are gone — use CLI/orbit tool runfor auto-task authoring and provider-native file tools. ([ORB-10798])
- Asynchronous job execution: job submission returns a durable run immediately, with
--waitand terminal diagnostics when you need to block. ([ORB-10801]) - Epic-owned continuous delivery: an epic run drains descendant work through one owned worktree and lands the epic branch only after the epic's own destination checks pass. ([ORB-10815])
- One workspace selector grammar: CLI and MCP accept the same registered name, logical
ws_*id, or absolute checkout path. ([ORB-10758]) - Network MCP transports:
orbit mcp listenand related tunnel/loopback paths serve isolated sessions with explicit workspace routing and claim-gated remote execution. ([ORB-10690]) - Fail-closed Linux sandbox: Bubblewrap plus policy-derived grants give Linux CLI agents and task-pilot a read-only, fail-closed execution path. ([ORB-10552])
- Telemetry no longer discards completed runs: the
invocationsinsert-bound columns (cache_create_1h_tokens,provider_cost_usd) reach existing databases through a newinvocation_telemetry_columnsmigration (schema v10) instead of only the v1 baseline, and a failed invocation-trace write is now logged and recorded as atelemetry.persist_failedevent on the run rather than failing the job. ([ORB-10367]) - PR review status clearing is documented:
orbit.task.updatenow describes its empty-string clear convention, with tool-host coverage for the persisted null result. ([ORB-10229]) - Task PR status updates persist in v2 storage: local tool and dashboard PATCH updates now retain
pr_statusalongside status and execution-summary changes. ([ORB-10223]) - Bundled skills are repository-agnostic: the embedded skill tree drops Orbit-source paths, private Constellation names, workspace-local artifact IDs, and fixed design-doc filenames; a portability regression test and byte-aligned plugin mirrors guard against reintroduction. ([ORB-10208])
- CLI agent envelopes reach workflows: provider-wrapped, prose-prefixed successful responses now validate and project their result object before workflow templating; malformed or failed envelopes fail closed. ([ORB-10216])
- Temporary init validation isolates skill discovery: test fixtures now sandbox HOME before seeding skills, preserving existing agent discovery links after temporary-root cleanup. ([ORB-10220])
- Verbose CLI agent runs stay healthy: stdout and stderr capture now retain bounded diagnostic prefixes and protocol-safe tails while continuing to drain providers, preserving final response envelopes and recording observed byte counts instead of killing successful runs. ([ORB-10221])
- Scheduled provider discovery fixed: systemd routine sweeps now use a portable user PATH so provider launchers installed in
~/.local/binremain available. ([ORB-10214]) - Log rotation and pipeline spawning tolerate replaced paths: missing log archive directories are silent no-ops, while long-lived Orbit processes resolve Linux deleted-inode executable paths back to the installed binary before spawning workers. ([ORB-10213])
- Skill guidance reflects friction triage: shipped skills use positional learning-show IDs and document mutable friction statuses, direct triage commands, and task-driven resolution. ([ORB-10210])
- Store schema v4 compatibility restored: the append-only
job_run_archive_stagemigration remains supported after anagent-mainhistory rewrite dropped its registry entry, so current CLIs reopen already-upgraded stores without a destructive downgrade. ([ORB-10209]) - Workspace routines are opt-in: init seeds disabled auto-task, triage, and workspace-local ship-sweep definitions, preserves authored routines on re-init, and delegates shipment synchronously to the normal backlog pipeline. ([ORB-10207])
- Workspace re-init honors explicit routing: re-running init safely merges explicit ship-mode/base-branch changes while preserving identity, creation time, and authored routines; workspace list/show report the effective ship mode. ([ORB-10215])
- Legacy task friction status removed: tasks no longer deserialize, list, update, admit, or render
status: friction; standalone friction artifacts are the only supported surface. Task attribution and record-parameter construction now share implementations without changing admission or triage behavior. ([ORB-10202]) - Activity and job catalogs share layered loading: typed adapters now share recursive discovery, directory deduplication, first-wins layering, and duplicate detection while preserving their distinct precedence and validation policies. ([ORB-10201])
- Configuration admission is table-driven: fixed settings now declare parsing, defaults, validation metadata, and CLI projection once, with generated registry/snapshot lookup completeness checks. ([ORB-10199])
- Activity/job precedence docs match execution trust rules: the design now distinguishes workspace-preferred job listings from default-authoritative named job and activity execution. ([ORB-10203])
- Systemd routine workers survive sweep exit: the user sweep service now limits shutdown to its main oneshot process, allowing detached pipeline workers to claim and complete clock-dispatched runs. ([ORB-10153])
- Task creation surface is narrower and consistent: task creation now exposes only legal initial statuses, list flags share repeat/comma parsing, and redundant agent/comment/instructions inputs are removed while model and managed identity attribution remain intact. ([ORB-10155])
- CLI command meaning has one compiler-enforced registry: dispatch, runtime bootstrap, audit metadata, JSON error formatting, and hook suppression now derive from one exhaustive command-operation declaration, eliminating wildcard policy defaults without changing CLI behavior. ([ORB-10200])
- Task locks returned to task administration:
orbit locksis noworbit task locks. This partially reverses ORB-10000: unlike the other removed task verbs, which were consolidated into existing verbs, locks were only relocated to a more prominent top-level surface. Moving them back completes the original surface-reduction intent without changing the MCP tool surface. ([ORB-10428]) - Learning vote and comment surfaces removed:
orbit.learning.upvoteand allorbit.learning.comment.*tools and CLI subcommands are gone — usepriority+ search rank for ranking,update/supersedefor corrections, andevidencefor provenance. ([ORB-10046]) orbit tasktrimmed from 19 to 12 subcommands: seven state-transition and read-projection verbs removed.approve/reject/unarchive/delete→orbit task update --status …;locks→orbit locks;prune-context→orbit task lint --fix;templatesdropped. MCP tool surface unchanged. ([ORB-10000])
-
Graph-tool guidance lives only in the MCP surface: removed graph-tool invocation instructions from activity prompts and deleted the
orbit-graphskill; graph tools self-describe when present, and essential selector/usage knowledge now lives in theorbit.graph.*tool descriptions. ([ORB-10151]) -
CI green again — MCP
tools/listsnapshot synced: ORB-10149's fourorbit_auto_task_*tools reached the MCP surface without a snapshot refresh, failingmcp_serve_tools_list_matches_production_snapshoton every push; the round-trip snapshot now includes them (additive — no tools removed). ([ORB-10152]) -
QA sweep is an auto-task: the checked-in six-hour definition routes hands-on validation to
crews.qa, dedupes open runs, and files findings through Orbit;no-diff-expectedexempts side-effect-only tasks from workflow diff gates. Legacy QA code, config, CLI, routines, and deployment units are removed. ([ORB-10148]) -
Auto-task primitive: recurring chores are data, not code.
orbit auto-task add/list/show/update/toggle(+orbit.auto_task.*tools) define.orbit/auto_tasks/*.yamltemplates with a cron/interval schedule and dedupe policy; one seeded scheduler routine mints tasks from the due ones with catch-up collapse andskip_if_opendedupe. Provider-neutral (ADR-0217). ([ORB-10149]) -
Ship
--mode prfails loudly on an empty diff: an implement step that writes nothing no longer reports success — an empty commit and a0 commits aheadbranch now hard-fail (no empty branch pushed, no PR, no promote-to-review), the premature pre-commitpushis removed, and the agent envelope getsrepo_rootplus a fail-closedworkspace_path. ([ORB-10134]) -
Codex plugin documentation parity: Website install/MCP guides now cover Codex plugin installation, upgrades, fresh-task discovery, and read-only MCP smoke checks alongside Claude; the npm proxy README clarifies how both supported plugins consume the binary without manual asset copying. ([ORB-10117])
-
Routine scheduler health over HTTP:
GET /api/routineson the dashboard exposes each routine's last fire (timestamp, ok/error outcome, duration) and next-due slot, so a stopped scheduler is visible remotely as a stalelast_firewithout box ssh. ([ORB-10138]) -
ADR create over HTTP:
POST /api/adrsrecords a Proposed ADR (mirroringorbit.adr.add), so remote orchestrators can author decisions without an on-box run; malformed payloads get a structured 400. Friction/learning create routes stay absent. ([ORB-10141]) -
Learning + ADR update routes on the HTTP API:
PATCH /learnings/:id(summary/scope/tags/body/evidence/priority) andPATCH /adrs/:id(status/tags and mutable metadata) delegate to the CLI tools, preserving supersede-don't-delete and invalid-transition rejection; no create routes added. ([ORB-10143]) -
Default failed-run triage: a seeded
task_triage_pipeline(+ hourly routine,orbit run triage) diagnoses tasks blocked by failed runs, re-backlogs environmental failures with a bounded retry budget, and leaves the rest blocked with a diagnosis attached. See ADR-0215/ADR-0216. ([ORB-10129]) -
Orphaned pending job runs now reconcile to
interrupted: workers claim their queued run's pid, the open-time orphan scan andorbit doctorcover pending runs, andorbit run cancel <run_id>terminalizes stuck runs. ([ORB-10070]) -
Remote dashboard task actions now reach the selected workspace:
approve/reject/archiveused a rawfetch()that skipped the workspace-routing helper, so they silently no-op'd against a non-default remote workspace; the workspace selector also no longer renders its filesystem path beneath the dropdown. ([ORB-10124]) -
CI runner ENOSPC fixes: the coverage and
cijobs reclaim ~25-30 GB of preinstalled runner bloat before building, setCARGO_INCREMENTAL=0andCARGO_PROFILE_TEST_DEBUG=line-tables-onlyto shrinktarget/, and the coverage cache is now deps-only (no instrumentedtarget/). ([ORB-10126]) -
Constellation crew catalog uses model-level names: the checked-in Orbit workspace now offers Claude
opus/sonnet/fableand Codexsol/terra/lunacrews, defaulting toopus. ([ORB-10133]) -
Codex init default avoids nested sandboxing: fresh Orbit configurations now seed Codex with
danger-full-access, leaving Orbit and the host as the execution boundary. ([ORB-10131]) -
Crews are one provider-model assignment:
[crews.<name>]now uses flatmodel,provider, andbackendfields shared by every activity role; legacy three-role crews load through their implementer assignment. See ADR-0213. ([ORB-10130]) -
Model defaults de-hardcoded and centralized: a new
orbit-common::model_defaultsmodule is the single source of truth for production model defaults; default Claude CLI models are now the unversionedopus/sonnetaliases and default Codex isgpt-5.6-terra. Existing workspaces are unchanged untilorbit init --refresh-defaults. See ADR-0211. ([ORB-10051]) -
orbit web servedefaults to global (multi-workspace) mode: the all-workspaces dashboard dropdown is always present;--globalis now a deprecated no-op. ([ORB-10029]) -
orbit-cmdextracted fromorbit-core: the CLI-facing command layer moved into a new internalorbit-cmdcrate (depends on orbit-core, never the reverse). Import pathsorbit_core::command::{doctor,migrate,diagnostics,…}→orbit_cmd::…; CLI/MCP/on-disk behavior unchanged. See ADR-0203. ([ORB-10016]) -
Ops runbook —
docs/OPERATIONS.md: a command-first day-2 operations guide (state inventory, WAL-safe backup/restore, stuck-job debugging, corrupted-DB recovery, log rotation, health checks,orbit migrate), linked from the README. ([ORB-10014]) -
Crate-boundary error translators enforced: every typed error crossing into
OrbitErrornow goes through its owning crate's*_error_to_orbittranslator, enforced mechanically by a newscripts/check-error-translation.shguardrail. ([ORB-10013]) -
Versioned
.orbit/upgrade path —orbit migrate: the whole workspace layout is now versioned via astate/layout.versionmarker and an ordered migration registry; older layouts auto-migrate on open, newer ones refuse to open.orbit migrate [--dry-run]reports and inspects. ([ORB-10012]) -
One
Selectorparser instead of two: the duplicated selector grammar is unified on theorbit-commonimplementation, withorbit-graph-extract's module now a re-export shim; orbit-common's surface now recognizesmodule:/command:. See ADR-0202. ([ORB-10011]) -
CI guardrails: coverage visibility, CHANGELOG freshness, declared MSRV: an informational
cargo-llvm-covcoverage job, a newcheck-changelog-freshness.shguardrail, and a declaredrust-version = "1.88"MSRV enforced by a pinned-toolchain CI job. ([ORB-10010]) -
Policy deny rules can no longer be dodged by respelling a path: glob-path normalization rebuilds paths from their normal components so
secret/./key.txt,secret//key.txt, and trailing-slash spellings all match rules forsecret/key.txt; adds Linux enforcement integration tests and a CI sandbox/policy job. ([ORB-10009]) -
MCP round-trip integration tests + a session-workspace wire fix: end-to-end MCP coverage over real transports with snapshotted
tools/listpayloads; fixes a wire bug where_meta.orbit.workspacenever reached tool dispatch over a real transport. ([ORB-10007]) -
Dashboard endpoint integration tests: axum-level coverage of the
/apisurface over on-disk temp workspaces —GET /api/audit, adversarial artifact-serving traversal/symlink cases,POST /workflows/shipin global mode, and workspace-selection error paths. Test-only. ([ORB-10008]) -
Task migration between machines: new
orbit task export/importpack and restore task bundles as a portabletar.zstwith integrity validation and collision renumbering;orbit task reindexrebuilds the index from bundles, and--task-id-startseeds disjoint id ranges. ([ORB-00034]) -
orbit web connect <ssh-host>: view a remote workspace's dashboard over an auto-managed SSH tunnel — picks a free port, starts remote serve, forwards, opens the browser, and tears down on Ctrl-C. ([ORB-00029]) -
Global, multi-workspace dashboard:
orbit web serveoutside any workspace (or with--global) serves every registered workspace via a workspace-keyed runtime map, with a header selector and an aggregate "All workspaces" task view. ([ORB-00030]) -
Dashboard shows each workspace's filesystem location: the global dashboard surfaces where each workspace lives on disk (home-abbreviated) in the header selector and task Details box, disambiguating same-named workspaces. ([ORB-00037])
-
Aggregate dashboard view no longer 400s: an
isAggregateView()predicate gates per-workspace fetches so the "All workspaces" view fetches only the aggregate task list and shows a placeholder for workspace-specific panels instead of erroring. ([ORB-00039]) -
Aggregate 400-guard extended to the remaining dashboard tabs: the shared
isAggregateView()guard now also covers the Audit, Knowledge, and scoreboard-window fetches in the "All workspaces" view. ([ORB-00040]) -
Aggregate 400-guard completed: closes the last gaps — the Diagnostics tab and the stale learning/ADR/friction detail panels now show the aggregate-mode placeholder instead of firing per-workspace endpoints. ([ORB-00044])
-
Versioned store-schema migrations: the store SQLite DB tracks numbered migrations in a
schema_metaledger, applies each atomically, adopts pre-ledger DBs via an idempotent baseline, and refuses to open a DB written by a newer orbit. ([ORB-10003]) -
SQLite reads no longer queue behind writes: the shared store checks out per-call read-only connections from a small pool while writes keep the single WAL writer, so a read completes even while a write transaction is open. ([ORB-10004])
-
Job-run checkpoint/resume for hard interruptions: the v2 executor persists a recovery checkpoint after each completed step; dead-owner runs finalize to a new
interruptedstate, andorbit job resume <run_id>replays only the remaining steps. ([ORB-10002]) -
One shared SQLite pragma helper: WAL/busy_timeout/foreign_keys/synchronous setup is now centralized in
orbit_common::utility::sqlite::apply_default_pragmas, fixing per-store drift. ([ORB-10004]) -
Always-on operability: detailed healthz and
orbit doctor:/healthz?detailed=trueruns per-check probes, andorbit doctorruns workspace pass/warn/fail health checks. ([ORB-10005]) -
Retry hygiene for external calls: step backoff now uses full jitter, the agent-CLI and embedding-companion transports classify retryable-vs-permanent failures, and
validate_jobrejects invalidretry:blocks before execution. ([ORB-10006]) -
Internal refactor — execution-context decomposition + scoreboard consolidation:
orbit-engine'scontext.rsis split into acontext/module by concern, andorbit-store's scoreboard shapes share one implementation. No behavior change. ([ORB-10015]) -
Dashboard task-create workspace selection hardened:
POST /api/tasksuses?workspace=<id>for selection (unknown → 404, inactive → 400) and now rejects a strayworkspacebody key with a 400 — fixing the bridgetask_createworkspace no-op. ([ORB-00042])
orbit graphis back as a thin CLI wrapper: the v2 graph is now reachable from the singleorbitbinary viaorbit graph {sync, search, show, refs, callees, impact, trace, overview, implementors, deps, version, db-path, clean}, not only the standaloneorbit-graph-clibinary or the in-process MCP adapter.orbit-graph-cliis lib-ified (lib + bin) so both front ends share one command layer with no duplication; the agent-facing graph surface is unchanged (still MCP-only). This amends the ADR-0198 consequence that dropped the subcommand. ([ORB-00396], ADR-0199)- Task store crash durability hardened: the task registry SQLite connection now runs with
synchronous=FULL, and task-bundle creation fsyncs the bundle directory's parent before returning — so a power loss or OS crash mid-write can no longer leave the task store or a freshly-created bundle in a torn, unrecoverable state. ([ORB-00395], [ORB-00394])
This release completes the orbit-graph v2 migration — v1 (orbit-knowledge) is fully decommissioned and v2 is now the only graph surface — and adds a stable protocol for plugging in out-of-process executors.
- orbit-graph v2 is now the sole graph surface: the orbit-knowledge (v1) crate and its
orbit.graph.*builtin tools are removed, theorbit graphCLI command is dropped (the v2 graph ships as the standaloneorbit-graph-clibinary plus an always-on in-process MCP adapter), andorbit initno longer builds a graph up front — v2 syncs on demand. The MCP graph surface is now search / show / refs / callees / impact / trace / overview / implementors / deps;packis gone andcallersis folded intorefs. ([ORB-00391], [ORB-00389]) - External Executor Protocol v1: register a homegrown agent or CLI as an Orbit executor without forking core, through a documented stdin/stdout envelope contract and dynamic out-of-process registration. ([ORB-00384])
- Graph reads are faster and more accurate: queries are index-backed and decoupled from a full-worktree rescan,
showreturns UTF-8 text instead of a raw byte array,traceresolves far more command handlers, andrefs/impactfall back to fuzzy-name matches when the precise floor is empty. ([ORB-00377], [ORB-00380], [ORB-00386], [ORB-00387], [ORB-00381])
This is a security-hardening release: the bulk of the changes close secret-leak, sandbox-escape, network-exposure, and workspace-containment issues found in a focused audit (ORB-00355–ORB-00374).
Shellactivity/job type removed: the v2type: shellactivity surface is deleted end to end — a workspace activity or job declaringtype: shellnow fails to deserialize at load instead of executing. The shell program allowlist was self-asserted within the same workspace-supplied YAML (the gate was a tautology) andrun_shellspawned with no OS sandbox, cwd confinement, or policy consultation. Theshell_referenceasset and the pure-shell job fixtures/demos are removed; use the sandboxed agent-CLI execution path instead. ([ORB-00374], [ORB-00363])[execution.env] inheritconfig key removed: an auto-discovered workspaceconfig.tomlcould setinherit = trueand — because workspace config replaces global — flip agent subprocess spawning to full environment inheritance, leaking the orbit process's API keys and tokens into spawned agents. Env inheritance is now fixed tofalseand is no longer configurable; only thepassallowlist remains tunable. Staleinheritkeys are silently ignored. ([ORB-00365])
- Secret redaction hardened across audit and logs: redaction now covers non-UTF-8 audit blobs (previously bypassed entirely), error/bytes fields recorded via
tracing, and Gemini's HTTP transport no longer places the API key in the URL query string. The pattern redactor also learned major Google / SCM / cloud key formats it previously missed. ([ORB-00358], [ORB-00367], [ORB-00371], [ORB-00359]) - Sandbox and execution confinement tightened: the macOS sandbox profile no longer grants unrestricted
file-read*plusnetwork*, an SBPL(?i)inline-flag bug that disabled sandbox-exec for all macOS CLI runs is fixed, therun_commandautomation action no longer shell-interpolates rendered templates, and unbounded child stdout/stderr capture (a memory-exhaustion DoS) is now bounded. ([ORB-00370], [ORB-00372], [ORB-00364], [ORB-00362]) - Dashboard network exposure closed:
orbit web servenow refuses to bind any non-loopback host (only127.0.0.0/8and::1) — the unauthenticated read/write API can no longer be exposed to the network via--host 0.0.0.0; bind loopback behind an authenticated tunnel/reverse proxy for remote access. Stored XSS from untrusted task/learning/ADR/friction content rendered in the dashboard is also fixed. ([ORB-00360], [ORB-00355]) - Secret-file policy matching fixed:
denyRead/denyModifyglobs now match dotenv-variant secret files (.env.local, etc.), policy glob matching is no longer case-sensitive on case-insensitive filesystems, and audit blobs and JSONL logs are no longer written world-readable. ([ORB-00357], [ORB-00366], [ORB-00368]) - Workspace containment enforced: a malicious workspace can no longer override seeded
.orbit/resources/{jobs,activities}/assets, and graph operations stay confined to the worktree even when an MCP session omits the workspace. ([ORB-00356], [ORB-00361])
- Intel-macOS semantic companion dropped from the release:
orbit-search-companioncannot link onx86_64-apple-darwin—ort-sys(2.0.0-rc.12) ships no ONNX Runtime prebuilt for Intel macOS. The Intel-mac release leg now builds theorbitCLI only, and the release publishes companion binaries for macOS-arm64, Linux x86_64, and Linux arm64 only. The Intel-mac CLI tarball still ships; semantic search is unsupported on Intel Macs (it never successfully shipped). Together with the glibc fix in 0.8.1, this completes recovery of thev0.8.0release, whose GitHub Release never published while@orbit-tools/cli@0.8.0was already on npm. ([ORB-00351])
- Linux release build of the semantic companion:
orbit-search-companionfailed to link on the release runners — its prebuilt ONNX Runtime (viaort/fastembed) references glibc 2.38+ symbols (__isoc23_*) that don't exist onubuntu-22.04(glibc 2.35), failing both Linux build legs and blocking the GitHub Release. The release workflow now builds the Linux companion onubuntu-24.04(glibc 2.39) while keeping theorbitCLI onubuntu-22.04, so the CLI's glibc-2.35 compatibility floor is preserved. This fixes forward after thev0.8.0GitHub Release failed to publish while@orbit-tools/cli@0.8.0had already been published to npm. ([ORB-00350])
- Agent MCP surface slimmed;
orbit.review-thread.*alias dropped: six tools moved off the agent-facing MCP surface toregister_inactive—orbit.task.reject,orbit.friction.list,orbit.friction.show,orbit.friction.resolve,orbit.learning.comment.list, andorbit.learning.upvote. They stay reachable via the CLI (orbit tool run) andruntime.run_tool, buttools/listover MCP no longer advertises them andorbit mcp serverejects agent calls to them — these are operator/triage actions, while agents file friction viaorbit.friction.addand discover learnings viaorbit.search. Separately, the duplicateorbit.review-thread.*alias (added in ORB-00273) is removed; the canonicalorbit.task.review_thread.*form that the README, theorbit-review-taskskill, and the audit/redaction policy reference is unchanged. Seeded activity allowlists and skill docs were updated to drop the stale references.EXPECTED_INACTIVE_TOOL_NAMESlength canary moves 21 → 27. ([ORB-00346], [ORB-00348])
- Dashboard and scoreboard redesign: the dashboard adopts the new visual mock and the scoreboard gets a phase-1 reskin plus a window-aware backend — a
?window=selector (1h / 24h / 7d / 30d / all) now scopes scoreboard metrics, on an additive snapshot schema bump (v5 → v6). ([ORB-00345], [ORB-00336], [ORB-00337]) - Crew and duel composition adapt to detected agents:
[workflow].default_crewand[duel].candidatesare now derived from the agent families detected atorbit initrather than hard-coded, so a workspace's defaults match the agents actually installed. ([ORB-00347]) - Semantic-companion install hardened: the release workflow now publishes the standalone
orbit-search-companion-*binaries alongside the CLI tarballs, soorbit semantic installcan resolve signed companion assets from the GitHub Release. ([ORB-00299])
- Rotate release signing key and recover package installs: adds
orbit-release-key-3to the shell and npm installer trust sets, makes it the canonicalplugin/npm/release-signing.pub, and documents the new current signing path. This patch fixes forward after thev0.7.0GitHub Release publish failed before assets were created while@orbit-tools/cli@0.7.0had already been published. ([ORB-00292])
- Agent MCP surface trimmed: six admin/destructive tools moved off the agent-facing MCP surface —
orbit.task.delete,orbit.task.lint,orbit.semantic.uninstall,orbit.adr.list,orbit.learning.prune,orbit.learning.comment.delete. They remain registered (register_inactive) and reachable via the CLI (orbit task delete,orbit adr list, etc.) andruntime.run_tool;tools/listover MCP no longer advertises them andorbit mcp serverejects calls to them. Agents that need ADR enumeration useorbit.search --kind adr. A neworbit adr listCLI subcommand routes through the tool to preserve filter parity (--include-remote,--status,--owner, etc.).EXPECTED_INACTIVE_TOOL_NAMESlength canary incrates/orbit-cli/src/command/mcp/tests/mod.rsbumps 15 → 21. ([ORB-00289]) - Semantic companion lookup no longer searches
$PATH: normal runtime lookup uses the managed~/.orbit/embed/bin/install only. Dev/CI overrides must setORBIT_SEARCH_COMPANION=<absolute path>plusORBIT_SEARCH_COMPANION_ALLOW_UNSAFE=1; managed downloads now require a release-signed checksum manifest before replacement or execution. ([ORB-00265]) - Envelope and embedding rebuild verbs renamed:
orbit docs reindex/orbit.docs.reindexis noworbit docs index/orbit.docs.indexfor doc-corpus embeddings, andorbit learning reindex/orbit.learning.reindexis noworbit learning sync/orbit.learning.syncfor YAML-to-SQLite envelope reconciliation. No compatibility aliases are retained. ([ORB-00206], [ORB-00244]) orbit searchmode split and per-kind status syntax: the query surface now has three visible CLI forms:orbit search <query>,orbit search similar <id>, andorbit search path <path>. The oldorbit search --semantic <id>andorbit search --path <path>forms are removed.--statusnow requireskind:valuetokens such astask:open,doc:active,adr:proposed; bare tokens like--status openare rejected. CLI--field/--modeland MCPfield/embedding_modelare removed fromorbit search; MCPmodelremains provenance-only. ADR-0179 supersedes ADR-0175. ([ORB-00205])- Per-domain
searchsubcommands removed; cross-kind filters onorbit search:orbit task search,orbit docs search,orbit learning search(and the matchingorbit.task.search,orbit.docs.search,orbit.learning.searchMCP tools) are removed. Replacement:orbit search --kind {task,doc,learning,adr,all} <query>for content similarity and kind-specificlistcommands for structural filters.orbit search --all,--tag, per-kind--status, andorbit search path <path>cover the previous include-superseded/path/tag use cases.orbit learning list --pathnow uses glob containment rather than exact string match. ([ORB-00202]) orbit searchflag rename: free-text vector ranking is now--hybrid/hybrid: true; task-neighbor lookup is now--semantic <id>/semantic: "<id>". The old--semanticboolean and--related <id>surfaces are hard-removed; JSON mode values are nowhybridandneighbor. Historical phase-1 audit payloads carryingsemantic: trueare orphaned by the no-shim rename. ([ORB-00204])- Design-doc tooling retired:
orbit design check,orbit design init/list/show,orbit.design.*, theorbit-designskill, the wrapper script, andmake check-design-docsare gone. Useorbit-docs,orbit.docs.*, and the same-PR doc update rule;orbit workspace init --designstill seedsdocs/design/CONVENTIONS.md. ([ORB-00112], [ORB-00177], [ORB-00182]) - Search namespace split:
orbit.semantic.search,orbit.semantic.related, and theorbit-semanticskill are removed in favor oforbit.searchandorbit-search;orbit semantic reindexis noworbit semantic index. Historicalsemantic.search/semantic.relatedaudit event names are orphaned by this hard break because there are no external audit-history consumers yet. ([ORB-00196]) - Low-use CLI commands retired:
orbit scoreboard,orbit metrics, andorbit adr migrateare removed. Their supported replacements are the dashboard scoreboard and metrics views, dashboard HTTP metrics endpoints, and the already-migratedorbit.adr.*artifact tools. ([ORB-00183], [ORB-00190], [ORB-00197]) - Legacy executor
models:compatibility removed: executor YAML must usemodel_pair_override:; the one-releasemodels:alias and deprecation warning path are gone. ([ORB-00051])
- Unified knowledge search: lexical and hybrid search now spans tasks, docs, learnings, and ADRs, with doc/learning/ADR embeddings, task-neighbor lookup, path applicability, and a single
orbit searchmental model. ([ORB-00196], [ORB-00202], [ORB-00203], [ORB-00205], [ORB-00206], [ORB-00216], [ORB-00217]) - Worktree-aware artifact foundations: Orbit now distinguishes shared and local
.orbit/roots, adds a global artifact ID allocator, and lays the groundwork for worktree-local ADR/Learning artifacts while keeping existing stores on the shared root. ([ORB-00199], [ORB-00200], [ORB-00201]) - Docs and learning context in the agent loop: PreToolUse learning reminders,
orbit-docs, indexed design docs, andtask.show --with-contextmake project knowledge easier for agents to retrieve before editing. ([ORB-00160], [ORB-00162], [ORB-00163], [ORB-00166]) - Dashboard and steering improvements: Audit / Diagnostics side panels, scoreboard grouping, a task resolver, metrics panels, review-thread message panels, and hook-driven async steering make the dashboard a fuller operations surface. ([ORB-00142], [ORB-00144], [ORB-00154], [ORB-00191], [ORB-00211], [ORB-00213], [ORB-00273], [ORB-00274])
- Release and runtime hardening: installers authenticate release archives, semantic-companion binaries require signed checksums, key rotation is documented in the installer trust set, and the companion freshness check closes a TOCTOU window. ([ORB-00265], [ORB-00266], [ORB-00270], [ORB-00271])
- Safer agent writes and execution: artifact-write redaction, ambient MCP session context, and restricted v2
proc.spawnexecution reduce the odds of leaking secrets or running in the wrong workspace. ([ORB-00138], [ORB-00256], [ORB-00262])
- Grok onboarded as the fourth first-class agent family:
all_agent_families()3 → 4, sandbox profile, MCP init, executor YAML, commit identity, and a parity sweep across scoreboards/duels/docs. ([ORB-00043], [ORB-00044], [ORB-00045], [ORB-00046], [ORB-00047], [ORB-00048], [ORB-00049], [ORB-00050], [ORB-00052]) - Agent identity collapsed to family: model strings are configuration-only; family (
codex/claude/gemini/grok) is the durable identity across tasks, scoreboards, friction, audit, planning-duel artifacts, and git author lines. ([ORB-00080], [ORB-00081], [ORB-00088], [ORB-00089], [ORB-00090], [ORB-00091], [ORB-00106]) - Per-task
crewabstraction: replaces role-keyed[agent.<role>]config with named[crews.*]registries selectable per task, and gives the duel-plan agent pool the same configurable surface. ([ORB-00058], [ORB-00072], [ORB-00076], [ORB-00078]) - First-class Knowledge tab in dashboard: Learnings/Frictions/ADRs subtabs with inline lifecycle controls, plus task-detail enrichment (tags, external_refs, relations, job_run_id, review_threads, locked-files panel, per-task crew selector). ([ORB-00060], [ORB-00061], [ORB-00062], [ORB-00063], [ORB-00067], [ORB-00068], [ORB-00069], [ORB-00073], [ORB-00076], [ORB-00082], [ORB-00083], [ORB-00084], [ORB-00097])
- Branching model flipped:
mainis now the release/production branch;agent-mainis the dev integration branch where task PRs land. Each release tags onagent-mainthen promotes tomainvia merge commit; hotfixes branch frommainand back-merge toagent-main. Install URLs inREADME.mdand the website now point atmain. Retired stubcrates/orbit-core/assets/activities/examples/promote_agent_main.yamlremoved. SeeRELEASING.md§10b and §Hotfix flow. ([ORB-00054]) - Crew registry replaces role-keyed agent config:
[agent.planner],[agent.implementer],[agent.reviewer]blocks are removed in favor of named[crews.<name>]registries selected via[workflow].default_crewor per-taskcrew. Workspaces with stale schema are rejected at load. ([ORB-00058]) ship-autoandship-localaliases removed:orbit run shipis now the unified async-by-default command — empty task IDs trigger auto-backlog mode, explicit IDs queue-and-wait instead of fail-fast. ([ORB-00075])- Agent identity schema collapsed to family:
PlanningRoleAssignmentdropsmodel; planning-duel artifact paths and signatures rename to{slot}.mdand*authored by: {family} / {slot}*;resolve_agent_model_pair*helpers and alias canonicalization removed; scoreboardby_model→by_family. Includes a read-side migration; downstream consumers indexing onby_modelkeys break. ([ORB-00080]) - Family-identity migration script required after upgrade:
scripts/migrate_family_identity.pyrewrites persisted task/friction/run/audit/scoreboard records and four SQLite stores to family-keyed shapes. Dry-run by default; back up before applying. ([ORB-00081]) - Audit
task.locks.*andjob run-pipeline-workerevents populatetask_id/job_run_idsemantically: previously these overloadedtarget_id. Downstream analytics joining ontarget_idfor these events need updating. ([ORB-00085]) FrictionStatus::Defaultderive swap: enum default impl moved from a hand-rolledimplto#[derive(Default)]to satisfy a clippy-deny lint. Behaviorally a no-op; listed for completeness. ([ORB-00086])- Task relation enum gains
Produces/Resolves; frictions auto-close on Review → Done: relation enum extension is additive but the auto-friction-close on task completion is a semantics change. Aresolved_by_taskback-pointer is added to friction records. ([ORB-00093]) - Learning storage layout: flat → per-entity directories:
.orbit/learnings/<L-id>.yamlmoves to.orbit/learnings/<L-id>/learning.yaml. Legacy-layout load returns a typed error directing operators atorbit learning migrate-layout. ([ORB-00096]) - ADR allocation policy: new ADR headings must first allocate globally via
orbit.adr.add; local 3-digit ADR headings under4_decisions.mdare grandfathered.docs/design/CONVENTIONS.md§4 updated. ([ORB-00098]) - Knowledge-graph workspace_root attribution fixed: graph refs are now keyed on the worktree's actual branch rather than falling back to the main repo's
agent-main; the missing-ref case rebuilds rather than silently reading the default branch. Cached selectors keyed off the old behavior may need refresh. ([ORB-00099], [ORB-00105]) orbit.task.updatepersistssource_task_id: the property was previously silently dropped on writes; clients that depended on the drop now see persistence. Empty-string clears the field. ([ORB-00101])- MCP schema emitter no longer degrades
object_listparams to"string":evidenceand similar fields now emit array-shaped schemas. MCP clients that worked around the bug by string-encoding payloads must send arrays. ([ORB-00102]) - Ship batch commit message template:
feat: parallel batch [ORB-id]is replaced by a deterministic template —<type>: <truncated title>… [ORB-id] [EXT-id]…with an optional full-title line, execution-summary paragraph, andPlanned-By/Implemented-Bytrailers. Release-note builders andgit log --grep 'parallel batch'workflows break. ([ORB-00107])
- Grok onboarded as fourth agent family: sandbox state dir + SBPL allowances; CLI runner + executor YAML;
orbit mcp init --client grokwrites.grok/config.toml; duel / scoreboard / friction-stats render zero-grok rows; design folder, commit identity, and docs updated. ([ORB-00043], [ORB-00044], [ORB-00045], [ORB-00046], [ORB-00047], [ORB-00048], [ORB-00049], [ORB-00050], [ORB-00052]) - Knowledge tab in dashboard: Learnings subtab (list, supersede, stats), Frictions subtab (triage, resolve, stats, tag-picker sourced from YAML), ADRs subtab (accept, supersede, related-task deep-links), task-detail enrichment, Locked Files panel, per-task crew selector, markdown rendering. ([ORB-00060], [ORB-00061], [ORB-00062], [ORB-00063], [ORB-00067], [ORB-00068], [ORB-00069], [ORB-00073], [ORB-00076], [ORB-00083])
- Duel-plan agent pool configurable via
[duel] candidates+[duel.models]inconfig.toml; runtime-host trait methods for candidate/model resolution; preserves fallback for non-duel callers. ([ORB-00072]) - Cross-artifact task relations:
Produces/Resolvesvariants enable typed task ↔ friction / learning links; auto-resolves frictions on Review → Done with aresolved_by_taskback-pointer. ([ORB-00093]) - Learning enrichments: per-learning
comments.jsonlwith push-injection rendering; decay-weighted upvotes with task-anchored idempotency; learning-creation wired into agent activity loops with a checkpoint. ([ORB-00077], [ORB-00094], [ORB-00095]) - Direct-agent runtime model injection:
ExecutorDef.model_flagenables data-driven-m/--modelflag dispatch per step. ([ORB-00053]) - Ship command unified to async-by-default:
orbit run shipempty-task-IDs → auto mode, explicit IDs → gated; waiting-reason fields surfaced throughorbit run history/show. ([ORB-00074], [ORB-00075]) - Backlog dependency gating:
list_backlog_tasksfilters bytask_dependencies_ready, fixing out-of-order auto-pipeline execution. ([ORB-00057]) - Skill quality nudges:
orbit-create-tasknow teaches optionalcomplexity,dependencies,parent_id, and cross-artifactrelations;orbit.friction.adddescription enumerates the tag taxonomy from YAML. ([ORB-00064], [ORB-00070], [ORB-00104])
- Identity attribution end-to-end: runtime ToolContext wire-up, automation-driven Review / Done transitions, git author resolver, and the ship-batch Done loop closed the recurring
implemented_by: "system"bug across PR-open, ship, and review paths. ([ORB-00067], [ORB-00088], [ORB-00089], [ORB-00090], [ORB-00091], [ORB-00106]) - Concurrent worktree setup: SHA-resolution + bounded retry eliminates
.git/configlock races; post-failure cleanup is idempotent. ([ORB-00059]) - Policy dashboard denial identity: real
JobRunIDs are separated from synthetic auditexecution_id; task-lock denials now expose actor / requested-files / conflicts. ([ORB-00066]) - CI failure-recovery task type: corrected from invalid
"issue"to"bug"(valid types: feature / bug / refactor / chore). ([ORB-00056]) - Clippy
expect()violations inorbit-store::legacy_models_warnsthat blocked PRs after the branching flip. ([ORB-00055]) - Dashboard task-row ID column no longer leaves 50px of dead space before the title — column sizes to content. ([ORB-00097])
- YAML stack-overflow advisory resolved (pre-ORB-scheme task). ([T20260430-16])
- Family-identity migration script (
scripts/migrate_family_identity.py) ships with backups, dry-run-by-default, SQLite normalization, and scoreboard regeneration. ([ORB-00081]) - Learning storage migration helper (
orbit learning migrate-layout) ships alongside the flat → per-entity layout flip. ([ORB-00096]) - ADR corpus reconciled: backfilled agent-families, project-learnings, and design-docs orphan ADRs into the global allocation. ([ORB-00103])
- ORB-00080 coverage gap closed: end-to-end planning-duel regression test, crew-driven CLI invocation test, and projection field labeling. ([ORB-00087])
- Dashboard cleanup: API route inventory footer removed; "rejected" status chip removed. ([ORB-00082], [ORB-00084])
- Local CI cleanup: warning-deny clippy across MCP / tools / core / engine / CLI (large-enum boxing, items-after-test ordering, expect formatting, bind-vs-map); task-review scoring coverage extended to the Grok reviewer; design-doc
Last updated:refresh across eight docs. ([ORB-00108]) - Unattributed commits: README refreshes ([commit b35724da], [commit 836b307c], [commit 64f9685d], [commit f9397605], [commit 008d172a]); artifact backfill (ADR-0164, L20260517-7, L20260517-8) ([commit 44889e63]);
make cleanup-branchestarget ([commit 51d0777a]);.gitignorelock files ([commit 8f00912a]); track.orbit/learnings/+.orbit/adrs/in git ([commit 0106ff3a]); duel configuration in orbit settings ([commit bcefa2a4]); learning-search absolute-path handling fix ([commit 052376ff]); agent model-pair updates for Codex and Claude ([commit 0657b991]); rename executor model-pair override (PR #240) ([commit 2925a4b7]).
- Project-learnings push-injection (L1/L2/L3): relevant learning summaries are now injected into agent context at three layers — engine pre-prompt before runtime spawn, MCP sidecar on path-bearing tools (
orbit.graph.show,orbit.graph.refs,orbit.task.show), and a Claude CodePreToolUsehook onEdit | Write | Read. Summary-only payloads with per-session dedup, per-call caps, and anORBIT_SESSION_IDenvelope for cross-process dedup. ([ORB-00009]) - First-class design-docs surface (
orbit.design.*+orbit design checkCLI): four MCP tools (init,list,show,check) plus a Rust port of the design-doc decay checker, withorbit workspace init --designseedingdocs/design/CONVENTIONS.mdwhen absent.make check-design-docsandscripts/check_design_doc_decay.pynow wrap the Rust path. ([ORB-00019]) - Default-seeded skills aligned across asset, registry, plugin, and router catalogs:
orbit-learningandorbit-designonboarded;orbit-review-taskand the semantic-search skill brought into the default seed and the plugin'sskills/symlinks; three drift-detection unit tests guard the four catalogs against recurrence. Default seed bumped 7 → 11. ([ORB-00020], [ORB-00022]) orbit workspace init --inject-agent-rules: opt-in flag writes an idempotent Orbit-rules block intoCLAUDE.mdandAGENTS.mdat the workspace root, delimited by<!-- orbit-managed:start/end -->markers. Block content sourced from an editable asset; malformed marker pairs refuse to write. ([ORB-00023])- Inline task status transitions in the dashboard: per-task actions row gains a status selector wired through the existing
PATCH /tasks/:idbackend, ordered bySTATUS_ORDERwithdonelast and excludingrejected/archived/friction. Surfaces a "no longer shown in dashboard list" notice when transitioning todone. ([ORB-00025]) orbit.learning.*exposed over MCP: the full eight-tool learning surface (add,list,search,show,update,supersede,prune,reindex) is now reachable from every MCP client, not justorbit tool run. Restores parity with theorbit-learningskill instructions. ([ORB-00039])
- PID identity & stale-run probe stability: versioned
ps-lstart-utc-v1:token replaces rawlstartoutput (recorded underTZ=UTC/LC_ALL=C) so live workers are no longer falsely marked failed across timezone changes; a newOwnerIdentity::ProbeUnavailableoutcome distinguishes transientpsfailures from genuinely dead PIDs, preventing single-probe terminalization of live workers. Adds arbiter-sideorbit.duel.plan.winnerregression coverage. Backward-compat read path (LegacyLiveUnverified) handles existing persisted tokens. ([ORB-00036], [ORB-00037]) - Job-step error messages reach the dashboard:
V2AuditEventKind::{StepFinished, RunFinished}gain an optionalerror_messagefield; the failure reason is preserved at emit time and surfaced by the audit reader so the Steps and Events tabs no longer show a bare red dot. Backward-compatible — older audit files load unchanged. ([ORB-00026]) - Gemini direct-agent sandbox + planner/arbiter artifact persistence: narrow macOS sandbox allowances for Orbit child-runtime writes (global logs, DB sidecars, task workspace bundles, workspace semantic DB), tightened HOME-derived defaults, and improved planning-duel missing-artifact diagnostics so
orbit.duel.plan.add/winnerwork under sandbox without home-directory re-allow. ([ORB-00027], [commit f3919a99], [commit e706d596]) - Gemini CLI token accounting: the shared response usage parser now reads
stats.models.<model>.tokens.{input,prompt,cached,candidates}without double-counting role aggregates, so Gemini direct-agent invocations no longer persist as zero-token traces. ([ORB-00028]) - Graph diagnostics quality:
orbit.graph.shownow returnsdid_you_meansuggestions for unresolvable method selectors; exact-nameorbit.graph.searchranks definition kinds (trait/struct/enum/type/function/module) above impl-method selectors;orbit.graph.packcarries typedunresolvedreasons (not_found/outside_indexed_roots/stale_snapshot);orbit.graph.overviewcarries a typeddowngrade_reasonwith threshold/actual. ([ORB-00029], [ORB-00030], [ORB-00031], [ORB-00032]) - Task bundle creation no longer leaks a lock sentinel or double-dots its name:
TaskBundleStoreV2::create_bundlenow locks on the bundle directory target and unlinks the.ORB-XXXXX.locksentinel inside the locked closure; the old pre-dottedcreate_lock_pathhelper was removed. Concurrent-create serialization preserved. ([ORB-00033]) - PR signature attribution corrected:
batch_pr_signatureno longer falls back tocreated_by(which often names a planner or a human filer); when no task carriesimplemented_by, the signature falls back to the PR-opening agent's model identity, which is by construction the author of the commits. ([ORB-00034]) - Dashboard AGENT LOGS rendering:
<pre>switched towhite-space: prewith horizontal scroll so long single-line stdout (e.g. Codex JSON envelopes) and multi-word stderr stay legible instead of fragmenting one token per row. ([ORB-00035]) - Dashboard friction-chip cleanup: removed dead
frictiontask-status references fromSTATUS_ORDERand the approve/reject eligibility sets. The diagnostics-tab friction surface (/api/diagnostics/friction) is untouched. ([ORB-00024])
make ci-fastintroduced for pre-handoff checks: fmt-check + guardrail scripts, no compile.make cistays the canonical merge gate via PR CI. Agent guidance updated to clarify whenmake cifailures classify as unrelated CI blockers vs task regressions. ([commit 4c22fa19], [commit 89ebc578])- Release docs cross-linked:
RELEASING.mdanddocs/RELEASE.mdnow reference each other so a first-time releaser landing on either file finds both. ([ORB-00040]) - Deprecated activity/executor YAML assets removed: cleanup of seeded resources that are no longer referenced by the runtime. ([commit c9cf36cc])
devaluebumped 5.7.1 → 5.8.1 inwebsite/. ([commit f08446e1])
- Claude Code plugin SessionStart hook: the Orbit plugin now ships a
SessionStarthook (plugin/hooks/check-workspace.sh) that detects an uninitialized workspace via a pure filesystem walk and surfaces asystemMessageinstructing the user to runorbit init/orbit workspace init. Closes the silent-no-op gap whereorbit mcp servewould attach with zero tools and no in-session signal. ([ORB-00018])
- No-diff PR handoffs:
pr_opennow treats branches with zero commits ahead of the configured base as successful repository-noop handoffs, moves completed tasks toreview, returnspr_created: false, and avoids creating an empty GitHub PR. ([ORB-00016])
- Workspace lint guardrails: codified Rust practice lints for panic surfaces, stdout/stderr usage, and async lock guards in
[workspace.lints], with scoped allowlists andCLAUDE.mdupdated to separate enforced rules from conventions. ([ORB-00013]) - README workspace and MCP surface docs: documented the
.orbit/workspace layout, committed project-memory directories, and the agent-facing MCP tool namespaces. ([commit b99d3796])
- Deprecation warning routes through
tracing: theknowledge.task_id_patterndeprecation notice was emitted viawriteln!directly to stderr fromorbit-core, contradicting theCLAUDE.md"tracingfor diagnostics;eprintln!only inorbit-cli" rule and leaking intocargo testoutput. Now goes throughtracing::warn!with a structuredconfigfield.
- Release metadata recovery: backfilled the CHANGELOG entry for v0.5.0 (tagged without one) and aligned
Cargo.tomlworkspace version +Cargo.lockto v0.5.1. v0.5.0 binaries shipped reportingorbit --version0.4.0because the workspace Cargo version was not bumped at tag time; v0.5.1 binaries report0.5.1. Tag-message and commit-message formats now followRELEASING.md.
- Task artifact v2 cutover: the v1 single-file task store is replaced end-to-end by a bundle-based v2 store with status-neutral directories, append-heavy sidecar layout, a SQLite registry for fast lookups, a runtime backend, generated indexes, atomic delete, reservation scoping by workspace binding, search refinements (binary-artifact gating, UTF-8 validation), and a forward-only YAML migration framework keyed on
schema_version. ADRs 001/002/003/004/007 for the v2 design flipped to Accepted; the v1 store, the legacy migration helpers, and the[task] artifact_store = "legacy"config gate are all gone.
- Legacy task artifact store removed: the v1 single-file task store and its migration helpers were deleted in favor of the v2 bundle store.
[task] artifact_storeaccepts"v2"as a no-op for forward compatibility and rejects"legacy"with an explicit migration error. Workspaces still on legacy storage must migrate under v0.4.0 before upgrading. ([commit e9582eba], [commit 222f6020], [commit 123f89f7]) Task.workspace_path/Task.repo_rootdropped from the update path:TaskAutomationUpdate,TaskRecordUpdateParams, andTaskDocumentUpdateParamsno longer accept these fields, and the v2 document layer rejects them at load. Worktree setup and parallel-batch dispatch no longer thread them through. The fields remain on the public DTO via projection from workspace metadata, but write-path inputs that include them now fail. ([commit 6beb14a2])
- ADR-artifact subsystem (
orbit.adr.*): ADRs lift out of per-feature4_decisions.mdmarkdown into first-class artifacts at.orbit/adrs/<status>/<id>/{adr.yaml,body.md}with globally-uniqueADR-NNNNIDs and a three-state lifecycle (proposed/accepted/superseded). Ships domain types, a SQLite envelope index, a file store with per-ADRfs2locks, five tools (add,show,list,update,supersede) with lifecycle audit rows, anorbit adr migrateone-shot, and a parser/sweeper hardened against rollup-bullet form and code-fenced examples. Migration imported 142 ADRs (97 accepted / 39 proposed / 6 superseded) across the existing corpus. The envelope'slegacy_id: Stringfield was renamed tolegacy_ids: Vec<String>mid-development per the ADR-002 amendment; pre-GA churn, no external consumers yet. ([T20260510-27], [T20260510-28], [T20260511-1], [T20260511-2], [T20260511-3], [T20260511-11]) - Project learnings subsystem (
orbit.learning.*): workspace-scopedLearningFileStoreunder.orbit/learnings/<id>/learning.yamlwith a SQLitelearnings_indexfor fast scope-glob lookups on the injection hot path. Eight MCP tools (add,list,search,show,update,supersede,reindex,prune) plus matchingorbit learning <verb>CLI;orbit learning migrate-layoutupgrades legacy flat workspaces. Learnings travel with the repo via a carved-out.gitignoreentry. End-to-end dispatch latency p95 ≈ 0.04 ms at 500 records. ([T20260511-5], [T20260511-6], [ORB-00096]) - Plugin install contract locked down:
make release-checkenforces version lockstep acrossplugin/npm/package.json,plugin/.claude-plugin/plugin.json,npm view @orbit-tools/cli, andgh release list -L 1;scripts/smoke-plugin-install.shexercises the published@orbit-tools/cli@latestpostinstall + MCPtools/listhandshake;.github/workflows/smoke-plugin-install.ymlruns the smoke weekly and on everyv*tag on macOS and Linux;docs/RELEASE.mdcodifies the chain. v0.5.0 switched the npm publish step to manual after the workflow ran into account-level 2FA. ([ORB-00012], [ORB-00014]) - Typed error discriminators:
KnowledgeError.kindis now the typedKnowledgeErrorKindenum, and ten per-kindOrbitError::*NotFound(String)variants consolidate intoNotFound { kind: NotFoundKind, id: String }with exhaustive matches in every error-code translator. JSON wire shape is preserved via#[serde]; internal Rust matchers move to the typed kind. ([ORB-00001]) - Property + snapshot tests on protocol boundaries: proptest-backed
Selectordisplay/parse roundtrip (256 cases per variant), multi-threadedGraphLockGuard/LockStoreconcurrency with a 5-second deadline, and committed JSON-snapshot coverage forAuditGuardsuccess/failure/denied events. ([ORB-00002]) - Knowledge graph workflow relocation:
build/show/search/historyworkflows moved fromorbit-toolsinto a neworbit_knowledge::workflowsmodule, soorbit-knowledgeowns both the tool surface (commands/) and the host application surface (workflows/). ([commit 5fc2b72c]) - Forward-only YAML migration framework:
orbit_common::migration::PlanchainsValue → Valuesteps keyed onschema_version;OrbitError::Migrationseparates chain failures from store/parse errors; the v2 task-bundle envelope read path now flows throughtask_migrations::envelope_plan()(empty chain today — next schema bump adds oneadd_stepcall). ([commit 01928e76]) - Semantic companion install hardening: companion installation is version-aware,
--forcereinstalls supported, and background-companion stderr is suppressed during task-mutation indexing. ([T20260510-26])
pr_opentemplate tolerates legacybatch_idoverrides:worktree_setupemitsbatch_idas a deprecated alias equal tojob_run_id, andrequired_job_run_idacceptsjob_run_id→run_id→ legacybatch_idin that precedence. Recoverstask_pr_pipelineruns whose stale resource overrides still reference{{ steps.worktree.output.batch_id }}. ([ORB-00010])- Retired v1 / stub paths fail loudly instead of silent success:
OrbitRuntime::get_jobandRuntimeHostv1 job lookup return an explicit retired-v1 error instead ofOk(None); thepromote_agent_mainandrevert_on_reddeterministic actions fail with a "retired stub" error instead of returning skipped JSON. Tightens validation on inputs that were already invalid by spec. ([ORB-00007]) - Architecture and design-doc drift fixed:
ARCHITECTURE.mdwas regenerated fromcargo metadatato reflect the live workspace graph;make check-design-docswas cleared by refreshing staleLast updated:metadata and replacing moved/deleted file references across ten design folders. ([ORB-00006]) - Smoke plugin-install assertion fixed: assertion was checking
"orbit\.but MCP wire names use underscores (sanitize_tool_nameinorbit-mcp/src/adapter.rsreplaces.with_). Without this fix the on-tag smoke would have false-failed. ([ORB-00014])
- Per-crate stability tier markers:
[package.metadata.orbit] stability = ...added to all fourteen workspace crates (stable:orbit-common,orbit-store;experimental:orbit-embed-companion,orbit-registry;internal: the remaining ten).scripts/check-stability.shenumerates members viacargo metadata, validates the marker, and fails closed with named offenders; wired intomake stabilityandmake ci. ([ORB-00005]) - Missing-docs guardrail: workspace-wide
missing_docs = "warn"in[workspace.lints.rust];RUSTDOCFLAGS=-D warnings cargo doc --no-deps --workspacewired intoscripts/ci-guardrails.sh; 278 accidentally-pubitems narrowed topub(crate)(6.8% of the 4,116-item baseline). Legacy allow-fences in place for the remainder. ([ORB-00004]) - Community health files:
CODE_OF_CONDUCT.md(Contributor Covenant v2.1, contact via GitHub Security Advisories),.github/PULL_REQUEST_TEMPLATE.mdwith linked Orbit task ID +make ci/make check-design-docscheckboxes, and three.github/ISSUE_TEMPLATE/*.ymlissue forms with a 14-crate dropdown sourced from livecrates/listing. ([ORB-00011]) - Release runbook (
RELEASING.md): pre-1.0 versioning policy with explicit breaking-vs-non-breaking criteria, 11-step release checklist, CHANGELOG conventions, and tag-push CI workflow description. ([T20260510-24]) - Semantic search surfaced in agent instructions: new semantic-search skill modeled on
orbit-graph, plus pointers fromorbit-create-task,orbit-execute-task,orbit-review-task,agent_implement.yaml,agent_review.yaml,epic_orchestrator.yaml, anddispatch_agent.yaml. All references use "if available" / "optional" language so missing companion never hard-fails a workflow. ([T20260511-4]) - Design-pattern reference docs added:
docs/design-patterns/{command,strategy,raii_guard,newtype,error_translation}.mdso feature work can copy from documented references instead of inventing new shapes. ([commit 3adcd838], [commit c713cc30], [commit 66389575], [commit f2f82bf1], [commit aa407aa0]) - Design-doc decay check: new
scripts/check_design_doc_decay.pyandmake check-design-docsflagdocs/design/*docs whoseLast updated:precedes the last commit on any referencedcrates/.../*.rsfile. ([commit 18c48744]) - Workspace lint table introduced:
[workspace.lints]in rootCargo.tomlwith each crate inheriting vialints.workspace = true; mechanical lint rules moved out ofCLAUDE.mdprose. ([commit 0cbb037d]) CLAUDE.mdrefactored to point atARCHITECTURE.md: crate layering moved to a dedicated architecture doc;CLAUDE.mdshrinks to project rules and judgment calls. ([commit b7c590aa], [commit 9362730b], [commit 7582af9d])- MCP server configuration for additional environments:
.codex/config.toml,.gemini/settings.json, and.vscode/mcp.jsonadded so Codex/Gemini/VS Code agents pick up Orbit MCP out of the box. ([commit 200ee6fd]) - README simplification: Quick Start trimmed; positioning sentences moved to design docs. ([commit 75699824])
- Agent skills symlink:
.agents/skillssymlink added so external agent harnesses pick up the seeded skill set. ([commit 9f7bf89b]) - Lessons log update:
docs/LESSONS.mdextended with a workflow lesson. ([commit 024013af])
- Pivot to "auditable agentic task management": README and landing-page positioning realigned around intent attribution and audit trails, with throughput and parallel-execution sections refreshed to match.
- Knowledge graph reads on SQLite: per-build
graph_index.sqlitesidecar with read-only fast paths forgraph.overview,graph.search, andgraph.show, plus an output-equivalence harness against the JSON fallback. - Semantic search foundation (preview): hybrid (BM25 + cosine + RRF) retrieval over tasks, delivered as a separately-installed
orbit-embed-companionbinary. Preview status — surface may change before v1.
- Friction reports relocated: friction is no longer a task type or status. Records live as append-only markdown under
.orbit/frictions/{yyyy}-{mm}/F{nnn}.mdand are managed throughorbit.friction.add/list/show/stats.orbit.task.addrejectstype: friction/status: friction; web API and scoreboard JSON dropfriction_bounty. ([T20260510-13]) - Task type taxonomy reduced: the
task | feature | epic | issue | bug | chore | refactor | frictionenum collapses tofeature | bug | refactor | chore.orbit.task.addandorbit.task.updatereject the removed values; existing tasks were migrated. ([T20260510-14]) - Attribution narrowed to
model: theagentfield is removed fromActor;orbit.task.addrejects anagentparameter and Orbit infers the agent family frommodelviaagent_from_model. MCPorbit_task_list,orbit_task_search, andorbit_task_review_thread_listresponses are now object-shaped (previously top-level arrays) so Cursor and VS Code accept them. ([T20260510-15]) - Knowledge-graph leaf IDs unified across extractors: Python, Rust, Java, and TypeScript leaf selectors now use a single canonical form so SQL and JSON paths return set-equivalent results.
GRAPH_SQLITE_INDEX_SCHEMA_VERSIONbumps; consumers caching selectors must rebuild. ([T20260510-7]) - Semantic search requires a companion binary:
orbit-embed-companionis installed separately viaorbit semantic install;orbit semantic *and the matching MCP tools fail until it is present. ([T20260510-9], [T20260510-10]) JobV2Steprejects multi-body shapes: YAML steps that previously parsed silently with bothtargetandparallel(or any other body combination) now fail at load. ([T20260509-31])orbit-locksskill removed: the seededorbit-locks/SKILL.mdand the ad-hocorbit.task.locks*instructions in the seededorbitskill are gone — the gate pipeline still owns reservations. External agent prompts referencing the skill must be updated. ([T20260510-17])
- Knowledge graph SQLite read facade: per-build
graph_index.sqlitewith versioned schema, read-only facade with graceful JSON fallback, and SQL fast paths forgraph.overview(aggregation),graph.search(exact-name, path-prefix, and substring), andgraph.show(selector lookup withchildrenrepopulated via a forward-pointer edge table). ([T20260509-70], [T20260509-71], [T20260509-72], [T20260509-73], [T20260509-74]) - Knowledge graph latency wins: lazy source hydration via
GraphReadOptions, a bounded default-ranking work cap on search, and aBinaryHeaptop-K inoverview.top_files. ([T20260509-65], [T20260509-67], [T20260509-68]) - Knowledge command surface: graph business logic — ranking, classification, fast-path orchestration — relocated into
orbit_knowledge::commands::*so non-tool consumers share canonical behavior. ([T20260510-5]) - Semantic search subsystem:
orbit-embedclient,orbit-embed-companionbinary,embeddingsandtasks_ftsSQLite schema, paragraph chunker, BLAKE3 dedup, task-mutation index hooks, andorbit semantic install/uninstall/reindex/stats/search/relatedCLI plus MCP surface. ([T20260510-3], [T20260510-9], [T20260510-10], [T20260510-20]) - Task tags: first-class
tags: Vec<String>field with normalized SQLite index and--tagfiltering onorbit task list/search. ([T20260510-12]) - Activity/job runtime polish: wildcard-aware tool allowlists honored at dispatch and HTTP-loop schema advertisement, asset-load-time allowlist validation, agent-loop
on_denial: continue, literal-boolean condition atoms, and exclusive locking on duel scoreboard appends. ([T20260509-15], [T20260509-22], [T20260509-23], [T20260509-25], [T20260509-32]) - Recovery role configurability: seeded step-failure recovery activity uses
role: reviewerand resolves agent/model from[agent.reviewer]config instead of hardcoded Codex. ([T20260509-14]) - Done-task sync cap: website task sync caps generated pages to the 100 most recent
donetasks. ([T20260509-20]) - Debug-job-failure skill: seeded
orbit-debug-job-failureSKILL.md teaching agents how to investigate failed/stuck/cancelled job runs across run state, audit events, blobs, and live processes. ([T20260509-79]) - Graph-latency benchmark: split
benchmarks/CONVENTIONS.mdinto agent vs perf RESULTS schemas, scaffoldedbenchmarks/graph-latency/with three-tier Python/Java/Rust corpora, and ran v1/v2 sweeps against the post-SQLite read paths. ([T20260509-63], [T20260509-87], [T20260510-4])
- Output-equivalence between SQL and fallback paths:
graph.searchSQL widened to substring match aligned with the navigator andgraph.showrepopulateschildrenvia a forward-pointer edge table. ([T20260510-1], [T20260510-2]) - Workflow stop on implementer envelope failure:
peek_response_statusextracts embedded Orbit envelopes from CLI stdout that contains explanatory prose before the JSON, so failed implementations no longer advance to push/PR. ([T20260509-15]) ship-autoempty backlog: condition evaluator skip guards no longer fail whenbundle_countis zero. ([T20260509-11])- Parallel dispatcher hang on worker timeout: scoped-thread workers now exit through a cancellable boundary so the pipeline returns within its own timeout. ([T20260509-38])
- Subprocess timeout cleanup: bare
spawn_with_timeoutstarts children in a process group/session so grandchildren are killed and pipes don't leak. ([T20260509-40]) - Stdout no longer duplicated into
DispatchOutcome: blob refs are the source of truth, with a bounded preview retained. ([T20260509-43]) - Path-traversal hardening: task store ID validation, policy candidate-path component checks, resource-name validation in policy/executor stores, and an absolute-path probe for
sandbox-exec. ([T20260509-26], [T20260509-27], [T20260509-28], [T20260509-30]) - Tool deletion guard:
orbit.task.deleteMCP tool respects the same protected-status guard asorbit task delete. ([T20260509-44]) - Backend resolution: invalid
[runtime] backendvalues reject before dispatch instead of falling through to preview HTTP. ([T20260509-45]) - Architecture guardrail:
scripts/check-dependency-direction.shderives the workspace-crate list fromcargo metadataso new crates can't drift past the check. ([T20260509-46]) - JSON output purity:
orbit task approve --all-proposed --jsonand reject equivalents emit pure JSON on stdout. ([T20260509-47]) - Dashboard dependencies: dependency-status index includes
doneandarchivedtasks so visible rows don't misreport completed deps as missing. ([T20260509-48]) - Reject help/help-truth alignment: top-level task help describes the actual reject transition matrix. ([T20260509-50])
- Symlink scanning: knowledge scanner skips and canonicalizes symlinked dirs to prevent index escape and cycles. ([T20260509-33])
- Graph freshness: manifest persists exact Git identity rather than relying on committer timestamp. ([T20260509-34])
- GitHub PR result validation:
github.pr.reviewandgithub.pr.comment.replyvalidate JSON shape before reporting success with id0. ([T20260509-36]) - MCP name collisions: dot-to-underscore name mapping detects ambiguity on startup. ([T20260509-37])
- Git author identity: workflow commits set per-implementer author dynamically without writing repo-local
git config user.*. ([T20260508-22], [T20260509-12]) - CI clippy guardrails: cleared
manual_contains,needless_borrow,useless_conversion,match_like_matches_macro,empty_line_after_doc_comments,too_many_arguments,doc_lazy_continuation, andquestion_markviolations under-D warnings. ([T20260509-18], [T20260509-61], [T20260510-15], [T20260510-22]) fast-uriDependabot alerts: addressed and documented dev-onlyfast-uriadvisories onwebsite/package-lock.json. ([T20260509-57])
- Module decomposition: split
command/web/api.rs(3,376 LOC),activity_job/job_executor.rs(2,841 LOC),activity_job/cli_runner.rs(2,161 LOC),runtime/orbit_tool_host/mod.rs(2,033 LOC),command/mcp/setup.rs(1,964 LOC), and theactivity_job/groundhog.rsrunner. ([T20260509-1], [T20260509-2], [T20260509-3], [T20260509-4], [T20260509-5], [T20260509-19]) - Embed crate ownership: relocated
vector::*and the semantic command surface fromorbit-storeandorbit-coreintoorbit-embed, reversing the dep arrow soorbit-storeno longer knows the embedding feature exists. ([T20260510-20]) - Panic audit: classified ~1,864
unwrap/expect/panic!sites and removed the accidental ones in execution-critical paths. ([T20260509-6]) - Test coverage on highest-risk seams: focused tests for the activity/job DAG executor and the macOS sandbox/policy boundary. ([T20260509-7])
- Plan-duel
context_filesextraction: duel resolver auto-populatestask.context_filesfrom the winning plan's Context Files section. ([T20260509-9]) - Knowledge-graph, policy-sandbox, and Groundhog doc hygiene: refreshed owned design docs to current surface.
- Task lineage design (first draft): seeded
docs/design/task-lineage/with edge schema, three derivers, bipartite bridge,featureclosure, and symbol-biography renderer. ([T20260510-21]) - Project learnings design (seed): seeded
docs/design/project-learnings/with hook-injection layer rationale; deferred until semantic search is Accepted. ([T20260510-11]) - Semantic search v2 design pivot: switched to companion-binary architecture per ADR-005. ([T20260510-3])
- Orbit-create-task skill: tightened
context_filesrule (existing modified or deleted files only, prefer file-level selectors). ([T20260509-83]) make cialignment:make buildfailures resolved alongside the dep-direction script. ([T20260510-22])- Release metadata: bumped Cargo workspace, plugin manifests, and npm proxy metadata to v0.4.0.
- Pipeline dispatch reliability: hardened parallel, gate, and epic pipelines with failed-child completion handling, longer task lock coverage, epic timeout/convergence fixes, resolved workspace subprocess cwd, and per-step agent log/error surfacing. ([T20260427-34], [T20260427-36], [T20260427-38], [T20260427-40], [T20260508-8], [T20260508-14])
- Metrics and public docs: split the public metrics surface into Operations and Scoreboard views, added done-task sync pages for orbit-cli.com, refreshed positioning/reference docs, and refined the website UI. ([T20260508-4], [T20260508-16], [T20260508-19], [T20260508-20], [T20260507-21])
- Registry and benchmark tooling: added the
orbit-registrycrate and identity-key benchmark harness for exercising knowledge graph selector stability. ([T20260507-12], [T20260508-2])
- macOS sandbox and CLI execution: allowed Claude's
$HOME/.claude.jsonlock/tmp siblings, re-allowed the active job-run worktree after global deny rules, and demoted successful CLI exits when the inner Orbit envelope reported failure. ([T20260508-13], [T20260508-17]) - Workflow defaults and links: made workflow base branches resolve from
[workflow] base_branchwhen CLI flags are omitted, and fixed task-ID links in generated PR bodies with an opt-in URL template. ([T20260508-11], [T20260508-12]) - CI clippy guardrails: grouped macOS sandbox spawn inputs into a request struct so strict workspace clippy passes under
-D warnings. ([T20260508-21])
- Release metadata: bumped Cargo workspace crates, plugin manifests, install examples, and npm proxy metadata to v0.3.1. ([T20260508-21])
- Release packaging: kept GitHub Release tarballs, checksums, Homebrew tap updates, and installer smoke tests as the supported release path, while removing the npm publish step from the tag workflow.
- Stable surface: CLI agent backends. v1 supports
backend: clias the stable agent invocation path, running Codex, Claude Code, Gemini CLI, and other official CLIs as supervised subprocesses.backend: http(LoopTransport) and the Groundhog checkpoint runner remain preview-only for v1; they are exercised in tests but can change before v2.
- Activity/job schema v1 removed: loaders now reject
schemaVersion: 1activity/job assets, the v1 reconcile/runtime/store paths are gone, andschemaVersion: 2is the canonical activity/job surface. ([T20260419-2156], [T20260420-0036]) - Workflow commands reorganized: stable entrypoints are
orbit run ship <TASK_ID>...,orbit run ship --mode local <TASK_ID>...,orbit run ship-auto,orbit run duel-plan <TASK_ID>, andorbit run job <JOB_ID>. The directorbit run <JOB_ID>shorthand and workflow-specificrun ship list/showandrun duel list/showcommands were removed; useorbit run historyandorbit run showfor job-run inspection. ([T20260417-0248], [T20260419-0355], [T20260425-2010], [T20260426-0742]) - Task attribution history moved to
orbit graph history: selector history is graph-owned, so the query now lives next toorbit graph search/show, and rebuilds useorbit graph build. Bothorbit graph buildandorbit graph historyaccept--task-id-pattern <regex>; workspace configknowledge.task_id_patternis the steady-state setting, with CLI flag > config > Orbit default precedence. The selected pattern is recorded inmanifest.json, and mismatches emit a stderr warning.orbit.graph.historyexposes the same surface to MCP clients. ([T20260426-0507])
- Activity/job v2 runtime: added schema v2 activities and jobs with typed DAG blocks (
parallel,fan_out,loop,retry,when), activity name resolution,backend: autonormalization,backend: clidispatch, HTTP agent loops, session-bound loop steps, and a v2 audit envelope with workspace provenance. ([T20260418-2018], [T20260418-2019], [T20260418-2143], [T20260418-2210], [T20260419-0002], [T20260419-0104]) - Seeded task pipelines: added load-bearing seeded workflows for PR, local, gate, auto-dispatch, and epic shipment, including task reservations, backlog bundling, admission-controlled dispatch, and session-backed epic orchestration. ([T20260419-0622-3], [T20260419-0623], [T20260419-0623-2], [T20260419-2347])
- Knowledge graph: added the Rust
orbit-knowledgegraph,orbit graph build/update/search/show, graph MCP tools, compact overviews, callers/implementors/dependency navigation, edit buffering, shared locks, auto-refresh, branch-scoped refs, task-ID attribution metadata, and markdown/config/table extraction. ([T20260411-0424], [T20260412-0645-2], [T20260412-0645-3], [T20260421-0358], [T20260421-0528], [T20260422-1540]) - MCP integrations: added the
orbit-mcpcrate,orbit mcp serve, safe default graph/task tool exposure, external MCP/plugin tooling, andorbit mcp init/removesetup for Claude, Codex, and Gemini clients. ([T20260418-0336], [T20260419-0236], [T20260422-1713], [T20260426-0354]) - Dashboard and observability: added
orbit web serve; task, job, audit, scoreboard, and dashboard APIs; diagnostics and recent-runs views; task actions; copyable task IDs; connection health; skeleton/loading states; markdown rendering; and live-data animations. ([T20260417-0346], [T20260417-0412], [T20260417-0427], [T20260417-0437], [T20260417-0528], [T20260418-2004], [T20260426-0354]) - Task planning and search: added structured task plans, dependency support, epic task type support, selector-first task context, agent task search, and richer task field projection for agent/tool callers. ([T20260419-2300], [T20260420-0509-2], [T20260420-0521], [T20260421-0445], [T20260422-1756])
- Groundhog execution model (preview): added Groundhog chronicle serialization, workspace snapshots, verb tools, checkpoint verification, and a dedicated Groundhog v1 activity runner. ([T20260420-0509], [T20260420-0509-3], [T20260420-0509-4], [T20260420-0510], [T20260420-0510-2])
- Provider and evaluation support: added Gemini support, configurable agent/model selection, provider invocation traces, HTTP LoopTransport implementations for Anthropic/OpenAI-compatible/Gemini providers, planning duels, scoreboard attribution improvements, and versioned knowledge-graph benchmark harnesses. ([T20260411-1937-2], [T20260412-0457-2], [T20260412-1939], [T20260412-2129], [T20260418-0645], [T20260418-0759], [T20260422-1609])
- Job run observability:
orbit run ship --json,orbit run history,orbit run show, and directorbit job runnow retain actionable failure details and durable run-state/job-history records, including synthetic job-level steps for early v2 pipeline failures. ([T20260423-0445], [T20260423-2004-4], [T20260425-2010], [T20260426-0742]) - Branch-scoped knowledge graph refs: graph builds now write
.orbit/knowledge/graph/refs/heads/<branch>.jsonfiles that point at immutable per-build indexes, reads default to the current git branch with default-branch fallback, and legacy.orbit/knowledge/graph/refs/current.jsonstores auto-migrate on first open/write. ([T20260421-0358]) - Knowledge graph hardening: graph reads and refreshes recover from corrupted stores, avoid stale worktree data, gate refresh/search hot paths, prune missing context files from locks, and hydrate task IDs idempotently during attribution. ([T20260416-0719], [T20260417-0307], [T20260420-0540], [T20260421-0652])
- Dispatch and locking correctness: task locks now detect directory/file overlaps, backlog selection filters locked groups, failed task-scoped runs move tasks to blocked with job/run/error context, and drained local batches no longer fail spuriously. ([T20260412-0443], [T20260417-0301], [T20260419-2109], [T20260420-0014])
- Workflow compatibility: merged object-valued job defaults with caller input, aligned the Quick Start approval flow with the current task lifecycle, and routed retired workflow inspection docs/errors to
orbit run history/show. ([T20260423-0445], [T20260423-0447], [T20260423-2004-2], [T20260425-2010], [T20260426-0742]) - Release and developer tooling: restored release CI targets, repaired advertised developer targets, kept custom roots isolated, and fixed crashes/empty listings after seeded activity/job initialization. ([T20260419-2347], [T20260423-2004], [T20260423-2004-3], [T20260423-2004-5])
- Security and concurrency hardening: added localhost origin checks for web write endpoints, serialized diagnostics JSONL appends, hardened task-store concurrency, tightened filesystem/tool-runtime path boundaries, and strengthened agent protocol handling. ([T20260417-0557], [T20260417-0558], [T20260418-1928])
- Crate architecture: extracted
orbit-common,orbit-knowledge, andorbit-mcp, merged the olderorbit-typessurface intoorbit-common, decomposed execution/runtime modules, and kept crate dependency direction aligned with the documented architecture. ([T20260411-0008], [T20260419-2014]) - Documentation and positioning: added Orbit positioning docs, design-doc conventions, activity-job/knowledge-graph/Groundhog design docs, benchmark reports, and README updates for the current workflow and MCP surfaces.
- Parallel batch execution: dispatch and execute multiple tasks in parallel with file-level conflict detection and shared worktrees
- Auto-cleanup on merge: ship workflow now deletes the remote branch after a successful PR merge
--parallelismflag: serialized as JSON integer instead of string, fixing schema validation failure onorbit run ship --parallelism N- Stale default artifacts:
orbit workspace initnow always refreshes default skills, activities, and jobs to their latest embedded versions (custom artifacts are preserved) - Clippy warning: resolved unused-mut warning and removed clippy from CI
- Default branch renamed from
agent-maintomain - Removed
orbitlabel from PR creation - Agent configuration updates
Initial release of Orbit.
- Task lifecycle: propose, approve, implement, review, and archive tasks with full history tracking
- Activity system: reusable operations with defined input/output schemas and three spec types (agent_invoke, cli_command, automation)
- Job engine: composable multi-step pipelines with conditional execution, retry logic, nested jobs, and parallel dispatch
- Workflow aliases:
orbit run ship,orbit run ship-local,orbit run reviewas ergonomic entry points over raw job invocation - Multi-agent orchestration: parallel task workers with file-level locking in shared worktrees
- Multi-model strategy: configurable agent/model per job step (e.g., Opus for planning, Codex for implementation)
- Grouped command surface: run workflows, manage work, configure and inspect
- JSON and table output modes across all commands
- Audit event logging for every CLI invocation
- Layered Rust crate architecture (types, policy, exec, tools, store, agent, engine, core, cli)
- Two-root workspace model: global (
~/.orbit/) and workspace-local (.orbit/) - File-based (YAML) and SQLite persistence
- RBAC policy evaluation engine
- Process sandboxing and timeout handling
- Skill system for agent prompt composition