/:org/:repo/customize is the response leg: what tripwire says and does
when a verdict lands.
- contracts: comment render layer moved from forge-github (renderCommentBody,
checkSummary, reviewBody, CHECK_NAME + copy constants) so the worker and
the web preview share one function. full-mode golden snapshots moved
verbatim — 5/5 byte-identical vs pre-move, plus a live equality test.
new renderVerdictComment modes: full / one-liner-link / link-only / custom
({{ruleName}} resolves the catalog contributorLabel, {{runUrl}} renders
the view button).
- response config: per-repo response_configs (drizzle 0013), zod-gated jsonb,
member read / admin write server fns, worker gates comment+check per verdict.
BEHAVIOR CHANGE: passing change requests get the check only by default,
no comment (onSuccess: ci-check). a verdict transition always writes the
comment so a stale "blocked" never outlives its verdict.
- customize ui: pill controls with progressive disclosure, single-verdict
preview (comment + always-present check row) with selection link, inline
template editor with insertable vars, mobile drawer on the analytics
sheet pattern (in-flow push, 55dvh cap).
- save-queue unit (components/save-queue): keyed pending changes,
noop-clearing, injected commit + isEqual, partial-failure via failedKeys,
floating unsaved-changes bar, nav guard (armed by mounting the bar).
adopted on customize (6 writers) and rules (first useSaveQueueField
consumer; per-rule fan-out commit; held re-confirm is a queued intent).
per-change toasts gone — one commit, one toast.