4 months ago
ff0fa8fdefineRule gains a REQUIRED remedy ("revise" | "wait" | "appeal") and an optional
waitHint(evidence) — rule-owned and versioned with the rule, same shape as
publicEvidence/summarize. remedy answers "what can the contributor DO about this
block?" and will drive the PR comment's "how do i fix this?" body; making it
required means a new rule can't ship without deciding (the compiler + a registry
table test enforce it).
- account-age = wait (+waitHint), min-merged-prs = wait, pr-rate-limit = wait;
max-files-changed, english-only, crypto-address, honeypot, profile-readme,
ai-review = revise.
- waitHint emits a DERIVED, threshold-free remainder ("it clears in 5 days" =
minDays - accountAgeDays), never the configured threshold. only account-age
has a derivable one; pr-rate-limit omits it (no per-request timestamps in
evidence, so the window remainder can't be derived without leaking windowHours).
- extended the leak-invariant test: a waitHint's output names no config-schema
key (proven with wait-triggering evidence).
not a version bump — remedy is presentation metadata, changes no verdict or
evidence, so @1 runs stay interpretable (replay unchanged: 2 flips, same causes).
summarize one-liners unchanged here; the wording lands with the copy.
Checks: biome clean, typecheck 0, boundaries ok, 200 tests, replay 2 flips.Parent3ffc578