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.

GroupCulprit FilmTeam #Buggy CountClean CountDelta
BCapture the FlagT717473+1
DWendell Oliver: Time Traveler ExtraordinaireT497068+2
FTHE DEAD FARM (Original Theatrical Trailer)T547672+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:

FilmCategories 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:

FilmCategories 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):

YearSelection GroupsAffected GroupsNotes
202221 (Group Brilliant, Springtide T?, delta +1)SC feature had zero users assigned — not yet in operational use
202350
202470
202560
202663 (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