Pr135 Split Playbook
Source: docs/runbooks/pr135-split-playbook.md
# PR #135 Split Playbook
Purpose: land the remaining work from `feat/execution-plan-sweep` as focused PRs that follow one-plan-ID-per-PR.
## Current state
- Merged from sweep lineage:
- `#137` (`P4-A`)
- `#138` (P7 GTM docs additions)
- `#139` (WeighWare pattern/backlog docs additions)
- Still open, source-only:
- `#135` (`feat/execution-plan-sweep`)
Do not merge `#135` directly.
## Source commit map (from `feat/execution-plan-sweep`)
- `097af52` `P4-B` dashboard frontend
- `fac1337` `P4-C` reports backend + reporting page
- `fff841f` `P3-POLISH` shared date format utils
- `c50771d` `P3-POLISH` workflow helper extraction
- `44e8239` `P5-SPIKE` RLS feasibility report
- `e3d01fa` `P5-B` schema rename + rate columns
- `6f63c08` `P5-A` RLS policies + helper
- `45b7934` `P6-B-SPIKE` Wayfair Altana spike report
- `d2a3394` `P6-C` carrier rules DB runtime loading
- `85bd34b` `P2A-D` guest mode hardening
- `7f3846f` `P6-B` SIMA measures DB migration
- `2275930` `P6-E` tenant carrier config + agreement import
- `77e6d3e` mixed (`P2A-C` + notifications/admin changes)
- `bd3f820` `P6-F` onboarding runbook + setup API
- `15595ef` `P4-D` billing MVP
Fixup commits in sweep (use selectively, do not blanket cherry-pick):
- `46674c6`
- `f765ffb`
- `3ca472c`
- `4279351`
- `235355b`
- `522664f`
- `88b960d`
- `6714f50`
- `033bbad`
## Migration lane guardrail
Only one migration-generating PR open at a time. Before opening each migration PR:
1. run `/migration-preflight`
2. ensure prior migration PR is merged
3. rebase from latest `main`
Migration-bearing slices:
- `P2A-D`
- `P4-D`
- `P5-B`
- `P5-A`
- `P6-B`
- `P6-E`
- mixed `77e6d3e` content if split includes schema changes
## Recommended sequence from here
1. `P4-B` (already in flight externally)
2. `P4-C`
3. `P3-POLISH`
4. `P5-SPIKE` + `P6-B-SPIKE` docs (fast, no code risk)
5. Migration lane:
- `P2A-D` (or `P4-D`, pick one and serialize)
- `P4-D`
- `P5-B`
- `P5-A`
- `P6-B`
- `P6-E`
6. `P6-C`
7. `P6-F`
8. Keep mixed commit `77e6d3e` as a manual split task; do not cherry-pick as one piece.
## Cherry-pick templates
Start each slice from latest `main`:
```bash
git checkout main
git pull
git checkout -b codex/<plan-id>-<short-name>
git cherry-pick -x <commit-sha>
```
If the source commit includes unrelated files, keep only in-scope files:
```bash
git restore --staged <path>
git restore <path>
```
Then validate and push:
```bash
pnpm lint
pnpm test
git push -u origin codex/<plan-id>-<short-name>
gh pr create --base main --head codex/<plan-id>-<short-name>
```
## Per-slice extraction notes
### `P4-C` (`fac1337`)
- Keep: reports route, report proxy routes, reporting page, contract tests, API mount.
- Review: `CLAUDE.md` change is optional; keep only if route table updates are accurate.
### `P3-POLISH` (`fff841f`, `c50771d`)
- Can be one PR if labeled as single `P3-POLISH`.
- No migrations expected.
### `P4-D` (`15595ef` + selective fixes)
- Start with `15595ef`.
- Pull in only relevant fix hunks from:
- `3ca472c` (transactional invoice ops)
- `88b960d` (backend route UUID validation where billing-related)
- `522664f` (web proxy UUID validation for billing paths only)
### `P5-B` (`e3d01fa`)
- Rebase against latest `main` because `dashboard.ts` has already landed in `#137`.
- Keep rename and rate-columns scope only.
### `P5-A` (`6f63c08` + selective `4279351`/`46674c6`)
- Include `withTenant` helper + policy migration.
- Include only RLS-specific fixups from follow-up commits.
### `P6-B` (`7f3846f`)
- Verify compatibility with `P5-B` rename sequence.
- Keep parity tests and fallback behavior intact.
### `P6-C` (`d2a3394`)
- Validate no hidden migration dependencies before opening.
- Ensure ref-loader cache behavior has deterministic tests.
### Mixed commit (`77e6d3e`)
- Split manually into:
- `P2A-C` streaming/chunked ingestion
- `P2A-B` notifications
- any admin/ref-data route changes into their owning plan IDs
- Do not cherry-pick this commit directly.
## Definition of done per split PR
- One plan ID in title/scope.
- No unrelated files.
- Required checks pass.
- `docs/SESSION_LOG.md` and `docs/EXECUTION_PLAN.md` updated only if status/sequencing changes.
- If migration PR: lane is clear and preflight documented.