From 57773b98ec03d27e2478940669b245e96f7ff9a8 Mon Sep 17 00:00:00 2001 From: funman300 Date: Fri, 14 Aug 2026 05:36:32 +0000 Subject: [PATCH] docs: Python retirement readiness classification (post-P1) --- docs/PYTHON_RETIREMENT_PLAN.md | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 docs/PYTHON_RETIREMENT_PLAN.md diff --git a/docs/PYTHON_RETIREMENT_PLAN.md b/docs/PYTHON_RETIREMENT_PLAN.md new file mode 100644 index 0000000..49926b4 --- /dev/null +++ b/docs/PYTHON_RETIREMENT_PLAN.md @@ -0,0 +1,41 @@ +# Python Retirement Readiness (post-P1) + +Classification of every Python component still present. Evidence: prod-host +`owner=` dispatch log (OBSERVED), AuxServiceMap/PythonContractMap scouts, +container `entrypoint.sh`. **P2 rollback stays hot regardless** (do NOT remove +rollback-to-python-p2.sh, :p2-rollback image b1b929953f, profile 39bb3e83). + +## A. LIVE PRODUCTION REQUIRED (still owns behavior in the live flow) +| Component | Role | Rust status | Retire when | +|---|---|---|---| +| oracle utas_server.py (:8199) NON-ECONOMY | account/sync, hub, club/stats, clientdata, userMassInfo envelope | 5 routes migrated (accountinfo/settings/leaderboards-options/match-reset/phishing); hub/club-stats/clientdata/account-sync still proxied | remaining non-economy routes migrated + operator-validated | +| blaze_responder_v3b.py (:42130 Blaze) | FUT Blaze transport | Rust openfut-blaze-host COMPLETE, gate-proven (Gate 10) | container cutover (operator-gated deploy) | +| blaze_responder_v3b.py (:42127 redirector TLS) | first-hop TLS redirect | Rust openfut-redirector-host COMPLETE (OpenSSL) | container cutover + cert consistency | +| roster_server.py (:8081) | roster-update XML | Rust openfut-roster-host COMPLETE (unit-only) | container cutover | +| pow_server.py (:8094/:8080) | Proof-of-Work / content | NO Rust crate; 58 templates, bodies un-reversed | needs Rust host + body RE (BLOCKED) | + +## B. ORACLE ONLY (reference / differential, not production authority) +- utas_server.py economy handlers: now oracle-only (economy is Rust; Python economy hits = 0). Used by + `economy_differential.rs` as the parity oracle. KEEP. +- fut_store.py / fut_accounts.py / fut_consumables.py: reference models + Ghidra-derived taxonomy source. KEEP. + +## C. MIGRATION TOOL ONLY (offline) +- scripts/*.py (seed_fifa17_cards.py, utas-observe/mutate/diff, check-*). KEEP (dev tooling). +- fifa17-recon/tools/db_dump.py etc.: table extraction. KEEP. + +## D. ROLLBACK ONLY (hot, DO NOT REMOVE) +- rollback-to-python-p2.sh; image openfut-fut-backend:p2-rollback (b1b929953f) + :dev; profile 39bb3e83; + compose/env backup; tuple OPENFUT_SERVERS="blaze roster utas pow". + +## E. DEAD (advertised but not followed in current FIFA17 flow) +- Nucleus /connect/token stub (:42131): 0 live hits across Gate 5-10 (client never POSTs). Keep the ADVERTISED + URL so the client can't reach real EA, but no migration needed. No Rust listener required. +- fifa-blaze (FIFA23 capture stub), openfut-bridge (FIFA23): retired lineage, not in FIFA17 flow. + +## Retirement gating +1. Migrate remaining non-economy oracle routes to Rust (hub/club-stats/clientdata/account-sync) — then oracle + is oracle-only (class B). +2. Deploy Rust blaze/roster/redirector via container cutover (operator-gated) — then those Python responders + are class D/E only. +3. POW: build Rust host + reverse bodies (largest blocker) OR keep Python POW as class A indefinitely. +4. Only after a long stable window: consider retiring the P2 rollback (separate explicit decision — NOT now).