fix(federation): accept the FM responses allowed by OPG.04
sequenceDiagram
participant P as portal
participant OEG
participant FM as FM internal :8083
participant X as partner OP
P->>OEG: GET /platform/v1/federation/partners/{id}/federations/{ctx}
OEG->>FM: GET /internal/partners/{id}/federations/{ctx}<br/>timeout 30 s, covers FM token + partner call
FM->>X: GetFederationDetails
X-->>FM: FederationDetails, optional fields left out
FM-->>OEG: same body
Note over OEG: validate against bundled OPG.04 v1.4.0<br/>before: required fields GSMA leaves optional, 502<br/>now: passes
OEG-->>P: 200, FM's original bytesOEG's response validator rejected valid federation details and zone offers with 502. Match the bundled OPG.04 v1.4.0 profile: optional FederationDetails fields, platformCaps, optional zone geolocation, and the missing platform capability enum values. Relay the original response bytes after validation.
Use FM's internal port 8083 by default and allow 30 seconds for token acquisition plus the partner call. Deployments still supply their actual internal service URL through Helm.
Validation: prior-session unit suite 1190 passed, with mypy and ruff clean; the branch pipeline passed. Schema tests compare the relayed models against the bundled profile and fail against the original models. VM federation details returned 200 where the original validator returned 502.
Dependency: FM internal-listener MR !33 (merged) is already merged. Keep Helm !15 (merged)'s internal service URL and timeout configuration aligned. This change is independent of the agreement relay and instance-list MRs.