---
title: Split game path play outcomes into owned parts
type: task
status: planned
description: >-
  Protection, run parts (yards before and after contact) and pass parts (throw and catch, yards
  after catch), each from its owner's own plays tilted by the opponent shift, composed in
  resolution, plus game conditions declared per measure.
base_uri: user:task/league/split-game-path-outcomes-into-owned-parts.md
created_at: '2026-11-03T16:35:01.675Z'
entity_id: 201766d0-8b7c-4df7-adee-f1e3ed6c87bc
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: High
public_read: true
relations:
  - subtask_of [[user:task/league/build-game-path-owner-profile-foundation.md]]
  - blocked_by [[user:task/league/draw-game-path-roles-personnel-and-lineup.md]]
tags:
  - user:tag/league-xo-football.md
  - user:tag/nfl-betting.md
updated_at: '2026-11-03T21:27:23.105Z'
visibility_analyzed_at: '2026-11-05T23:50:28.579Z'
---

# Split game path play outcomes into owned parts

A phase of [[user:task/league/build-game-path-owner-profile-foundation.md]], which holds the overview, background, design, assumptions and notes this plan relies on; read its Design and Notes first. Paths are relative to `repository/active/league/` unless they start with a user-base directory.

## Plan

### Outcome parts

Every defense shift on a part follows the Design's combination rule: measured against each faced offense's own plays of the part in its other games (the faced-offense loader and expectation cells on held branch `engine/███████████████████`), drawn per path from the defense seat's resampled games with a two-game minimum, applied by reweighting the owner's own plays so the part's rate or location moves by the drawn shift, and replacing `_against_look` or the defense's event rates wherever they carry the same part. Once the pass and run parts carry the draw and loader, retire the held league branches `engine/opponent-shift`, `engine/opponent-shift-replace-look`, `engine/███████████████████` and `engine/opponent-shift-draw-replace-look` and their worktrees (verify: `git branch --list 'engine/opponent-shift*'` returns nothing).

- [ ] **Protection part**
  - File: new `stages/protection.mjs`; the event stage
  - Purpose: pressure gets a consumer.
  - Changes: clean or pressured, with time, from the line group's own dropbacks tilted by the rush group's opponent shift; the result conditions the throw.
  - Verify: a spec shows a pressured snap draws from pressured throws; the forward gate passes on the passing families.

- [ ] **Run parts**
  - File: new `stages/run-outcome.mjs`
  - Changes: yards before contact from the offense's own runs of the concept and gap, tilted by the defense's stuff and yards-before-contact shifts; yards after contact and broken tackles from the carrier's own runs, tilted by the defense's tackling; a thin part draws the whole real run.
  - Purpose: a run's yards answer to the line, the carrier and the defense separately.
  - Verify: the forward gate passes on the rushing families; the share of runs drawn whole is reported.

- [ ] **Pass parts**
  - File: new `stages/pass-outcome.mjs`
  - Purpose: a pass's result answers to protection, the quarterback-target group, coverage and the receiver separately.
  - Changes: throw and catch from the quarterback and target group's own throws, clean or pressured, tilted by the defense's completion shift against coverage (log odds); yards after catch from the receiver's own catches, tilted by the defense's yards-after-catch shift (location).
  - Verify: the forward gate passes on the receiving and passing families.

- [ ] **Resolution composes the parts**
  - File: `stages/resolution.mjs`, `libs-shared/nfl-game-path-simulation/build-settled-game-path-snaps.mjs`, `libs-server/nfl-game-path-simulation/read-game-path-explorer.mjs`
  - Purpose: one play from its parts, readable by every consumer.
  - Changes: compose clock, first-down, touchdown and censoring flags; record one source play per part in new per-part source columns; keep runs written before this step readable; hand the explorer drill-down change to the `██████████████████████████████` lane by message.
  - Verify: a spec composes a run and a pass and checks every flag; a spec reads a pre-change run fixture; replay gate passes; the forward gate passes.

### Game conditions

- [ ] **Conditions declared per measure**
  - File: `libs-shared/nfl-game-path-profiles/measure-registry.mjs`; the play and kick stages
  - Purpose: roof, wind and venue enter only where they produce a quantity, through the owner's own plays.
  - Changes: each measure declares which conditions produce it; a producing condition filters the owner's own plays at the measure's minimum, and below it the measure widens or refuses.
  - Verify: a spec shows a windy game narrowing to own windy plays and refusing below the minimum; the forward gate passes.
