Timeline of all health-score formulas — active, candidates in shadow period, retired. Each candidate must run at least its min_shadow_days before promotion. Save new candidates from /health-lab/simulator.
v3ActiveV3 canonical formula. Shipped 2026-04-20 via M082-M101 cluster. min_shadow_days=0 by exception — normal candidates require 30 days. See docs/product/health-score-v3-handoff.md.
{
"pillars": [
{
"max": 30,
"name": "activation",
"core_crm_points": 30,
"any_feature_points": 15
},
{
"max": 25,
"name": "engagement",
"saturation_days": 12
},
{
"max": 20,
"name": "depth",
"feature_cap": 5
},
{
"max": 10,
"name": "team",
"solo_points": 5,
"multi_user_points": 10
},
{
"max": 15,
"name": "momentum",
"thresholds": {
"stable": -0.1,
"declining": -0.3,
"improving": 0.1
}
}
],
"trial_max": 85,
"thresholds": {
"steady": 25,
"healthy": 56,
"thriving": 80
},
"subscription_max": 100,
"core_crm_features": [
"contacts",
"conversations",
"opportunities"
],
"momentum_bootstrap": 10
}v3.3Candidate← v3Honeymoon-gap test — R_018 contraction + R_025 churn, scoped to recently-converted subs (is_trial=false AND days_since_trial_converted <= 100). AI triage copilot flagged as top 2 high_signal candidates on 2026-04-24. min_shadow_days=14 to validate fast once outcomes mature ~2026-05-05. Legacy v3.1-profile-* left running for comparison.
{
"rules": [
{
"id": "R_honeymoon_contraction",
"lift": 0.26957267557313186,
"delta": -11,
"notes": "Post-trial honeymoon — subs within 100d of conversion, contraction outcome.",
"source": "rule_miner",
"p_value": 3.664699727483213e-292,
"support": 972,
"condition": {
"op": "AND",
"operands": [
{
"op": "EQ",
"field": "is_trial",
"value": false
},
{
"op": "LTE",
"field": "days_since_trial_converted",
"value": 100
}
]
},
"confidence": 0.7695726755731319,
"discovered_at": "2026-04-24",
"source_rule_id": "R_candidate_2026-04-24_018"
},
{
"id": "R_honeymoon_churn",
"lift": 0.24907340781171491,
"delta": -10,
"notes": "Post-trial honeymoon — subs within 100d of conversion, churn outcome.",
"source": "rule_miner",
"p_value": 4.778066542692069e-270,
"support": 972,
"condition": {
"op": "AND",
"operands": [
{
"op": "EQ",
"field": "is_trial",
"value": false
},
{
"op": "LTE",
"field": "days_since_trial_converted",
"value": 100
}
]
},
"confidence": 0.7490734078117149,
"discovered_at": "2026-04-24",
"source_rule_id": "R_candidate_2026-04-24_025"
}
],
"pillars": [
{
"max": 30,
"name": "activation",
"core_crm_points": 30,
"any_feature_points": 15
},
{
"max": 25,
"name": "engagement",
"saturation_days": 12
},
{
"max": 20,
"name": "depth",
"feature_cap": 5
},
{
"max": 10,
"name": "team",
"solo_points": 5,
"multi_user_points": 10
},
{
"max": 15,
"name": "momentum",
"thresholds": {
"stable": -0.1,
"declining": -0.3,
"improving": 0.1
}
}
],
"trial_max": 85,
"thresholds": {
"steady": 25,
"healthy": 56,
"thriving": 80
},
"subscription_max": 100,
"core_crm_features": [
"contacts",
"conversations",
"opportunities"
],
"momentum_bootstrap": 10
}v3.1-profile-trialCandidate← v3segmented (uncalibrated prior)Prior weights based on archived correlation analysis (2026-04-20). Requires Phase 0 validation (see docs/product/health-score-segmentation-analysis.md) + 30-day shadow before promotion.
{
"notes": "Trial profile — activation-dominant, no momentum, boosted team points.",
"weights": {
"team": 15,
"depth": 20,
"momentum": 0,
"activation": 40,
"engagement": 25
},
"core_crm": [
"contacts",
"conversations",
"opportunities"
],
"team_pts": {
"solo": 5,
"multi": 15
},
"saturation": {
"engagement_days": 8,
"depth_feature_cap": 5
},
"thresholds": {
"steady": 25,
"healthy": 56,
"thriving": 80
},
"segment_filter": {
"applies_to": "trial",
"was_trial_eq": true,
"tenure_days_max": null
},
"momentum_thresholds": {
"stable": -0.1,
"declining": -0.3,
"improving": 0.1
}
}v3.1-profile-earlyCandidate← v3segmented (uncalibrated prior)Same pillar maxima as v3 canonical ; diverges on saturation_days (8 vs 12) and momentum declining threshold (-0.2 vs -0.3) for earlier alert on disengaging early-stage subs. Requires Phase 0 validation.
{
"notes": "Early subscription (≤90j tenure) — tighter momentum detection, faster engagement saturation.",
"weights": {
"team": 10,
"depth": 20,
"momentum": 15,
"activation": 30,
"engagement": 25
},
"core_crm": [
"contacts",
"conversations",
"opportunities"
],
"team_pts": {
"solo": 5,
"multi": 10
},
"saturation": {
"engagement_days": 8,
"depth_feature_cap": 5
},
"thresholds": {
"steady": 25,
"healthy": 56,
"thriving": 80
},
"segment_filter": {
"applies_to": "early_subscription",
"was_trial_eq": false,
"tenure_days_max": 90
},
"momentum_thresholds": {
"stable": -0.1,
"declining": -0.2,
"improving": 0.1
}
}v3.1-profile-matureCandidate← v3segmented (uncalibrated prior)Momentum bumped to 30 (from 15) reflecting §3.5 archive insight that slope_30d is the strongest pre-churn signal in mature cohorts. Activation reduced to 20 because core-CRM use is near-universal at M+3+. Requires Phase 0 validation.
{
"notes": "Mature subscription (>90j tenure) — momentum-dominant, activation de-weighted since it saturates in this cohort.",
"weights": {
"team": 10,
"depth": 15,
"momentum": 30,
"activation": 20,
"engagement": 25
},
"core_crm": [
"contacts",
"conversations",
"opportunities"
],
"team_pts": {
"solo": 5,
"multi": 10
},
"saturation": {
"engagement_days": 12,
"depth_feature_cap": 5
},
"thresholds": {
"steady": 25,
"healthy": 56,
"thriving": 80
},
"segment_filter": {
"applies_to": "mature_subscription",
"was_trial_eq": false,
"tenure_days_min": 91
},
"momentum_thresholds": {
"stable": -0.1,
"declining": -0.3,
"improving": 0.1
}
}v2RetiredV2 4-factor formula. Retired 2026-04-20 after correlation analysis showed near-zero predictive power (corr=0.10 trial conversion). Replaced by v3.
{
"pillars": [
{
"max": 25,
"name": "login"
},
{
"max": 35,
"name": "features"
},
{
"max": 15,
"name": "support",
"constant": true
},
{
"max": 25,
"name": "revenue"
}
],
"thresholds": {
"steady": 25,
"healthy": 50,
"thriving": 75
}
}v1RetiredLegacy 3-factor formula, retired when M018 introduced v2.
{
"pillars": [
{
"max": 50,
"name": "login"
},
{
"max": 30,
"name": "features"
},
{
"max": 20,
"name": "trend"
}
],
"thresholds": {
"steady": 25,
"healthy": 50,
"thriving": 75
}
}