Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
95ad10a
docs(reviewing-prs): ExecPlan for orchestrator + fix-wave rebuild on …
SSFSKIM Jul 15, 2026
c0a65f4
feat(orchestrating-daemons): settings/effort dimension for gateway da…
SSFSKIM Jul 15, 2026
e21bd99
refactor(reviewing-prs): purify the review engine
SSFSKIM Jul 15, 2026
4b87327
redesign(reviewing-prs): SKILL.md becomes the orchestrator protocol
SSFSKIM Jul 15, 2026
cdb4521
redesign(reviewing-prs): one-harness worker dispatch with sweep outag…
SSFSKIM Jul 15, 2026
8a1f777
docs(reviewing-prs): manual and living specs record the orchestrator …
SSFSKIM Jul 15, 2026
9387d99
docs(reviewing-prs): close spike milestone as quota-bounded in the Ex…
SSFSKIM Jul 15, 2026
6c32b16
fix(reviewing-prs): finalize finished workers so dedupe can see them
SSFSKIM Jul 15, 2026
096f22b
fix(reviewing-prs): close exit-review protocol gaps
SSFSKIM Jul 15, 2026
a2eb1b0
docs(reviewing-prs): record exit-review round and retrospective in th…
SSFSKIM Jul 15, 2026
e51e64a
docs(execplan): close the clodex spike live — all five observations o…
SSFSKIM Jul 15, 2026
f44d8c5
fix(reviewing-prs): sweep retries dead workers that could not emit th…
SSFSKIM Jul 15, 2026
eac5763
fix(reviewing-prs): wave boards move out of the untrusted worktree
SSFSKIM Jul 15, 2026
58a76eb
fix(orchestrating-daemons,reviewing-prs): status is the turn signal, …
SSFSKIM Jul 15, 2026
51dfecb
fix(issue-tracker): a pre-spec skeleton is never implementable
SSFSKIM Jul 15, 2026
1368c63
fix(reviewing-prs): fixer owns every edit in its wave
SSFSKIM Jul 15, 2026
cfbf32e
fix(reviewing-prs): harden the live review control plane
SSFSKIM Jul 15, 2026
d79c861
fix(issue-tracker,implementing-tickets,reviewing-prs): body is author…
SSFSKIM Jul 15, 2026
1255b16
docs audit
SSFSKIM Jul 15, 2026
57fd1d0
one line
SSFSKIM Jul 15, 2026
dc0b71a
refactor(protocols): ban failure states, not their means
SSFSKIM Jul 15, 2026
b3a760f
refactor(protocols): second constraint-minimization pass
SSFSKIM Jul 15, 2026
7f2bff5
refactor(protocols): drop the fixer-count mandate; add the simplicity…
SSFSKIM Jul 15, 2026
bd99cdc
refactor(protocols): third constraint-minimization pass — enforcement…
SSFSKIM Jul 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,18 @@ A working integration auto-triggers the `brainstorming` skill before any code is

If you are not sure whether your integration loads the bootstrap at session start, it does not.

## Golden Rule: Simplicity-First Protocols

No restriction or process enforcement beyond what is necessary. Agents are
not dumb — they carry their own situational judgment, and every constraint
that substitutes for that judgment makes the worker dumber than the model
running it. When authoring or editing skills and worker protocols, pursue
the fewest hard gates and the least strict DO / DO-NOT language: a hard
constraint earns its place only when the action it bans (or mandates) is
truly validated — it maps to a definite failure state, observed or
structural, not a hypothetical one. Everything else is stated as ownership
and outcomes; the worker chooses its means.

## Skill Changes Require Evaluation

Skills are not prose — they are code that shapes agent behavior. If you modify skill content:
Expand Down

Large diffs are not rendered by default.

159 changes: 156 additions & 3 deletions docs/doperpowers/specs/2026-07-08-pr-review-loop-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@ happens by merge with no rigor gate. A daemon opens a PR and nothing stands
between that PR and the human's merge button except the human's own reading
time. After this change, every non-draft PR opened in a consumer repo is
picked up within minutes by a fresh-context **review worker** — a background
`claude` daemon that runs a Codex review against the PR's base, verifies each
finding against the code, applies the valid fixes, re-reviews when the fixes
Claude-harness daemon that runs the pure-correctness Codex engine against
the PR's base while auditing implementer protocol/spec compliance itself,
triages the joined findings on native severity, delegates fixing to
fix-wave subagents and grades their dispositions, re-reviews when the fixes
warrant it, and then either merges the PR itself (small/simple tier, CI
green) or escalates it as **`confident-ready`** — a new board state meaning
"rigorously reviewed; merge with confidence."
"rigorously reviewed; merge with confidence." (As first shipped the worker
fixed findings itself under a single criteria-coupled engine; the 2026-07-15
Revision Note below records the orchestrator/fix-wave rebuild.)

The loop is the inverse-symmetric counterpart of the implementing daemon:
where an implementing worker turns a ticket into a PR, a review worker turns
Expand Down Expand Up @@ -541,3 +545,152 @@ Pending — written at finish.
findings" while the protocol says non-blockers (everything below
critical/high, medium included); the manual now matches, with regression
asserts pinning both the manual wording and the tail's absence.
- 2026-07-15 (orchestrator rebuild, one harness): three coupled changes landed
together on `redesign/reviewing-prs-orchestrator` (ExecPlan:
`docs/doperpowers/execplans/2026-07-15-reviewing-prs-orchestrator-rebuild.md`).
(1) Split responsibilities — the engine is pure correctness
(`review-engine.sh --base <ref> --out <file>`, no criteria, no
developer_instructions), started in the background; the worker itself
audits implementer protocol/spec compliance concurrently (issue body as
canonical primary spec, timestamp-anchored drift via GitHub edit history,
classes PROTOCOL BLOCKER / SPEC FINDING / AUDIT NOTE) and records the
audit before JOIN. (2) Orchestrator, not fixer — the worker never edits
code: fix-required findings ride a wave-board file (initially
`.doperpowers/qa/pr-<n>-fix-wave-<k>.md`, superseded by dispatcher-created
`<review-tmp>` in the first dog-food revision below) worked by ONE
fixer subagent per wave under a verify-then-fix contract; the worker
grades dispositions, pushes, strips `confident-ready` in-loop; max 2
waves inside the 3-round cap; whole-range re-review with dedupe.
(3) One worker harness — the codex-CLI-as-worker species retired; the
default route spawns the same Claude-harness daemon with the clodex
gateway settings (`DAEMON_CLAUDE_SETTINGS`/`EFFORT`, persisted in registry
meta and reconstructed on resume forks), `engine:claude` opts into plain
models. The sweep gained a 3-consecutive-outage cap per PR. The FIX NOW
bin text above (§ finding routing) describes the pre-rebuild worker and
is superseded by WAVE.
- 2026-07-15 (first dog-food revision): ida-solution PR #570 validated the
assembled engine/audit/push/re-review/park spine and exposed the fix-wave
control plane under live pressure. The engine found a real P1 attachment-URL
bypass; the worker fixed/re-reviewed it and parked the empty, ungated ticket,
but nested write-capable descendants escaped an immediate-child stop,
overlapped the re-wave, late-mutated the board, and forced an undefined
history recovery. The live protocol now (a) binds each ticketed reviewer
exclusively under the daemon-meta lock behind a dispatcher-owned ready/ack
startup barrier so `board-answer.sh` reaches the parked owner, concurrent
claims have one winner, and no review action races or outlives the bind;
the write-capable land worker uses the same barrier after preflighting the
previous owner, while board-answer normalizes lingering/dead owners before
resume, (b) stores boards
under dispatcher-created `<review-tmp>` rather than the PR-controlled
worktree, (c) records clean local/remote wave boundaries and an
orchestrator-owned accepted-commit ledger, (d) requires content-sensitive
whole-task-tree quiescence and immutable submitted-board snapshots, (e)
discards unauthorized writer state before a blank re-wave, and (f) validates
the full unpushed range while expiring stale confidence before push. The
issue tracker now also prevents a pre-spec skeleton from entering
`ready-for-agent`; #567 had auto-dispatched 46 seconds after birth with no
specification. Observation mode remains on; this live run is evidence of
the hardened loop, not merge authorization for the doperpowers branch.
- 2026-07-16 (constraint-minimization pass): a deliberate audit of every
worker protocol removed constraints that banned the MEANS of a failure
instead of the failure state itself — the surviving hard rules each map
1:1 to a concrete failure (unauthorized commits, unauthorized product
decisions, provenance contamination, interactive-session skills inside
daemons). Changes: (1) triage routes on the worker's own judgment — the
engine's native severity is the starting rank, not the verdict; the
"don't re-derive severity" ban is retired (Codex P2s are often real
blockers), with departures from the native rank recorded in the trail.
(2) The orchestrator's blanket "never edit code / no code reading /
don't read the full diff" prohibitions are rewritten as ownership
statements (the engine owns correctness review; code reaches the branch
only as graded fixer commits). (3) The fixer contract drops
one-item-at-a-time ordering and the nested-writer delegation ban:
delegation is the fixer's call, and accountability replaces the ban —
every commit must be claimed by exactly one item with its test
evidence, the fixer answers for its whole task tree, and "unauthorized
writer" now means a writer outside the mapped tree or one still writing
after return (the state-defense layer — quiescence fingerprints,
ledger, full-range push gate — is what makes this relaxation safe; it
postdates the ban it replaces). (4) Implement/spike engine blocks drop
"work ALONE"; only writing-plans and subagent-driven-development stay
excluded (the observed failure). (5) Serial-execution mandates become
a worktree-occupancy condition. (6) The land worker's "do NOT read the
PR diff" and the spike worker's "never expand past the follow-up" are
removed; role statements already carry the real constraint. A future
revision may promote the fixer to a second-order orchestrator
(per-finding parallel fixers in isolated worktrees merged by the
fixer); the accountability contract above is already compatible.
- 2026-07-16 (constraint-minimization, second pass): a sweep for leftover
means-bans and over-scoped DO-mandates the first pass missed. Removed:
the codex execution block's "execute it YOURSELF" emphasis (delegation
inside the worker's thread is its call; the thread boundary alone is
the rule); the spike decompose path's "no exploring" ban (replaced by
the deliverable statement — the registered children, not a half-answer;
recon that sharpens their notes was never the hazard); and the
operation manual's drift from pass one — "never a fixer / it never
edits code" became the ownership statement, "works the batch
sequentially" dropped, and both "below the engine's critical/high
class" definitions of non-blockers now defer to the worker's own
routing. Examined and deliberately KEPT, each mapping to a definite
failure state: audit-recorded-before-engine-output (independence is
unrecoverable once contaminated); TOO BIG never waves (ungated scope
entering the branch under wave authority); INVALID only via a graded
REFUTED disposition (a finding killed and rebutted publicly by the
same context that benefits from fewer waves — the two-context split is
the verification architecture, same as grading); verify-then-fix (the REFUTED lane
exists only because the fixer verifies); the read-only-until-JOIN
window (occupancy in practice — the engine holds the worktree the
whole span); and the land delta bounds/prohibitions (a resolution
delta is unreviewed by construction).
- 2026-07-16 (second pass, human rulings): the ONE-fixer-per-wave mandate
is also removed — the protocol still says "dispatch the wave's fixer"
and grades its task tree, but a count is not specified: crewing the
wave is the orchestrator's situational call, the accountability
contract and quiescence gate bind whatever it dispatches, and a hard
ONE would only add friction to the planned second-order-orchestrator
fixer (per-group fixers in isolated worktrees). The
INVALID-only-via-graded-REFUTED rule is confirmed kept. The authoring
principle behind both passes is now a repo golden rule in CLAUDE.md:
simplicity-first — no restriction or process enforcement beyond
necessary; hard gates only for truly validated failure states.
- 2026-07-16 (constraint-minimization, third pass — enforcement becomes
guidance): the strictest sweep yet, aimed at procedural enforcement
whose *enforcement framing* (not its content) exceeded the validated
failure state; each item keeps its detail but is now a statement of
the fact or bound instead of a command. Removed/refactored: the fixer
contract's "read the cited code first — never implement from the
finding text alone" is now "judge the finding against the cited code —
a finding can be wrong, and REFUTED with evidence is as good an
outcome as FIXED" (grounding + calibration, no prohibition); the
fixer contract's "Stage only the files your fix touches — never a
blanket add" staging mandate is dropped entirely (the board lives
outside the worktree since the symlink fix, an unclaimed or mixed
commit already FAILs at grading, and the board-file ban survives in
the You-never list and the push-gate content scan); the "in one shell
command" packaging mandate is gone from all three surfaces (protocol
FIX WAVES, wave-board push rule, operation manual) — the load-bearing
and still-pinned rule is the fail-safe ORDER, confidence expiry before
the new head publishes; RE-REVIEW's dedupe tail "do not re-wave it,
log it twice, or count it" collapsed into "already routed and needs
nothing more"; the round-cap exit "do NOT grant confidence" became the
fact "there is no confidence to grant"; the engine block's "Do NOT
wait on it and do NOT read the findings file yet" became "leave it
running and the findings unread" (the hard independence gate remains
the protocol's audit-before-engine-output clause, and JOIN stays the
only read point); the land protocol's conflict entry lost its "STOP …
before touching a single hunk" choreography and the "improvising …
is a protocol violation" flourish — the pointer plus "those bounds
bind your resolution" carries it; and land-conflicts step 2's
"no refactors, no improvements, no drive-by fixes" list became the
reason itself — anything beyond the hunks is unreviewed code entering
the branch unseen. Examined and kept as hard, each on a validated
failure state: every unattended-loop cap (2 waves, 3 engine rounds,
2 CI reruns, bounded watches, the 120s barriers), the binding
barriers, board-out-of-worktree and never-commit-the-board, the push
chain / ledger / quiescence / submitted-snapshot machinery,
gate-before-code with its anti-park calibration, ASK-EARLY on
human-grade forks, minor-taste-never-the-worker's, every authority
NEVER list, never-rebase/never-force-push, the land bounds, the spike
draft-PR bans, the dangerous-flag bans, the bootstrap's
workspace-skill refusal, the Board Write Hard Gate, and register-time
body authorship.
12 changes: 12 additions & 0 deletions docs/doperpowers/specs/2026-07-12-native-review-recovery-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -356,3 +356,15 @@ plan re-execution; everything else executed as written.
the former operator-oriented skill body moved to
`references/operation-manual.md`. The dispatcher now invokes the skill via
a thin runtime-binding bootstrap; engine policy and behavior are unchanged.
6. **2026-07-15 (engine purified — criteria path removed).** The
split-responsibilities rebuild (ExecPlan:
`docs/doperpowers/execplans/2026-07-15-reviewing-prs-orchestrator-rebuild.md`)
removed the entire criteria carrier this document designed: the engine
interface is now `review-engine.sh --base <ref> --out <file>` and sends
NO `developer_instructions` — ticket/spec compliance moved into the
Review Worker's own concurrent audit, and the worker delegates fixes to
fix-wave subagents. Sections above describing `--criteria`, the untrusted
criteria file, and the fixed policy addendum are historical record of the
recovery spike, not the current interface. The environment recipe this
document proved (temp CODEX_HOME, auth link, TLS bundle, code-mode host,
nested-sandbox handling) is unchanged and remains the live contract.
2 changes: 1 addition & 1 deletion skills/execplan/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Everything the grill resolves lands in the ExecPlan: term definitions inline whe

## Step 2 — Author the ExecPlan

Read [../execspec/references/PLANS.md](../execspec/references/PLANS.md) in full and follow it **to the letter** — including the sections the execspec adapter supersedes for the controlled track (Progress with timestamped checkboxes, narrative milestones, Concrete Steps, novice-grade self-containment). That is track separation, not contradiction: over there, machinery replaces those sections; here, the document IS the machinery.
Read [../execplan/references/PLANS.md](../execplanc/references/PLANS.md) in full and follow it **to the letter** — including the sections the execspec adapter supersedes for the controlled track (Progress with timestamped checkboxes, narrative milestones, Concrete Steps, novice-grade self-containment). That is track separation, not contradiction: over there, machinery replaces those sections; here, the document IS the machinery.

Save to `docs/doperpowers/execplans/YYYY-MM-DD-<topic>.md` (omit the triple-backtick envelope per PLANS.md's file rule). The bar: a fresh session with no conversation history — or a daemon spawned with nothing but this file — can implement it end-to-end and see it working.

Expand Down
Loading