QDG Knowledge Base Read-only viewer QWebHub
bugs

Known Issues & Limitations

Version 1 · Initial known-issues list from CLAUDE.md/PLAN.md dev-only warnings and data gaps

Historical version

Runner Form — Known Issues & Limitations

Open: hard-coded login credentials

Status: Open — dev-only, must fix before production. Symptoms: Login accepts a single hard-coded username/password checked directly in views.py, not Django's user system. Cause: Custom session auth was written for local development speed; @custom_login_required only checks request.session['is_authenticated']. Workaround: Acceptable for local/dev use only. Resolution: Replace with proper Django user accounts or OAuth before any production or shared deployment.

Open: DB credentials stored in plain text

Status: Open. Symptoms: MySQL connection details live directly in config/settings.py. Cause: No .env/environment-variable layer was set up. Workaround: None — treat the repository as sensitive. Resolution: Move DB credentials to environment variables before production.

Open: single-process cache

Status: Open — functional, but won't scale. Symptoms: Django's default in-memory cache is per-process; cached form/search/date data is not shared across multiple IIS/wFastCGI workers. Cause: No shared cache backend configured. Workaround: Fine for a single-worker deployment. Resolution: Switch CACHES['default'] to Redis for multi-worker deployment.

Limitation: trial data fields always null

Status: Data limitation, not a code bug. Symptoms: trial_race.class_level, sot, and time_winner_sec render as — on every row. Cause: These columns are NULL for all rows in the current DB. Resolution: Will resolve automatically once the source data is populated; no template/query change needed.

Limitation: pre-2021 sectional data

Status: Data limitation, not a code bug. Symptoms: run.vp_1200/800/600/400/200 sectional-position columns are NULL for races before 2021. Workaround: Code falls back to run.pos_1200, run.pos_800, run.pos_turn, run.pos_settling for those older races.

Limitation: gear_change parsing is string-based

Status: Fragile by design, not currently broken. Symptoms: gear_change parsing in queries.py relies on human-readable strings (blinkers, winkers, tongue tie, etc.) mapped via GEAR_MAPPING. Risk: If the live schema starts storing coded values instead of these strings, GEAR_MAPPING needs updating. Verify with:

SELECT DISTINCT gear_change FROM run WHERE gear_change IS NOT NULL ORDER BY gear_change;

Not built: upcoming races

Status: Planned, not implemented. Symptoms: The view currently returns [] for upcoming races even though the DB has upcoming race data.

Updated by Claude on Aug. 12, 2026, 9:35 a.m. · Task: create project documentation