Off, and inert without an end date.FN_VOUCH_REQUIRED alone does nothing — the gate engages only with FN_VOUCH_UNTIL set, and turns itself off when that passes. Vouching is a reasonable trade for a phase and a bad one for a policy, and a phase whose end depends on somebody remembering to change a variable is a policy with extra steps. Failing open is the right direction.
The tests caught a real bug in the first cut. Spentness was read off usedBy, which is only filled in once the new account exists — so a redeemed code still looked unspent and could be spent without limit, defeating the mechanism entirely; a sign-up that failed after redeeming also left a code unspent for ever. usedAt is the spent flag now, and usedBy is provenance attached to the row redemption returned rather than one found by a query.
Only the hash is stored. The alphabet omits O/0 and I/l/1. The cap is on codes outstanding, not ever issued. The gate sits after the format checks, so a code is not spent on a sign-up that was going to fail anyway.
Touches RoutesAccount.swift and Config.swift, so it joins the sign-up chain (!11!13!14!15) — merge after those.
13 new tests; full relay suite 483 green.
Closes #43. **Wired in and disabled**, as asked.
**Off, and inert without an end date.** `FN_VOUCH_REQUIRED` alone does nothing — the gate engages only with `FN_VOUCH_UNTIL` set, and turns itself off when that passes. Vouching is a reasonable trade for a phase and a bad one for a policy, and a phase whose end depends on somebody remembering to change a variable is a policy with extra steps. Failing open is the right direction.
**The tests caught a real bug in the first cut.** Spentness was read off `usedBy`, which is only filled in once the new account exists — so a redeemed code still looked unspent and **could be spent without limit**, defeating the mechanism entirely; a sign-up that failed after redeeming also left a code unspent for ever. `usedAt` is the spent flag now, and `usedBy` is provenance attached to the row redemption returned rather than one found by a query.
Only the hash is stored. The alphabet omits O/0 and I/l/1. The cap is on codes **outstanding**, not ever issued. The gate sits after the format checks, so a code is not spent on a sign-up that was going to fail anyway.
Touches `RoutesAccount.swift` and `Config.swift`, so it joins the sign-up chain (!11 !13 !14 !15) — merge after those.
13 new tests; full relay suite 483 green.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #43. Wired in and disabled, as asked.
Off, and inert without an end date.
FN_VOUCH_REQUIREDalone does nothing — the gate engages only withFN_VOUCH_UNTILset, and turns itself off when that passes. Vouching is a reasonable trade for a phase and a bad one for a policy, and a phase whose end depends on somebody remembering to change a variable is a policy with extra steps. Failing open is the right direction.The tests caught a real bug in the first cut. Spentness was read off
usedBy, which is only filled in once the new account exists — so a redeemed code still looked unspent and could be spent without limit, defeating the mechanism entirely; a sign-up that failed after redeeming also left a code unspent for ever.usedAtis the spent flag now, andusedByis provenance attached to the row redemption returned rather than one found by a query.Only the hash is stored. The alphabet omits O/0 and I/l/1. The cap is on codes outstanding, not ever issued. The gate sits after the format checks, so a code is not spent on a sign-up that was going to fail anyway.
Touches
RoutesAccount.swiftandConfig.swift, so it joins the sign-up chain (!11 !13 !14 !15) — merge after those.13 new tests; full relay suite 483 green.
added 23 commits
maincd790d0a- Member-vouched sign-up codes, wired in and switched offCompare with previous version
mentioned in commit
08894ef8ffchanged the description