Front Office redesign · proof

#1338 · after 7c2b4005 vs main 6e485920 · recorded 2026-10-20 · checklist and links

0 live reads
26-step browser run (Chromium + WebKit): every worker read answered from the recording; 0 reached production.
Every write blocked
POST, PUT, PATCH, DELETE, a Request object, XHR, sendBeacon, form submit, MFL import by GET, and a War Room offer: all stopped before leaving the page.
1442 / 1445
displayed values equal MFL’s recorded exports; the 3 others are exact .x5 halves (below).
222 passed, 0 failed
full safe offline suite on 7c2b4005; 14 of 14 reintroduced bugs caught.

Reconciliation: what the new screens show vs MFL

Read from the preview’s page, then recomputed here from MFL’s own recorded exports with exact arithmetic: points and PPG from playerScores W=ALL (Wks 1–6), the phone’s rank rule (3+ MFL weeks; ties → total points → id), projectedScores W=7, nflByeWeeks, futureDraftPicks, and the league’s waiver check for Status.

ScreenRowsValuesResultDifferences
Roster · Performance (Real Deal Creel)37185184 matchBrissett, Jacoby PPG: page 19.3, exact 19.4
Market · Free agents (top 200)20012001198 matchWashington, Darnell PPG: page 8.5, exact 8.6; Bates, Jessie PPG: page 8.0, exact 8.1
Contracts & Cap · Draft picks6060all match

Every rank, bye, projection, status and pick holder matches. The three PPG differences are averages that land exactly on a half (116.1 ÷ 6 = 19.35): the page rounds them down, as the released phone sheet does (same formatter). A shared fix for both is listed as a follow-up.

Earlier reconciliation (issue comment 4)

Before / after

Roster

Before (main): contract ledger only; “Pos Rank” is a salary rank.
Before (main): contract ledger only; “Pos Rank” is a salary rank.
After: Performance columns (MFL points, PPG, rank, last 4, next game, MFL projection, bye) beside salary; Contract chip keeps the ledger.
After: Performance columns (MFL points, PPG, rank, last 4, next game, MFL projection, bye) beside salary; Contract chip keeps the ledger.

Player panel → Stats (same player)

Before: 2026 row from the league database (116, 19.4) mixed into career totals.
Before: 2026 row from the league database (116, 19.4) mixed into career totals.
After: This season from MFL’s own scoring (116.1, 19.3, #21 QB), as on the phone; earlier seasons separate.
After: This season from MFL’s own scoring (116.1, 19.3, #21 QB), as on the phone; earlier seasons separate.

Contracts & Cap

Before: Cap Planning tab.
Before: Cap Planning tab.
After at 1024 px: same cap plan under Contracts & Cap; the table scrolls inside its card (main widened the page by 104 px).
After at 1024 px: same cap plan under Contracts & Cap; the table scrolls inside its card (main widened the page by 104 px).

New views

Overview (1440): cap, roster, this week, trade deadline, needs attention, lineup strength vs the league, picks, expiring contracts.
Overview (1440): cap, roster, this week, trade deadline, needs attention, lineup strength vs the league, picks, expiring contracts.
Overview at 1024 px.
Overview at 1024 px.
Bye planner: the real 18-slot lineup (SuperFlex, K, P, IDP, D-Flex), Weeks 7–17.
Bye planner: the real 18-slot lineup (SuperFlex, K, P, IDP, D-Flex), Weeks 7–17.
Market: free agents with the league’s waiver status, MFL points, rank, projection, bye.
Market: free agents with the league’s waiver status, MFL points, rank, projection, bye.
Trade finder: strength/need matrix, logical partners, fits that help both lineups.
Trade finder: strength/need matrix, logical partners, fits that help both lineups.
War Room opened from a Trade finder swap: both teams and both players preselected.
War Room opened from a Trade finder swap: both teams and both players preselected.
Draft picks: who holds every 2027 pick (MFL future picks).
Draft picks: who holds every 2027 pick (MFL future picks).
Activity: claims MFL holds (with your MFL sign-in) and 14 days of moves.
Activity: claims MFL holds (with your MFL sign-in) and 14 days of moves.
Loaded inside an MFL-style page through the real embed loader.
Loaded inside an MFL-style page through the real embed loader.
WebKit (Safari engine) render of Trades.
WebKit (Safari engine) render of Trades.

Reintroduced bugs (each must fail its test)

Bug put backTestResultRun
A no write on openfront_office_no_write_on_open.test.mjscaught1/3 tests passed, 8 assertions, 2 FAILED
B War Room live adjustmentstrade_war_room_live_adjustments.test.mjscaught1/3 tests passed, 5 assertions, 2 FAILED
C player facts = phonefront_office_player_facts_parity.test.mjscaught5/7 tests passed, 737 assertions, 2 FAILED
D shell + deep linksfront_office_shell_nav.test.mjscaughtNode.js v22.22.2
D rank waits for players list (old hub)front_office_rank_universe.test.mjscaught1/4 tests passed, 7 assertions, 3 FAILED
D rank cache keyed on groupOf (old cache)front_office_rank_universe.test.mjscaught3/4 tests passed, 18 assertions, 1 FAILED
D bye planner: IR can startbye_planner_model.test.mjscaught4/5 tests passed, 19 assertions, 1 FAILED (after adding the IR-designation case; missed before)
E blank projection read as 0front_office_roster_performance.test.mjscaught4/5 tests passed, 51 assertions, 1 FAILED
F claim-now shown as add-nowfront_office_market.test.mjscaught3/5 tests passed, 25 assertions, 2 FAILED
G kickers/punters used in fitstrade_fit_model.test.mjscaught7/8 tests passed, 75 assertions, 1 FAILED
H swap link drops the playersfront_office_trade_finder.test.mjscaught3/4 tests passed, 12 assertions, 1 FAILED
H War Room ignores give/get (main)trade_war_room_fit_link.test.mjscaught0/3 tests passed, 1 assertions, 3 FAILED
I IR moves read backwardsfront_office_picks_activity.test.mjscaught2/3 tests passed, 10 assertions, 1 FAILED
I fixed 1-6 pick columnsfront_office_picks_activity.test.mjscaught2/3 tests passed, 13 assertions, 1 FAILED

Not verified here