---
title: Open every live-mode nomination at $0, commissioner included
type: task
status: completed
description: >-
  Live-mode nominate() preserves the commissioner's stated amount while clamping everyone else to
  $0. The operator ruled the commissioner should open at $0 too, so the exception is removed and the
  clamp becomes unconditional outside election mode.
base_uri: user:task/league/clamp-commissioner-nomination-to-zero.md
created_at: '2026-09-02T17:40:35.788Z'
entity_id: 2e4a2fe8-bb1e-454e-912b-ab8cca7cf260
finished_at: '2026-09-07T23:04:27.453Z'
observations:
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - relates [[████████████████████-███████-███████████-██████████-████████]]
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-09-07T23:04:27.453Z'
visibility_analyzed_at: '2026-11-05T23:48:30.092Z'
---

In live mode `nominate()` forces every NON-commissioner nomination to `$0` and preserves the commissioner's stated amount:

```js
if (user_id !== this._league.commissioner_user_id) {
  value = 0
}
```

The operator ruled that the commissioner's nomination should open at `$0` as well. Since every other nomination already does, the end state is that the conditional goes away and live-mode nominations open at `$0` unconditionally.

## Approach

Delete the commissioner exception, not just its effect — `value = 0` becomes unconditional inside the existing `if (!this._election_mode)` block. Leave no vestigial branch behind.

**The `_election_mode` gate stays.** In election mode nominating IS bidding, and the nominator's stated amount is their claim, which the tie rule awards on; clamping it to `$0` would strip them of that position. The commissioner rule being settled says nothing about election mode, and the two must not be merged.

## Capability this removes, accepted

Preserving the commissioner's amount is what let a commissioner open a player at a price on behalf of an absent manager. After this change nobody can open above `$0`, the commissioner included. Surfaced to the operator with the ruling and accepted.

## Test

`test/auction.eligibility-validation.spec.mjs` has a `commissioner nomination value` block holding exactly the pair this inverts.

- "preserves the stated amount when the commissioner nominates" asserts `player_salary` is 25 for a `$25` commissioner nomination. It becomes the assertion that the commissioner opens at `$0` too, and its block comment — which currently explains the rule as the inverse of the 2020 brainstorm — is now wrong and must go rather than be left as a stale note.
- "forces a non-commissioner nomination to `$0`" is unchanged and becomes the control that the clamp still reaches everyone.
- One spec must still separate the two identities, or the pair no longer proves the exception is GONE as opposed to never having been consulted. Assert an election-mode commissioner nomination preserves its amount: that is the one remaining place the commissioner identity and the stated amount interact, and it pins the `_election_mode` gate this change must not disturb.

Also check `test/auction.nomination-rotation.spec.mjs` and the auction socket specs for any fixture that opens a player above `$0` through a commissioner nomination and then depends on that price downstream.

Prove each changed spec red against the unmodified source before accepting it green.

## Blocked until

League 1's auction has opened and closed. This is auction runtime.
