SATO48-2026 — The Selection Committee Bug
Also known as: “The Blind Cut” (preferred) / “The Great Snub”
Discovered: June 13, 2026
Status: Fixed (change ID rpwuszwm in festival-manager, committed 2026-05-02)
Affected year: SATO48-2026 only
Severity: Critical — silently invalidated Selection Committee results for half the field
Summary
A latent software bug in the Festival Manager’s Selection Committee Results page silently disqualified 24 out of ~48 eligible films from ever receiving Selection Committee scores. The SATO48-2026 screenings and awards ceremony were held without anyone realizing. Filmmakers from affected groups left the ceremony without nominations they may have earned.
This was entirely a software bug. Users did nothing wrong. Blame is on the software, not any user’s behavior. This framing is permanent policy for any future discussion of this incident.
How the Selection Committee Process Works
Each year, films are divided into screening groups (A through F in 2026 — six groups of ~8 films each). A Selection Committee (SC) reviews each group and scores films across 11 award categories. Their ballots feed into the final nomination results.
A ballot is only counted as valid if the SC member submitted at least required scores for that group. The required threshold is computed per group.
Root Cause
In pages/admin/results/selection.vue, the ballot-validation threshold was computed as:
const required = _.sumBy(
filmGroup.teams,
({ team }) => team.award_nominations_aggregate?.aggregate?.count! + 1,
)award_nominations_aggregate counted all award nominations for a team — including nominations tied to soft-deleted team memberships (where deleted is non-null in the database).
When a team membership was soft-deleted after that team had already generated nominations, those phantom nominations remained in the count. This inflated required beyond the maximum any SC member could ever reach. Result: zero valid ballots for the entire group, and null scores for all 11 categories for every film in that group.
The bug was always latent in the codebase. It just required a specific data condition to fire: a soft-deleted team membership with existing nominations inside a selection-type screening group. That condition never occurred until 2026.
The Fix
A second aggregate field was added that filters out soft-deleted memberships:
award_nominations_aggregate_new: award_nominations_aggregate(
distinct_on: award_id,
where: { membership: { deleted: { _is_null: true } } }
) {
aggregate { count }
}The admin page has a fixBug toggle that switches between the buggy and corrected counts. Change rpwuszwm in the festival-manager repo.
Affected Groups and Culprit Films
Three of six screening groups were impacted. Each had exactly one culprit film — the one whose soft-deleted membership inflated the required threshold.
| Group | Culprit Film | Team # | Buggy Count | Clean Count | Delta |
|---|---|---|---|---|---|
| B | Capture the Flag | T71 | 74 | 73 | +1 |
| D | Wendell Oliver: Time Traveler Extraordinaire | T49 | 70 | 68 | +2 |
| F | THE DEAD FARM (Original Theatrical Trailer) | T54 | 76 | 72 | +4 |
Groups A, C, and E were unaffected — no soft-deleted memberships with nominations in those groups.
The 24 Snubbed Films
These films received null scores across all 11 categories. Their SC members voted on them, but those ballots were never counted.
Group B (8 films):
- BIg Brother, little brother (T68)
- Louder Then Fear (T32)
- Capture the Flag (T71)
- Ascension (T42)
- The Noise Killer (T6)
- Antidote (T28)
- A Last Goodbye (T70)
- Refreshenol (T9)
Group D (8 films):
- Slaydoh 69 (T56)
- TV Guide (T21)
- The Elytra (T64)
- Kitchen Heat (T31)
- Break A Leg (T51)
- It’s A Sister Thing (T4)
- Ralph and Dierdre (T14)
- Wendell Oliver: Time Traveler Extraordinaire (T49)
Group F (8 films):
- Say Cheese, Bingles! (T25)
- 1-800-OLD-BGONE (T20)
- Annie Sullivan’s Methodically Misaligned Day (T55)
- Slow and Stupendous (T53)
- Queens (T7)
- Liquid Assets (T10)
- THE DEAD FARM (Original Theatrical Trailer) (T54)
- Deep Kick (T8)
Impact on Top-10 Rankings (After Fix)
Applying the fix dramatically shifted top-10 standings across all 11 award categories:
- 12 unique films entered the top 10 in at least one category (almost all from Groups B, D, F)
- 18 unique films fell out of the top 10 in at least one category (from Groups A, C, E — inflated by lack of competition)
Most significant entrants after fix:
| Film | Categories Gained |
|---|---|
| TV Guide (T21) | 9 of 11 |
| Say Cheese, Bingles! (T25) | 8 of 11 |
| Antidote (T28) | 7 of 11 |
| BIg Brother, little brother (T68) | 6 of 11 |
Most significant fallers after fix:
| Film | Categories Lost |
|---|---|
| Right on Target (T50) | 6 of 11 |
| In Their Own Way (T44) | 6 of 11 |
| Bobby & Clyde (T41) | 5 of 11 |
Why Prior Years Were Not Affected
The algorithm has been unchanged since the feature was built (confirmed via jj log on pages/admin/results/selection.vue — only cosmetic/refactor changes prior to the fix). The bug was always latent.
Database query results (2022–2025):
| Year | Selection Groups | Affected Groups | Notes |
|---|---|---|---|
| 2022 | 2 | 1 (Group Brilliant, Springtide T?, delta +1) | SC feature had zero users assigned — not yet in operational use |
| 2023 | 5 | 0 | |
| 2024 | 7 | 0 | |
| 2025 | 6 | 0 | |
| 2026 | 6 | 3 (B, D, F) | First year the bad data state occurred |
The condition — a soft-deleted team membership with existing nominations inside a selection screening group — simply never arose until 2026.
Investigation Artifacts
Produced during the June 13, 2026 investigation:
~/.hermes/workspace/output/20260613_015131_selection-committee-bug-fix-impact/
selection_scores_BEFORE.csv — all teams, all 11 category scores, bug active
selection_scores_AFTER.csv — same, bug fixed
selection_top10_diff.txt — per-category top-10 diff across all 11 categories
Related
- Selection Committee Process (to be written)
- Film Group Assignment (to be written)
- Award Nominations Data Model (to be written)