Skip to content

Commit 9271bf8

Browse files
BunsDevCopilot
andauthored
docs: GitHub Marketplace listing runbook — plans, requirements, launch sequence (#67)
The go-to-market half of billing entitlements: which plans get listed (Starter/ Team with 14-day trials; Dedicated stays sales-led off-Marketplace), the listing requirements checklist mapped to what the adapter already enforces, listing copy drawn from HOSTED.md, and the launch sequence including the require_plan flip with beta grandfathering. Notes the plan-name classification constraint and the Stripe fallback. Signed-off-by: Val Alexander <bunsthedev@gmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 05c3725 commit 9271bf8

2 files changed

Lines changed: 103 additions & 1 deletion

File tree

docs/marketplace-listing.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# GitHub Marketplace listing plan
2+
3+
How the hosted OpenCoven GitHub App gets listed, priced, and paid on GitHub
4+
Marketplace. The tier matrix and dollar figures live in
5+
[pricing.md](pricing.md); the enforcement behind every promise — including
6+
purchase-driven entitlements — is already in the adapter. This document is
7+
the launch runbook for the listing itself.
8+
9+
## Why Marketplace (and not Stripe first)
10+
11+
- The buyer's unit is the **GitHub App installation** — exactly what
12+
Marketplace sells. Choose plan → install → billed on the existing GitHub
13+
invoice. No card form, no separate account, no procurement detour.
14+
- `marketplace_purchase` webhooks feed the adapter's entitlement tables
15+
directly (account plan + installation mapping), so a purchase provisions
16+
service with **zero operator action**.
17+
- Native 14-day free trials match the launch posture in
18+
[pricing.md](pricing.md) without building trial logic.
19+
20+
**Fallback:** if listing review stalls, Stripe Checkout keyed to the
21+
installation id ships in days — the entitlement layer is billing-source
22+
agnostic (`account_plans.source`), only the webhook origin differs.
23+
24+
## Plans to publish
25+
26+
| Marketplace plan | Price | Trial | Maps to |
27+
|---|---|---|---|
28+
| Hosted Starter | $99/mo (flat) | 14 days | `starter`: 1 familiar, 25 tasks/day, 1 concurrent |
29+
| Hosted Team | $399/mo (flat) | 14 days | `team`: up to 4 familiars, 150 tasks/day, 4 concurrent |
30+
31+
Notes:
32+
33+
- **Plan names must contain "Starter" / "Team"** — the adapter classifies
34+
plan names by substring, and unknown names fail safe to Starter limits.
35+
Keep tier words in any future rename.
36+
- **Hosted Dedicated is not listed.** Custom contracts, annual billing, and
37+
SLAs don't fit Marketplace plan mechanics; Dedicated is sales-led with
38+
direct invoicing, provisioned via an explicit `[[installations]]` entry
39+
(which always wins over plan defaults).
40+
- No free Marketplace plan: Community (self-host) is the free tier.
41+
42+
## Requirements checklist
43+
44+
Marketplace listing requirements, mapped to their current state:
45+
46+
- [x] App handles `marketplace_purchase` events (purchase, change, cancel,
47+
trial) — adapter webhook route, idempotent + audited.
48+
- [x] Plan limits enforced server-side — intake daily cap, claim-time
49+
concurrency, `require_plan` paid gate.
50+
- [x] Customer data deleted on uninstall — delete-on-uninstall purge.
51+
- [ ] App set **public** (the hosted App only; the self-host manifest in
52+
[app-manifest.json](app-manifest.json) stays private-by-default).
53+
- [ ] Publisher verification for the OpenCoven org (profile complete,
54+
2FA enforced, domain verified).
55+
- [ ] Support URL and contact email.
56+
- [ ] Privacy policy and terms of service URLs (data boundaries are already
57+
written down in [HOSTED.md](../HOSTED.md) — the policy formalizes them).
58+
- [ ] Pricing plans created in the listing matching the table above.
59+
- [ ] Listing draft submitted for review.
60+
61+
## Listing copy (from HOSTED.md)
62+
63+
- **Name:** OpenCoven — hosted familiars for GitHub
64+
- **Tagline:** Assign it like a teammate. Get a PR back.
65+
- **Description:** OpenCoven lets your team deploy a trusted familiar to
66+
GitHub. It knows your repo context, follows your skills and review norms,
67+
drafts PRs under Cave oversight, and gets better as it works with your
68+
team. Bring your own model keys — we never mark up tokens. What you buy is
69+
managed reliability: durable queue, isolated workers, audit trail, familiar
70+
memory, and multi-familiar routing.
71+
- **Categories:** AI Assistants / Code review / Project management
72+
- **Screenshots:** issue assignment → Check Run → familiar-voice draft PR →
73+
Cave dashboard (record from the reference demo, `examples/demo/run-demo.sh`).
74+
75+
## Hosted deployment configuration
76+
77+
The hosted control plane runs with:
78+
79+
```toml
80+
[billing]
81+
require_plan = true # installations without an entitled plan (or an
82+
# explicit [[installations]] entry) are recorded
83+
# ignored:no_plan
84+
```
85+
86+
Self-hosted deployments never set this; the default is off.
87+
88+
## Launch sequence
89+
90+
1. Verify the OpenCoven publisher org; add support/privacy/terms URLs.
91+
2. Make the hosted App public; confirm `marketplace_purchase` deliveries
92+
reach the production webhook (Marketplace sends them to the App's
93+
webhook URL).
94+
3. Create the two paid plans with 14-day trials; enable the OSS-organization
95+
discount decision from [pricing.md](pricing.md) open decisions if
96+
approved.
97+
4. Submit the listing for review; run one end-to-end purchase in a sandbox
98+
org (purchase → trial → task accepted; cancel → `ignored:no_plan`).
99+
5. Flip `require_plan = true` on the hosted deployment at listing go-live,
100+
with existing beta installations grandfathered via `[[installations]]`
101+
entries until they purchase.

docs/pricing.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
Status: **proposed** — numbers below are a launch proposal for review, not a
44
commitment. Everything a tier promises maps to an enforcement knob that
55
already exists in the adapter, so the price sheet can never drift ahead of
6-
the product.
6+
the product. The Marketplace listing runbook that publishes these tiers
7+
lives in [marketplace-listing.md](marketplace-listing.md).
78

89
## Principles
910

0 commit comments

Comments
 (0)