a2b0c32a70
The numeric id in squad/<n> was being justified as "matching the oracle". That justification does not survive inspection, and the code now says why. FIFA 17 has genuine multi-squad semantics. The client's own shipped action table has SelectSquadById, RetrieveSquad as an action DISTINCT from LoadActiveSquad, CreateSquadWithName, RenameSquad, DeleteSquad, CopySquad, indexed SQUAD_ID-%d list entries and FUT_MAX_NUM_SQUAD_REACHED. The base template is `ut/%s/squad` with the id appended. The number identifies a squad. The inherited behaviour came from a bare prefix regex in the Python oracle - `re.compile(G + r"/squad")` calling squad_route(), which never reads the URL id (GET returns current_squad(), PUT echoes the id from the BODY). The comments around it show /squad/list and the draft routes had to be registered first because that rule was swallowing them. It was expedient, not evidence-driven. Collapsing the id is nonetheless SAFE today, and only for a specific reason: we advertise exactly one squad. ACTIVE_SQUAD_WIRE_ID is a constant 0, /squad/list returns a single-element array carrying it, and no create/rename/delete/copy route exists, so the client can only echo back the id we gave it. Every numeric path in retained captures is squad/0, all PUTs whose body id also reads 0; no numeric GET has ever been recorded. Behaviour is therefore UNCHANGED - no evidence justifies changing it, and unknown-id semantics are deliberately not invented. What changes is that the assumption is now explicit and enforced: numeric_squad_routing_is_safe_only_while_one_squad_is_advertised pins the wire id at 0 and /squad/list at one entry, and fails the moment a second squad becomes addressable. Verified by simulating a second advertised squad. Workspace 1252 passed (1251 + this test), 0 failed.