Add a fully self-hosted Goose → Ward director → Goose engineer acceptance run #520
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/infrastructure#520
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?
Goal
Build a repeatable end-to-end acceptance run proving that a self-hosted model can bootstrap Ward in a clean environment and carry a real Forgejo issue through completion:
The target repository is
coilysiren/inbox.Hard requirement: Goose at every model boundary
All model-backed work must use the self-hosted Goose/Ollama path:
Claude and Codex must not participate.
Ward’s current local-harness behavior—printing that self-assessment is unavailable and dispatching the top issue by rank—does not satisfy this issue. The director must make a real Goose model call and receive a parsed
DISPATCHdecision.Implement a local-model-safe director decision path. Do not merely remove the existing host-one-shot trust gate and expose an unsandboxed host execution path.
Issue-specific director scope
The director must be constrained to the exact evaluation issue and must never dispatch another backlog item.
Support an invocation shaped like:
A full Forgejo issue URL should also be acceptable.
When given an issue ref, the director should:
This should reconcile the existing documentation implying
warded director #Nsupport with the currently repo-scoped implementation.Evaluation issue
The evaluator creates one real issue in
coilysiren/inbox:Apply the existing
P4andheadlesslabels.A unique file per run avoids overwriting previous evidence and makes verification unambiguous.
Kubernetes execution environment
Run each evaluation as a disposable k3s
Job.Use one privileged Ubuntu runner container containing only the prerequisites:
The container entrypoint should:
dockerd.dockerd.Use a single runner/DinD container rather than a permanent sidecar so:
$HOME,/workspace, staged credentials, and Ward assets resolve correctly.The Ollama service should remain outside the disposable Job and be reached through the cluster network.
Bootstrap one-shot
The outer Goose model receives:
WARD_CONFIG_REF.It must:
ward setupand resolve the supplied runtime bundle.The outer model must not clone
coilysiren/inbox, edit files, commit, push, or close the issue itself.Engineer behavior
The director-dispatched engineer must:
coilysiren/inbox.runs/<run-id>.txt.direct-mainworkflow.WARD-OUTCOME: done.Credentials and isolation
Use a dedicated Forgejo evaluation bot with access limited to
coilysiren/inbox.It needs only the permissions required to:
The Job must:
Independent verification
Do not trust the model’s final response as proof.
The verifier must confirm:
engineer-goose-*container for the issue.WARD-OUTCOME: done.runs/<run-id>.txt.Failure handling
If the Job times out or dies:
Done when
A single command can launch a fresh k3s Job and produce a verified chain:
WARD-DISPATCH: failed ❌
failure details
This forwarded dispatch failed after the issue was already reserved.
Attempted harness:
gooseAttempted run:
ward agent engineer coilyco-flight-deck/infrastructure#520 --harness goose --repo coilyco-flight-deck/ward --ward-version v0.569.0 --details Carry the first landable slice toward the issue 520 acceptance loop. Start from the current repository state, preserve Goose at every model-backed boundary in the acceptance flow, and keep the implementation focused on making the repeatable k3s Goose bootstrap -> Ward director -> Goose engineer verifier more real. Do not use Claude or Codex inside the acceptance flow being built. --printContainer:
engineer-goose-infrastructure-520Container created: no running engineer was observed.
Host log:
/Users/kai/.ward/agent-logs/dispatch/20260710T090234Z-director-codex-vg55-coilyco-flight-deck-infrastructure-520.logFailure:
ward agent engineer --harness goose: refusing to dispatch a container pinned to ward v0.569.0, older than this host's ward v0.573.0: the in-container reaper is the last line against lost or false-salvaged work, and an older reaper can reproduce already-fixed bugs (ward#529). Pass --allow-ward-downgrade to override, or clear --ward-version / WARD_AGENT_VERSION to inherit this host's wardRetry: choose another harness if the first one is down, or rerun with
--forceif the reservation is stale.— Goose, via
ward agentWARD-DISPATCH: failed ❌
failure details
This forwarded dispatch failed after the issue was already reserved.
Attempted harness:
gooseAttempted run:
ward agent engineer coilyco-flight-deck/infrastructure#520 --harness goose --repo coilyco-flight-deck/ward --ward-version v0.569.0 --details Carry the first landable slice toward the issue 520 acceptance loop. Start from the current repository state, preserve Goose at every model-backed boundary in the acceptance flow, and keep the implementation focused on making the repeatable k3s Goose bootstrap -> Ward director -> Goose engineer verifier more real. Do not use Claude or Codex inside the acceptance flow being built.Container:
engineer-goose-infrastructure-520Container created: no running engineer was observed.
Host log:
/Users/kai/.ward/agent-logs/dispatch/20260710T090243Z-director-codex-vg55-coilyco-flight-deck-infrastructure-520.logFailure:
ward agent engineer --harness goose: refusing to dispatch a container pinned to ward v0.569.0, older than this host's ward v0.573.0: the in-container reaper is the last line against lost or false-salvaged work, and an older reaper can reproduce already-fixed bugs (ward#529). Pass --allow-ward-downgrade to override, or clear --ward-version / WARD_AGENT_VERSION to inherit this host's wardRetry: choose another harness if the first one is down, or rerun with
--forceif the reservation is stale.— Goose, via
ward agentWARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-goose-infrastructure-520on hostkais-macbook-pro-2.local.Reserved by
ward agent --harness goose(reserved 2026-07-10T09:03:09Z). 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/infrastructure#520· branchissue-520· harnessgoose· workflowdirect-mainengineer-goose-infrastructure-520· wardv0.573.0· dispatched2026-07-10T09:03:09ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.573.0).
— Goose, via
ward agent🔎 ward agent advisor
ward agent advisor --harness codexran a one-shot standard research pass on this question:pre-commit installed at .git/hooks/pre-commit
pre-commit installed at .git/hooks/commit-msg
Researched and posted automatically by
ward agent advisor --harness codex(ward#179). This is one-shot research, not a carried change - verify before acting on it.— Codex, via
ward agent