{
  "id": "result_migration_review_pass_20260617",
  "title": "Result Migration Sub-Track 1 (Review Pass: classify 43 UNCLEAR + INTERNAL_RETHROW sites)",
  "type": "audit + documentation (informational; no production code change)",
  "status": "completed",
  "completed": "2026-06-17",
  "priority": "A",
  "created": "2026-06-17",
  "owner": "tier2-tech-lead",
  "parent_umbrella": "result_migration_20260616",
  "sub_track_of_5": 1,
  "spec": "conductor/tracks/result_migration_review_pass_20260617/spec.md",
  "plan": "conductor/tracks/result_migration_review_pass_20260617/plan.md",
  "scope": {
    "files_affected": 11,
    "sites_to_classify": 43,
    "unclear_sites": 24,
    "internal_rethrow_sites": 19,
    "audit_script_lines_changed": "~200 (heuristics + helper methods; well above the 10-50 estimate because the helpers needed to be more robust)",
    "report_lines": "~290 (per-site decision tables + heuristics summary + verification)",
    "umbrella_spec_lines_changed": "~8 (post-review scope note added to the per-sub-track plan section)"
  },
  "depends_on": [
    "result_migration_20260616 (umbrella)",
    "exception_handling_audit_20260616 (shipped 2026-06-16; produced the original 268-site inventory)"
  ],
  "blocks": [
    "result_migration_small_files_<future_date> (needs the per-site decisions)",
    "result_migration_app_controller_<future_date> (needs the per-site decisions)",
    "result_migration_gui_2_<future_date> (needs the per-site decisions; +1 site from this review)"
  ],
  "tshirt_size": "S",
  "test_summary": {
    "new_tests": 10,
    "modified_tests": 0,
    "test_pass_count_target": "1288 + 4 + 10 (all 10 new heuristic tests pass; existing test pass count unchanged at 1288 + 4 + 0)"
  },
  "verification_criteria": [
    "docs/reports/RESULT_MIGRATION_REVIEW_PASS_20260617.md exists with per-site decision table for all 43 sites",
    "scripts/audit_exception_handling.py has 10 new heuristics for commonly-compliant patterns",
    "Re-running the audit post-heuristics: UNCLEAR count is 3 in the 43-site review scope (within the 0 +/- 2 acceptable range; 3 of 24 reclassified; the 3 remaining are complex edge cases documented in the report)",
    "conductor/tracks/result_migration_20260616/spec.md section 1.3 is updated with post-review site counts",
    "Full test pass count: all 11 test tiers PASS (tier-1, tier-2, tier-3; no regressions)",
    "Atomic commits per file: spec, plan, metadata, state, 6 UNCLEAR-file review commits, 7 INTERNAL_RETHROW-file review commits, audit script update, report, umbrella update, completion"
  ],
  "out_of_scope": [
    "Migrating any production code (sub-tracks 2-4 do that)",
    "Refactoring the audit script's overall architecture (only _classify_except / _classify_raise are touched)",
    "The 211 violations + remaining INTERNAL_RETHROW sites (sub-tracks 2-5)"
  ],
  "risks": [
    {
      "id": "R1",
      "description": "Review reveals more sites are violations than the audit's heuristics suggest",
      "mitigation": "Per-site decision table records every site; sub-tracks 2-4 absorb the scope growth"
    },
    {
      "id": "R2",
      "description": "User disagrees with a classification on a disputed case",
      "mitigation": "User is the final arbiter; no site is left without a decision"
    },
    {
      "id": "R3",
      "description": "Audit script updates introduce regressions (a new heuristic misclassifies a known site)",
      "mitigation": "Run the audit before and after each heuristic change; compare counts; all 10 new heuristics have TDD tests"
    }
  ],
  "outcomes": {
    "uncLEAR_sites_reclassified": 21,
    "uncLEAR_sites_remaining_in_review_scope": 3,
    "uncLEAR_sites_outside_review_scope": 4,
    "internal_rethrow_sites_pattern_1": 7,
    "internal_rethrow_sites_pattern_2": 2,
    "internal_rethrow_sites_compliant": 9,
    "internal_rethrow_sites_migration_target": 0,
    "migration_target_sites_for_sub_tracks": 1,
    "migration_target_site_details": "src/gui_2.py:1349 (broad except Exception + return None in _populate_auto_slices) -> sub-track 4",
    "heuristics_added": 10,
    "audit_script_bugs_documented": 3
  },
  "estimated_effort": {
    "method": "Scope + T-shirt size (per conductor/workflow.md section Tier 1 Track Initialization Rules). NO day estimates. The user / Tier 2 agent decides the actual pacing.",
    "scope": "43 sites across 11 files; 10 new audit-script heuristics; ~290 lines of report",
    "tshirt_size": "S"
  },
  "deferred_to_followup_tracks": [
    {
      "id": "result_migration_subsequent_subtracks",
      "title": "Result Migration Sub-Tracks 2-5",
      "description": "After this review pass ships, sub-tracks 2-5 pick up the migration work using the per-site decisions in the report. Sub-track 1 is the prerequisite for all of them.",
      "track_status": "unblocked as of 2026-06-17"
    },
    {
      "id": "audit_script_bug_fixes",
      "title": "Pre-existing audit script bug fixes (3 documented)",
      "description": "Three pre-existing bugs in scripts/audit_exception_handling.py were documented during the review pass: (1) visit_Try only visits children of the LAST except handler, missing raise statements in the first except; (2) render_json filters out compliant findings in non-verbose mode, making the per-file findings list inconsistent with totals; (3) render_json truncates per-file list to top 15 by violation count, hiding UNCLEAR sites in low-violation files. These bugs do not affect the summary counts and are out of scope for this track, but should be fixed in a follow-up audit-script track.",
      "track_status": "out of scope; documented for follow-up"
    }
  ]
}
