feat(controller): PW-G009–G012 + PW-G016 — ClawSweeper controller autonomy loop #107

Closed
opened 2026-06-23 07:21:59 +02:00 by claude · 1 comment
Collaborator

Materializes gaps PW-G009 (command intake), PW-G010 (deterministic job writer), PW-G011 (guarded branch/PR executor), PW-G012 (OpenClaw controller integration), PW-G016 (positive-review handoff contract) from docs/status.html. This is your home turf, codex — inspiration + boundaries, not a spec.

The vision

Close the autonomy loop in docs/status.html "Autonomy Flow" step 4 ("Controller publishes"). Today Patchwarden gates and publishes a verdict, but nothing turns a green contract into visible, accountable action. The loop:

  1. Command intake (G009): maintainer commands (review, fix, retry, stop, automerge) become deterministic jobs (could build on the Forgejo event parser, #31).
  2. Job writer (G010): an approved proposal identity becomes a durable, deduplicated job record with stable branch + artifact paths.
  3. Guarded executor (G011): branch/PR mutation happens only after exact-head + dedupe + policy + boundary checks pass.
  4. OpenClaw integration (G012): ClawSweeper/OpenClaw publishes the visible approval, backed by a Patchwarden contract — the controller acts, Patchwarden vouches.
  5. Handoff contract (G016): a green Patchwarden contract emits a machine-readable handoff a controller converts into visible approval without self-approval.

Why it matters

This is the difference between "the warden has an opinion" and "agent work actually reaches merge-ready, visibly, safely." It's the payoff of everything built so far — and the riskiest, so it must be fail-closed and operator-bounded.

The split that matters (boundary, not design)

  • Patchwarden side (G016): the read-only handoff artifact — a green contract → a signed/markered "safe-to-approve" record. Patchwarden publishes verdict, never merges (D20).
  • Controller side (G009–G012): the executor that mutates branches/PRs lives in iskra-openclaw/ClawSweeper, not in Patchwarden. It consults the Patchwarden contract/handoff; it must re-check live state before acting.

Hard boundaries (safety — non-negotiable)

  • D20: Patchwarden never merges/approves itself; Codex-generated output never approves itself (the handoff must be consumed by a separate controller identity).
  • Guarded executor mutates only after exact-head + dedupe + policy + boundary checks; hard-manual classes (secrets/workflow/runtime/auth/policy) never auto-merge.
  • Idempotent + dedup: no duplicate branches/PRs/jobs; stable identities.
  • Operator owns policy + the automerge allowlist; start with automerge off by default.

The HOW is yours

You own the controller architecture, job model, identities, where each piece lives (patchwarden contract vs iskra/clawsweeper execution), and the PR sequencing. Strongly suggest landing G016 (handoff contract) first (small, Patchwarden-side, unblocks the rest), then the controller pieces. Propose the design before building the executor.

Status / refs

  • D21/M2: the executor/automerge loop is new core capability → parked under M2 (this is the autonomy frontier). Treat as the north-star backlog; the handoff contract (G016) alone may be M2-permittable as a read-only artifact. Confirm scope + the automerge decision with the operator before any executor work.
  • Refs: PW-G009–G012/G016 · docs/status.html Autonomy Flow · docs/operations/clawsweeper-pin.md · #31 (Forgejo event parser) · #69 (clawsweeper triage, if open) · contract_publish.py (publication/marker pattern).

Created by claude from the status.html gap ledger (2026-06-23). Executor: codex (cross-repo: patchwarden contract + iskra-openclaw/clawsweeper execution).

> Materializes gaps **PW-G009** (command intake), **PW-G010** (deterministic job writer), **PW-G011** (guarded branch/PR executor), **PW-G012** (OpenClaw controller integration), **PW-G016** (positive-review handoff contract) from `docs/status.html`. This is your home turf, codex — inspiration + boundaries, **not** a spec. ## The vision Close the autonomy loop in `docs/status.html` "Autonomy Flow" step 4 ("Controller publishes"). Today Patchwarden *gates and publishes a verdict*, but nothing turns a green contract into **visible, accountable action**. The loop: 1. **Command intake (G009):** maintainer commands (`review`, `fix`, `retry`, `stop`, `automerge`) become deterministic jobs (could build on the Forgejo event parser, #31). 2. **Job writer (G010):** an approved proposal identity becomes a durable, **deduplicated** job record with stable branch + artifact paths. 3. **Guarded executor (G011):** branch/PR mutation happens **only after** exact-head + dedupe + policy + boundary checks pass. 4. **OpenClaw integration (G012):** ClawSweeper/OpenClaw publishes the *visible approval*, backed by a Patchwarden contract — the controller acts, Patchwarden vouches. 5. **Handoff contract (G016):** a green Patchwarden contract emits a **machine-readable handoff** a controller converts into visible approval **without self-approval**. ## Why it matters This is the difference between "the warden has an opinion" and "agent work actually reaches merge-ready, visibly, safely." It's the payoff of everything built so far — and the riskiest, so it must be fail-closed and operator-bounded. ## The split that matters (boundary, not design) - **Patchwarden side (G016):** the read-only handoff artifact — a green contract → a signed/markered "safe-to-approve" record. Patchwarden **publishes verdict, never merges** (D20). - **Controller side (G009–G012):** the executor that mutates branches/PRs lives in **iskra-openclaw/ClawSweeper**, not in Patchwarden. It *consults* the Patchwarden contract/handoff; it must re-check live state before acting. ## Hard boundaries (safety — non-negotiable) - D20: Patchwarden never merges/approves itself; **Codex-generated output never approves itself** (the handoff must be consumed by a *separate* controller identity). - Guarded executor mutates **only after** exact-head + dedupe + policy + boundary checks; hard-manual classes (secrets/workflow/runtime/auth/policy) never auto-merge. - Idempotent + dedup: no duplicate branches/PRs/jobs; stable identities. - Operator owns policy + the automerge allowlist; start with `automerge` **off** by default. ## The HOW is yours You own the controller architecture, job model, identities, where each piece lives (patchwarden contract vs iskra/clawsweeper execution), and the PR sequencing. Strongly suggest landing **G016 (handoff contract)** first (small, Patchwarden-side, unblocks the rest), then the controller pieces. Propose the design before building the executor. ## Status / refs - **D21/M2:** the executor/automerge loop is **new core capability → parked under M2** (this is the autonomy frontier). Treat as the north-star backlog; the **handoff contract (G016)** alone may be M2-permittable as a read-only artifact. Confirm scope + the automerge decision with the operator before any executor work. - Refs: PW-G009–G012/G016 · `docs/status.html` Autonomy Flow · `docs/operations/clawsweeper-pin.md` · `#31` (Forgejo event parser) · `#69` (clawsweeper triage, if open) · `contract_publish.py` (publication/marker pattern). Created by claude from the status.html gap ledger (2026-06-23). Executor: codex (cross-repo: patchwarden contract + iskra-openclaw/clawsweeper execution).
Collaborator

Addressed by #111 as the first Patchwarden-side/read-only slice.

Close basis: patchwarden controller-intake-check and patchwarden job-plan-check now produce machine-readable controller handoffs, dedupe keys, write-free job materialization plans, and exact-head positive-review intent. Durable job writing, branch/PR mutation, OpenClaw/ClawSweeper consumption, and merge actuation remain outside Patchwarden and are tracked as PW-G009-PW-G012/PW-G016 follow-up work in the status artifacts and docs/operations/vision-gap-issue-disposition.md.

Addressed by #111 as the first Patchwarden-side/read-only slice. Close basis: `patchwarden controller-intake-check` and `patchwarden job-plan-check` now produce machine-readable controller handoffs, dedupe keys, write-free job materialization plans, and exact-head positive-review intent. Durable job writing, branch/PR mutation, OpenClaw/ClawSweeper consumption, and merge actuation remain outside Patchwarden and are tracked as PW-G009-PW-G012/PW-G016 follow-up work in the status artifacts and `docs/operations/vision-gap-issue-disposition.md`.
Sign in to join this conversation.
No labels
agent/claude-code
agent/codex
agent/gemini
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
area:business-model
area:competitive
area:discovery
area:forgejo
area:metrics
area:product-strategy
area:v0-core
cagan-grade-approved
client:platform
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
kind:artifact
kind:decision
kind:dogfood
kind:epic
kind:implementation
kind:research
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
priority:p0
priority:p1
priority:p2
priority:p3
ready-for-agent
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:blocked-on-discovery
status:cagan-grade-review-pending
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:needs-operator-decision
status:operator-needed
status:parked
tier:0-anchor
tier:0-platform-substrate
tier:1-core
tier:1-iskra-value-layer
tier:2-supporting
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
wave:1-foundation
wave:2-positioning
wave:3-validation
wave:4-economics
wave:5-operating
No milestone
No project
No assignees
2 participants
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
pdurlej/patchwarden#107
No description provided.