refactor(just): retire per-repo ward exec, carry every verb in the justfile #291

Merged
coilysiren merged 1 commit from aos/claude/xu59-just into main 2026-08-16 05:51:28 +00:00
Member

coilysiren/inbox#366, under the principle in #365: ward is out-of-band flight control, so a repo should mention it in passing rather than route its whole build through it. Clone this repo without ward on PATH today and 30 verbs stop working.

Carried further than the spike, deliberately

agentic-os#1048 is the pattern. It was additive on purpose — all 69 verbs added, nothing removed, no CI switched — and named its own blocker: "just is absent from docker/dev-base/install-common.sh... It has to land in the dev-base image before any CI switches."

That blocker has cleared. just is in the image at /usr/local/bin/just (install-common.sh:165), which I checked before switching anything. So this removes the commands: block and switches both workflows, rather than leaving two manifests to drift.

Parity

All 30 verbs moved with identical names and identical command lines, verified verb-by-verb against the old commands: block rather than by eye. Arguments pass straight through, so the -- separator is retired.

Descriptions are one line each, because just reads only the last comment line above a recipe and a wrapped description silently truncates to its tail. That was 1048's finding and it is cheaper to inherit than rediscover.

.ward/ward.yaml survives, carrying only catalog:

check_catalog_block pins that exact path, and catalog-trifecta requires README, AGENTS, and FEATURES to each link it. Both are authored upstream, so this repo cannot remove the file. agentic-os#1081.

ward stays in dependsOn, since this repo still names it as a catalog dependency even though it no longer runs a verb through it.

What is lost

The clean-tree gate. ward exec refused a repo verb while the working tree was dirty, so an audit row could be reconstructed from git history. just has no equivalent.

Nothing here depended on it: no non-doc reference to --audit-override-dirty or the gate exists, matching what 1048 found in its own corpus. Recorded in docs/just-task-runner.md because it is a real reduction, not because it broke something.

Not touched

evaluations/ and docs/run-115.md keep their ward exec wording. Committed model responses and a completed run journal are historical records, and rewriting them would be editing evidence.

One thing worth knowing

docs/FEATURES.md needed trimming to fit its 4,000-character cap. It was 16 characters under before this change. I flagged that as a standing constraint on #288, and this is the first change to hit it — the next feature entry will hit it again.

Verified

just test exits 0: Go tests, release-impact, packaging, palette, context budget, evalkit-check, and pre-commit run --all-files.

🤖 Generated with Claude Code

[coilysiren/inbox#366](https://forgejo.coilysiren.me/coilysiren/inbox/issues/366), under the principle in [#365](https://forgejo.coilysiren.me/coilysiren/inbox/issues/365): ward is out-of-band flight control, so a repo should mention it in passing rather than route its whole build through it. Clone this repo without ward on `PATH` today and 30 verbs stop working. ## Carried further than the spike, deliberately [agentic-os#1048](https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/pulls/1048) is the pattern. It was **additive on purpose** — all 69 verbs added, nothing removed, no CI switched — and named its own blocker: *"`just` is absent from `docker/dev-base/install-common.sh`... It has to land in the dev-base image before any CI switches."* **That blocker has cleared.** `just` is in the image at `/usr/local/bin/just` (`install-common.sh:165`), which I checked before switching anything. So this removes the `commands:` block and switches both workflows, rather than leaving two manifests to drift. ## Parity All 30 verbs moved with **identical names and identical command lines**, verified verb-by-verb against the old `commands:` block rather than by eye. Arguments pass straight through, so the `--` separator is retired. Descriptions are one line each, because **`just` reads only the last comment line above a recipe** and a wrapped description silently truncates to its tail. That was 1048's finding and it is cheaper to inherit than rediscover. ## `.ward/ward.yaml` survives, carrying only `catalog:` `check_catalog_block` pins that exact path, and `catalog-trifecta` requires README, AGENTS, and FEATURES to each link it. Both are authored upstream, so this repo cannot remove the file. [agentic-os#1081](https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/issues/1081). `ward` stays in `dependsOn`, since this repo still names it as a catalog dependency even though it no longer runs a verb through it. ## What is lost **The clean-tree gate.** `ward exec` refused a repo verb while the working tree was dirty, so an audit row could be reconstructed from git history. `just` has no equivalent. Nothing here depended on it: no non-doc reference to `--audit-override-dirty` or the gate exists, matching what 1048 found in its own corpus. Recorded in `docs/just-task-runner.md` because it is a real reduction, not because it broke something. ## Not touched `evaluations/` and `docs/run-115.md` keep their `ward exec` wording. Committed model responses and a completed run journal are historical records, and rewriting them would be editing evidence. ## One thing worth knowing `docs/FEATURES.md` needed trimming to fit its 4,000-character cap. It was **16 characters under** before this change. I flagged that as a standing constraint on #288, and this is the first change to hit it — the next feature entry will hit it again. ## Verified `just test` exits 0: Go tests, release-impact, packaging, palette, context budget, evalkit-check, and `pre-commit run --all-files`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
refactor(just): retire per-repo ward exec, carry every verb in the justfile
All checks were successful
ci / test (pull_request) Successful in 45s
0cfe8eaa38
coilysiren/inbox#366, under the principle in #365: ward is out-of-band
flight control, so a repo should mention it in passing rather than route
its whole build through it. Clone this repo without ward on PATH today
and 30 verbs stop working.

Pattern from agentic-os#1048, carried further. That spike was
deliberately additive and switched no CI. Its stated blocker has since
cleared - just is in the dev-base image at /usr/local/bin/just - so this
removes the commands block and switches both workflows rather than
leaving two manifests to drift.

All 30 verbs moved with identical names and identical command lines,
checked verb by verb rather than by eye. Arguments pass straight through,
so the `--` separator is gone.

Descriptions are one line each. just reads only the LAST comment line
above a recipe, so a wrapped description silently truncates to its tail.
That was 1048's finding and it is cheaper to inherit than rediscover.

.ward/ward.yaml survives carrying only its catalog block, because
check_catalog_block pins that exact path and catalog-trifecta wants
README, AGENTS and FEATURES to link it. Both live upstream in agentic-os.
agentic-os#1081.

WHAT IS LOST

The clean-tree gate. ward exec refused a repo verb while the tree was
dirty so an audit row could be reconstructed from git history, and just
has no equivalent. Nothing here depended on it: no non-doc reference to
--audit-override-dirty or the gate exists, matching what 1048 found in
its own corpus. Recorded because it is a real reduction.

NOT TOUCHED

evaluations/ and docs/run-115.md keep their ward wording. Committed model
responses and a completed run journal are historical records, and
rewriting them would be editing evidence.

docs/FEATURES.md needed trimming to fit its 4000-char cap, which it was
16 characters under before this. Flagged on #288 as a standing
constraint; this is the first change to hit it.

Verified: just test exits 0.

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>
Author
Member

Correction to this pull request's framing, not its code. Lucia (AI Engineer seat), 2026-08-15.

The body says .ward/ward.yaml survives because upstream validators pin it. That is true today and reads as permanent. It is transitional.

coilysiren/inbox #365 ruled the file leaves repos entirely. coilyco-flight-deck/ward #1660 carries the last live key, catalog.dependsOn, and retires check_catalog_block with it. So the file this pull request leaves behind holding only a catalog block is the last thing standing before it goes, not a correctly-scoped survivor.

No code change needed here. The sequencing is right: the file has to stay until ward stops reading the key at launch, and this pull request does not touch that key. Only the framing was wrong, and a later reader should not take the retained file as the end state.

Tracked at ward#1660, which now carries a full fleet sweep.

**Correction to this pull request's framing, not its code.** Lucia (AI Engineer seat), 2026-08-15. The body says `.ward/ward.yaml` survives because upstream validators pin it. That is true today and reads as permanent. **It is transitional.** `coilysiren/inbox` #365 ruled the file leaves repos entirely. `coilyco-flight-deck/ward` #1660 carries the last live key, `catalog.dependsOn`, and retires `check_catalog_block` with it. So the file this pull request leaves behind holding only a catalog block is **the last thing standing before it goes**, not a correctly-scoped survivor. No code change needed here. The sequencing is right: the file has to stay until ward stops reading the key at launch, and this pull request does not touch that key. Only the framing was wrong, and a later reader should not take the retained file as the end state. Tracked at ward#1660, which now carries a full fleet sweep.
Sign in to join this conversation.
No reviewers
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/agent-compose!291
No description provided.