Skip to content

release: v0.7.0#430

Merged
danieljhkim merged 226 commits into
mainfrom
agent-main
May 23, 2026
Merged

release: v0.7.0#430
danieljhkim merged 226 commits into
mainfrom
agent-main

Conversation

@danieljhkim
Copy link
Copy Markdown
Owner

Promotes v0.7.0 from agent-main to main.

See CHANGELOG.md for the release notes.

Validation from release prep:

  • make release-check failed only for expected pre-tag drift: local plugin/npm are 0.7.0 while npm/latest GitHub release still report 0.6.0.
  • make build passed.
  • make ci-fast passed.
  • git diff --check passed.

claude and others added 30 commits May 17, 2026 10:52
Adds §10c covering back-merge of main → agent-main after release PR
merges, and updates §10b to drop the obsolete fast-forward claim and
document the allow_merge_commit workaround. Captures the agent-main
branch-protection payload (allow_deletions=false) so the auto-delete
setup survives accidental drops.

Codifies the inline housekeeping from the v0.6.0 release session:
back-merge, branch-protection on agent-main, and the merge-commit
repo-setting flip.
…el… [ORB-00113]

Dashboard responsiveness breaks at mid-width: overflowing crew select, cramped filter chips, truncated log column
…x … [ORB-00114]

Dashboard: collapse two-column layout to single column at ~1000px viewport width

Planned-By: codex
…ul… [ORB-00115]

Refactor: split orbit-store v2_store.rs into focused submodules

Planned-By: gemini
…cu… [ORB-00118]

Refactor: split orbit-store sqlite/task_registry.rs into focused submodules

Planned-By: claude
…du… [ORB-00120]

Refactor: split orbit-store v2_bundle.rs into focused submodules

Planned-By: gemini
…se… [ORB-00116]

Refactor: split orbit-store learning_store/api.rs into focused submodules

Planned-By: codex
…fo… [ORB-00121]

Refactor: split orbit-knowledge graph/sqlite_index.rs into focused submodules

Planned-By: grok
…bm… [ORB-00117]

Refactor: split orbit-exec macos_sandbox.rs into focused submodules

Planned-By: claude
…se… [ORB-00119]

Refactor: split orbit-engine automation/vcs/pr.rs into focused submodules

Planned-By: codex
…su… [ORB-00122]

Refactor: split orbit-core command/job/run.rs into focused submodules

Planned-By: codex
…(c… [ORB-00128]

Make the Orbit workspace pass the full `make ci` gate cleanly (clippy -D warnings, tests, docs, guardrails)
Adds an onboarding/discovery skill that triggers when `.orbit/` is absent
or on "what is orbit" / "give me a tour" requests. Body is intentionally
thin: it detects state, picks an install path, and delegates to the
README's "Setup via Agent Prompt" block (locally or via WebFetch on
non-clone install paths) rather than inlining install commands that rot
independently from the README.

Bundled changes to keep the carve-out clean:

- Register `orbit-guide` in `DEFAULT_SKILL_FILES`; bump array sizes 11→12
  on both the const and `default_skill_ids()` return type.
- Add `plugin/skills/orbit-guide` relative symlink.
- Narrow `orbit` skill frontmatter description so it no longer claims
  "any Orbit-related work" — scopes to post-init workflow routing and
  defers setup/tour intents to `orbit-guide`.
- Add `orbit-guide` bullet to the router skill's `## Skill Selection`
  block to satisfy the `router_skill_enumerates_all_defaults` drift
  test (the fifth catalog L20260517-5 flagged).
- Add `orbit-guide` entry to README `## Agent Skills`.

All five skill catalogs in sync; drift tests pass.
A reference companion to 2_design.md §4 that maps the three push-injection
layers (L1 engine pre-prompt, L2 MCP sidecar, L3 Claude Code PreToolUse
hook) against the two Orbit agent tool surfaces (MCP and CLI). Sits next
to glossary.md under references/ so it does not disturb the four-numbered-
doc design layout.

Captures three rules for future enrichments:

- Place by consumption mode (prompt context vs. tool data), not by data
  source.
- Sidecars live in the adapter that owns the session — L2's home in
  orbit-mcp is correct because session dedup and admission caps are
  consumer-shape concerns.
- Both transports must return the same canonical data; enrichment is
  additive only.

Also names the known out-of-envelope CLI gap and the opt-in-flag pattern
for closing it, so future authors do not reflexively pull L2 down into
the tool layer.
Introduces a new learning document that clarifies the use of `orbit audit list --json` as the canonical source for audit-event queries, emphasizing the limitations of the local `.orbit/orbit.db`. The entry outlines best practices for querying audit data, potential pitfalls, and provides guidance on when to use direct SQLite access. This aims to improve user understanding and prevent reliance on outdated local data.
…260517-10

Introduces a new learning document detailing the update of child runtime sandbox permissions when exposing Orbit write tools to activities. It emphasizes the need for explicit reallows in the policy to maintain security while allowing necessary write access. The entry includes a summary of the changes, the rationale behind them, and references a related task (ORB-00129) for further context.
…on… [ORB-00131]

Guard orbit.task.start at the agent_implement activity instruction layer (revert ORB-00130 skill changes)
Captures the rule that workspace-local artifact IDs (ADR-NNNN,
L-NNNNNNNN-N, ORB-NNNNN) must not appear in files shipped as plugin
assets — `crates/*/assets/**`, especially `SKILL.md`. Such files are
injected into end-user agents' prompts in other workspaces, where local
IDs are dangling references. Use Rust source comments for contributor-
facing citations; use project learnings for skill-level guidance.

Mirrors the cross-machine boundary already encoded in ADR-0125 (lineage
is workspace-local; cross-machine reach goes through external_refs).
Surfaced when an agent drafting ORB-00132 nearly added an `ADR-0149`
citation directly into the `orbit-create-task` SKILL.md.

Also includes L20260517-12 (stray test record created during ID
probing) flipped to status=superseded via L20260517-11.
Establishes the convention of citing load-bearing constraints at their
enforcement site with a literal, greppable artifact ID:

- crates/orbit-tools/src/builtin/orbit/task/add.rs: ADR-0149 comment
  above the `workspace` ToolParam, explaining why the field is
  required (home-store projection binding key).
- crates/orbit-store/src/sqlite/audit_event_store.rs: module-level
  doc comment citing L20260517-9 (use `orbit audit list --json`;
  local sqlite can be a stale mirror).

Pure annotation pass — no behavior change, no required:-line edits,
no plugin-asset files touched (per the distribution-boundary rule
for workspace-local artifact IDs).

Sets the format for future citations.
… loop [ORB-00133]

Adds one workflow step to each authoring skill:

- orbit-adr/SKILL.md step 7: when the ADR encodes a code-level
  constraint, drop a `// ADR-NNNN: <rationale>` comment at each
  enforcement site in Rust source. If no single anchor exists,
  record this in the Consequences body and skip.
- orbit-learning/SKILL.md step 3: same pattern for learnings with
  a code anchor, using `// L-NNNNNNNN-N: <rationale>`.

Both steps include a hard prohibition on citing inside
crates/**/assets/** or other consumer-facing surfaces (workspace-
local IDs are dangling refs in other workspaces).

Exit Criteria sections gain one sentence each acknowledging the
new step.

Placeholders only in the new content (`ADR-NNNN`, `L-NNNNNNNN-N`)
— no new literal workspace-local IDs introduced.
This ADR outlines the decision to eliminate the `orbit design check` CLI subcommand and related tools due to their misleading signals regarding design-doc freshness. The change aims to maintain design-doc tooling while relying on code review for quality assurance. This ADR supersedes ADR-0162, which promoted the decay checker to first-class status.
…stry, .orbit/config.yaml is a metadata stub

Captures the toml-vs-yaml distinction for Orbit workspace config so
future agents don't default to yaml when proposing a new behavior knob.

Push-injection scope: .orbit/config.toml, .orbit/config.yaml,
tags orbit-config and config.
orbit and others added 29 commits May 22, 2026 20:17
Resolve review feedback from PR #415:

- Replace `ManagedCompanion::open_current(...).ok()` with an explicit match
  that emits `tracing::debug!` on the discarded error. Covers integrity
  mismatch, missing manifest, path validation failures, and I/O errors;
  debugging "why did this just reinstall" no longer requires a patched
  build to see the cause.
- Expand `path_execution_fallback_rationale` to explicitly name macOS
  (and Windows) as the platforms still carrying the original ORB-00271
  TOCTOU window. The descriptor-based freshness validation runs
  everywhere, but the model-download exec on these targets still goes
  through the path; release notes / docs now have an unambiguous summary
  to point at.
- Tighten the `libc::fork()` SAFETY comment to call out the multi-threaded
  fork hazard (other threads' allocator/runtime locks held at fork time
  end up in indeterminate state in the child) and the precondition that
  `orbit semantic install` is invoked from a synchronous CLI path without
  an active tokio runtime. Notes posix_spawn /dev/fd/<N> as the portable
  fix if that precondition ever changes.
- Add `fd_launch_executes_descriptor_not_path_after_swap`, a Linux-gated
  end-to-end test that opens a marker-writing companion as a
  `ManagedCompanion`, swaps the binary at the install path, then drives
  `download_model`. The marker file (`companion-identity.txt`) proves the
  fexecve path executed the descriptor held by `ManagedCompanion`, not
  the path-swapped binary. Promotes `download_model` to `pub(crate)` so
  the sibling test module can drive it.

Acknowledges: PR #415 review comments.
…270]

Resolve review feedback from PR #416:

- Rename release signing key IDs from date-prefixed
  `orbit-release-2026-05-{primary,successor}` to stable generation labels
  `orbit-release-key-{1,2}`. IDs survive a rotation that promotes successor
  to primary without becoming confusing. The encoded `not_after` and
  `revoked_at` fields still carry the lifecycle metadata.
- Add `notAfter`/`revokedAt` `YYYY-MM-DD` regex validation in the npm
  installer's `normalizeTrustedReleaseKeys` so malformed overrides fail
  closed instead of silently becoming "never expires" under lexicographic
  comparison. Mirrors the shell-side `release_date_number` validator.
- Mark `ORBIT_RELEASE_PUBLIC_KEY_FILE` as deprecated in favor of the
  strictly-superset `ORBIT_RELEASE_TRUSTED_KEYS_FILE`. Both installers now
  log a deprecation notice when the old override is in use; docs updated
  in `docs/RELEASE.md`, `plugin/npm/README.md`, and the getting-started
  install page.
- Rewrite `scripts/check-installer-pubkey.sh` to read the canonical key IDs
  out of `install-binary.js` and assert each appears in `install.sh`,
  instead of hardcoding specific IDs / dates. The guardrail no longer
  trips on legitimate rotations.
- Promote the emergency-revocation npm-immutability caveat in
  `docs/RELEASE.md` from a buried paragraph to a callout above the
  procedure. Add an operator-custody note clarifying that the successor
  private key must be held independently of the primary.

Acknowledges: PR #416 review comments.
…ee checks

Replaced direct calls to `codegraph mark-dirty` and `codegraph sync-if-dirty` with a new script `scripts/codegraph-if-main` that ensures these commands are only executed from the main worktree, preventing issues with linked worktrees. This change was applied across multiple configuration files.
Added the `orbit-file-lock` command to the PreToolUse hooks in the settings and config files for .claude, .codex, .gemini, and .grok. This enhancement ensures that the command is executed before tool usage, improving workflow consistency and preventing potential conflicts during file operations.
…otes

- Introduced a new learning resource `L-0039` detailing the domain logic for Orbit hooks.
- Added comments and votes files for the new learning resource.
- Updated settings to include the new task show command in the MCP tool catalog.
- Changed the status of learning resource `L-0039` from active to superseded.
- Added reference to the new superseding resource `L-0041`.
- Updated the timestamp for the last modification.
…[ORB-00277]

Move Claude Read() exclusions from per-developer settings.local.json
(absolute paths, single machine) into committed settings.json so every
contributor shares the same noise reduction. Add target/, .codegraph/,
node_modules/, dist/, build/, .astro/, .ruff_cache/, and the .orbit/
runtime state dirs to the deny list.

Delete the 1,328-file benchmark runs/ tree (~72MB) — the harness
regenerates these per run, so the "frozen for reproducibility" rationale
no longer holds. Update .gitignore and .orbitignore to keep regenerated
artifacts out of future commits, and document the local-override pattern
in CLAUDE.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…277]

Companion to b1a7ce8 — adds the CLAUDE.md "Agent Read Exclusions"
section pointing at .claude/settings.json and explaining the
settings.local.json override pattern, updates .orbitignore to drop the
now-incorrect "frozen for reproducibility" claim, and adds
benchmarks/**/runs/** + benchmarks/**/tasks/** to .gitignore so future
harness output stays out of commits.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ti… [ORB-00273]

Hook-driven async steering: surface review-thread asks to executing agent

Planned-By: codex
…ec… [ORB-00278]

Re-expose 6 over-hidden tools from MCP_HIDDEN_TOOL_NAMES (correction to ORB-00272)

Planned-By: codex
…-00274] [GITHUB-PR-421]

Implemented-By: claude
…rf… [ORB-00281]

Dashboard review-threads panel: hide threads on closed tasks, surface parent task status, drop location column
…ub… [ORB-00280]

Mark 15 ops/maintenance tools inactive in the registry and scrub references from README + agent skills

Planned-By: codex
…ba… [ORB-00276]

Migrate v2 audit / job-runs / sessions JSON stores into global ~/.orbit/orbit.db with workspace_id discrimination

Planned-By: claude
…ty_v2 audit tests

- orbit-dashboard: drop needless &validated_id (3 sites) to satisfy clippy -D warnings
- orbit-core/activity_v2: add run_id to V2ActivityRunResult and rewrite the two tests that were .expect-ing on the now-always-None audit_jsonl to use list_v2_audit_events instead (per ORB-00282 plan)
- Verified: make ci-fast, full workspace clippy -D warnings, affected tests under parallelism, doc build

Task: ORB-00288
Linearize the PR branch after merging agent-main and keep the CI fixes for inactive-tool tests, Linux fd companion launch, and installer traversal archive validation.
`orbit mcp init --claude` was writing `mcp__plugin_orbit_orbit__*` entries
into `.claude/settings.json`, even though the CLI registers the MCP server
under id `orbit` (`ORBIT_MCP_SERVER_ID`). Claude derives MCP permission
names from the connected server id, so the CLI path must emit
`mcp__orbit__<tool>` instead. The plugin-scoped shape is what Claude itself
synthesizes for Claude Code *plugin* installs and is intentionally not
emitted from this code path.

- claude_permission_name now formats `mcp__{ORBIT_MCP_SERVER_ID}__<tool>`;
  doc comment explains why the plugin-scoped shape is deliberately not
  produced here.
- New `claude_legacy_safe_permissions` migration helper produces the old
  plugin-prefixed names; `apply_claude_remove` strips both current and
  legacy lists so a post-upgrade `orbit mcp remove --claude` leaves a
  clean settings.json instead of orphaning stale entries.
- Tests in setup/tests/dispatch.rs and setup/providers/tests/claude.rs
  assert the new literal `mcp__orbit__orbit_task_show`, add a negative
  `mcp__plugin_*` guard, and cover the legacy-cleanup path with a
  dedicated `claude_remove_strips_legacy_plugin_prefixed_entries` test.

Planned-By: claude
Inactivates six tools on the agent MCP surface and keeps them reachable
via the CLI / `runtime.run_tool` path used by `orbit-cli` subcommands and
`orbit-dashboard`:

  orbit.adr.list                — agents discover ADRs via `orbit search`
  orbit.semantic.uninstall      — destructive local index teardown
  orbit.task.lint               — admin lint surface
  orbit.task.delete             — destructive task removal
  orbit.learning.prune          — destructive learnings cleanup
  orbit.learning.comment.delete — destructive comment cleanup

`orbit.task.list` is intentionally retained on the agent surface.

Surface changes:
- orbit-tools: 6 `registry.register(...)` flipped to `register_inactive(...)`.
- orbit-cli/mcp/host.rs: per-family constants drop the 6 names;
  SEMANTIC_TOOL_NAMES collapses to `&[]` (kept for aggregation symmetry).
- orbit-cli/mcp/tests/mod.rs: EXPECTED_INACTIVE_TOOL_NAMES 15 → 21,
  REQUIRED_AGENT_FACING_TOOL_NAMES drops the 6.
- orbit-tools/tests/public_tool_surface.rs: INACTIVE_TOOL_NAMES adds
  the 6; `orbit.semantic.uninstall` removed from the workflow-critical
  retained list.
- The 3 orbit.task.delete-over-MCP tests in orbit-cli/mcp/tests/mod.rs
  were removed (they asserted a contract we're explicitly removing);
  generic inactive-tool rejection is covered by
  `inactive_tool_is_rejected_over_mcp_dispatch`. Task-delete business
  logic in orbit-core/.../tests/task_tools.rs swapped from
  `runtime.execute_tool_command` (now gated) to `runtime.run_tool` to
  keep tool-dispatch business-logic coverage.
- Skills updated: orbit-adr/SKILL.md routes ADR discovery through
  `orbit search --kind adr` (the table row + 5 prose references);
  orbit-learning/SKILL.md marks `comment.delete` and `prune` rows as
  CLI-only; orbit-docs/SKILL.md ADR-list reference updated similarly.
- Activity whitelists drop `orbit.learning.comment.delete` from
  agent_implement.yaml and agent_review.yaml.

CLI follow-on (was blocking the worktree-resolution integration test
which exercised `include_remote` semantics that aren't on `orbit search`):
- New `orbit adr list` subcommand mirroring ORB-00280's `orbit docs list`
  shape. Single-file `command/adr.rs`, routes through `runtime.run_tool`
  so the existing tool's input parsing + filter semantics
  (`--include-remote`, etc.) are reused without duplication. Wired into
  `Commands` enum, help template, and `audit_middleware`.
- `crates/orbit-cli/tests/worktree_resolution.rs` switched from
  `orbit tool run orbit.adr.list ...` to `orbit adr list ...`.

Also includes a one-line fmt fix to the ORB-00286 providers test that
`make ci-fast` caught after that commit.

Verified: `cargo test -p orbit-cli mcp::` (47/0),
`cargo test -p orbit-tools --test public_tool_surface` (10/0),
`cargo test -p orbit-core --lib orbit_tool_host` (106/0),
`cargo test -p orbit-cli --test worktree_resolution` (2/0),
`make ci-fast` (exit 0).

Planned-By: claude
- Delete orphan `crates/orbit-core/src/runtime/orbit_tool_host/task_tools_tests.rs`
  (not declared by any `mod` statement; still referenced the pre-ORB-00289
  `runtime.execute_tool_command("orbit.task.delete", ...)` shape).
- README "Full tool reference": annotate the six trimmed tools as CLI-only with
  pointers at the equivalent `orbit <verb>` CLI form; the ADR row also calls out
  `orbit.search --kind adr` as the agent replacement. Intro paragraph extended
  to enumerate the new CLI-only set alongside the existing examples.
- CHANGELOG Unreleased: lead breaking-changes entry for ORB-00289 (lists the
  six trimmed names, calls out `register_inactive`, the
  `EXPECTED_INACTIVE_TOOL_NAMES` 15 → 21 canary, and the agent replacement);
  fixes entries for ORB-00286 (Claude MCP permission-name fix + legacy entry
  cleanup on remove) and ORB-00289 (new `orbit adr list` CLI verb).

Verified: `cargo check -p orbit-core --tests` and `make ci-fast` both clean.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…json

- Added a new configuration file `.claude.json` for MCP server settings.
- Updated code references from `.mcp.json` to `.claude.json` in various files to reflect the new configuration structure.
- Removed the unused `dummy-for-terminal` file.

Verified changes with existing tests to ensure functionality remains intact.
- Bump version from 0.6.0 to 0.7.0 in Cargo.lock, Cargo.toml, README.md, and plugin configuration files.
- Reflect the new version in the CHANGELOG, highlighting breaking changes and new features introduced in this release.
@danieljhkim danieljhkim merged commit edc50da into main May 23, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants