craigvandotcom

ac-polish

'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".'

craigvandotcom 0 Updated 1mo ago

Resources

3
GitHub

Install

npx skillscat add craigvandotcom/agent-compounds/ac-polish

Install via the SkillsCat registry.

SKILL.md

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 claimed

SEVERITY 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.