Context
The owner added a partner perks page (partners pay to be listed) and a startup programme (RV-52: incubator and accelerator members from an editable list, plus software startups, get 50% and AI credits for 12 months). Review round 3 (M3-6, M3-7, R3-SO-18) found no perk record, no non-price benefits on an offer and no stacking rule: Founding, startup, Switcher and annual discounts together could reach zero.Decision
- Perk listings.
@stackra/registryadds the listing roleperkbesideapp,connectorandagency(listing roles, not the Integration roles of 0355). A perk never installs. It is redeemed bycode,linkorlead; a lead sends only the listing’s named fields and only after the tenant admin consents (US-62). It is shown when approved and listed for the tenant’s pack and product. Its listing fee is the flat fee of itsfee-schedule:<name>in force on the period start, invoiced by OS billing to the partner’s developer tenant (perkListingFee); no schedule means a free listing. - Offer benefits. An offer holds
benefits[]of four kinds:percent(basis points),credit_grant(credit kind, units, period),free_migrationandmodule_grant, each but the migration for a number of months or while the offer holds; andeligibility(packs, products, a rule-set key, a cap per pack).applyOffersgives one month’s price and grants. - Startup eligibility is
rule-set:os:startup-perk-eligibility, seeded in theRuleSetPack$shape: incubator members, or software companies incorporated in the last 730 days. The incubator list is the editablesettings:os:startup-incubatorsrecord (shipped empty); OS billing sets the factorganisation.incubator_memberfrom it. The 50% and AI credits areoffer:startuprows, not rule outcomes. - Stacking is
rule-set:os:offer-stacking: an offer the rule matches stacks; of the rest, the single best (largest percentage) applies and the others are refused and reported (stackOffers). The seed lets onlyoffer:annualstack. - No new dependency.
@stackra/registryand@stackra/pricingdo not import@stackra/rules; OS billing runsdecideand passes the answers in.
Consequences
Perks, offers, eligibility and stacking are edited in the admin. OS billing owns the perk-redemption workflow, the consent log and the facts the rule sets read.Enforcement
Unit tests of the perk functions and schema, the offer functions, and a data test of the seeds (packages/application/registry/src/core/__tests__/offer-seeds.test.ts). planned — seeding checks the rule sets
against the OS consumer’s Rules.
Supersedes and sources
Supersedes: none. Sources: notes/handover/review-round-3/markets-money.md (M3-6, M3-7);
notes/handover/review-round-3/defaults-applied.md (R3-SO-18); owner RV-52.