Reshape the ward-specs bundle: restore per-harness role overrides + remove the brittle validator/test and wildcard the release tar list #438
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/agentic-os#438
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The aos ward-specs bundle config is too brittle, and a recent split silently dropped a capability. This issue does two coupled things on that bundle: (A) restore the per-role x per-harness model/reasoning-effort overrides and (B) remove the brittle exact-match validation, replacing the release packaging with a wildcard.
A. Restore per-role x per-harness overrides in
.ward/roles.kdlCommit
8a04260split.ward/ward-kdl.fleet.kdlintoagents.kdl/roles.kdl/defaults.kdland in doing so dropped the per-role x per-harnessmodel+reasoning-effortoverride blocks. The newroles.kdlcarries only tagline / capabilities / guardfiles.The deleted
ward-kdl.fleet.kdlcarried these overlays underroles:Re-add these override blocks to
.ward/roles.kdlfordirector,advisor, andops, using the split-file node shape (siblings of theguardfile "..."nodes). This is a data restore, not an engine change: cli-guard's fleetconfig still parses them intoRole.AgentConfigviaparseRoleAgent(RoleAgentOverride{ Model, Endpoint, ReasoningEffort, Verbosity }) - see/substrate/cli-guard/pkg/fleetconfig/fleetconfig.go. ward applies the overlay at dispatch (verified/tracked separately in ward#1029).Motivation: this overlay is what lets a role retune model/effort per harness - e.g. running the claude director on a cheaper model like
claude-fable-5instead of always paying opus-4-8. Restore the mechanism faithfully with the values above; do not bake a director-model change into this issue.B. Remove the brittle ward-specs validation; wildcard the release packaging
The exact-string validator is too brittle (it is what let A regress unnoticed, and it forces a manual edit to the release tar list on every bundle-file add/remove). Remove it entirely:
agentic_os/pre_commit/check_ward_specs_bundle.py.tests/test_ward_specs_bundle.py.pyproject.toml- thecheck-ward-specs-bundle = "agentic_os.pre_commit.check_ward_specs_bundle:main"console-script entry (line ~46)..pre-commit-config.yaml- theward-specs-bundlehook (lines ~12-14), this repo's own dogfood use..pre-commit-hooks.yaml- theward-specs-bundlecatalog hook definition (lines ~115-118)..pre-commit-config.yamlreferences theward-specs-bundlehook id. It validates coilyco's.ward/bundle, which only exists in aos, so this should be aos-only - but verify, since.pre-commit-hooks.yamlis the shared catalog surface..forgejo/workflows/release.yml(the explicit enumeration at lines ~434-449). Replace the hand-maintained file list with a glob so new bundle files are packaged automatically. Constraints that MUST be preserved (see the comment block just above those lines):ward.yamlmust stay OUT of the bundle..ward/holdsward.yaml(ward's own command allowlist) alongside the bundle members; a naive-C .ward .would sweep it into ward's overlay input. Exclude it explicitly, e.g.tar --sort=name --mtime='UTC 1970-01-01' --owner=0 --group=0 --numeric-owner -C .ward --exclude=./ward.yaml -cf ward-specs.tar .(also exclude the transient./ward-specs.tarif tar would see it).--sort=name(which now genuinely sorts the recursive traversal), zeroed mtime/owner, andgzip -n, so the checksum stays reproducible from the tag../-prefixed layout unchanged, so ward#503's overlay needs no change..ward/bundle members are:agents.kdl,defaults.kdl,forgejo-actions-logs.sh,forgejo.swagger.lock.json,guardfile.aws.kdl,guardfile.forgejo.admin.kdl,guardfile.forgejo.kdl,guardfile.forgejo.read.kdl,guardfile.forgejo.readactions.kdl,guardfile.forgejo.write.kdl,guardfile.kubectl.kdl,repos.kdl,roles.kdl,specverb.lock- and onlyward.yamlmust be excluded. (This wildcard also frees the list from manual edits when e.g.forgejo.swagger.lock.jsonis later removed per #435.)Docs
Update
docs/ward-specs.md: (a) document the per-role x per-harness override layer, and (b) reflect that the bundle is now packaged by wildcard rather than an exact-match validator + hand-maintained tar list.Acceptance
.ward/roles.kdlcarries the director / advisor / ops per-harnessmodel+reasoning-effortoverrides.check_ward_specs_bundle.py,tests/test_ward_specs_bundle.py, and all three hook-wiring references are gone; no consumer repo references the dropped catalog hook..forgejo/workflows/release.ymlpackages the bundle by wildcard, excludingward.yaml, staying deterministic/reproducible and flat/./-prefixed.pre-commit run --all-filesis green.docs/ward-specs.mdupdated.Related
8a04260(bundle split).forgejo.swagger.lock.json(the wildcard makes its later removal a no-op on this workflow)./substrate/cli-guard/pkg/fleetconfig/fleetconfig.go.WARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-codex-agentic-os-438on hostkais-macbook-pro-2.local.Reserved by
ward agent --harness codex(reserved 2026-07-10T11:14:02Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (1h TTL).--forceoverrides.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)
coilyco-flight-deck/agentic-os#438· branchissue-438· harnesscodex· workflowpull-requests-and-mergeengineer-codex-agentic-os-438· wardv0.580.0· dispatched2026-07-10T11:14:02ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.580.0).
— Codex, via
ward agentWARD-DISPATCH: failed ❌
failure details
This forwarded dispatch failed after the issue was already reserved.
Attempted harness:
codexAttempted run:
ward agent engineer coilyco-flight-deck/agentic-os#438 --harness codex --ward-version v0.580.0Container:
engineer-codex-agentic-os-438Container created: no running engineer was observed.
Host log:
/Users/kai/.ward/agent-logs/dispatch/20260710T111405Z-director-claude-sm47-coilyco-flight-deck-agentic-os-438.logFailure:
ward agent engineer --harness codex: issue coilyco-flight-deck/agentic-os#438 already has a running worker container engineer-codex-agentic-os-438; wait for it to finish or pass --force to reclaimRetry: choose another harness if the first one is down, or rerun with
--forceif the reservation is stale.— Codex, via
ward agentRestore per-role x per-harness model/reasoning-effort overrides dropped by the ward-specs bundle split (8a04260)to Reshape the ward-specs bundle: restore per-harness role overrides + remove the brittle validator/test and wildcard the release tar listWARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-codex-agentic-os-438on hostkais-macbook-pro-2.local.Reserved by
ward agent --harness codex(reserved 2026-07-10T11:24:33Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (1h TTL).--forceoverrides.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)
coilyco-flight-deck/agentic-os#438· branchissue-438· harnesscodex· workflowpull-requests-and-mergeengineer-codex-agentic-os-438· wardv0.580.0· dispatched2026-07-10T11:24:33ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.580.0).
— Codex, via
ward agentCI failed before checkout on PR #441.
ci / gate (pull_request)=> failure after 0sward testandward pre-commit-allpassed— Codex, via
ward agentWARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-codex-agentic-os-438on hostkais-macbook-pro-2.local.Reserved by
ward agent --harness codex(reserved 2026-07-10T12:02:07Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (1h TTL).--forceoverrides.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)
coilyco-flight-deck/agentic-os#438· branchissue-438· harnesscodex· workflowpull-requests-and-mergeengineer-codex-agentic-os-438· wardv0.580.0· dispatched2026-07-10T12:02:07ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.580.0).
— Codex, via
ward agentCI failed before checkout on PR #441.
ci / gate (pull_request)=> failure after 0sward testandward pre-commit-allpassed— Codex, via
ward agentWARD-OUTCOME: blocked 🛑
details
workflow: pull-requests-and-merge; review summary: review gate skipped by ~/.ward/config.yaml default
felt: clean data restore, blocked by Forgejo runner startup noise
confidence: low
surprises: the PR gate failed before checkout twice on the same head
follow-ups: recover the runner/container setup or rerun the workflow
WARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-codex-agentic-os-438on hostkais-macbook-pro-2.local.Reserved by
ward agent --harness codex(reserved 2026-07-10T12:29:03Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (1h TTL).--forceoverrides.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)
coilyco-flight-deck/agentic-os#438· branchissue-438· harnesscodex· workflowpull-requests-and-mergeengineer-codex-agentic-os-438· wardv0.580.0· dispatched2026-07-10T12:29:03ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.580.0).
— Codex, via
ward agentWARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-codex-agentic-os-438on hostkais-macbook-pro-2.local.Reserved by
ward agent --harness codex(reserved 2026-07-10T13:24:51Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (1h TTL).--forceoverrides.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)
coilyco-flight-deck/agentic-os#438· branchissue-438· harnesscodex· workflowpull-requests-and-mergeengineer-codex-agentic-os-438· wardv0.580.0· dispatched2026-07-10T13:24:51ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.580.0).
— Codex, via
ward agentWARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-codex-agentic-os-438on hostkais-macbook-pro-2.local.Reserved by
ward agent --harness codex(reserved 2026-07-10T13:24:56Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (1h TTL).--forceoverrides.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)
coilyco-flight-deck/agentic-os#438· branchissue-438· harnesscodex· workflowpull-requests-and-mergeengineer-codex-agentic-os-438· wardv0.580.0· dispatched2026-07-10T13:24:56ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.580.0).
— Codex, via
ward agentWARD-RESERVATION: released 🛑
release details
Run never started.
ward container reapreleased containerengineer-codex-agentic-os-438(--harness codex): it exited without launching the agent (smoke-test death, ward#222/#264/#595), so it did no work and the hold it took is retracted. Nothing is running on this issue. It needs re-dispatch. Award agent directorre-queues it automatically. A manualward agentretry no longer needs--force.— Codex, via
ward agentCI failed on PR #441 after 1s.
ci / gate (pull_request)=> failure after 1sward pre-commit-allpassed— Codex, via
ward agentWARD-TRIAGE: #438 P3 consult
triage details
method: tooling-issue-prioritization
P0 candidate: yes
P0 confirm: no
score: 2
mode: consult
confidence: no
tier: P3
labels: P3 consult
reason: Not an active incident, just a config-brittleness/regression refactor; prescriptive but couples a validator/test removal and release-packaging change that warrant a human design checkpoint.
— Claude (she/her), via
ward agentThe director-startup /
ward doctorbreakage from the bundle reshape is now fixed and verified green end to end. Root cause: the reshape authored.ward/contents in a schema no released ward parsed, soward agent directorfailed config validation at startup (ward doctor3/4 surfaces FAIL).Landed:
566f42f— re-nestedrepos.kdlunder therepo-authority default=forgejo { … }wrapper the reshape dropped; stripped ward's product-preset role bodies (tagline/capabilities/modes/posture) fromroles.kdl(fleet parser wants onlyguardfile | guardfiles | agent); repointedcheck_ward_specs_bundle.py'sEXPECTED_REPOSat the wrapped schema.60133a8— the bundle ops surface loaded the role-facingguardfile.forgejo.write.kdl(whichinherits across files and carries placeholder values); ward byte-parses guardfiles with noParseFilepath, so the wholeward ops forgejosurface failed to mount. Now loads the self-containedguardfile.forgejo.kdlmonolith (real values), mirroring the baked source.ward doctoragainst566f42fwith v0.584.0: all checks pass;ward ops forgejomounts with real values.The
issue-438branch'sengineer-codexrun failed (WARD-DISPATCH: failed) and is superseded by the above.Remaining #438 scope (not covered here): restoring per-harness role overrides, and the "remove the brittle validator/test" preference — the validator was repaired to gate on the correct schema rather than removed. Leaving open for that; close if that scope is dropped.