forgejo read/write/admin guardfile chain still carries Phase-1 example* anchors in the deployment bundle #495

Closed
opened 2026-07-13 06:02:50 +00:00 by coilyco-ops · 4 comments
Owner

Found while refactoring the bundle tests (27eccc2). The deployment bundle's role-overlay chain still carries the generic ward#278 Phase-1 anchors, while only the ops and merge surfaces carry the real deployment values:

  • .ward/guardfile.forgejo.read.kdl - base-url "git.example.com/api/v1", auth ... ssm "/example/forgejo/api-token", restrict owner matches example*
  • .ward/guardfile.forgejo.write.kdl and .ward/guardfile.forgejo.admin.kdl - restrict owner matches example* (re-declared per tier)
  • .ward/guardfile.forgejo.kdl (ops) and .ward/guardfile.forgejo.merge.kdl - real coily* gate and real singletons

ward doctor v0.633.0 passes all five checks on this bundle, so either the chain's singletons are superseded at mount (in which case the example* lines are dead text worth deleting) or the read/write/admin overlays are pointing agents at a placeholder forge and owner gate (in which case this is a live misconfig for every role that mounts them - all six roles bind the read pair).

Related ward-side context:

  • ward#1167 (first-class placeholder sentinel) makes doctor fail when an annotated sentinel survives in a real bundle - once that lands, this file set is exactly what it should flag.
  • ward#1141 observed a live director surface below tier; worth re-checking against this once resolved.

Ask: determine which semantics hold, then either replace the example* anchors with the real deployment values or delete the dead singletons, in one commit. The repo suite intentionally no longer asserts guardfile content (27eccc2), so the fix is a config edit plus the doctor gate.

Found while refactoring the bundle tests (`27eccc2`). The deployment bundle's role-overlay chain still carries the generic ward#278 Phase-1 anchors, while only the ops and merge surfaces carry the real deployment values: * `.ward/guardfile.forgejo.read.kdl` - `base-url "git.example.com/api/v1"`, `auth ... ssm "/example/forgejo/api-token"`, `restrict owner matches example*` * `.ward/guardfile.forgejo.write.kdl` and `.ward/guardfile.forgejo.admin.kdl` - `restrict owner matches example*` (re-declared per tier) * `.ward/guardfile.forgejo.kdl` (ops) and `.ward/guardfile.forgejo.merge.kdl` - real `coily*` gate and real singletons `ward doctor v0.633.0` passes all five checks on this bundle, so either the chain's singletons are superseded at mount (in which case the example* lines are dead text worth deleting) or the read/write/admin overlays are pointing agents at a placeholder forge and owner gate (in which case this is a live misconfig for every role that mounts them - all six roles bind the read pair). Related ward-side context: * ward#1167 (first-class placeholder sentinel) makes doctor fail when an annotated sentinel survives in a real bundle - once that lands, this file set is exactly what it should flag. * ward#1141 observed a live director surface below tier; worth re-checking against this once resolved. Ask: determine which semantics hold, then either replace the example* anchors with the real deployment values or delete the dead singletons, in one commit. The repo suite intentionally no longer asserts guardfile content (`27eccc2`), so the fix is a config edit plus the doctor gate.
Author
Owner

Fresh evidence from infrastructure#668: aosguard ops forgejo repo-topic replace-all is present and authorized by the mounted surface, but it authenticates with /forgejo/coilyco-ops/api-token and Forgejo returns 403 because topic replacement requires repository admin write. The attended ward exec forgejo-admin-token helper succeeds in a TTY, but exporting that value does not override AOSGuard's spec-owned credential. No repository topic changed.

This blocks the new policy-product classification for cli-guard, ward, agent-proxy, ward-mcp, and lunch-money-k8s. Acceptance should prove that an admin-tier Forgejo verb uses the attended admin credential without placing it in argv, logs, or tracked config, while read/write tiers retain the bot token.

Fresh evidence from infrastructure#668: `aosguard ops forgejo repo-topic replace-all` is present and authorized by the mounted surface, but it authenticates with `/forgejo/coilyco-ops/api-token` and Forgejo returns 403 because topic replacement requires repository admin write. The attended `ward exec forgejo-admin-token` helper succeeds in a TTY, but exporting that value does not override AOSGuard's spec-owned credential. No repository topic changed. This blocks the new `policy-product` classification for `cli-guard`, `ward`, `agent-proxy`, `ward-mcp`, and `lunch-money-k8s`. Acceptance should prove that an admin-tier Forgejo verb uses the attended admin credential without placing it in argv, logs, or tracked config, while read/write tiers retain the bot token.
Author
Owner

Correction from infrastructure#668: Code Fleet Watch classification no longer depends on repository-topic writes. Kai chose private SSM policy metadata as the sole repository roster, and infrastructure commit 7843853 removes the topic lookup. The previously reported AOSGuard admin-credential behavior remains valid evidence for this issue, but it no longer blocks the Code Fleet Watch rollout.

Correction from infrastructure#668: Code Fleet Watch classification no longer depends on repository-topic writes. Kai chose private SSM policy metadata as the sole repository roster, and infrastructure commit 7843853 removes the topic lookup. The previously reported AOSGuard admin-credential behavior remains valid evidence for this issue, but it no longer blocks the Code Fleet Watch rollout.
Author
Owner

WARD-WORKFLOW: done

details

review: skipped. The in-container review gate was intentionally skipped because implementation and QA are role-separated. QA is a separate, opt-in exact-commit verification role bound to candidate commit 439bd7dca010a7d5373a18e080dfcbefc4827908.

workflow: merge-remote-main; review summary: skipped (role-separated QA, exact-commit verification is opt-in)

felt: Clean after separating the retired Ward chain from the surviving AOSguard credential bug.

confidence: high. Ward doctor, redacted dry-runs, 574 tests, AOS Go tests, pre-commit, and the four-target release build/check passed.

surprises: issue #784 had already removed the Phase-1 files. A nested admin mount displaced the parent describe leaf, so the final surface uses the sibling forgejo-admin group.

follow-ups: optional QA verification on the exact commit; no implementation follow-up.

WARD-WORKFLOW: done ✅ <details><summary>details</summary> review: skipped. The in-container review gate was intentionally skipped because implementation and QA are role-separated. QA is a separate, opt-in exact-commit verification role bound to candidate commit `439bd7dca010a7d5373a18e080dfcbefc4827908`. workflow: merge-remote-main; review summary: skipped (role-separated QA, exact-commit verification is opt-in) felt: Clean after separating the retired Ward chain from the surviving AOSguard credential bug. confidence: high. Ward doctor, redacted dry-runs, 574 tests, AOS Go tests, pre-commit, and the four-target release build/check passed. surprises: issue #784 had already removed the Phase-1 files. A nested admin mount displaced the parent describe leaf, so the final surface uses the sibling `forgejo-admin` group. follow-ups: optional QA verification on the exact commit; no implementation follow-up. </details>
Author
Owner

WARD-WORKFLOW: reservation-released

release details

Run finished with WARD-WORKFLOW: done ✅.

ward container reap released container engineer-codex-agentic-os-495 (--harness codex): the terminal outcome supersedes the reservation, so a later redispatch no longer needs --override-reservation.

— Codex, via ward agent

<!-- ward-agent-reservation-released --> WARD-WORKFLOW: reservation-released <details><summary>release details</summary> Run finished with `WARD-WORKFLOW: done ✅`. `ward container reap` released container `engineer-codex-agentic-os-495` (`--harness codex`): the terminal outcome supersedes the reservation, so a later redispatch no longer needs `--override-reservation`. </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
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/agentic-os#495
No description provided.