Consume renamed and split aos ward-specs bundle files #1009

Closed
opened 2026-07-10 10:11:56 +00:00 by coilyco-ops · 7 comments
Member

Problem

The aos ward-specs bundle is being reshaped in coilyco-flight-deck/agentic-os#431, and ward is the runtime consumer of that bundle through WARD_CONFIG_REF.

Known upstream changes requested in aos:

  • .ward/ward-kdl.fleet.kdl -> .ward/agents.kdl, with root node agents.
  • .ward/ward-kdl.roles.kdl -> .ward/roles.kdl.
  • Role guardfile bindings move into roles.kdl as repeated singular guardfile "..." nodes.
  • .ward/ward-kdl.defaults.kdl -> .ward/defaults.kdl, with root node defaults.
  • repo-authority moves into .ward/repos.kdl, with root node repos.
  • Guardfile bundle members drop the ward-kdl. filename prefix and start with guardfile., for example guardfile.forgejo.write.kdl.

The cli-guard parser side is tracked separately in coilyco-flight-deck/cli-guard#219 for agents and repeated singular guardfile syntax. Ward still needs its bundle discovery/loading layer checked and updated for the renamed/split files.

Scope

Audit and update ward's WARD_CONFIG_REF bundle consumer for the new aos layout:

  • Locate any hard-coded member names like ward-kdl.fleet.kdl, ward-kdl.roles.kdl, ward-kdl.defaults.kdl, or ward-kdl.*.guardfile.kdl.
  • Update the loader to read agents.kdl, roles.kdl, defaults.kdl, repos.kdl, and guardfile.*.kdl names.
  • Update any parser call sites that expect roles to be embedded in the agent roster file.
  • Update smart defaults parsing for defaults { ... } if ward currently expects smart-defaults { ... }.
  • Update repo authority parsing for repos { ... } in its own file if ward currently expects repo-authority { ... } inside the defaults file.
  • Coordinate with cli-guard#219 for the fleetconfig syntax change. If ward vendors or pins cli-guard, bump it after cli-guard lands or make a compatibility path explicit.
  • Add or update tests with a fixture matching the new aos bundle layout.

Acceptance criteria

  • Ward can load a WARD_CONFIG_REF bundle using the new aos file names and root nodes.
  • Ward no longer requires roles to be embedded in the agent roster file.
  • Ward reads defaults and repo authority from separate defaults.kdl and repos.kdl files.
  • Tests cover the new bundle layout and fail on the old hard-coded assumptions.
  • The ward test suite passes.

ward.workflow: pull-requests-and-merge

## Problem The aos ward-specs bundle is being reshaped in `coilyco-flight-deck/agentic-os#431`, and ward is the runtime consumer of that bundle through `WARD_CONFIG_REF`. Known upstream changes requested in aos: * `.ward/ward-kdl.fleet.kdl` -> `.ward/agents.kdl`, with root node `agents`. * `.ward/ward-kdl.roles.kdl` -> `.ward/roles.kdl`. * Role guardfile bindings move into `roles.kdl` as repeated singular `guardfile "..."` nodes. * `.ward/ward-kdl.defaults.kdl` -> `.ward/defaults.kdl`, with root node `defaults`. * `repo-authority` moves into `.ward/repos.kdl`, with root node `repos`. * Guardfile bundle members drop the `ward-kdl.` filename prefix and start with `guardfile.`, for example `guardfile.forgejo.write.kdl`. The cli-guard parser side is tracked separately in `coilyco-flight-deck/cli-guard#219` for `agents` and repeated singular `guardfile` syntax. Ward still needs its bundle discovery/loading layer checked and updated for the renamed/split files. ## Scope Audit and update ward's `WARD_CONFIG_REF` bundle consumer for the new aos layout: * Locate any hard-coded member names like `ward-kdl.fleet.kdl`, `ward-kdl.roles.kdl`, `ward-kdl.defaults.kdl`, or `ward-kdl.*.guardfile.kdl`. * Update the loader to read `agents.kdl`, `roles.kdl`, `defaults.kdl`, `repos.kdl`, and `guardfile.*.kdl` names. * Update any parser call sites that expect roles to be embedded in the agent roster file. * Update smart defaults parsing for `defaults { ... }` if ward currently expects `smart-defaults { ... }`. * Update repo authority parsing for `repos { ... }` in its own file if ward currently expects `repo-authority { ... }` inside the defaults file. * Coordinate with cli-guard#219 for the fleetconfig syntax change. If ward vendors or pins cli-guard, bump it after cli-guard lands or make a compatibility path explicit. * Add or update tests with a fixture matching the new aos bundle layout. ## Acceptance criteria * Ward can load a `WARD_CONFIG_REF` bundle using the new aos file names and root nodes. * Ward no longer requires roles to be embedded in the agent roster file. * Ward reads defaults and repo authority from separate `defaults.kdl` and `repos.kdl` files. * Tests cover the new bundle layout and fail on the old hard-coded assumptions. * The ward test suite passes. ward.workflow: pull-requests-and-merge
Author
Member

WARD-DISPATCH: deferred ⏸

deferred details

This forwarded dispatch was deferred after the issue was already reserved.

Attempted harness: codex
Attempted run: ward agent engineer coilyco-flight-deck/ward#1009 --harness codex --ward-version v0.579.0
Container: engineer-codex-ward-1009
Container created: no running engineer was observed.
Host log: /Users/kai/.ward/agent-logs/dispatch/20260710T101202Z-director-codex-rh98-coilyco-flight-deck-ward-1009.log
Capacity: ward agent engineer --harness codex: global engineer limit is reached: 12 running (limit 12); wait for a run to finish or run ward agent reap for stale engineers

Retry: the issue stays queued and the director will try again when a slot opens.

— Codex, via ward agent

<!-- ward-agent-reservation-released --> <!-- ward-needs-redispatch --> WARD-DISPATCH: deferred ⏸ <details><summary>deferred details</summary> This forwarded dispatch was deferred after the issue was already reserved. Attempted harness: `codex` Attempted run: `ward agent engineer coilyco-flight-deck/ward#1009 --harness codex --ward-version v0.579.0` Container: `engineer-codex-ward-1009` Container created: no running engineer was observed. Host log: `/Users/kai/.ward/agent-logs/dispatch/20260710T101202Z-director-codex-rh98-coilyco-flight-deck-ward-1009.log` Capacity: `ward agent engineer --harness codex: global engineer limit is reached: 12 running (limit 12); wait for a run to finish or run `ward agent reap` for stale engineers` Retry: the issue stays queued and the director will try again when a slot opens. </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

Additional constraint from Kai, 2026-07-10:

Kai intentionally deleted a bunch of KDL specgen from the ward repo because that code did not belong there. Keep tests passing without bringing the specgen back en masse. Prefer updating ward's current bundle-consumer code and tests around the reduced surface, not restoring the removed generator stack as the easy path.

Additional constraint from Kai, 2026-07-10: Kai intentionally deleted a bunch of KDL specgen from the ward repo because that code did not belong there. Keep tests passing without bringing the specgen back en masse. Prefer updating ward's current bundle-consumer code and tests around the reduced surface, not restoring the removed generator stack as the easy path.
Author
Member

WARD-DISPATCH: failed

failure details

This forwarded dispatch failed after the issue was already reserved.

Attempted harness: codex
Attempted run: ward agent engineer coilyco-flight-deck/ward#1009 --harness codex --details Implement ward#1009 only after checking the current aos#431 and cli-guard#219 contracts. Update ward's WARD_CONFIG_REF bundle consumer for renamed/split files and repeated singular guardfile entries, but do not bring back the deleted KDL specgen stack.
Container: engineer-codex-ward-1009
Container created: no running engineer was observed.
Host log: /Users/kai/.ward/agent-logs/dispatch/20260710T101854Z-director-codex-zv99-coilyco-flight-deck-ward-1009.log
Failure: ward container: download Go bootstrap binary https://forgejo.coilysiren.me/coilyco-flight-deck/ward/releases/download/v0.580.0/ward-linux-arm64: unexpected status 404 Not Found: Not Found

Retry: choose another harness if the first one is down, or rerun with --force if the reservation is stale.

— Codex, via ward agent

<!-- ward-agent-reservation-released --> <!-- ward-needs-redispatch --> WARD-DISPATCH: failed ❌ <details><summary>failure details</summary> This forwarded dispatch failed after the issue was already reserved. Attempted harness: `codex` Attempted run: `ward agent engineer coilyco-flight-deck/ward#1009 --harness codex --details Implement ward#1009 only after checking the current aos#431 and cli-guard#219 contracts. Update ward's WARD_CONFIG_REF bundle consumer for renamed/split files and repeated singular guardfile entries, but do not bring back the deleted KDL specgen stack.` Container: `engineer-codex-ward-1009` Container created: no running engineer was observed. Host log: `/Users/kai/.ward/agent-logs/dispatch/20260710T101854Z-director-codex-zv99-coilyco-flight-deck-ward-1009.log` Failure: `ward container: download Go bootstrap binary https://forgejo.coilysiren.me/coilyco-flight-deck/ward/releases/download/v0.580.0/ward-linux-arm64: unexpected status 404 Not Found: Not Found` Retry: choose another harness if the first one is down, or rerun with `--force` if the reservation is stale. </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARD-RESERVATION: held 🔒

reservation details

Holder: container engineer-codex-ward-1009 on host kais-macbook-pro-2.local.

Reserved by ward agent --harness codex (reserved 2026-07-10T10:20:56Z). Concurrent ward agent runs are blocked until it finishes or the reservation goes stale (1h TTL). --force overrides.

Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).

run seed context — what this run is carrying (ward#609)
  • Resolved: coilyco-flight-deck/ward#1009 · branch issue-1009 · harness codex · workflow pull-requests-and-merge
  • Run: engineer-codex-ward-1009 · ward v0.579.0 · dispatched 2026-07-10T10:20:56Z
  • Comment thread: 3 included in the pre-flight read, 0 stripped (ward's own automated comments).

Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.579.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARD-RESERVATION: held 🔒 <details><summary>reservation details</summary> Holder: container `engineer-codex-ward-1009` on host `kais-macbook-pro-2.local`. Reserved by `ward agent --harness codex` (reserved 2026-07-10T10:20:56Z). Concurrent `ward agent` runs are blocked until it finishes or the reservation goes stale (1h TTL). `--force` overrides. **Do not comment on or edit this issue to steer the run while it is reserved.** The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a **new issue, dispatched fresh**. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494). <details><summary>run seed context — what this run is carrying (ward#609)</summary> - **Resolved:** `coilyco-flight-deck/ward#1009` · branch `issue-1009` · harness `codex` · workflow `pull-requests-and-merge` - **Run:** `engineer-codex-ward-1009` · ward `v0.579.0` · dispatched `2026-07-10T10:20:56Z` - **Comment thread:** 3 included in the pre-flight read, 0 stripped (ward's own automated comments). - included: @coilyco-ops (2026-07-10T10:12:05Z), @coilyco-ops (2026-07-10T10:13:22Z), @coilyco-ops (2026-07-10T10:18:57Z) Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.579.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

Additional live evidence from the director surface on 2026-07-10 UTC:

A fresh scratch clone of current ward main at 142b3c29622a208d30b577dc77709e12c93c8946 fails ward exec test ./cmd/ward without any feature-branch changes. The failures prove this is not only future aos layout work, it is current main CI breakage after the ward-side specgen/source bundle deletion.

Representative failing checks:

  • TestCapabilityGuardfilesExist still expects ../../.ward/ward-kdl/ward-kdl.aws.guardfile.kdl and ward-kdl.tailscale.guardfile.kdl.
  • TestDefaultsAssetsMirrorWardKDL, TestFleetAssetsMirrorWardKDL, TestTopologyAssetsMirrorWardKDL, and TestOpsAssetsMatchWardKDL still read source files under ../../.ward/ward-kdl/ward-kdl.* that no longer exist in ward.
  • TestExecAssetsMirrorWardKDL reports embedded cmd/ward/execassets/ward-kdl.*.guardfile.kdl copies no longer match any current source guardfile and then says no exec-dialect source guardfiles were discovered.
  • TestRunDoctorWithValidBundle fails because the ops bundle expects ward-kdl.forgejo.guardfile.kdl.
  • TestRunSetupWithFixtureRef, TestSmartDefaultsBaked, and related config-source checks are also coupled to the old source layout and external bundle ref.

Current ward .ward contains only .ward/ward-kdl/README.md, .ward/ward-kdl/ward-kdl.roles.kdl, and .ward/ward.yaml, so a fix must update/delete the old mirror/source-drift assumptions. Do not restore the removed personal specgen/source tree just to satisfy these tests. Make the ward test suite green against the reduced ward repo plus the external WARD_CONFIG_REF bundle contract.

Additional live evidence from the director surface on 2026-07-10 UTC: A fresh scratch clone of current ward `main` at `142b3c29622a208d30b577dc77709e12c93c8946` fails `ward exec test ./cmd/ward` without any feature-branch changes. The failures prove this is not only future aos layout work, it is current main CI breakage after the ward-side specgen/source bundle deletion. Representative failing checks: * `TestCapabilityGuardfilesExist` still expects `../../.ward/ward-kdl/ward-kdl.aws.guardfile.kdl` and `ward-kdl.tailscale.guardfile.kdl`. * `TestDefaultsAssetsMirrorWardKDL`, `TestFleetAssetsMirrorWardKDL`, `TestTopologyAssetsMirrorWardKDL`, and `TestOpsAssetsMatchWardKDL` still read source files under `../../.ward/ward-kdl/ward-kdl.*` that no longer exist in ward. * `TestExecAssetsMirrorWardKDL` reports embedded `cmd/ward/execassets/ward-kdl.*.guardfile.kdl` copies no longer match any current source guardfile and then says no exec-dialect source guardfiles were discovered. * `TestRunDoctorWithValidBundle` fails because the ops bundle expects `ward-kdl.forgejo.guardfile.kdl`. * `TestRunSetupWithFixtureRef`, `TestSmartDefaultsBaked`, and related config-source checks are also coupled to the old source layout and external bundle ref. Current ward `.ward` contains only `.ward/ward-kdl/README.md`, `.ward/ward-kdl/ward-kdl.roles.kdl`, and `.ward/ward.yaml`, so a fix must update/delete the old mirror/source-drift assumptions. Do **not** restore the removed personal specgen/source tree just to satisfy these tests. Make the ward test suite green against the reduced ward repo plus the external `WARD_CONFIG_REF` bundle contract.
Author
Member

WARD-RESERVATION: held 🔒

reservation details

Holder: container engineer-codex-ward-1009 on host kais-macbook-pro-2.local.

Reserved by ward agent --harness codex (reserved 2026-07-10T10:37:58Z). Concurrent ward agent runs are blocked until it finishes or the reservation goes stale (1h TTL). --force overrides.

Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).

run seed context — what this run is carrying (ward#609)
  • Resolved: coilyco-flight-deck/ward#1009 · branch issue-1009 · harness codex · workflow pull-requests-and-merge
  • Run: engineer-codex-ward-1009 · ward v0.580.0 · dispatched 2026-07-10T10:37:58Z
  • Comment thread: 4 included in the pre-flight read, 1 stripped (ward's own automated comments).

Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.580.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARD-RESERVATION: held 🔒 <details><summary>reservation details</summary> Holder: container `engineer-codex-ward-1009` on host `kais-macbook-pro-2.local`. Reserved by `ward agent --harness codex` (reserved 2026-07-10T10:37:58Z). Concurrent `ward agent` runs are blocked until it finishes or the reservation goes stale (1h TTL). `--force` overrides. **Do not comment on or edit this issue to steer the run while it is reserved.** The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a **new issue, dispatched fresh**. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494). <details><summary>run seed context — what this run is carrying (ward#609)</summary> - **Resolved:** `coilyco-flight-deck/ward#1009` · branch `issue-1009` · harness `codex` · workflow `pull-requests-and-merge` - **Run:** `engineer-codex-ward-1009` · ward `v0.580.0` · dispatched `2026-07-10T10:37:58Z` - **Comment thread:** 4 included in the pre-flight read, 1 stripped (ward's own automated comments). - included: @coilyco-ops (2026-07-10T10:12:05Z), @coilyco-ops (2026-07-10T10:13:22Z), @coilyco-ops (2026-07-10T10:18:57Z), @coilyco-ops (2026-07-10T10:37:47Z) - stripped: @coilyco-ops (2026-07-10T10:20:57Z) Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.580.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARD-OUTCOME: merge-ready

details

workflow: pull-requests-and-merge; review summary: skipped (review gate skipped by ~/.ward/config.yaml default)
felt: mechanical. main work was bundle-path rewiring and fixture cleanup.
confidence: high
surprises: the blank-ref smart-default cache needed to ignore target metadata; the PR CI queued a bit before going green.
follow-ups: none

WARD-OUTCOME: merge-ready <details><summary>details</summary> workflow: pull-requests-and-merge; review summary: skipped (review gate skipped by ~/.ward/config.yaml default) felt: mechanical. main work was bundle-path rewiring and fixture cleanup. confidence: high surprises: the blank-ref smart-default cache needed to ignore target metadata; the PR CI queued a bit before going green. follow-ups: none </details>
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#1009
No description provided.