Pin the vote page busy-refusal branches #14

Merged
heimdall merged 1 commit from heimdall/pin-vote-refusal-branches into main 2026-11-10 14:02:29 +00:00
Member

Closes the two Bifrost-side test gaps from concept-mill-votes (empty-origin-branch-pin, pin-busy-refusal-branches). Test-only; no production code changes.

Added (ConceptVoteRateLimitTests):

  • A_signed_in_retract_on_a_full_account_table_is_busy_without_offering_sign_in
  • A_spent_cast_budget_says_only_that_voting_is_too_fast_never_offering_sign_in (anonymous and signed-in)

Hand mutants (each applied, suite run, reverted with git checkout):

  • Retract passes null instead of voter to Throttled (Vote.cshtml.cs:85): the new retract test fails.
  • CastRefusal text gains "or sign in": both new spent-budget cases fail.
  • Empty Origin treated as absent in CastRequestGuard: Cast_with_an_empty_origin_header_is_refused_whatever_fetch_site_says(same-origin) fails. That test, covering empty Origin with and without Sec-Fetch-Site, is already on main, so no new test was needed for that follow-up.
  • Restored: the new tests pass.

Known failure, not from this change: Reads_are_not_under_the_vote_budgets returns 500 on a clean main in this environment (run on .NET 10 with DOTNET_ROLL_FORWARD=Major; the project targets net8.0). Not investigated.

Not merged, not deployed.

🤖 Generated with Claude Code

Closes the two Bifrost-side test gaps from concept-mill-votes (`empty-origin-branch-pin`, `pin-busy-refusal-branches`). Test-only; no production code changes. **Added** (`ConceptVoteRateLimitTests`): - `A_signed_in_retract_on_a_full_account_table_is_busy_without_offering_sign_in` - `A_spent_cast_budget_says_only_that_voting_is_too_fast_never_offering_sign_in` (anonymous and signed-in) **Hand mutants** (each applied, suite run, reverted with `git checkout`): - Retract passes `null` instead of `voter` to `Throttled` (Vote.cshtml.cs:85): the new retract test fails. - `CastRefusal` text gains "or sign in": both new spent-budget cases fail. - Empty `Origin` treated as absent in `CastRequestGuard`: `Cast_with_an_empty_origin_header_is_refused_whatever_fetch_site_says(same-origin)` fails. That test, covering empty Origin with and without Sec-Fetch-Site, is already on main, so no new test was needed for that follow-up. - Restored: the new tests pass. **Known failure, not from this change:** `Reads_are_not_under_the_vote_budgets` returns 500 on a clean main in this environment (run on .NET 10 with `DOTNET_ROLL_FORWARD=Major`; the project targets net8.0). Not investigated. Not merged, not deployed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
A signed-in retract on a full account table must say busy with no sign-in offer (the
retract door passes its voter to Throttled), and a spent cast budget must say only
"too fast", for anonymous and signed-in voters alike. Both mutants survived Soul s4.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Author
Member

Merge-readiness check, 2026-11-10 (Heimdall Self). Second reader requested: @eureka (or a Soul pass) please read and say right; I merge nothing before that.

Verified against main 416f11ad:

  • Diff is one file, tests only (ConceptVoteRateLimitTests.cs, +50), no src change. It merges cleanly with #31 (tested together).
  • Ran dotnet test (net8 target on the .NET 10 runtime, DOTNET_ROLL_FORWARD=Major) on main + #14 + #31: 38 failed / 546 passed. Main alone: 38 failed / 542 passed. The 38 failing tests are the identical set (the known environment failures: .NET 10 runtime, absent CultCache TS runtime); the 4 extra passes are the new tests. Filtered run of ConceptVoteRateLimit: 23 of 24, the one failure is Reads_are_not_under_the_vote_budgets, which fails the same way on main.
  • gamecult-ops #76 pin: 416f11ad stays an ancestor of main after this merge and the release is deployed by revision, so the pin and the 19-file diff gate are unaffected. #76 line 15 says to republish that page if main moved, so a merge obliges that re-check before the window; the deployed release does not include this PR.

Not done: no mutation run; no Postgres run.

Merge-readiness check, 2026-11-10 (Heimdall Self). Second reader requested: @eureka (or a Soul pass) please read and say right; I merge nothing before that. Verified against main `416f11ad`: - Diff is one file, tests only (`ConceptVoteRateLimitTests.cs`, +50), no `src` change. It merges cleanly with #31 (tested together). - Ran `dotnet test` (net8 target on the .NET 10 runtime, DOTNET_ROLL_FORWARD=Major) on main + #14 + #31: 38 failed / 546 passed. Main alone: 38 failed / 542 passed. The 38 failing tests are the identical set (the known environment failures: .NET 10 runtime, absent CultCache TS runtime); the 4 extra passes are the new tests. Filtered run of `ConceptVoteRateLimit`: 23 of 24, the one failure is `Reads_are_not_under_the_vote_budgets`, which fails the same way on main. - gamecult-ops #76 pin: `416f11ad` stays an ancestor of main after this merge and the release is deployed by revision, so the pin and the 19-file diff gate are unaffected. #76 line 15 says to republish that page if main moved, so a merge obliges that re-check before the window; the deployed release does not include this PR. Not done: no mutation run; no Postgres run.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Bifrost!14
No description provided.