Skip to content

Release Protocol v0.7.0-rc.12 - #5

Merged
Shooksie merged 29 commits into
mainfrom
release/v0.7.0-rc.12
Jul 26, 2026
Merged

Release Protocol v0.7.0-rc.12#5
Shooksie merged 29 commits into
mainfrom
release/v0.7.0-rc.12

Conversation

@Shooksie

Copy link
Copy Markdown
Contributor

What changed

  • publishes the actor-aware application and chat wire contracts
  • adds generated cross-language schemas and scalar limits
  • reuses shared application control scalars from config
  • includes the Node 24 Actions cutover and coordinated actor-v2 protocol work

Why

CLI rc.30, Portal, and Arena require one immutable Protocol source with identical application contracts and no workstation paths or split protocol revisions.

Validation

  • cargo check --workspace --all-targets
  • cargo test --workspace
  • cargo clippy --workspace --all-targets -- -D warnings
  • generated schema reproducibility and byte-identical consumer fixtures
  • source release archive/package contents verified locally

Shooksie and others added 28 commits May 22, 2026 14:17
Additive, back-compat protocol fields for owner-scoped schedule dispatch:

- WorkflowSchedule gains optional owner_id + claims. When owner_id is set
  the daemon scheduler mints a system Actor for that user_id and runs the
  scheduled workflow as the owner (config-authored trust boundary).
- SubjectDispatch gains optional actor (+ with_actor builder) so the
  daemon relays the minted identity to the workflow runner.

Both fields are serde-optional and omitted from the wire when empty, so
older peers continue to deserialize unchanged.
…) + workflow_journal kind

v0.7 plugin-composition: a single plugin can advertise/serve multiple kinds via
plugin_kinds (on PluginManifest + PluginInfo) with a serves_kind() helper;
plugin_kind stays the primary/legacy kind (empty plugin_kinds = single-kind,
back-compat). Also adds PLUGIN_KIND_WORKFLOW_JOURNAL + PluginKind::WorkflowJournal
to close the drift with ao-cli's in-tree copy (which had the const; this repo is
now the single source ao-cli git-deps). Schema re-emitted.
…0.7)

- animus-plugin-protocol: add PLUGIN_KIND_ENVIRONMENT + PluginKind::Environment
  (additive, mirrors workflow_journal); bump to 0.1.17
- new crate animus-environment-protocol: environment/{prepare,exec,exec_stream,
  teardown} method consts, PrepareRequest/Response, EnvironmentSpec, RepoRef,
  EnvironmentHandle, HarnessCommand, ExecRequest/Response, ExecNotification
  (server-streaming, mirrors provider AgentNotification), TeardownRequest/Response
- animus-config-protocol: add Workspace/WorkspaceRepo, EnvironmentRouting/Rule/
  Match config types + workflow/phase environment+workspace fields + WorkflowConfig
  workspaces/environment_routing; wired through YAML parse/serialize; bump to 0.1.1
- regenerate schemas (plugin-protocol, new environment-protocol, config-protocol)
- unbreak animus-plugin-runtime + plugin-protocol test: add plugin_kinds field to
  PluginManifest/PluginInfo constructors (pre-existing multi-kind commit breakage)
…onfig)

Distinguishes config acquired from an installed config_source plugin
(e.g. animus-config-postgres) from real on-disk YAML. Additive variant;
serializes as "plugin". Lets the kernel stop mislabeling plugin-sourced
config as source=yaml. See TASK-177.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…l need) (#2)

A workflow run may now carry NO subject. SubjectDispatch, WorkflowRunInput,
and OrchestratorWorkflow hold Option<SubjectRef>: absent in Rust (None),
omitted from the wire (skip_serializing_if). Older payloads always carried a
subject, so deserialize stays backward-tolerant (present -> Some).

- SubjectDispatch: subject becomes Option; add subjectless() constructor and
  subject() accessor; subject_id / subject_kind / subject_key now return
  Option; task_id / requirement_id / schedule_id delegate through the Option.
- WorkflowRunInput: subject becomes Option; add subjectless() constructor;
  subject / subject_id / subject_kind return Option. to_workflow_run_input
  maps a None dispatch subject to a subjectless run input.
- OrchestratorWorkflow: subject becomes Option; drop the
  default_workflow_subject_ref empty-task sentinel default.
- Regenerate queue + workflow-runner JSON schemas (subject drops out of the
  SubjectDispatch required set). Regen also catches up prior actor-field
  drift in those two crates.

This lets ao-cli represent a genuinely subjectless run instead of the
custom-kind adhoc:<nanos> sentinel.
…keys (#3)

Add an optional verdict_key field to PhaseDecision so an agent or command
phase can emit a custom verdict string (e.g. needs-research) that is not one
of the built-in advance/rework/skip/fail values. The raw key is carried
verbatim so the workflow executor can route it through the phase on_verdict
map to an arbitrary target phase. Additive and backward compatible
(serde default, skipped when None); built-in verdicts leave it None.

Supports TASK-207 (extensible decision keys + conditional routing).
… field (#4)

Add PluginManifest.supports_mcp: Option<bool> so a plugin DECLARES whether
it consumes host-injected MCP servers, instead of the kernel hardcoding
per-tool MCP behavior in a name table (REQUIREMENT-039 / TASK-277).

- animus-plugin-protocol 0.1.18: new optional field, serde default +
  skip_serializing_if so absent = undeclared (back-compat). PROTOCOL_VERSION
  1.1.0 -> 1.2.0 (backward-compatible minor). Round-trip tests + regenerated
  JSON schema + spec.md 8.2.
- animus-plugin-runtime 0.2.2: Plugin::supports_mcp(bool) builder for Rust
  authors. provider_main emits None (auto-map from ProviderCapabilities.mcp
  deferred: it defaults false and would regress providers on the default).

Proof-of-pattern field for the wider REQUIREMENT-039 cleanup (launch template,
permission-mode flag, reasoning-effort, default model). Fleet must repin to the
new protocol tag once cut.
…tion (REQ-052)

The remote-animus session method: the parent dispatches a SUBJECT to the
environment's own in-container animus instead of relaying a raw provider CLI.

- METHOD_ENVIRONMENT_EXEC_SESSION ('environment/exec_session') + ExecSessionRequest
  {handle, subject_id, workflow_ref?, dispatch_input?} + ExecSessionResponse
  {workflow_id?, status}.
- NOTIFICATION_ENVIRONMENT_JOURNAL ('environment/journal') + a Journal variant on
  ExecNotification carrying a forwarded journal event (event_kind, phase_id?,
  status?, ts, payload, terminal), with method()/payload() arms.
- export_schema: register the two new request/response types; schemas regenerated
  (ExecSessionRequest/Response.json + ExecNotification.json Journal variant).

Canonical wire source for the codegen chain (plugin-sdk-ts types generate from
these schemas). build + tests + clippy clean.

REQUIREMENT-052 / TASK-457.
…-id)

When the delegating parent sets workflow_id, the node MUST execute INTO that
already-bootstrapped run (resume-existing) rather than mint its own, so exactly
one journal row exists per dispatch and the node's transcript lands on the id
the portal reads. Optional + serde default/skip: old plugins ignore it and old
runners send None (legacy: node mints its own id) — mixed-version safe.
Add METHOD_ENVIRONMENT_LIST/GET/TEARDOWN_NODE/REAP + EnvironmentNode descriptor +
ListNodes/GetNode/TeardownNode/Reap Request/Response structs, register them in the
schema exporter, regenerate JSON schemas. Mirrors the animus-environment-base TS
surface so the kernel EnvironmentClient + 'animus environment' CLI speak the same
shapes. TASK-807.
…-id line

The one-id session line (rc.8/rc.9) diverged from the workflow-list-total line
(which rc.7 tracks) and lacked WorkflowListRequest.workflow_ref +
WorkflowListResponse.total that ao-cli consumes. Merge those fields onto this
line so a single tag (rc.11) is a superset both the daemon (needs total) and the
runner (needs exec_session) can pin — lets ao-cli import the canonical env node-
management types from animus-environment-protocol instead of local mirrors.
Additive (Option + serde default); wire-compatible. TASK-807.
# Conflicts:
#	animus-plugin-protocol/Cargo.toml

@animus-launchapp-gitprovider animus-launchapp-gitprovider Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: CHANGES REQUESTED

  1. .github/workflows/ci.yml:46 — the required formatting gate runs cargo fmt --all -- --check, and the PR's cargo fmt check on head 765f8eb1fd419d3bc4c105c3e2d1f5b0f60d68d2 completed with failure. REQUIRED CHANGE: run cargo fmt --all on this branch and commit every resulting Rust source change so the workspace matches rustfmt; do not weaken or remove the formatting gate. Verify with cargo fmt --all -- --check; it must exit 0, and the GitHub cargo fmt check must report success on the new head SHA.

What is good: the release PR clearly documents its intended protocol additions and validation commands, keeps the application contracts in a dedicated crate, commits generated cross-language schemas, and preserves the existing workspace-wide check/test/clippy/fmt CI structure.

@Shooksie
Shooksie merged commit ad39f6a into main Jul 26, 2026
4 checks passed
@Shooksie
Shooksie deleted the release/v0.7.0-rc.12 branch July 26, 2026 12:22

@animus-launchapp-gitprovider animus-launchapp-gitprovider Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: APPROVE

No blocking findings. The release rollup is internally coherent: it adds the application-facing and actor-aware wire contracts, commits the corresponding generated schemas and scalar limits, updates workspace/package metadata, and preserves the compatibility story documented in the changelog. The changes are broad but match the release PR’s stated coordinated scope rather than appearing to be an off-base recreation.

Validation is green on head bc4d0d6a793d3459a9f7c7b98b6ac165aed8bb48: cargo check, cargo test, cargo clippy, and cargo fmt all completed successfully. The generated-contract coverage and explicit compatibility documentation are particularly good.

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.

1 participant