---
title: Import Sleeper playoff seeding for bracket mirrors
type: task
status: completed
description: >-
  Sleeper bracket mirrors 121 and 123 forecast with the seasons seeding column defaults
  (head_to_head, 2 byes) because no writer maps vendor seeding; import it and measure it against
  played brackets, or refuse.
base_uri: user:task/league/import-sleeper-playoff-seeding-for-bracket-mirrors.md
created_at: '2026-09-28T20:53:31.477Z'
entity_id: 9433d0f6-4fa9-47a3-9c63-530294559467
finished_at: '2026-09-29T05:29:19.972Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - relates [[███████████████████████-█-███████-██████-███-████-██████████]]
  - relates [[█████████████████████-███████-██████████-██████████-███-████████-██████████]]
started_at: '2026-09-28T23:02:54.849Z'
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-09-29T05:29:19.972Z'
visibility_analyzed_at: '2026-11-05T23:49:38.229Z'
---

## Problem

**Sleeper bracket mirrors forecast with an ASSUMED seeding ladder, not an imported one.** Found 2026-09-28 while closing [[███████████████████████-█-███████-██████-███-████-██████████]].

- Mirrors 121 and 123 carry `playoff_format_kind` `bracket`, but their seeding columns on `seasons` hold the column defaults: `head_to_head` ladders and 2 byes.
- No writer maps vendor seeding for a bracket import. Only the field size is cross-checked, against the imported tree.
- So a Sleeper mirror whose league seeds by points, or gives a different number of byes, forecasts a postseason it does not play. The odds still sum to 1.0000, so nothing reports it.

The ESPN path does not have this gap: its derived format establishes field and seeding from the vendor settings, decoded against played brackets.

## Plan

- [x] **Measure what Sleeper publishes about seeding.** The sample was 235 completed 2025 Sleeper leagues: each league's final roster standings against the teams it seeded into its own winners bracket.
  - Sleeper publishes no tie-break key. The seeding settings it serves are `playoff_teams`, `playoff_seed_type` (0 or 1), and divisions counted off the rosters.
  - Without divisions, record then points for reproduced the field in 145 of 146 leagues, under both `playoff_seed_type` values. Points for alone reproduced 56.
  - With divisions and `playoff_seed_type` 0, guaranteeing division winners a place reproduced 58 of 59 leagues. Record alone reproduced 53. The two rules disagreed in 7 leagues, and the guarantee was right in 6.
  - With divisions and `playoff_seed_type` 1, the 30 leagues never separated the two rules, so that case is unmeasured and refused.
- [x] **Write the seeding columns from the vendor** in league `ca628f619`.
  - The bracket sync writes the field size, the points-for tie-break, the division guarantee, and the tree's bye count in the same statement as the `bracket` claim.
  - When the settings fall outside the measured cases, the sync withdraws the claim and reports a sync error, so the forecast refuses.
  - Before this change nothing wrote a mirror's `playoff_team_count` either. The 6 on both mirrors was the column default.
- [x] **Verify on mirrors 121 and 123** after deploy and the next mirror sync (07:40Z daily). Both mirrors are the measured case: 12 teams, a field of 6, no divisions, `playoff_seed_type` 0. Expect the tie-break column to move from `all_play` to `points_for`. Hosted leagues 1 and 119 take the hosted path, which stamps only the kind, so their seeding columns must read unchanged.

## Done when

- A Sleeper bracket mirror's seeding columns come from what Sleeper publishes, or the mirror is refused with the measured reason.
