# Groundball Chart Reference - Official Source of Truth

**Source**: User-provided images from official rulebook charts
**Date Created**: 2025-11-02
**Purpose**: Comprehensive reference for validating all groundball test expectations

---

## GroundballResultType Reference (1-13)

```
1.  BATTER_OUT_RUNNERS_HOLD
2.  DOUBLE_PLAY_AT_SECOND - Batter out, runner on 1st out - double play! Other runners advance 1 base
3.  BATTER_OUT_RUNNERS_ADVANCE
4.  BATTER_SAFE_FORCE_OUT_AT_SECOND - Batter safe, runner on 1st forced out at 2nd. Other runners advance 1 base
5.  HIT_TO_2B/SS - Batter out, runners advance 1 base. Hit anywhere else: batter out, runners hold
6.  HIT_TO_1B/2B - Batter out, runners advance 1 base. Hit anywhere else: batter out, runners hold
7.  BATTER_OUT_FORCED_ONLY - Batter out, runner holds (unless forced)
8.  BATTER_OUT_FORCED_ONLY_ALT - Batter out, runner holds (unless forced)
9.  LEAD_HOLDS_TRAIL_ADVANCES - Batter out, runner on 3rd holds, runner on 1st advances 1 base
10. DOUBLE_PLAY_HOME_TO_FIRST - Home to first double play, other runners advance
11. BATTER_SAFE_LEAD_OUT - Batter safe, lead runner is out, other runners advance 1 base
12. DECIDE - Hit to 1b/2b: batter is out, runners advance. Hit to 3b: batter is out, runners hold. Hit to ss/p/c: chance for DECIDE
13. CONDITIONAL_DOUBLE_PLAY - Hit to c/3b: double play at 3rd and 2nd base, batter safe. Otherwise: double play at 2nd and 1st base
```

---

## G1 Chart (Groundball Type A - Fast Grounder)

### Simplified View from Image #1

| Bases Occupied | Infield Normal | Infield In |
|----------------|----------------|------------|
| Empty          | 1              | N/A        |
| 1st            | 2              | 2          |
| 2nd            | 12             | 12         |
| 3rd            | 3              | 1          |
| 1st & 2nd      | 13             | 2          |
| 1st & 3rd      | 2              | 1          |
| 2nd & 3rd      | 3              | 1          |
| Loaded         | 2              | 10         |

**Notes**:
- Image #1 appears to show a simplified chart with one result per (base situation, defensive position)
- May represent GBA (Groundball A) specifically
- Need clarification: Are GBB and GBC different for G1, or is G1 always the same result?

---

## G2 Chart (Groundball Type B - Medium Grounder)

### Simplified View from Image #2

| Bases Occupied | Infield Normal | Infield In |
|----------------|----------------|------------|
| Empty          | 1              | N/A        |
| 1st            | 4              | 4          |
| 2nd            | 12             | 12         |
| 3rd            | 5              | 1          |
| 1st & 2nd      | 4              | 4          |
| 1st & 3rd      | 4              | 1          |
| 2nd & 3rd      | 5              | 1          |
| Loaded         | 4              | 11         |

---

## G3 Chart (Groundball Type C - Slow Grounder)

### Simplified View from Image #3

| Bases Occupied | Infield Normal | Infield In |
|----------------|----------------|------------|
| Empty          | 1              | N/A        |
| 1st            | 3              | 3          |
| 2nd            | 12             | 3          |
| 3rd            | 3              | DECIDE     |
| 1st & 2nd      | 3              | 3          |
| 1st & 3rd      | 3              | 3          |
| 2nd & 3rd      | 3              | DECIDE     |
| Loaded         | 3              | 11         |

**Note**: "DECIDE" in chart may map to Result 12 (DECIDE_OPPORTUNITY)

---

## Detailed Infield Back Chart (Image #4)

This appears to be a more detailed breakdown showing GBA, GBB, GBC variations:

| Bases Occupied | GBA | GBB | GBC | Notes |
|----------------|-----|-----|-----|-------|
| Empty          | 1   | 1   | 1   | Batter out, runners hold |
| 1st            | 2   | 4   | 3   | GBA: DP. GBB: Batter safe, force out at 2nd. GBC: Batter out, advance |
| 2nd            | 6   | 6   | 3   | GBA/B: Hit to right side conditional. GBC: Advance |
| 3rd            | 5   | 5   | 3   | GBA/B: Hit to middle infield conditional. GBC: Advance |
| 1st & 2nd      | 2   | 4   | 3   | GBA: DP. GBB: Batter safe, force. GBC: Advance |
| 1st & 3rd      | 2   | 4   | 3   | Same as 1st only |
| 2nd & 3rd      | 5   | 5   | 3   | GBA/B: Conditional middle IF. GBC: Advance |
| Loaded         | 2   | 4   | 3   | GBA: DP. GBB: Batter safe, force. GBC: R3 holds, R1 advances |

---

## Detailed Infield In Chart (Image #5)

| Bases Occupied | GBA | GBB | GBC | Notes |
|----------------|-----|-----|-----|-------|
| 3rd            | 7   | 1   | 8   | Hit to 1b/2b: runners advance. Hit to 3b: hold. ss/p/c: DECIDE |
| 1st & 3rd      | 7   | 9   | 8   | GBB: Lead holds, trail advances |
| 2nd & 3rd      | 7   | 1   | 8   | Hit to c/3b: double play at 3rd and 2nd |
| Loaded         | 10  | 11  | 11  | GBA: DP home to 1st. GBB/C: Batter safe, lead out |

---

## Questions for Validation

1. **Chart Relationship**:
   - Are Images #1, #2, #3 showing GBA results specifically?
   - Or are they showing a simplified "most common" result?
   - Do G1/G2/G3 have different results for GBA/GBB/GBC internally?

2. **Mapping GBA/GBB/GBC to G1/G2/G3**:
   - Does G1 always use GBA column from detailed chart?
   - Does G2 always use GBB column?
   - Does G3 always use GBC column?
   - Or is the relationship different?

3. **Test Naming Convention**:
   - Current tests use outcome names: GROUNDBALL_A, GROUNDBALL_B, GROUNDBALL_C
   - Do these map to: G1=GBA, G2=GBB, G3=GBC?
   - Or to: G1/G2/G3 (which then have internal GBA/GBB/GBC logic)?

---

## Current Understanding (To Be Validated)

Based on the code in `runner_advancement.py`, it appears:
- Tests use `PlayOutcome.GROUNDBALL_A/B/C`
- Code maps these to `gb_letter = 'A', 'B', or 'C'`
- Code has charts for "Infield Back" and "Infield In"
- Code selects result based on (gb_letter, base_situation, defensive_position)

**Hypothesis**:
- The detailed charts (Images #4 and #5) show the actual GBA/GBB/GBC breakdown
- The G1/G2/G3 simplified charts (Images #1, #2, #3) might be showing a different categorization
- OR they might be showing just one column from the detailed charts

**Need clarification from user** before proceeding with test fixes.

---

## Next Steps

1. ✅ Transcribe all charts (DONE)
2. ⏳ Get user clarification on chart relationship
3. ⏳ Map each current test to correct expected result
4. ⏳ Fix all test expectations
5. ⏳ Verify all 59 tests pass with correct expectations
