'Polish a plan, an epic''s bead set, or a code scope to FIXPOINT — a stateless severity-gated reader per round, stamped only against a measured empty diff at round >= 2. One engine, six modes, selected by argument; seams mode traces one object through three lenses (object · flow · boundary), converges on the merged maps, and derives its seams into a plan. Triggers: "ac2 polish", "polish the plan", "polish the beads", "polish this code", "refine the ac2 beads", "run polish to fixpoint", "ac-seams", "study the seams of", "seams plan for".'
Resources
3Install
npx skillscat add craigvandotcom/agent-compounds/ac-polish Install via the SkillsCat registry.
ac-polish — one fixpoint engine, six modes
I/O Contract
| Input | plan <path> · bead <epic-id> · code <scope> --target <bead-id> · ui <scope> --target <bead-id> · seams [<target>] · load <seams-map> (draft) |
| Output | A fixpoint-stamped artifact, or findings to the human and NO stamp |
| Artifacts | <state>/round-N.sha per round · <state>/receipt.txt · the stamp |
| Verification | skills/_tools/polish-fixpoint.sh (the gate) · polish-fixpoint.test.sh (its proof) |
Mode selects a workflow — load it, then run the loop below
The argument picks ONE workflow file — a mandatory load, the ONLY place a mode differs; do not infer a mode's bindings from this file.
| mode | workflow (mandatory) | checklist (mandatory) |
|---|---|---|
plan |
workflows/plan.md |
references/plan-checklist.md |
bead |
workflows/bead.md |
references/bead-checklist.md |
code |
workflows/code.md |
references/code-checklist.md |
seams |
workflows/seams.md |
references/seams-checklist.md · references/seams-reader-prompt.md · references/seams-plan-template.md |
load (after seams; machinery built, awaiting first run) |
workflows/load.md |
references/load-checklist.md · references/load-reader-prompt.md |
ui |
workflows/ui.md |
references/ui-checklist.md |
Each workflow binds five knobs — TARGET, ARTIFACT, CHECKLIST, VALIDATE, STAMP — and may bind a
sixth, READERS: how many readers, which stance, what they are sent, how findings reach ARTIFACT (default: one coordinator — judgment that can edit — sent reader-prompt.md verbatim, edits applied directly).
No spawnable stance in the harness → a plain subagent on the parent model, the stance's rules pasted first. Nothing else about a mode exists. Doctrine: skills/ac-pipeline/SKILL.md.
Division of labour — strict, and the reason this works
This SKILL spawns the readers. polish-fixpoint.sh spawns nothing. The script measures the
diff and gates the stamp; it never reads the artifact for meaning and never decides what a
finding is. A loop that grades itself always finds itself clean, so measurement stays outside.
The round procedure — ONE procedure, ALL modes
There is no second round path for any mode. Adding one ends the property this skill exists for.
MODE=plan|bead|code|seams TARGET·ARTIFACT·CHECKLIST·VALIDATE·STAMP[·READERS] = from the workflow
STATE=<run-scoped dir> MAX=25 (0=off) FINDINGS=<count the round's reader reported>
for ROUND in 1..:
PRE = sha256(ARTIFACT) # observed BEFORE the reader runs
spawn this round's FRESH, STATELESS reader(s) — READERS, or the default ONE:
prompt = references/reader-prompt.md, VERBATIM, with <N> <ARTIFACT> <CHECKLIST> filled
output = EDITS (severity-gated) + a mandatory DECLINED list
it carries NO memory of any earlier round; one that has read the artifact is no second opinion
apply this round's findings to ARTIFACT (per READERS; default: the reader's edits, directly)
VALIDATE — the mode's validity gate. Red means the round is NOT recorded: revert or fix.
polish-fixpoint.sh --mode $MODE --target $TARGET --artifact $ARTIFACT \
--state $STATE --round $ROUND --pre $PRE --findings $FINDINGS --max-rounds $MAX
case the verdict token:
STAMPED -> done; go to the workflow's hand-off
CONTINUE -> next round
REFUSED round-1-clean -> next round (a clean first round proves nothing)
REFUSED findings -> STOP: findings remain — dispositioning them elsewhere leaves the
digest unchanged; that is not convergence. Fresh rounds to zero, else human
REFUSED bound-exhausted -> STOP: findings to the human, NO stamp
ENDED cycling -> STOP: readers reverting each other; findings to the human, NO stamp
ENDED out-of-band-amendment -> STOP: the input moved; restart on a frozen input
NOT-GATED -> STOP: nothing was measured, so nothing is claimedSEVERITY GATE + mandatory DECLINED list. The CHECKLIST names the three reportable classes —
not style, preference or wording. Everything seen and NOT changed goes in a DECLINED list, so a
clean pass is distinguishable from a reader that looked at nothing. Zero edits is success.
FIXPOINT = ZERO CHANGES AT ROUND >= 2. A clean round 1 is equally consistent with a clean
artifact and a reader that read nothing, so it never stamps.
RUN UNTIL IT CONVERGES. Three rounds or ten — the loop ends on a MEASURED verdict, never a
round quota. --max-rounds is a runaway guard only (default 25, 0 disables). No clean round
means NO STAMP. Cycling or routine exhaustion indicts the CHECKLIST, not the artifact.
FROZEN INPUT. An out-of-band amendment ENDS the loop, never extends it — that is what the--pre digest detects: a polish run cannot chase a moving target.
Telemetry
rounds-to-fixpoint is a BUDGETED metric: report it into the batch rollup with the mode and the final verdict token. The trajectory is the signal; a single run's round count is not.