Complete the Ward-to-Aguard operator-surface cutover #1548

Closed
opened 2026-07-24 21:07:24 +00:00 by coilyco-ops · 2 comments
Member

Decision

The literal aos CLI is not the replacement for Ward operator verbs.

Current canonical agentic-os main deliberately splits the AOS image surfaces:

  • aos is the composed-container launcher. It owns harness-default, acompose, and acompose-checkin.
  • aguard is the standalone specgen-generated operator CLI. It owns aguard ops forgejo, aguard ops actions, aguard ops aws, aguard ops kubectl, and aguard ops tailscale.
  • The AOS full-image build uses specgen in its builder stage, emits /usr/local/bin/aguard, and copies both aos and aguard into the final runtime image.
  • Ward retains governed agent orchestration, dynamic role policy, repository development commands, reservations, reaping, landing, and native PR workflow operations.

Aguard runtime help and execution must not invoke or mention Ward. Specgen is a build tool, not a runtime dependency.

Problem

Ward main still auto-mounts ward-kdl exec guardfiles at process startup, exposes human-facing ward ops surfaces, and documents ward-kdl as an embedded runtime layer. A stale edge config ref therefore produces reference is not a tree and ward-kdl ... mount degraded output even on native agent commands.

The current director surface also fell back to an older local AOS image after an image-pull failure. That fallback contains neither aos nor aguard and still points its config ref into Ward. The image-freshness defect is tracked separately by the completed-log inventory required in #1546.

Ward scope

  • Remove the startup ward-kdl exec auto-mount and retire the human/operator ward ops and related generated runtime mounts.
  • Remove container-facing guidance and docs that direct operators to ward ops; point AOS-container operator work to aguard ops.
  • Keep only the AOS-authored role and launch policy that native ward agent still needs. Do not remove dynamic role policy merely because operator guardfiles move out.
  • Preserve native ward agent pr and other native agent control-plane commands that deliberately do not route through specgen.
  • Make an irrelevant missing edge config ref unable to affect ward agent, ward container, ward exec, help, version, or other native paths.
  • Remove or archive obsolete ward-kdl runtime assets, tests, and docs rather than suppressing their stderr.
  • Update README, architecture, compatibility, and feature inventory for the public boundary change.

Cross-layer verification

  • Verify current canonical AOS main remains the owner of .specgen/aguard and the final image installs /usr/local/bin/aguard.
  • Verify the Aguard command family covers every operator workflow removed from Ward or file and dispatch one AOS follow-up per missing leaf.
  • Verify Aguard help and runtime output contain no Ward branding or config dependency.
  • Keep aos focused on composed-container launch. Do not add operator verbs to the literal aos command as part of this cutover.

Acceptance criteria

  • Ward startup never attempts a ward-kdl runtime mount.
  • Human/operator API and exec verbs are absent from Ward and available through Aguard in the current AOS image contract.
  • Native Ward agent control-plane paths remain functional with stale or unavailable operator config.
  • Tests cover the removed surface, stale-ref isolation, and preserved native agent commands.
  • Documentation names the aos versus aguard split unambiguously.
  • Relevant validation passes and the landed commit closes this issue.

Related symptom and log inventory: #1546.

## Decision The literal `aos` CLI is not the replacement for Ward operator verbs. Current canonical agentic-os main deliberately splits the AOS image surfaces: - `aos` is the composed-container launcher. It owns `harness-default`, `acompose`, and `acompose-checkin`. - `aguard` is the standalone specgen-generated operator CLI. It owns `aguard ops forgejo`, `aguard ops actions`, `aguard ops aws`, `aguard ops kubectl`, and `aguard ops tailscale`. - The AOS full-image build uses specgen in its builder stage, emits `/usr/local/bin/aguard`, and copies both `aos` and `aguard` into the final runtime image. - Ward retains governed agent orchestration, dynamic role policy, repository development commands, reservations, reaping, landing, and native PR workflow operations. Aguard runtime help and execution must not invoke or mention Ward. Specgen is a build tool, not a runtime dependency. ## Problem Ward main still auto-mounts ward-kdl exec guardfiles at process startup, exposes human-facing `ward ops` surfaces, and documents ward-kdl as an embedded runtime layer. A stale edge config ref therefore produces `reference is not a tree` and `ward-kdl ... mount degraded` output even on native agent commands. The current director surface also fell back to an older local AOS image after an image-pull failure. That fallback contains neither `aos` nor `aguard` and still points its config ref into Ward. The image-freshness defect is tracked separately by the completed-log inventory required in #1546. ## Ward scope - Remove the startup ward-kdl exec auto-mount and retire the human/operator `ward ops` and related generated runtime mounts. - Remove container-facing guidance and docs that direct operators to `ward ops`; point AOS-container operator work to `aguard ops`. - Keep only the AOS-authored role and launch policy that native `ward agent` still needs. Do not remove dynamic role policy merely because operator guardfiles move out. - Preserve native `ward agent pr` and other native agent control-plane commands that deliberately do not route through specgen. - Make an irrelevant missing edge config ref unable to affect `ward agent`, `ward container`, `ward exec`, help, version, or other native paths. - Remove or archive obsolete ward-kdl runtime assets, tests, and docs rather than suppressing their stderr. - Update README, architecture, compatibility, and feature inventory for the public boundary change. ## Cross-layer verification - Verify current canonical AOS main remains the owner of `.specgen/aguard` and the final image installs `/usr/local/bin/aguard`. - Verify the Aguard command family covers every operator workflow removed from Ward or file and dispatch one AOS follow-up per missing leaf. - Verify Aguard help and runtime output contain no Ward branding or config dependency. - Keep `aos` focused on composed-container launch. Do not add operator verbs to the literal `aos` command as part of this cutover. ## Acceptance criteria - Ward startup never attempts a ward-kdl runtime mount. - Human/operator API and exec verbs are absent from Ward and available through Aguard in the current AOS image contract. - Native Ward agent control-plane paths remain functional with stale or unavailable operator config. - Tests cover the removed surface, stale-ref isolation, and preserved native agent commands. - Documentation names the `aos` versus `aguard` split unambiguously. - Relevant validation passes and the landed commit closes this issue. Related symptom and log inventory: #1546.
Author
Member

WARD-WORKFLOW: #1553

details

Review gate: intentionally skipped in-container because the temporary Ward default is pending brokered QA.
workflow: pull-request-and-merge; review summary: skipped intentionally pending brokered QA.
Felt: broad but mechanically clean once the generated tree was removed.
Confidence: high; uncached tests, vet, pre-commit, and PR CI passed.
Surprises: main advanced with the partial native isolation, so this branch was rebased and history-preservingly merged before landing.
Follow-ups: Aguard runtime was not executed here because Docker is unavailable; its current AOS source/image contract was verified.

WARD-WORKFLOW: https://forgejo.coilysiren.me/coilyco-flight-deck/ward/pulls/1553 <details><summary>details</summary> Review gate: intentionally skipped in-container because the temporary Ward default is pending brokered QA. workflow: pull-request-and-merge; review summary: skipped intentionally pending brokered QA. Felt: broad but mechanically clean once the generated tree was removed. Confidence: high; uncached tests, vet, pre-commit, and PR CI passed. Surprises: main advanced with the partial native isolation, so this branch was rebased and history-preservingly merged before landing. Follow-ups: Aguard runtime was not executed here because Docker is unavailable; its current AOS source/image contract was verified. </details>
Author
Member

WARD-WORKFLOW: reservation-released

release details

Run finished with WARD-WORKFLOW: https://forgejo.coilysiren.me/coilyco-flight-deck/ward/pulls/1553.

ward container reap released container engineer-codex-ward-1548 (--harness codex): the terminal outcome supersedes the reservation, so a later redispatch no longer needs --override-reservation.

Outcome summary: #1553

— Codex, via ward agent

<!-- ward-agent-reservation-released --> WARD-WORKFLOW: reservation-released <details><summary>release details</summary> Run finished with `WARD-WORKFLOW: https://forgejo.coilysiren.me/coilyco-flight-deck/ward/pulls/1553`. `ward container reap` released container `engineer-codex-ward-1548` (`--harness codex`): the terminal outcome supersedes the reservation, so a later redispatch no longer needs `--override-reservation`. **Outcome summary:** https://forgejo.coilysiren.me/coilyco-flight-deck/ward/pulls/1553 </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/ward#1548
No description provided.