You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(frost): no-coarse-fallback mode for coarse-path retirement (default off) (#4101)
## What
The **reversible, un-gated** first half of coarse-path retirement
(RFC-21 Phase 7.3). Adds a default-**off**
`KEEP_CORE_FROST_INTERACTIVE_SIGNING_ONLY` gate; when set, the executor
**refuses** to fall through to the coarse signing primitive — if
interactive signing did not run (its audit gate off, or no engine
registered), the attempt fails **closed** rather than silently signing
over the retired coarse path.
Only the `(nil signature, nil error)` "interactive not enabled → coarse"
fall-through becomes a refusal; the hard-fail on a *committed*
interactive failure is unchanged.
## Safety / sequencing
- **Default off → production unchanged.** Coarse stays the path until an
operator flips this on.
- Flipping it on **is** the tECDSA→FROST cutover for that node (no
coarse fallback), so it stays off until the `frost-secp256k1-tr`
external audit clears and the recovery-leaf decision lands.
- The **irreversible** part — deleting the transitional coarse FFI
primitive + the deterministic-nonce path — is the deliberate follow-up,
not in this PR.
## Tests
- `TestEntry_InteractiveOnly_RefusesCoarseFallback` — orchestration
active + interactive audit gate off + this flag on → the executor
returns a refusal naming the env var, no signature.
- `TestEntry_InteractiveSigningOnlyEnabled_ParsesFlag` — flag parsing.
- Existing static-fallback executor tests unchanged (flag defaults off).
Builds clean across tag combos; vet + gofmt clean.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
0 commit comments