Run the dev-base docker build + main-only validations on PRs as build-only checks #541

Open
coilyco-ops wants to merge 12 commits from issue-454 into main
Member

This adds PR-only dev-base build validation without publish credentials. The shared build/verify action exercises the tiered dev-base family and the in-image ward-doctor gate, so Dockerfile drift or pinned ARG drift fails before merge.

  • What changed: shared build/verify action, PR build-only job, updated docs/tests for the workflow split
  • Why: catch the aos#452 class on the PR that introduces it, instead of after merge
  • Validation: ward exec test and ward exec pre-commit-all both passed locally

closes #454
ward.workflow: pull-request-and-merge

This adds PR-only dev-base build validation without publish credentials. The shared build/verify action exercises the tiered dev-base family and the in-image ward-doctor gate, so Dockerfile drift or pinned ARG drift fails before merge. - What changed: shared build/verify action, PR build-only job, updated docs/tests for the workflow split - Why: catch the aos#452 class on the PR that introduces it, instead of after merge - Validation: `ward exec test` and `ward exec pre-commit-all` both passed locally closes #454 ward.workflow: pull-request-and-merge
ci: run the dev-base build + main-only validations on PRs as build-only checks
Some checks failed
ci / gate (pull_request) Successful in 11s
ci / build-dev-base (pull_request) Failing after 2m20s
7c51971514
Factor the build/verify half of release.yml's publish-dev-base into the
shared ./actions/dev-base-build composite so PR validation and the main
publish run one definition and cannot drift apart. ci.yml gains a
pull_request-only build-dev-base job that builds every tier (exercising
the in-image CLIGUARD_NO_SANDBOX=1 ward doctor gate) with no push, no
tag, and no registry auth, plus a compute-only tag-bump step in gate so
release planning is validated pre-merge. Publish, tag, and the GitHub
mirror stay main-only. The manifest verify loop now derives its tier
refs from the build plan instead of a hand-maintained suffix list.

This is the prevention for the aos#452 class: main going red on a merge
because PRs never exercised what main does.

closes #454
Merge remote-tracking branch 'origin/main' into issue-454
Some checks failed
ci / gate (pull_request) Successful in 11s
ci / build-dev-base (pull_request) Failing after 2m24s
bb4d2ede0a
docs: update PR CI feature inventory
Some checks failed
ci / gate (pull_request) Successful in 13s
ci / build-dev-base (pull_request) Failing after 4m39s
65c8612943
Author
Member

WARDED_WORKFLOW: blocked 🛑

details

workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA)

ci / gate passed on PR #541. ci / build-dev-base failed after 4m39s on the same PR. I could not recover a repo-local fix from this run, and the failure still matches the dev-base build/doctor blocker seen before.

felt: clean until the shared dev-base path tripped again.
confidence: high that this is still external to this repo.
surprises: the fresh PR on the current branch did not change the outcome.
follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541.

WARDED_WORKFLOW: blocked 🛑 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA) ci / gate passed on PR #541. ci / build-dev-base failed after 4m39s on the same PR. I could not recover a repo-local fix from this run, and the failure still matches the dev-base build/doctor blocker seen before. felt: clean until the shared dev-base path tripped again. confidence: high that this is still external to this repo. surprises: the fresh PR on the current branch did not change the outcome. follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541. </details>
ci: refresh dev-base PR validation
Some checks failed
ci / ward-doctor (pull_request) Failing after 12s
ci / gate (pull_request) Failing after 11s
ci / build-dev-base (pull_request) Failing after 3m37s
84e861dd84
Author
Member

WARDED_WORKFLOW: blocked 🛑

details

workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA)

ci / ward-doctor failed after 12s, ci / gate failed after 11s, and ci / build-dev-base failed after 3m37s on PR #541.
felt: the PR wiring was straightforward, but the same external dev-base blocker still won.
confidence: high that the remaining failure is external to this repo.
surprises: the build-only job stayed red on the refreshed head even after the branch was rebased onto current main.
follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541.

WARDED_WORKFLOW: blocked 🛑 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA) ci / ward-doctor failed after 12s, ci / gate failed after 11s, and ci / build-dev-base failed after 3m37s on PR #541. felt: the PR wiring was straightforward, but the same external dev-base blocker still won. confidence: high that the remaining failure is external to this repo. surprises: the build-only job stayed red on the refreshed head even after the branch was rebased onto current main. follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541. </details> <!-- ward-agent-signature -->
Author
Member

WARDED_WORKFLOW: blocked 🛑

details

workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA)

ci / ward-doctor failed after 12s, ci / gate failed after 11s, and ci / build-dev-base failed after 3m37s on PR #541.
I could not recover a repo-local fix from this run.
felt: the PR wiring was straightforward, but the shared dev-base blocker still won.
confidence: high that the remaining failure is external to this repo.
follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541.

WARDED_WORKFLOW: blocked 🛑 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA) ci / ward-doctor failed after 12s, ci / gate failed after 11s, and ci / build-dev-base failed after 3m37s on PR #541. I could not recover a repo-local fix from this run. felt: the PR wiring was straightforward, but the shared dev-base blocker still won. confidence: high that the remaining failure is external to this repo. follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541. </details> <!-- ward-agent-signature -->
merge: reconcile issue-454 with main
Some checks failed
ci / ward-doctor (pull_request) Successful in 19s
ci / gate (pull_request) Successful in 1m26s
ci / build-dev-base (pull_request) Failing after 7m50s
4e2e802748
Author
Member

WARDED_WORKFLOW: failed

details

workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA)

ci / ward-doctor passed, ci / gate passed, and ci / build-dev-base failed after 7m50s on PR #541.
felt: the merge held, but the shared dev-base build/doctor path still tripped.
confidence: high the blocker is external to this repo.
surprises: the refreshed head kept the same failure.
follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541.

WARDED_WORKFLOW: failed ❌ <details><summary>details</summary> workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA) ci / ward-doctor passed, ci / gate passed, and ci / build-dev-base failed after 7m50s on PR #541. felt: the merge held, but the shared dev-base build/doctor path still tripped. confidence: high the blocker is external to this repo. surprises: the refreshed head kept the same failure. follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541. </details> <!-- ward-agent-signature -->
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

Holder: launch intent for container engineer-codex-agentic-os-541 on host kais-macbook-pro-2.local.

Accepted by ward agent --harness codex (reserved 2026-07-15T05:22:00Z). Concurrent ward agent runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). --override-reservation 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/agentic-os#541 · branch issue-541 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-agentic-os-541 · ward v0.697.0 · dispatched 2026-07-15T05:21:48Z
  • Comment thread: 4 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.697.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARDED_WORKFLOW: reservation-held <details><summary>reservation details</summary> Holder: launch intent for container `engineer-codex-agentic-os-541` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-15T05:22:00Z). Concurrent `ward agent` runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). `--override-reservation` 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/agentic-os#541` · branch `issue-541` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-agentic-os-541` · ward `v0.697.0` · dispatched `2026-07-15T05:21:48Z` - **Comment thread:** 4 included in the pre-flight read, 0 stripped (ward's own automated comments). - included: @coilyco-ops (2026-07-15T01:12:21Z), @coilyco-ops (2026-07-15T01:35:42Z), @coilyco-ops (2026-07-15T03:11:16Z), @coilyco-ops (2026-07-15T03:42:02Z) Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.697.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
fix(dev-base): retry dotnet installer fetch
Some checks failed
ci / ward-doctor (pull_request) Successful in 18s
ci / gate (pull_request) Successful in 1m45s
ci / build-dev-base (pull_request) Failing after 7m2s
6d369856bb
fix(ci): retry PR build bootstrap downloads
Some checks failed
ci / ward-doctor (pull_request) Successful in 15s
ci / gate (pull_request) Successful in 1m17s
ci / build-dev-base (pull_request) Failing after 11m29s
e48d08d209
fix(dev-base): use redirected dotnet script host
Some checks failed
ci / ward-doctor (pull_request) Successful in 27s
ci / gate (pull_request) Successful in 2m19s
ci / build-dev-base (pull_request) Failing after 19m23s
88d94c5df5
fix(dev-base): use cache-only build validation
Some checks failed
ci / gate (pull_request) Successful in 1m25s
ci / ward-doctor (pull_request) Successful in 2m20s
ci / build-dev-base (pull_request) Failing after 4m44s
2e041cb7ae
fix(dev-base): restore loaded tier builds
Some checks failed
ci / ward-doctor (pull_request) Successful in 35s
ci / gate (pull_request) Successful in 7m31s
ci / build-dev-base (pull_request) Has been cancelled
7d1c27d5f8
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

Holder: launch intent for container engineer-codex-agentic-os-541 on host kais-macbook-pro-2.local.

Accepted by ward agent --harness codex (reserved 2026-07-15T06:53:48Z). Concurrent ward agent runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). --override-reservation 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/agentic-os#541 · branch issue-541 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-agentic-os-541 · ward v0.697.0 · dispatched 2026-07-15T06:53:36Z
  • 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.697.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARDED_WORKFLOW: reservation-held <details><summary>reservation details</summary> Holder: launch intent for container `engineer-codex-agentic-os-541` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-15T06:53:48Z). Concurrent `ward agent` runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). `--override-reservation` 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/agentic-os#541` · branch `issue-541` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-agentic-os-541` · ward `v0.697.0` · dispatched `2026-07-15T06:53:36Z` - **Comment thread:** 4 included in the pre-flight read, 1 stripped (ward's own automated comments). - included: @coilyco-ops (2026-07-15T01:12:21Z), @coilyco-ops (2026-07-15T01:35:42Z), @coilyco-ops (2026-07-15T03:11:16Z), @coilyco-ops (2026-07-15T03:42:02Z) - stripped: @coilyco-ops (2026-07-15T05:22:01Z) Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.697.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
merge: refresh issue-454 onto current main
Some checks failed
ci / ward-doctor (pull_request) Successful in 29s
ci / gate (pull_request) Successful in 1m4s
ci / build-dev-base (pull_request) Has been cancelled
468f007300
chore: retrigger PR ci
Some checks failed
ci / ward-doctor (pull_request) Successful in 1m20s
ci / gate (pull_request) Successful in 59s
ci / build-dev-base (pull_request) Failing after 14m43s
c3563abf8a
Author
Member

WARDED_WORKFLOW: failed

details

workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA)

ci / ward-doctor passed, ci / gate passed, and ci / build-dev-base failed after 14m43s on PR #541.
felt: the branch refresh held, then the shared dev-base build fell over.
confidence: high the blocker is still external to this repo.
follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541.

WARDED_WORKFLOW: failed ❌ <details><summary>details</summary> workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped, the temporary ward default pending brokered QA) ci / ward-doctor passed, ci / gate passed, and ci / build-dev-base failed after 14m43s on PR #541. felt: the branch refresh held, then the shared dev-base build fell over. confidence: high the blocker is still external to this repo. follow-ups: wait for the ward-side build/doctor compatibility fix, then rerun PR #541. </details> <!-- ward-agent-signature -->
Some checks failed
ci / ward-doctor (pull_request) Successful in 1m20s
ci / gate (pull_request) Successful in 59s
ci / build-dev-base (pull_request) Failing after 14m43s
This pull request has changes conflicting with the target branch.
  • docs/FEATURES.md
  • docs/dev-base-image.md
  • docs/release.md
  • tests/test_pull_request_ci_workflow.py
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin issue-454:issue-454
git switch issue-454
Sign in to join this conversation.
No description provided.