build(dev-base): bring ward, aos, and agent-compose up to date #1130
No reviewers
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
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!1130
Loading…
Reference in a new issue
No description provided.
Delete branch "task/bump-internal-tools"
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?
Three coilyco-authored binaries in the full image were behind their release
trains.
wardaosagent-composeagent-composeis the one that matters most this week: it composes every rolebundle the sirens lanes bake, and 2.22.0 predates the work that landed this
week.
specgen is not in this PR, and the gate is why
The first push bumped
SPECGEN_VERSION0.142.0 -> 0.157.0 alongside the othersand CI refused it:
That test asserts
ARG SPECGEN_VERSION=<x>equalscliGuardin.specgen/guardfiles/specverb.lock, and separately refusesSPECGEN_VERSIONappearing in
scripts/aos-release-build.shat all. The lock owns that pin.The Dockerfile value is downstream of it, so moving it alone is not a bump, it
is a divergence.
Moving specgen for real means regenerating guardfiles at the new umbra ref,
which produces a real diff in generated output on the aos release-build path.
That is its own change with its own review. The pin is back at 0.142.0 here.
I had already flagged the lock as out of scope and then bumped the pin anyway.
The gate caught the contradiction, which is the check doing exactly its job.
Verified against the registry, not the tag list
A tag existing proves nothing, since the build fails at the
curlif the assetis not there. For each of the three:
<tool>-linux-amd64,<tool>-linux-arm64,SHA256SUMSagent-compose)
SHA256SUMSwas matched with the same[[:space:]]<asset>$pattern theDockerfile greps, rather than assumed to contain the name
The finding underneath
Third-party pins were checked too and are almost all current:
Something keeps the third-party set current and nothing keeps the first-party
set current. The pins we control are the ones that rot, which is worth its own
change rather than a recurring sweep.
codexandtrufflehogare left alone deliberately: the ask was thefirst-party set, and each wants its own changelog read.
Rollout
docker/**on main is thedev-base-publishpath filter, so merging rebuildsand republishes the image graph. No hand-run publish.
build(dev-base): bring the first-party image tools up to dateto build(dev-base): bring ward, aos, and agent-compose up to dateThe image build failed on the agent-compose bump, in verify-common.sh: aosguard version dev-base v2.31.0 roster artifact: 34 files under /tmp/tmp.f1tjRfS2c2 #56 ERROR: process "bash /tmp/verify-common.sh" did not complete successfully: exit code: 1 agent-compose 2.31.0 ships eighteen personalities where 2.22.0 shipped sixteen. The two new ones are `empirical` and `outward`, and they are the same two that moved `ai` off curious and `exec` off curious in every consumer's rebaked bundles. source and role_order are unchanged at roster:core and eight. So the count was right when it was written and the roster moved under it. It is a hand-maintained number for a set the tool owns, which is the same shape as every other pin in this image, and it has no derivation available: the check exists to catch an empty or garbage roster, and asserting the roster equals itself would assert nothing. THE OPAQUE FAILURE IS THE OTHER HALF. A bare `jq -e` over three conditions exits 1 naming neither the field nor what it saw, so an image build failed with a line number and nothing else. The conditions are now one named check each and a mismatch prints both sides: roster .personalities | length = 18, expected 16 Verified by running it against a real roster at both values, so the passing case and the failing message are both observed rather than assumed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Kai Siren <coilysiren@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>