conductor(track): add Phase 11 - REJECT Phase 10's sliming; redo 21 sites as full Result[T]

This commit is contained in:
ed
2026-06-17 23:46:11 -04:00
parent b68af4a393
commit 133457a6d7
4 changed files with 454 additions and 26 deletions
@@ -37,7 +37,7 @@ sites** across the codebase.
**5 sub-tracks with consistent `result_migration_*` prefix:**
1. `result_migration_review_pass` (T-shirt: S) — 57 sites (32 UNCLEAR + 25 INTERNAL_RETHROW); updates the audit's heuristics
2. `result_migration_small_files` (T-shirt: L) — 37 files (35 SMALL + 2 MEDIUM); **shipped 2026-06-17** with documented G4 deviation: 76 sites (62V + 10S + 4 UNCLEAR) → 49 migrated (6 full `Result[T]` + 43 exception narrowing) + 13 already compliant + 27 silent-swallow sites remain; **Phase 10 in progress** (full Result[T] migration for the 27 sites + 2-3 new audit heuristics for the 14 new UNCLEAR sites)
2. `result_migration_small_files` (T-shirt: L) — 37 files (35 SMALL + 2 MEDIUM); **shipped 2026-06-17** with documented G4 deviation: 76 sites (62V + 10S + 4 UNCLEAR) → 49 migrated (6 full `Result[T]` + 43 exception narrowing) + 13 already compliant + 27 silent-swallow sites remain; **Phase 11 in progress** (REJECTS Phase 10's sliming of 21 sites; redoes them as full Result[T] + REVERTS 5 laundering heuristics)
3. `result_migration_app_controller` (T-shirt: XL) — 56 sites (35 V + 3 S + 2 ? + 16 C; 13 FastAPI boundary stay as-is)
4. `result_migration_gui_2` (T-shirt: XL) — **55 sites** (37 V + 2 S + **14 ?** + 2 C; the 14 ? includes the +1 site from the review pass: `src/gui_2.py:1349`)
5. `result_migration_baseline_cleanup` (T-shirt: L) — 112 sites (77 V + 10 S + 6 ? + 19 C in the 3 refactored files)
@@ -57,11 +57,14 @@ sites** across the codebase.
> the audit script is now correct (3 bugs fixed in Phase 1 of that sub-track),
> and the 37 SMALL+MEDIUM files have been processed:
> - **49/76 sites migrated** (6 full `Result[T]` + 43 exception narrowing) + 13 already compliant
> - **27 sites remain `INTERNAL_SILENT_SWALLOW`** (narrow-catch + pass); **Phase 10 in progress** (full Result[T] migration; not narrowing, not logging-only, not silent recovery)
> - **Audit's UNCLEAR count: 7 → 21** (+14 sites) - the narrowing created patterns the audit's heuristics don't recognize; **Phase 10 in progress** (2-3 new heuristics)
> - **27 sites remain `INTERNAL_SILENT_SWALLOW`** (narrow-catch + pass); **Phase 11 in progress** (REJECTS Phase 10's sliming; full Result[T] migration; not narrowing, not logging-only, not silent recovery)
> - **Audit's UNCLEAR count: 7 → 21** (+14 sites) - the narrowing created patterns the audit's heuristics don't recognize; **Phase 11 in progress** (REJECTS Phase 10's 5 LAUNDERING heuristics; reverts them and adds legitimate Heuristic A)
> - **Bonus defensive fix:** `try/except (OSError, tomllib.TOMLDecodeError)` in `load_track_state` unblocked 7+ tests
> - **Test result:** all 11 test tiers PASS (tier-1-unit-comms, tier-1-unit-core, tier-1-unit-gui, tier-1-unit-headless, tier-1-unit-mma, tier-2-mock_app-comms, tier-2-mock_app-core, tier-2-mock_app-gui, tier-2-mock_app-headless, tier-2-mock_app-mma, tier-3-live_gui)
> - **Documented G4 deviation:** 27 silent-swallow sites remain. **Phase 10 of this sub-track** (not a separate sub-track) does the full Result[T] migration; the user has directed that Result[T] is mandatory, not optional, given the project's heavy use of multi-threaded `io_pool` dispatch (Python has no wave-based preemptive thread pipelining, so every soft/hard failure point needs full context).
>
> **Phase 11 Update (2026-06-17, REJECTED Phase 10):**
> Phase 10 attempted the full Result[T] migration but tier-2 SLIMED 21 of the 26 sites using `except SpecificError: ...; logger.warning(...); return default` (which is NOT a Result migration). Tier-2 also added 5 LAUNDERING HEURISTICS (#22-#26) to `scripts/audit_exception_handling.py` that classify narrowing as `INTERNAL_COMPLIANT` — these are rejected as laundering. Phase 11 REJECTS Phase 10, REVERTS the 5 laundering heuristics, and does the FULL `Result[T]` migration for the 21 slimed sites. **Result[T] is NOT optional.** No "context manager" or "user callback" excuses. The reference implementation is `src/hot_reloader.py` (which tier-2 did correctly); the same pattern must be applied to `warmup.py`. Test count claim must be 11 tiers (not 10).
---
@@ -127,7 +130,7 @@ applied. Both feed into all later sub-tracks.
**Scope:** 37 files (the 35 SMALL + 2 MEDIUM from the `--by-size` bucket);
**76 sites (62V + 10S + 4 UNCLEAR) → 49 migrated + 13 already compliant + 27 silent-swallow remain.**
**T-shirt size:** L (batched; ~750 lines changed across 37 files + 1 audit script + 1 new test file).
**Status:** **shipped 2026-06-17** with documented G4 deviation (27 sites remain `INTERNAL_SILENT_SWALLOW`; **Phase 10 of this sub-track** does the full Result[T] migration per the user's explicit direction).
**Status:** **shipped 2026-06-17** with documented G4 deviation (27 sites remain `INTERNAL_SILENT_SWALLOW`; **Phase 11 of this sub-track** REJECTS Phase 10's sliming of 21 sites and does the full Result[T] migration per the user's explicit direction).
**Why second:** the small files are quick wins; they don't depend on
the orchestrator (app_controller) or the GUI. Some of them DO depend on
@@ -153,8 +156,8 @@ Phase 1 of this sub-track (audit-script bug fixes) unblocks sub-tracks
public API changes may be acceptable. Tier 2 chose narrowing for 43 sites to
avoid ~100+ caller updates. **Caveat:** narrowing without `logging.warning(...)`
is **silent recovery** (no trace). The 27 sites that remain `INTERNAL_SILENT_SWALLOW`
are documented in the track completion report; **Phase 10 of this sub-track** is
planned to do the full Result[T] migration for them.
are documented in the track completion report; **Phase 11 of this sub-track** is
actively doing the full Result[T] migration for them (REJECTS Phase 10's sliming).
- **Phase 9: Verification** — all 11 test tiers PASS; per-site report + track
completion report written; state.toml + metadata.json marked completed.
- **Bonus defensive fix:** `try/except (OSError, tomllib.TOMLDecodeError)` in
@@ -174,7 +177,7 @@ pass or narrow-catch + return None). These are categorized as:
**Migration-target sites introduced by the narrowing:** the audit's UNCLEAR count
went **7 → 21** (+14 sites) because the narrowing created patterns the audit's
heuristics don't recognize. **Phase 10 of this sub-track** adds 2-3 new heuristics
heuristics don't recognize. **Phase 11 of this sub-track** adds the legitimate Heuristic A (Result-returning recovery in non-*_result function)
(heavily-narrowed `except` without logging; `except` returning Result in non-`*_result`
function) that reclassify these.