Help
Dashboard guide for race day, plus technical notes for install, data, PCSX2, and CLI. PAL Formula One 2001–2006 · local only ·
Dashboard
Run a race
- Choose the season year in the header.
- Championship → Enter race result.
- Play the round in PCSX2 (menus and spectator setup are manual).
- Drag drivers into finish order → Lock in race.
- Check Standings or continue on Championship.
Optional: on the race page, open Verify grid in PCSX2 to compare your start order with the reference grid.
Pages
- Home
- Season list and how many races you have finished.
- Championship
- Active round, grid mode, live top-eight standings, PCSX2 connection panel, and Season controls.
- Calendar
- Every Grand Prix, date, and whether a result is saved.
- Standings
- Driver and constructor points — switch tabs at the top.
Rules & points
- Official vs reversed grid
- Set on Championship before you lock in. Official matches real qualifying order; Reversed matches a reversed start. Pit-lane and non-starters are flagged on the race page.
- Points
- 2001–2002: top six — 10-6-4-3-2-1. 2003–2006: top eight — 10-8-6-5-4-3-2-1.
- When standings update
- Only after Lock in race. Drag order, staged imports, or historical reference grids do not change points until then.
- Driver labels
- Full name plus three-letter code (e.g. MSC). Internal slugs appear in tooltips and automation JSON only.
Fix mistakes
- Wrong result for one round
- Championship or the race page → Season controls → Reset race.
- Start the year over
- Start new championship — clears all saved results for that year (confirmation required). A DB backup is created first.
- Restore a backup
- Stop the dashboard, copy
data/approved/backups/championship-*.dboverdata/approved/championship.db, restart.
Technical
Install & run
- Workspace (recommended)
-
npm run f1cm:installonce ·npm run f1cm:launchfor dashboard + supervisor when capture is enabled ·npm run f1cm:autostart:installfor login start ·npm run f1cm:autostart:statusto check. - Project venv
- Python 3.12+,
pip install -e ".[dev]", thenuvicorn f1cm.app.main:app --host --port 8787. - Restart after code changes
npm run f1cm -- dashboard restart— reloads Python and templates.- Default autostart year
- 2001 unless you reinstall autostart with
F1CM_CHAMPIONSHIP_YEAR=2002(etc.). - First-time calendar data
-
f1cm init-db·python scripts/build_historical_from_ergast.py(network) ·f1cm import-historical
Database & states
- Production DB
data/approved/championship.db— your locked-in championship. Backups:data/approved/backups/before approved writes.- Data states
- unverified — imported history (not official grid until approved) · staged — proposed results · approved — committed and counted in standings · test — pytest only.
- Test isolation
- pytest sets
F1CM_ENV=testandF1CM_DB_PATHto a temp file so tests cannot open production. - Ops page (advanced)
/reliability— DB path, backup list, emulator status (not in main nav).- PAL roster (advanced)
/pal-roster/{year}— verify in-game driver codes against imported IDs for automation.
PCSX2 & PINE
- What the UI does today
- Read-only PINE identity on Championship — confirms PCSX2 is running and which ISO/disc looks loaded. It does not drive menus or read the classification screen yet.
- CLI checks
-
f1cm pcsx2 diagnose --year 2001·f1cm pcsx2 game-info --year 2001·f1cm championship status --year 2001 - Automation (optional)
- With emulator capture enabled,
f1cm championship supervisecan run in the background. Default workflow is manual Lock in race — no polling CLI required. - Portfolio deploy
-
Regenerate the portfolio snapshot with
npm run f1cm:portfolio:live-pack, thennpm run ship -- portfolio. Run the live dashboard withnpm run f1cm:launch. - 2004–2006
- Calendars and serial hints are in-repo; verify menus, rosters, and grids on your PCSX2 setup before trusting automation.
- Live integration tests
F1CM_PCSX2_LIVE=1 pytest tests/test_pcsx2_live_integration.py(real emulator required).
CLI & JSON
- Everyday path
- Browser Lock in race — no separate preview step in the web UI.
- Race results JSON
-
{"results": [{"driver_id": "michael_schumacher", "position": 1, "status": "classified"}]}—driver_idslugs match the historical import (shown on the race page). - Stage / approve
- JSON paste and API staging still supported for automation; approved rows land in the same SQLite DB as the dashboard.
- CLI entry
npm run f1cm -- …orbash scripts/local/f1cm.shfrom the MSR workspace root.
Dev & troubleshooting
- Wrong Python (e.g. 3.9)
eval "$(bash scripts/local/agent-shell-path.sh)"from workspace root, or use mise/nvm per.nvmrc.- Empty home season list
- Run historical build +
f1cm import-historical. - Ergast build 429
- Re-run
python scripts/build_historical_from_ergast.py(retries with backoff). - Race form submit fails
- Install deps:
pip install -e ".[dev]"(needspython-multipart). - Tests
pytestinprojects/game/formula-one. Optional:F1CM_PLAYWRIGHT=1 pytest tests/test_browser.pyafterplaywright install chromium.
Unofficial fan tool — not affiliated with Formula One Group, Sony, Studio Liverpool, or PCSX2. Use your own legally obtained game images.