AGENTS.md: prohibit warded engineers from debugging/iterating against live deployments #466
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#466
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?
Problem
Warded engineers and QA run in sealed, ephemeral clones with no live-cluster access. They cannot curl a public edge, inspect a pod, watch a rollout, or confirm a secret synced. When handed deploy/infra work they nonetheless treat it like a unit test - change logic, push, watch CI, repeat - and "fix until green." Because they cannot observe the live system, this produces unverifiable changes that land red on
mainand churn.This exact failure just happened: a 24h window put ~137 unverifiable commits across
coilyco-bridge/deploy+coilyco-flight-deck/infrastructure, with per-service rollout hacks (a public-HTTP gate that fails from inside the cluster, an ExternalSecret refresh-wait that times out on a healthy secret) that only turned deploys red. Full write-up:coilyco-bridge/deploy#141.Scope (IMPORTANT - corrected)
This rule binds only the sealed roles: engineer and QA. It does NOT bind director, ops, or advisor - those hold live-observe surfaces (the advisor role carries the tailnet +
~/.awslive-observe guardfile set) and are explicitly authorized to debug deployments. Do not phrase the rule as "all warded agents."Do
Add this rule to the
## Agent rulessection ofAGENTS.md(the public-safe universal base, sibling to "Run until a wall worth a human"). Use this text (tighten only to house voice if needed - no em-dashes, bold anchors, no semicolons in prose). This exact text will be repeated verbatim into the infra and deploy repos, so treat it as the canonical wording:Engineers and QA: never debug or iterate against a live deployment
This rule binds the sealed roles - engineer and QA - which run in ephemeral clones with no live-cluster access. It does not bind director, ops, or advisor: those hold live-observe surfaces (the advisor role carries the tailnet +
~/.awslive-observe guardfile set) and are authorized to debug deployments.An engineer or QA runs in a sealed, ephemeral clone with no live-cluster access. You cannot curl a public edge, inspect a pod, watch a rollout, or confirm a secret synced. So you must not try to debug, tune, or "fix until green" a live deployment, and QA must not render a verdict that turns on live-cluster state it cannot observe. Treating infra like a unit test - change logic, push, watch CI, repeat - produces changes you cannot verify, which land red on
mainand churn. A live deployment you cannot observe is one of the walls worth a human.Deploys already have established precedent (exposure patterns, exemplar services, shared charts). For deploy work: match the precedent and copy the exemplar, do not invent or iterate. If a change genuinely needs live verification - does this rollout succeed, is this secret synced, is the edge reachable - you cannot provide it from a sealed clone. Stop, file an
interactive-labeled issue describing exactly what needs live verification, and hand it to a role that can observe live (the operator, or a director / ops / advisor run). Do not push a speculative fix and hope CI confirms it.Acceptance
AGENTS.mdunder## Agent rules, house voice, passes the pre-commit suite.coilyco-flight-deck/ward#1105).Context
Codifies the lesson behind the deploy/infra churn cleanup. The burndown filter (ward#1105) keeps these repos out of headless burndown; this doctrine rule stops any sealed-role run - on any repo - from iterating against a live system it cannot see.
WARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-claude-agentic-os-466on hostKAI-DESKTOP-TOWER.Reserved by
ward agent --harness claude(reserved 2026-07-11T02:24:19Z). 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#466· branchissue-466· harnessclaude· workflowpull-requests-and-mergeengineer-claude-agentic-os-466· wardv0.605.0· dispatched2026-07-11T02:24:19ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.605.0).
— Claude (she/her), via
ward agentSCOPE CORRECTION (Kai) - read before writing the rule
This rule is specifically for the sealed roles: engineer and QA. It does NOT apply to director, ops, or advisor - those are authorized to debug deployments (the advisor role even holds the tailnet +
~/.awslive-observe guardfile set). Do not write it as "all warded agents" or "every warded engineer" in the blanket sense - name the roles it binds (engineer, QA) and name the ones it exempts (director, ops, advisor).The issue body now carries the exact canonical wording to use (the
### Engineers and QA: never debug or iterate against a live deploymentblock). Write that text verbatim intoAGENTS.md; it will be repeated into the infra and deploy repos word-for-word, so the wording must match.WARD-OUTCOME: submitted
details
workflow: pull-request-and-merge; review summary: skipped - the in-container review gate was intentionally skipped per the temporary ward default pending brokered QA.
PR: coilyco-flight-deck/agentic-os#467 (branch
issue-466,ci / gategreen, mergeable, body carriescloses #466andward.workflow: pull-request-and-merge). Director merge is the remaining step - the engineer stops at merge-ready.What landed: the Never debug or iterate against a live deployment rule in
AGENTS.mdunder## Agent rules, sibling to "Run until a wall worth a human", tightened to house voice, framed as a hard prohibition with the interactive-issue handoff, cross-referencing the deploy precedent doc (coilyco-bridge/deploydocs/deploy-patterns.md, forthcoming) and the burndown filter (coilyco-flight-deck/ward#1105).CLAUDE.mdis@AGENTS.mdso no mirror edit.pyproject.tomlagents_md_max_charsraised 14500 -> 16000 with the in-context rationale comment, matching the three prior documented bumps.Retrospective: the edit itself was clean, and the one surprise was the documentation-layout char cap - AGENTS.md was already within ~600 chars of it, so the rule could not fit without either gutting it or bumping the cap. The cap's own comment history establishes the bump pattern for always-composed doctrine, so the agent followed it and trimmed the prose besides.
ward ops forgejowas degraded in-container (baked neutral config), so PR/comment operations went through the Forgejo REST API withFORGEJO_TOKENdirectly. Confidence high: full pre-commit suite green, 455 pytest tests green, CI gate green.Follow-ups: none filed - the deploy precedent doc is already tracked as forthcoming in
coilyco-bridge/deploy, and the reference in the rule points at it by path.Reservation: this run is complete, the lock releases when the container exits - no manual clear needed.
— Claude (she/her), via
ward agentWARD-DISPATCH: failed ❌
failure details
This forwarded dispatch failed after the issue was already reserved.
Attempted harness:
claudeAttempted run:
ward agent engineer coilyco-flight-deck/agentic-os#466 --harness claude --ward-version v0.605.0 --details PR#467 was CLOSED for wrong scope - it omitted QA and did not exempt director/ops/advisor. Use the EXACT '### Engineers and QA: never debug or iterate against a live deployment' block in this issue body VERBATIM (do not reword), so it stays byte-identical to the infra#544 and deploy#162 copies.Container:
engineer-claude-agentic-os-466Container created: no running engineer was observed.
Host log:
C:\Users\firem\.ward\agent-logs\dispatch\20260711T023605Z-director-claude-zr86-coilyco-flight-deck-agentic-os-466.logFailure:
ward agent engineer --harness claude: issue coilyco-flight-deck/agentic-os#466 is already reserved remotely (by @coilyco-ops at 2026-07-11T02:24:19Z); wait for it to finish or pass --force to overrideRetry: choose another harness if the first one is down, or rerun with
--forceif the reservation is stale.— Claude (she/her), via
ward agentWARDED_WORKFLOW: reservation-held
reservation details
Holder: launch intent for container
engineer-codex-agentic-os-466on hostkais-macbook-pro-2.local.Accepted by
ward agent --harness codex(reserved 2026-07-14T09:33:08Z). Concurrentward agentruns are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL).--override-reservationoverrides.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#466· branchissue-466· harnesscodex· workflowpull-request-and-mergeengineer-codex-agentic-os-466· wardv0.672.0· dispatched2026-07-14T09:33:06ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.672.0).
— Codex, via
ward agentWARDED_WORKFLOW: blocked 🛑
details
workflow: pull-request-and-merge; review summary: skipped - the in-container review gate was intentionally skipped by ~/.ward/config.yaml default.
The implementation itself was straightforward. The only surprise was the Forgejo Actions run for PR #522 staying in
runningfor minutes with no usable job detail exposed through the API, so the branch was left blocked on the forge runner rather than on repo-side changes.Confidence: medium. Follow-up: a human with Forgejo runner access needs to unblock or restart the PR check for
coilyco-flight-deck/agentic-os#522.