Season prep & roster moves — the editor's guide
This page is for the people who edit the control sheet (currently Doug and Ruby). It assumes you have never touched this system before. The daily scoring routine — paste an export, press the button — lives on the How to run this page; this one covers everything about people: placing them, moving them, pausing them, and losing them.
The one rule that explains everything else
The sheet is where you stage changes. Nothing is real until someone presses BNGZR → Run Engine. Standings, Daily Scores, the P/R board, and the public site are all photographs taken at the last press. Edit anything you like, in any order — the system only looks when the button is pressed.
The one exception is the Preview tab: it recalculates live as you type, showing each player's rank now versus the last engine run. Use it to sanity-check an edit before making it official.
Whose tabs are whose
| You edit, engine reads | Engine writes, you only read |
|---|---|
| Roster | Standings |
| Pools | Daily Scores |
| Roster History | P/R Proposal |
| Config | Preview |
| Activity Log |
Anything you type into an engine-owned tab is erased on the next Run Engine press. It isn't punishment, it's how the tabs stay truthful — they are rebuilt from scratch every run.
Before the season starts (the 8/31 staging)
- Place everyone. In
Roster History, every player and every pool needs a value in the season's first date column: a union number, or-if they are sitting the season out. A blank is not a dash — blanks carry the previous value forward, and on day one there is nothing to carry. - Give every pool its own union. Pools rank as if they were players, so each pool has its own row in
Roster Historyand needs its own union. Members of a pool need no union of their own — the pool carries them. - Check the Hold flags. Anyone starting the season on a break gets
Hold = Y(see below). - Expect red ✗ marks in GitHub until the first real capture lands. Before there is a score to compute, Run Engine reports "nothing to score" and stops. That is the system working, not breaking.
Moving a player between unions
Type the new union number into today's column in Roster History. That's the whole move. On the next Run Engine press it takes effect and carries forward every day after.
**Fixing a past day is different. If you correct an old column and stop there, the fix silently disappears — the day after your fix still holds the old union, and carry-forward resurrects it. Fix the old cell, select it, then run BNGZR → Fill Forward from selection** so the correction walks forward to today. The CU (current union) column at the far right is your check: it shows what the engine will actually use.
A player taking a break — the official way
Use the Hold flag: Roster tab, Hold column, Y.
A held player stays seated in their union and keeps scoring whatever they score. The only thing Hold changes is Promotion/Relegation: they cannot be promoted (the P/R board says so in its Reason column instead of proposing the move), but they can still be relegated. When the break ends, clear the flag.
Do not record a break by removing someone from their union — that is a departure, and undoing it takes more steps. Hold is one cell, reversible with one delete.
A player leaving (Gone / Moved)
On the Roster tab, set their Status to Gone (left the family) or Moved (left for elsewhere). On the next Run Engine press the engine writes - into today's Roster History column for them and carries it forward.
What happens to their record: points already earned stand — history is never rewritten. They simply stop accruing, drop out of the P/R shuffle (shown as "unplaced"), and their seat opens up.
The same-day catch: if Run Engine was already pressed today before you set the status, the - won't land until tomorrow's press. To make it immediate, also type - into today's column yourself. (-, OUT, GONE, MOVED, and 0 all mean the same thing to the engine; - is the house style.)
A player coming back
Two edits, both required:
Rostertab:Statusback toActive.Roster History: type their union into today's column.
If you do only the first, the next run overwrites their union with - again — the departure carries forward until a real union interrupts it.
Pools
- A pool ranks like a single player; its score is the sum of its members.
- Members are attached via the
Pool IDcolumn on theRostertab; the pool's
name and ID live on the Pools tab. The Members / Who columns there are live formulas — leave them be.
- Never change a member's Pool ID mid-season. The engine re-attributes that
player's entire season of scores to the new pool, past days included. If a pool change is truly needed, it is a decision for the group, not a quiet edit.
- House rule: pools are settled by the end of week two. The software will not stop
a later change — that is exactly why this rule exists on paper.
- Pools can be held too:
Holdcolumn on thePoolstab, same effect.
The weekly Promotion/Relegation, in one paragraph
Run Engine keeps the P/R Proposal board filled while its state cell (B1) says DRAFT — ranked, with a proposed union and a reason per row, and the Decision column always left blank: the engine never approves its own proposal. When review time comes, set B1 to REVIEWING (freezes the board), fill each row's Decision — Approve, Keep (blank also means keep), or Custom plus a Final Union — set B1 to APPROVED, then press BNGZR → Apply P/R. It confirms, writes every move into today's Roster History column, and stamps the board APPLIED. If the roster changed underneath the board since it was drawn, Apply refuses with "the board is stale" — press Run Engine to redraw, and review again.
What "normal" looks like after an edit
- Nothing visibly changes until the next Run Engine press — except Preview,
which moves as you type. Not seeing your change in Standings yet is expected.
- After the press: Standings, Daily Scores, and the site catch up together, and
the Activity Log records who pressed and what happened.
- Red ✗ in GitHub Actions with "nothing to score" — normal any time the season
has no captures yet (i.e., before the first real import of the season).
- "No column for <today> — outside the season" when pressing Run Engine —
normal before the season's first date column exists; scores still import, only the roster stamp is skipped.
- The engine rewrote a tab you typed into — expected, if it was one of the
engine-owned tabs above. Your edit belonged in Roster / Pools / Roster History.
When in doubt: BNGZR → What will Run Engine do? explains the next press before you commit to it, and costs nothing.