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
2 changes: 2 additions & 0 deletions plans/plans.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,12 @@
// promised" (no scheduled backups on this tier). FIX-H #Q50 (B36).
RPOMinutes int `yaml:"rpo_minutes"`

// RTOMinutes — Recovery Time Objective. The target wall-clock

Check warning on line 100 in plans/plans.go

View workflow job for this annotation

GitHub Actions / typos

"RTO" should be "TO".
// duration between "operator presses restore" and "data is back
// online" for a tier. Includes the worker tick + pg_restore +
// post-restore verification. 0 means "RTO not promised" (no

Check warning on line 103 in plans/plans.go

View workflow job for this annotation

GitHub Actions / typos

"RTO" should be "TO".
// self-serve restore available on this tier). FIX-H #Q50 (B36).
RTOMinutes int `yaml:"rto_minutes"`

Check warning on line 105 in plans/plans.go

View workflow job for this annotation

GitHub Actions / typos

"rto" should be "to".

Check warning on line 105 in plans/plans.go

View workflow job for this annotation

GitHub Actions / typos

"RTO" should be "TO".

// VectorStorageMB is the maximum storage per pgvector-enabled Postgres
// database in megabytes. Mirrors PostgresStorageMB because pgvector
Expand Down Expand Up @@ -534,7 +534,7 @@
return p.Limits.RPOMinutes
}

// RTOMinutes returns the per-tier Recovery Time Objective in minutes.

Check warning on line 537 in plans/plans.go

View workflow job for this annotation

GitHub Actions / typos

"RTO" should be "TO".
// 0 = "not promised" (the tier doesn't have self-serve restore, so
// the time-to-restore is operator-driven and unbounded). Surfaced on
// GET /api/v1/capabilities. FIX-H #Q50.
Expand Down Expand Up @@ -886,6 +886,7 @@
alerts: true
custom_domains: true
sla: true
dedicated: true # Team gets dedicated infra like Growth (bug bash #12)
# team_yearly mirrors team exactly. $1990/yr = $199 x 10 ("2 months free" vs $199 x 12).
team_yearly:
display_name: "Team (yearly)"
Expand Down Expand Up @@ -920,6 +921,7 @@
alerts: true
custom_domains: true
sla: true
dedicated: true # mirrors team (bug bash #12)
growth:
display_name: "Growth"
price_monthly_cents: 9900
Expand Down
2 changes: 2 additions & 0 deletions plans/plans_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,8 @@ func TestRegistry_TierHelpers(t *testing.T) {
assert.Equal(t, "Pro", r.DisplayName("pro"))
assert.False(t, r.IsDedicatedTier("pro"))
assert.True(t, r.IsDedicatedTier("growth"))
// bug bash #12: Team ($199, above Growth) also gets dedicated infra.
assert.True(t, r.IsDedicatedTier("team"))
// W11: hobby_plus is the mid-tier — $19/mo, custom domains, 2 apps.
assert.Equal(t, 1900, r.PriceMonthly("hobby_plus"),
"hobby_plus monthly price must be $19/mo (1900 cents)")
Expand Down
Loading