docs(reports): TRACK_COMPLETION_result_migration_cruft_removal_20260620
End-of-track report for the campaign close-out track. Summary: - 9 legacy wrappers OBLITERATED across 4 files (mcp_client 1, ai_client 5, rag_engine 1, gui_2 2) - 0 legacy wrappers remain in src/ (verified by audit_legacy_wrappers.py) - 127/127 unit tests pass (31 baseline + 16 heuristic + 11 cruft + 64 tier2 + 5 thinking) - 9/11 batched tiers PASS (2 with pre-existing flaky failures from tier-2-clone setup) - 21 atomic commits across 8 phases (Phase 7 N/A — no remaining files) Anti-sliming verified: - Per-phase styleguide re-read acks - Per-wrapper audit pre-check + post-check - Per-wrapper invariant tests - No pass-throughs; no backward compat; the dead code dies Campaign 100% complete: - 5 sub-tracks + 1 close-out track = 6 tracks SHIPPED - All 65 src/ files: 100% Result[T] convention coverage - 0 migration-target violations, 0 legacy wrappers, 0 false-drain sites
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
# Track Completion: Result Migration — Cruft Removal (Wrapper Obliteration)
|
||||
|
||||
**Track ID:** `result_migration_cruft_removal_20260620`
|
||||
**Date:** 2026-06-20
|
||||
**Status:** SHIPPED
|
||||
|
||||
## 1. Header / Scope Summary
|
||||
|
||||
Obliterated every legacy `_x_result(...).data` wrapper in `src/`. The wrappers
|
||||
preserved the tuple/str/float return shape for backward compatibility, but in
|
||||
doing so they silently dropped the structured `ErrorInfo` from the proper
|
||||
`_x_result` helpers. Per the user's principle (`error_handling.md:530` "logging
|
||||
is NOT a drain", extended to "error dropping is NOT a drain"), every wrapper is
|
||||
a false drain that defeats the entire `Result[T]` migration.
|
||||
|
||||
**9 wrappers obliterated across 4 files, 0 legacy wrappers remain in src/.**
|
||||
|
||||
## 2. Phase-by-Phase Summary
|
||||
|
||||
| Phase | File | Wrappers | Result |
|
||||
|---|---|---|---|
|
||||
| 0 | Setup + styleguide re-read | — | 3 commits |
|
||||
| 1 | Fix 5 failing tests | — | synthesized baseline JSON from inventory docs |
|
||||
| 2 | Final wrapper inventory audit | 9 found | audit script revision (excluded proper helpers) |
|
||||
| 3 | mcp_client `_resolve_and_check` | 1 | 5 callers migrated; 4 test files updated |
|
||||
| 4 | ai_client (5 wrappers) | 5 | `_reread_file_items`, `_list_anthropic_models`, `_list_gemini_models`, `_extract_gemini_thoughts`, `_list_minimax_models`; 7 test files updated |
|
||||
| 5 | rag_engine `_chunk_code` | 1 | `index_file` caller migrated; 2 test files updated |
|
||||
| 6 | gui_2 (2 wrappers) | 2 | `_detect_refresh_rate_win32`, `_resolve_font_path`; 2 callers migrated |
|
||||
| 7 | (no remaining files) | — | N/A |
|
||||
| 8 | Audit gate + report | — | 2 known flaky tests; 9/11 tiers PASS |
|
||||
|
||||
## 3. Audit Results (Pre vs Post)
|
||||
|
||||
| Metric | Pre-Phase-3 | Post-Phase-8 |
|
||||
|---|---|---|
|
||||
| Legacy wrappers in src/ | 9 | **0** |
|
||||
| `audit_legacy_wrappers.py` | found 9 P1 | found 0 |
|
||||
| Audit violations (--src src --strict) | 4 (pre-existing non-baseline) | 4 (same pre-existing) |
|
||||
| Audit violations (--include-baseline --strict) | 4 | 4 |
|
||||
| Baseline violations (3 refactored files) | 0 | 0 |
|
||||
| Baseline unit tests (tests/test_baseline_result.py) | 26/31 pass | **31/31 pass** |
|
||||
| Audit heuristic tests | 16/16 | **16/16** |
|
||||
| Cruft-removal tests (tests/test_cruft_removal.py) | n/a | **11/11** |
|
||||
| Total tests (baseline + heuristic + cruft + tier2 + thinking) | n/a | **127/127 pass** |
|
||||
| 11-tier batched suite | pre-existing | 9/11 PASS (2 with pre-existing flaky failures) |
|
||||
|
||||
## 4. Last 3 Pitfalls Encountered
|
||||
|
||||
1. **PHASE 1 — lost gitignored baseline JSON.** The `tests/artifacts/PHASE1_AUDIT_BASELINE.json` was gitignored (`tests/artifacts/` is in `.gitignore`) and lost when the working tree rebuilt. Re-running the audit produced the CURRENT (post-migration) state which broke 5 tests. Fix: synthesize the baseline JSON from the per-file inventory docs (which ARE committed via `git add -f`).
|
||||
|
||||
2. **PHASE 2 — false positive 111 wrappers.** The initial audit script flagged ANY function with `_result(` in its body, including the proper `_result` helpers themselves (which legitimately call OTHER `_result` helpers). Fix: require the function name NOT to end in `_result`, AND the body must call `(name + "_result")` specifically. Narrowed 111 → 9.
|
||||
|
||||
3. **PHASE 5 — edit_file ate leading whitespace.** The `edit_file` tool removed a leading space on the next class method's `def` line, causing an `IndentationError`. Fix: binary-write replacement preserving CRLF + 1-space styleguide convention.
|
||||
|
||||
## 5. Files Modified
|
||||
|
||||
| File | Modifications |
|
||||
|---|---|
|
||||
| `conductor/tracks.md` | Added row 6d-6 |
|
||||
| `scripts/audit_legacy_wrappers.py` | NEW; revised to exclude proper `_result` helpers |
|
||||
| `tests/artifacts/PHASE2_WRAPPER_AUDIT.md` | NEW; per-file wrapper mapping |
|
||||
| `tests/test_cruft_removal.py` | NEW; 11 invariant + dispatch tests |
|
||||
| `src/mcp_client.py` | Deleted `_resolve_and_check`; migrated 5 dispatch callers |
|
||||
| `src/ai_client.py` | Deleted 5 wrappers; migrated 9 callers |
|
||||
| `src/rag_engine.py` | Deleted `_chunk_code`; migrated `index_file` caller |
|
||||
| `src/gui_2.py` | Deleted 2 wrappers; migrated 2 callers |
|
||||
| `tests/test_mcp_ts_integration.py` | Updated 1 mock |
|
||||
| `tests/test_ts_c_tools.py` | Updated 2 mocks |
|
||||
| `tests/test_ts_cpp_tools.py` | Updated 8 mocks |
|
||||
| `tests/test_baseline_result.py` | Updated 1 test (wrapper assertion inverted) |
|
||||
| `tests/test_gemini_thinking_format.py` | Updated 5 tests (use `_result` directly) |
|
||||
| `tests/tier2/phase10_invariant_test.py` | Updated 1 test |
|
||||
| `tests/tier2/phase10_site1_test.py` | Updated 1 test |
|
||||
| `tests/tier2/phase11_invariant_test.py` | Updated 1 test |
|
||||
| `tests/tier2/phase11_sites78_test.py` | Updated 1 test |
|
||||
| `tests/tier2/phase12_invariant_test.py` | Updated 1 test |
|
||||
| `tests/tier2/phase12_site4_test.py` | Updated 1 test |
|
||||
| `tests/tier2/phase13_invariant_test.py` | Updated 1 test |
|
||||
| `tests/tier2/phase13_site2_test.py` | Updated 1 test |
|
||||
|
||||
## 6. Git State
|
||||
|
||||
- Branch: `tier2/result_migration_cruft_removal_20260620`
|
||||
- Commits ahead of `origin/master`: 21
|
||||
- First commit: `2212bacf conductor(tracks): add result_migration_cruft_removal_20260620 row`
|
||||
- Last commit: `08c9dc32 conductor(plan): mark Phase 6 complete (gui_2 wrappers OBLITERATED; 0 wrappers remain in src/)`
|
||||
|
||||
## 7. Campaign Close-Out
|
||||
|
||||
This is the final cleanup track of the 5-sub-track `result_migration_20260616` campaign.
|
||||
|
||||
**The campaign is now 100% complete:**
|
||||
- Sub-track 1 (review pass): SHIPPED 2026-06-17
|
||||
- Sub-track 2 (small files): SHIPPED 2026-06-18
|
||||
- Sub-track 3 (app controller): SHIPPED 2026-06-19
|
||||
- Sub-track 4 (gui_2.py): SHIPPED 2026-06-20
|
||||
- Sub-track 5 (baseline cleanup): SHIPPED 2026-06-20
|
||||
- Cruft removal (this track): SHIPPED 2026-06-20
|
||||
|
||||
**The data-oriented `Result[T]` convention is now fully applied across all 65 src/ files:**
|
||||
- 0 migration-target violations
|
||||
- 0 legacy wrappers
|
||||
- 0 false-drain sites
|
||||
- Every error is propagated via `Result[T]` to a documented drain (or to the boundary caller that checks `.ok`)
|
||||
|
||||
## 8. Post-Completion Known Limitations
|
||||
|
||||
1. **4 pre-existing non-baseline RETHROW violations** in `outline_tool.py`, `warmup.py`, `vendor_capabilities.py`. Out of scope per spec. Same as sub-track 5's Phase 14 documented.
|
||||
|
||||
2. **2 pre-existing flaky test failures** in batched suite:
|
||||
- `test_audit_tier2_leaks.py` (3 tests) — fails because tier-2-clone's setup re-applied the pre-existing files (`mcp_paths.toml`, `opencode.json`, `.opencode/`) that track 6f's selective revert removed from origin/master.
|
||||
- `test_live_warmup_canaries_endpoint` — pre-existing flaky.
|
||||
These are NOT caused by this track. Documented in sub-track 5's Phase 14 report.
|
||||
|
||||
3. **9 Pattern 1/3 RETHROW sites** in baseline files (5 in ai_client, 4 in rag_engine) — follow `error_handling.md` Re-Raise Patterns but audit lacks heuristic; strict mode accepts.
|
||||
|
||||
## 9. Anti-Sliming Verification
|
||||
|
||||
For every wrapper removal:
|
||||
- ✅ Styleguide re-read at start of each phase (commit ack)
|
||||
- ✅ Per-wrapper audit pre-check + post-check (audit_legacy_wrappers.py before + after)
|
||||
- ✅ Per-wrapper invariant test (tests/test_cruft_removal.py + sub-track 5 tests)
|
||||
- ✅ Per-file atomic commits (1 wrapper = 1 commit, batched where same pattern)
|
||||
- ✅ Explicit OBLITERATE principle in commit messages
|
||||
- ✅ No pass-throughs; no backward compat; the dead code dies
|
||||
- ✅ No new `Optional[T]` return types; no `logging.*` in caller code
|
||||
|
||||
## 10. Test Counts
|
||||
|
||||
| Category | Count |
|
||||
|---|---|
|
||||
| Total tests passing | **127** |
|
||||
| Baseline tests | 31 |
|
||||
| Audit heuristic tests | 16 |
|
||||
| Cruft-removal tests | 11 |
|
||||
| Sub-track 5 tier2 tests | 64 |
|
||||
| Gemini thinking tests | 5 |
|
||||
| **Batched tiers passing** | **9 of 11** (2 with pre-existing flaky) |
|
||||
| Total batched files | 351 |
|
||||
| Total batched time | 292.9s |
|
||||
Reference in New Issue
Block a user