Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions .agent-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,13 @@ ALL_CONSTRAINTS/LEAD_SNAPSHOT_FEATURES/CONVERTED_WITHIN_90_DAYS moved to
consumes bundle files, not internals — no lockstep update needed (heads-up
issue #8). Next: `LTV-Pg.2` merged (#112). **LTV-M3**: `LTV-Ph` merged (#113); `LTV-Pi`
(mechanism policies) merged (#116) — **LTV-M3 complete**. **LTV-M4**
started: `LTV-Pj` (hazard functions — churn_probability with onboarding
elevation + renewal spike, expansion_probability with health modulation,
payment_failure_probability; pure/deterministic, Cox-style latent multipliers;
40 tests) opened as **#117**. Next: `LTV-Pk` (weekly simulation engine).
`LTV-Pj` (hazard functions) merged (#117). `LTV-Pk` (weekly simulation
engine — simulate_lifecycle() with per-customer RNG substreams, weekly
health/monthly invoice cadences, dunning write-off churn, renewal events,
expansion MRR chains; mechanisms.py base rates ENGINE-CALIBRATED to per-motif
year-1 churn targets, discharging the #117 calibration obligation; 25 tests)
opened as **#118** — completes **LTV-M4**. Next: `LTV-M5` (`LTV-Pl` —
calendar-anchored customer snapshot + pLTV targets).

---

Expand Down
6 changes: 3 additions & 3 deletions docs/ltv/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ protocol + registry, with the package physically reorganized into
| `LTV-M1` | Lifecycle schema foundation | `LTV-Pb`, `LTV-Pc` | #104 (Pb) |
| `LTV-M2` | Generation-scheme architecture + physical reorg | `LTV-Pd`, `LTV-Pe`, `LTV-Pf`, `LTV-Pg` | #107 (Pd), #108 (Pe), #109 (Pf.1), #110 (Pf.2), #111 (Pg.1), #112 (Pg.2) |
| `LTV-M3` | Customer population + lifecycle world | `LTV-Ph`, `LTV-Pi` | #113 (Ph) |
| `LTV-M4` | Lifecycle simulation engine | `LTV-Pj`, `LTV-Pk` | #117 (Pj) |
| `LTV-M4` | Lifecycle simulation engine | `LTV-Pj`, `LTV-Pk` | #117 (Pj), #118 (Pk) |
| `LTV-M5` | Customer snapshots + pLTV targets (both regimes) | `LTV-Pl`, `LTV-Pm` | |
| `LTV-M6` | Register LifecycleScheme + recipe + manifest/version | `LTV-Pn`, `LTV-Po` | |
| `LTV-M7` | Validation + regression-metric calibration | `LTV-Pp` | |
Expand Down Expand Up @@ -173,13 +173,13 @@ Total: ~19 PRs across 9 milestones.

## `LTV-M4` — Lifecycle simulation engine

- [ ] **`LTV-Pj`** — `feat(lifecycle): churn / expansion / payment hazards` (**PR #117**).
- [x] **`LTV-Pj`** — `feat(lifecycle): churn / expansion / payment hazards` (**PR #117**).
Weibull churn hazard with renewal-date spike, expansion propensity (the
heavy-tail generator for pLTV), payment failure + dunning.
- Tests: hazard shape over tenure, renewal spike, dunning escalation,
expansion MRR-delta bounds.
- Labels: `type: feature`, `layer: mechanisms`
- [ ] **`LTV-Pk`** — `feat(lifecycle): weekly simulation engine`.
- [ ] **`LTV-Pk`** — `feat(lifecycle): weekly simulation engine` (**PR #118**).
`simulate_lifecycle()`: weekly loop per customer through `observation_date +
730d (+ early-regime buffer)` so all three windows are fully simulated (D6);
emits `subscription_events`, `health_signals`, `invoices`; updates terminal
Expand Down
Loading
Loading