Problem: users cannot choose which C++ standard (e.g. C++17 vs C++20
vs C++23) to submit with — the plugin hardcodes a single platform ID
per language with no discoverability or override mechanism.
Solution: add `LANGUAGE_VERSIONS` and `DEFAULT_VERSIONS` tables in
`constants.lua` as the single source of truth. `config.lua` gains
`version` and `submit_id` fields on `CpLanguage`/`CpPlatformOverrides`,
validated at setup time. `submit.lua` resolves the effective config to
a platform ID (priority: `submit_id` > `version` > default). Helpdocs
document the new `*cp-submit-language*` section with per-platform
available versions and the `submit_id` escape hatch. Tests cover
`LANGUAGE_IDS` completeness and `get_language_id` lookups.
## Problem
Kattis and USACO had zero offline test coverage — no fixtures, no
conftest
routers, and no entries in the test matrix. The `precision` field and
error
paths were also unverified across all platforms.
## Solution
Add HTML fixtures for both platforms and wire up `httpx.AsyncClient.get`
routers in `conftest.py` following the existing CSES/CodeChef pattern.
Extend the test matrix from 12 to 23 parametrized cases. Add a dedicated
test for the Kattis contest-vs-slug fallback path (verifying
`contest_url`
and `standings_url`), three parametrized metadata error cases, and a
targeted assertion that `extract_precision` returns a non-`None` float
for
problems with floating-point tolerance hints.
Closes#281.