Player panel, Phase 1: preview and proof
Draft PR branch claude/fo-k-player-modal at bd6d4009, stacked on the Front Office drafts (344d9185 = before). Recorded 2026-10-20 data (Week 7, after Week 6). Read-only: every write is blocked in the page, and the worker, MFL, D1 and Discord are never contacted.
What to tap on your phone
- Open After: Front Office. Tap Roster, then Prescott, Dak. Bio: NFL Draft 2016 · Rd 4, Pick 37 (no “FA”), UPS Draft 2016 · Rd 5, Pick 6, Taxi Not eligible · taxi window ended (2016 draft).
- Actions: one short line, buttons, a “Rules” toggle and a “Why is Place on IR off?” toggle. Tap Drop: the dialog lists Player, Action, Roster, Salary / cap and Undo, with Cancel highlighted. Tap Cancel (nothing sent). Tap Drop, then Drop in the dialog: a red toast says the preview is read-only and the badge at the bottom counts 1 blocked write.
- Stats: This season (141.4 · #10 QB by points; 23.6 · #14 QB by PPG), Last 4 (20.1 · #17 QB), Career (2,878.7 · 23.0) and Highest-scoring season 2025. The table starts with 2026 NOW. No APW, no Best Season. Ranks that describe a different total show “—†”; tap “Why some ranks are hidden”.
- Game Log: the same five columns for every season, newest week first. Pick 2019: UPS status reads “not recorded” (never “Free agent”) and playoff weeks read “not loaded”.
- Go to Market → All players, type Prescott, tap him: the same panel and the same numbers as from Roster.
- Back on Roster, tap Brissett, Jacoby → Transaction Log: 2026-07-17 Auction Won $12,000 carries an Unverified chip and an “Unresolved” contract row; only 2026-07-29 ($13,000) carries the $13K contract; the 2026-07-11 Blake Bombers drop is listed.
Not verified: real iPhone Safari (only Chromium and WebKit engines), an MFL sign-in, and a real write (none is possible here by design).
Before and after
Dak Prescott · Bio
UPS Draft and the taxi line now read one record.


Dak Prescott · Actions


Drop confirmation (after only)
The preview blocks the final write: see the toast and badge below.
—

Confirmed drop is blocked
—

Dak Prescott · Stats


Dak Prescott · Game Log 2026


Dak Prescott · Game Log 2019 (after only)
—

Opened from Market (after)
—

Jacoby Brissett · Transaction Log


Phone 375 · Actions confirm
—

Phone 320 · Stats
—

Phone 320 · Game Log
—

Source reconciliation
2026: one set of numbers (recorded MFL playerScores W=ALL, Wks 1–6 final)
| Player | Headline (pts · pts rank · PPG · PPG rank) | Season-table 2026 row | Game Log 2026 summary (pts · wks · PPG) | Released phone sheet (its own code on the same read) |
|---|---|---|---|---|
| Dak Prescott | 141.4 · #10 · 23.6 #14 QB | 141.4 · #10 · 23.6 #14 | 141.4 · 6 · 23.6 | 141.4 · 23.6 · #14 QB |
| Jacoby Brissett | 116.1 · #16 · 19.3 #21 QB | 116.1 · #16 · 19.3 #21 | 116.1 · 6 · 19.3 | 116.1 · 19.3 · #21 QB |
The phone column runs the phone’s modules (season_scoring.js + player_facts.js) on the same recording; agent-verified equal to the phone’s Stats row. Brissett’s 116.1 ÷ 6 = 19.35 shows as 19.3 on both screens (JavaScript rounding); see decision 4.
Earlier seasons (Dak): a rank shows only when it describes the row’s own total
| Yr | MFL wks | Pts | Pts Rk | PPG | PPG Rk | Why hidden |
|---|---|---|---|---|---|---|
| 2026 | 6 | 141.4 | #10 | 23.6 | #14 | |
| 2025 | 16 | 409.3 | #4 | 25.6 | #5 | |
| 2024 | 8 | 151.2 | — | 18.9 | — | The league’s rank counts 245.7 pts over 14 MFL wks, not the 151.2 over 8 shown, so it isn’t shown. |
| 2023 | 16 | 404.7 | #3 | 25.3 | #5 | |
| 2022 | 11 | 246.9 | #17 | 22.4 | #9 | |
| 2021 | 15 | 384.5 | #8 | 25.6 | #8 | |
| 2020 | 5 | 152.2 | #29 | 30.4 | — | A PPG rank needs half the season’s weeks (8 of 16); 5 MFL wks. |
| 2019 | 12 | 308.2 | — | 25.7 | — | The league’s rank counts 361.1 pts over 15 MFL wks, not the 308.2 over 12 shown, so it isn’t shown. |
| 2018 | 12 | 203.9 | — | 17.0 | — | The league’s rank counts 258.5 pts over 15 MFL wks, not the 203.9 over 12 shown, so it isn’t shown. |
| 2017 | 12 | 209.0 | — | 17.4 | — | The league’s rank counts 256.1 pts over 15 MFL wks, not the 209.0 over 12 shown, so it isn’t shown. |
| 2016 | 12 | 267.4 | — | 22.3 | — | The league’s rank counts 321.4 pts over 15 MFL wks, not the 267.4 over 12 shown, so it isn’t shown. |
Jacoby Brissett, 2026 auctions
- MFL transactions: AUCTION_WON 2026-07-17 Real Deal Creel $12,000 (in the July 13–17 test window) and AUCTION_WON 2026-07-29 Real Deal Creel $13,000.
- MFL auction results 2026 list Brissett once: Real Deal Creel, $13,000, last bid 2026-07-28. The $12,000 lot is not there.
- Every AUCTION_WON in 2019–2025 (1,357 wins) matches MFL’s auction results on player, team and bid. 2026 has 214 wins and 196 results: the 18 extra are the July 13–17 test lots (Lamar Jackson, Joe Burrow, Josh Allen, Saquon Barkley and others).
- src_contracts 2026: Real Deal Creel, Vet-FAA, 1 year, $13,000. Before: the July 17 row showed that $13,000 contract (one season row attached to every event). After: July 17 is Unverified with no contract; July 29 carries $13,000; the 07-11 Blake Bombers drop (hidden by the old any-team rule) is listed.
Dak Prescott, 2019 ownership
No source checked puts Dak on Hawks in 2019. MFL’s 2019 auction results and transactions: Sex Manther won him 2019-08-22 for $9,000; the 2019 contract record is Sex Manther; MFL’s week-by-week lineups list him on Sex Manther Weeks 1–16. The old Game Log called every 2019 week “Free Agent” because the league database never stored UPS owners for 2012–2019. It now says “not recorded”. Hawks first appears after the 2024-09-17 trade. If you saw Hawks for 2019 on another screen, tell me which one.
Historical scoring
Points are MFL’s own scores under each season’s rules (the league database copy matched MFL playerScores on every row 2010–2025). Nothing re-scores history under today’s rules; scoring changed in 2012, 2016, 2018 and 2025, among others. The Stats tab says so under the table.
Tests
- New:
tests/player_modal_phase1.test.mjs(12 tests, 19,995 assertions) andtests/player_transaction_contracts.test.mjs(6 tests, 36 assertions): Dak and Brissett regressions, missing NFL fields, draft vs taxi over every UPS pick and flag combination, 2026 consistency, the Highest-scoring season definition, one Game Log schema with no z/tier, per-event contracts, no write without the confirmation, Roster and Market open the same panel. - Mutation check: 12 of 12 deliberate regressions caught (window-ended reason dropped, every player “not a pick”, missing round → Undrafted, roster move without confirmation, busy guard never released, database 2026 row shown, best season by PPG, Game Log oldest first, 2012–2019 as Free agent, ranks shown regardless, test lot keeps the contract, earlier acquisition inherits the later contract).
- Full safe offline suite on the final commit: 226 passed, 1 failed (tests/twr_merge_state.test.mjs).
twr_merge_statefails on the base commit too (the stacked branch isn’t based on current main). - Browser checks (assertions on the rendered panel, writes counted):
| Run | Engine · site | Steps | Checks | Failed | Requests to the worker or writes on the network |
|---|---|---|---|---|---|
| out_after | chromium · local twin | 24 | 79 | 0 | 0 |
| out_live_modal_chromium | chromium · https://ups-fo-modal-preview.pages.dev | 24 | 79 | 0 | 0 |
| out_live_modal_webkit | webkit · https://ups-fo-modal-preview.pages.dev | 24 | 79 | 0 | 0 |
| out_live_embed | chromium · https://ups-fo-modal-preview.pages.dev | 5 | 22 | 0 | 0 |
Remaining blockers and decisions
- All-time positional season rank: not shown (blocked). The league database lacks pre-2021 playoff weeks and free agents’ 2021–2025 playoff weeks (#1307 backfill, a production D1 write), and no independent check against MFL’s season totals exists yet. Proposed definition: completed seasons 2011–2025, PPG over every UPS week, at least 75% of the season’s weeks, top 100 only. Prototype (not verified): Dak’s 2021 season would be #42 of 376 qualified QB seasons.
- Ranks hidden for earlier seasons where the rank table counts different weeks (6 of Dak’s 10). They come back after the #1307 backfill and a rank rebuild. The released phone still shows those ranks.
- Unverified rows stay “Unresolved” until verified; a verified win without a matching contract record is never given a default 1-year contract.
- Rounding at .x5 (19.35 → 19.3 on both desktop and phone): keep parity, or fix both to round half up.
- Canon and data: canon §B2 L361-363 (taxi derivation from NFL draft fields) conflicts with the UPS-draft rule; MFL lists draft team “FA” for six drafted players; the roster record’s UPS draft fields cover 2024–2026 only (a backfill would be a production write).
- Not changed here: a flat extension, MYAC, MYM and contract writes still use the existing JSON-then-form re-POST on an error; the owner gate shows buttons when the viewer’s team can’t be read (the worker still checks every write).