diff --git a/docs/PRODUCTION_AUTHORITY_MATRIX.md b/docs/PRODUCTION_AUTHORITY_MATRIX.md index d211fc8..303f793 100644 --- a/docs/PRODUCTION_AUTHORITY_MATRIX.md +++ b/docs/PRODUCTION_AUTHORITY_MATRIX.md @@ -112,15 +112,23 @@ DONE (Rust-owned in candidate source; committed on top of 5020137; workspace tes Legend instances = DIFFERENT-BY-DESIGN.) - Reachability reporter (scripts/openfut-reachability.py) gates Python-hit invariants. -RESIDUAL PYTHON (still proxied; concrete status): -- club/stats/{year,consumables} — Core-derived rating-tier + consumable aggregation; NOT yet - migrated (design: host all_owned() tiered counts; needs differential). Actionable, off-production. -- account/sync — persona select + save; no direct Core route; needs host session/account logic. -- clientdata/userHubData — BLOCKED as clean migration: Core /settings supports only 2 fixed keys - (difficulty, preferred_formation), cannot store an arbitrary blob without a frozen-Core change or - a new host store. Low-value UI-pref blob; kept Python per Phase 23 (no Python-by-ideology). -- userMassInfo — hybrid (Rust overlays economy+squad on Python envelope); full ownership pending. -- ut/auth — Python mints SID envelope, Rust OBSERVEs; boundary decision pending. +RESIDUAL PYTHON (still proxied; each has a concrete blocker, not ordinary difficulty): +- club/stats/{year,consumables} — BLOCKED (cosmetic): the oracle set is a 40-atom VOCAB + (fut_club_stats.py) with a synthetic-shelf counting model (Python counts a starter shelf, not + owned items) + nation-bucket context rows. Unrecognized atoms are inert; Python serves it + correctly. A faithful Rust port is large + transcription-risky + semantically divergent; deferred + to a dedicated effort with a live capture. Low value (club-stats screen only). club/stats/staff + IS Rust ({}). +- account/sync — launcher-facing (POST /openfut/account/sync, pre-auth); envelope has fields not in + Core (clubAbbr, established, profilePath, accountFunds cap); changing it risks the launcher. Needs + a Core account endpoint or host account logic + launcher-contract verification. +- userMassInfo — SAFE hybrid today (Rust overlays economy+squad on Python envelope). Full ownership + needs a real full-envelope capture first (missing one scaffold field breaks a hot route); deferred. +- ut/auth — ORDERING-BLOCKED: still-proxied Python routes rely on Python's session table, so auth + must stay proxied (Python mints SID, Rust OBSERVEs) until every session-needing route is Rust. Migrate LAST. +- clientdata/userHubData — BLOCKED: Core /settings supports only 2 fixed keys (difficulty, + preferred_formation); storing an arbitrary blob needs a frozen-Core change or a new host store. + Low-value UI-pref blob; kept Python per Phase 23 (no Python-by-ideology). AUX (Rust built, deploy = operator-gated container cutover, NOT this task): blaze/roster/redirector. POW = blocked (no crate, bodies un-reversed). Nucleus = dead (0 live hits).