The ORCH-03/ORCH-04 MUTATION half of the UI-ratchet loop.
ui.fix is the maintainer's second and final formal interaction per round (after
they batch-approve/reject the digest's decisions.json). It NEVER generates a CSS
fix itself — the maintainer (or their coding assistant) has ALREADY hand-edited the
CSS/component files between ui.round and ui.fix, guided by the digest. This task
automates "rebuild it, prove it, lock it in":
apply-decisions -> assets.build -> git add priv/static -> git commit
-> recapture -> probe -> finalize-fixesThis task is a thin orchestrator: it reimplements zero ratchet logic, it only
sequences System.cmd calls through a swappable Runner behaviour (twinning
mix accrue_admin.ui.round's Runner/ShellRunner idiom). It:
- commits ONLY
priv/staticright afterassets.build, BEFORE re-capture — the committed-CSS-bundle discipline (a--allow-emptycommit keeps the sequence total even when the maintainer's hand-edit produced no net bundle change). - reads the round + scope from the
.fix-context.jsonthatratchet-fix.mjs --apply-decisionswrote — it never re-derives either itself. - runs NO evaluator fan-out. There is no propose/verify step; the "did the fix
stick?" decision is made ONLY by the scoped
ratchet-fix-probe.spec.js, soui.fixcan create ZERO net-newopenrows (D-50).
Examples
# Apply the latest sealed round's decisions and finalize
mix accrue_admin.ui.fix
# Preview only — runs apply-decisions --dry-run and stops (no build/commit/probe)
mix accrue_admin.ui.fix --dry-run
# Target an explicit round
mix accrue_admin.ui.fix --round 5