openvibers/openvibe.contracts Commits
ADR-055 (proposed): money and the inventory — primary sales first, gifting next, trading and a market stay closed, never paid chance (#73)
Changes
nnew file mode 100644@@@ -0,0 +1,96 @@++# ADR-055: Money and the inventory — primary sales first, trading later, never paid chance++++**Status:** Proposed 2026-10-09 (plan track T21, step 6), for the owner's decision. It would amend ADR-054 §5 (the++money boundary) within ADR-012 (economic classification) and ADR-025 (no trading between people without a new ADR).++Nothing here is built until the owner accepts it and the open questions at the end are answered.++++## Context++++- The inventory (ADR-054) is live and free. Items are granted for what people do: OpenVibe.Quest rewards (§3++ grantors), staff grants, and creators giving their Workshop badges (§6).++- The owner wants a Steam-like economy: creators earn from what they make, people trade and a market prices items.++- Three ADR-012 rules decide what is possible:++ - **Rule 3:** CREDIT (Vibes bought with money) becomes MONEY only by being given to someone, such as a creator.++ - **Rule 5:** LOYALTY (OpenCoins, channel points) is never bought, never converted and never moved between people.++ - **Rule 6:** cosmetics are not tradable, and a paid cosmetic is an ENTITLEMENT bought through Billing.++- Billing is the only ledger (ADR-012 rule 1). Its cutover from Live waits on O1, the PowerChat webhook re-point.++++## Decision (proposed)++++The money arrives in three phases. Each starts only when the previous one has run cleanly and the owner says so.++++### Phase A — primary sales (fits ADR-012 as written)++++- **Who sells:** an item's issuer may put a price on a published definition: a Workshop creator on their badge, or Live++ on its cosmetics. The price is in **Vibes** or in **OpenCoins**, never both, and the issuer chooses.++- **Vibes:** the buyer spends CREDIT, and Billing books the sale as an ENTITLEMENT.++ - A creator's share goes to `creator_payable:<subject>` (MONEY, ADR-012 rule 3); the platform keeps the rest.++ - Proposed split: 80% creator and 20% platform, the same as Tips.++ - Inventory grants the instance with origin `bought` only after Billing confirms the purchase, keyed by the Billing++ intent id.++ - A refund or chargeback revokes that instance. Self-purchase (a creator buying their own item) is refused by++ subject.++- **OpenCoins:** the buyer spends LOYALTY on Network's wallet. Nobody is paid, and the instance's origin is++ `redeemed`. This is a shop, not a conversion: rule 5 holds, because OpenCoins never become money or move to another++ person.++- **Limits and honesty:**++ - The supply cap stays the issuer's; a sold-out item stays sold out.++ - Prices are shown before checkout.++ - A purchase limit per person per day applies (proposed: 20).++ - Rarity is still a label, never odds.++- **Contracts:** `inventory/definition@1` gains `price` (`{ currency: vibes|opencoins, amount }`); instance origins++ gain `bought` and `redeemed`; Billing gains an `inventory` purchase intent; events gain `inventory.item.bought`.++++### Phase B — gifting between people (needs an ADR-012 rule 6 amendment)++++- A person may give an item they own to another person, for nothing in return, if the issuer marked it `giftable`.++- A gifted item cannot be gifted again for 7 days.++- No value moves, so this stays outside MONEY, CREDIT and LOYALTY. It does change "cosmetics are not tradable", so++ rule 6 is amended to: "cosmetics are not sold between people; an issuer may let its items be gifted".++++### Phase C — trading and a market (stays closed)++++- Swaps between people, listings, escrow, a market price and cash value for items stay closed under ADR-025.++- Opening them needs its own ADR after legal review: virtual-item marketplaces and money transmission per country,++ KYC for sellers, VAT, disputes, fraud, wash trading and minors.++- This ADR does not open them.++++### Never++++- **No paid chance.** No cases, crates, loot boxes, keys, gacha or random rewards bought with Vibes or OpenCoins, in++ any phase, in any country. Free drops with published odds stay allowed.++- No item is ever converted into Vibes, OpenCoins or money by the platform, and no "sell back to OpenVibe".++++## Alternatives considered++++- **Open trading and a market at once, Steam-style:** rejected for now. It brings money movement between people,++ escrow, disputes and regulatory exposure (ADR-025) before there is an owner, a review process or legal advice.++- **Sales in OpenCoins only:** creators would earn nothing real, which is the owner's point of the Workshop.++- **Sales in Vibes only:** this would leave out the network-wide earn-and-spend loop that OpenCoins exist for.++- **Paid random rewards with odds published:** rejected outright. It is a regulated or banned practice in several++ countries and contrary to the network's honesty rule.++++## Consequences++++- Phase A gives creators income and Live a cosmetics shop again (priced in OpenCoins or Vibes) without new++ money-transmission exposure. All money stays in Billing's journal.++- Inventory stays a non-financial service: it records origins and listens for Billing's confirmations, and holds no++ balance.++++## Open questions for the owner++++1. Accept phase A? Is the creator/platform split 80/20?++2. Should Live's own cosmetics be sold, and in which currency (OpenCoins, Vibes, or each per item)?++3. Minimum age for buying with Vibes: Network has no age data today. Does Phase A need an age attestation at checkout?++4. Phase B (gifting): accept the rule 6 amendment?++5. Does phase A wait for the Billing cutover (O1), as this ADR assumes, so that Vibes purchases land in Billing's++ ledger rather than Live's?++++## Acceptance tests (when built)++++- A Vibes purchase grants exactly one `bought` instance per Billing intent; a replay grants nothing; a refund revokes.++- A creator's share lands in `creator_payable`; self-purchase is refused.++- An OpenCoins purchase debits Network's wallet once and grants a `redeemed` instance. No route converts an item, Vibes++ or OpenCoins into money.++- A route-inventory test fails on any endpoint that sells a random reward, lists an item between people, or holds++ escrow (phase C stays closed).@@@ -48,3 +48,4 @@ Platform-wide decisions from the OpenVibe development roadmap (section 10). Each| [ADR-048](ADR-048-services-control-plane.md) | The Services control plane: Services aggregates authorities and owns no other service's rows; every console action is a `common.resource-control-request@1` to the owning authority, answered with `common.resource-control-result@1` (idempotency keys, `confirmation_id` for sensitive actions); OVRN `ovrn:<service>:<project_id>:<type>/<id>` (`common.resource-name@1`) is the one cross-service resource name | Accepted 2026-10-04 (plan T13) || [ADR-053](ADR-053-website-host-boundary.md) | The Website/Host boundary: OpenVibe.Website owns authoring (projects, pages, revisions, builds, Media asset pointers and intended domains) and OpenVibe.Host owns site, deploy, activation, domain binding/verification/TLS and serving; Website keeps no duplicate `host_sites`/`host_deploys` rows and calls Host's routes; a Website build is not a Host deploy; Website composes Host + Codes + Actor + Run + Media and is not OpenVibe.Sites | Proposed 2026-10-05 (plan T19), for the owner's review || [ADR-054](ADR-054-inventory-authority.md) | The OpenVibe inventory: a new authority, OpenVibe.Inventory (`inventory`, `ov_inventory`), owns item kinds (contract + renderer per surface), definitions (`itd_`), instances (`inv_`), the equipped set and an append-only ledger; issuers grant within their namespace; no selling, buying, trading or conversion until a later money ADR (ADR-012/ADR-025); Live's cosmetics are the first kinds, migrated convert-verify-delete | Accepted 2026-10-09 (plan T21) |++| [ADR-055](ADR-055-inventory-money.md) | Money and the inventory, in phases: A primary sales (an issuer prices an item in Vibes, booked by Billing as an ENTITLEMENT with a creator share, or in OpenCoins as a loyalty shop with no payout); B gifting between people for giftable items (an ADR-012 rule 6 amendment); C trading and a market stay closed (ADR-025); never paid chance (no cases, crates, loot boxes) | Proposed 2026-10-09 (plan T21), for the owner's decision |
new file mode 100644
new file mode 100644
@@ -0,0 +1,96 @@
@@ -0,0 +1,96 @@
+# ADR-055: Money and the inventory — primary sales first, trading later, never paid chance
+
+**Status:** Proposed 2026-10-09 (plan track T21, step 6), for the owner's decision. It would amend ADR-054 §5 (the
+money boundary) within ADR-012 (economic classification) and ADR-025 (no trading between people without a new ADR).
+Nothing here is built until the owner accepts it and the open questions at the end are answered.
+
+## Context
+
+- The inventory (ADR-054) is live and free. Items are granted for what people do: OpenVibe.Quest rewards (§3
+ grantors), staff grants, and creators giving their Workshop badges (§6).
+- The owner wants a Steam-like economy: creators earn from what they make, people trade and a market prices items.
+- Three ADR-012 rules decide what is possible:
+ - **Rule 3:** CREDIT (Vibes bought with money) becomes MONEY only by being given to someone, such as a creator.
+ - **Rule 5:** LOYALTY (OpenCoins, channel points) is never bought, never converted and never moved between people.
+ - **Rule 6:** cosmetics are not tradable, and a paid cosmetic is an ENTITLEMENT bought through Billing.
+- Billing is the only ledger (ADR-012 rule 1). Its cutover from Live waits on O1, the PowerChat webhook re-point.
+
+## Decision (proposed)
+
+The money arrives in three phases. Each starts only when the previous one has run cleanly and the owner says so.
+
+### Phase A — primary sales (fits ADR-012 as written)
+
+- **Who sells:** an item's issuer may put a price on a published definition: a Workshop creator on their badge, or Live
+ on its cosmetics. The price is in **Vibes** or in **OpenCoins**, never both, and the issuer chooses.
+- **Vibes:** the buyer spends CREDIT, and Billing books the sale as an ENTITLEMENT.
+ - A creator's share goes to `creator_payable:<subject>` (MONEY, ADR-012 rule 3); the platform keeps the rest.
+ - Proposed split: 80% creator and 20% platform, the same as Tips.
+ - Inventory grants the instance with origin `bought` only after Billing confirms the purchase, keyed by the Billing
+ intent id.
+ - A refund or chargeback revokes that instance. Self-purchase (a creator buying their own item) is refused by
+ subject.
+- **OpenCoins:** the buyer spends LOYALTY on Network's wallet. Nobody is paid, and the instance's origin is
+ `redeemed`. This is a shop, not a conversion: rule 5 holds, because OpenCoins never become money or move to another
+ person.
+- **Limits and honesty:**
+ - The supply cap stays the issuer's; a sold-out item stays sold out.
+ - Prices are shown before checkout.
+ - A purchase limit per person per day applies (proposed: 20).
+ - Rarity is still a label, never odds.
+- **Contracts:** `inventory/definition@1` gains `price` (`{ currency: vibes|opencoins, amount }`); instance origins
+ gain `bought` and `redeemed`; Billing gains an `inventory` purchase intent; events gain `inventory.item.bought`.
+
+### Phase B — gifting between people (needs an ADR-012 rule 6 amendment)
+
+- A person may give an item they own to another person, for nothing in return, if the issuer marked it `giftable`.
+- A gifted item cannot be gifted again for 7 days.
+- No value moves, so this stays outside MONEY, CREDIT and LOYALTY. It does change "cosmetics are not tradable", so
+ rule 6 is amended to: "cosmetics are not sold between people; an issuer may let its items be gifted".
+
+### Phase C — trading and a market (stays closed)
+
+- Swaps between people, listings, escrow, a market price and cash value for items stay closed under ADR-025.
+- Opening them needs its own ADR after legal review: virtual-item marketplaces and money transmission per country,
+ KYC for sellers, VAT, disputes, fraud, wash trading and minors.
+- This ADR does not open them.
+
+### Never
+
+- **No paid chance.** No cases, crates, loot boxes, keys, gacha or random rewards bought with Vibes or OpenCoins, in
+ any phase, in any country. Free drops with published odds stay allowed.
+- No item is ever converted into Vibes, OpenCoins or money by the platform, and no "sell back to OpenVibe".
+
+## Alternatives considered
+
+- **Open trading and a market at once, Steam-style:** rejected for now. It brings money movement between people,
+ escrow, disputes and regulatory exposure (ADR-025) before there is an owner, a review process or legal advice.
+- **Sales in OpenCoins only:** creators would earn nothing real, which is the owner's point of the Workshop.
+- **Sales in Vibes only:** this would leave out the network-wide earn-and-spend loop that OpenCoins exist for.
+- **Paid random rewards with odds published:** rejected outright. It is a regulated or banned practice in several
+ countries and contrary to the network's honesty rule.
+
+## Consequences
+
+- Phase A gives creators income and Live a cosmetics shop again (priced in OpenCoins or Vibes) without new
+ money-transmission exposure. All money stays in Billing's journal.
+- Inventory stays a non-financial service: it records origins and listens for Billing's confirmations, and holds no
+ balance.
+
+## Open questions for the owner
+
+1. Accept phase A? Is the creator/platform split 80/20?
+2. Should Live's own cosmetics be sold, and in which currency (OpenCoins, Vibes, or each per item)?
+3. Minimum age for buying with Vibes: Network has no age data today. Does Phase A need an age attestation at checkout?
+4. Phase B (gifting): accept the rule 6 amendment?
+5. Does phase A wait for the Billing cutover (O1), as this ADR assumes, so that Vibes purchases land in Billing's
+ ledger rather than Live's?
+
+## Acceptance tests (when built)
+
+- A Vibes purchase grants exactly one `bought` instance per Billing intent; a replay grants nothing; a refund revokes.
+- A creator's share lands in `creator_payable`; self-purchase is refused.
+- An OpenCoins purchase debits Network's wallet once and grants a `redeemed` instance. No route converts an item, Vibes
+ or OpenCoins into money.
+- A route-inventory test fails on any endpoint that sells a random reward, lists an item between people, or holds
+ escrow (phase C stays closed).
@@ -48,3 +48,4 @@ Platform-wide decisions from the OpenVibe development roadmap (section 10). Each
@@ -48,3 +48,4 @@ Platform-wide decisions from the OpenVibe development roadmap (section 10). Each
| [ADR-048](ADR-048-services-control-plane.md) | The Services control plane: Services aggregates authorities and owns no other service's rows; every console action is a `common.resource-control-request@1` to the owning authority, answered with `common.resource-control-result@1` (idempotency keys, `confirmation_id` for sensitive actions); OVRN `ovrn:<service>:<project_id>:<type>/<id>` (`common.resource-name@1`) is the one cross-service resource name | Accepted 2026-10-04 (plan T13) |
| [ADR-048](ADR-048-services-control-plane.md) | The Services control plane: Services aggregates authorities and owns no other service's rows; every console action is a `common.resource-control-request@1` to the owning authority, answered with `common.resource-control-result@1` (idempotency keys, `confirmation_id` for sensitive actions); OVRN `ovrn:<service>:<project_id>:<type>/<id>` (`common.resource-name@1`) is the one cross-service resource name | Accepted 2026-10-04 (plan T13) |
| [ADR-053](ADR-053-website-host-boundary.md) | The Website/Host boundary: OpenVibe.Website owns authoring (projects, pages, revisions, builds, Media asset pointers and intended domains) and OpenVibe.Host owns site, deploy, activation, domain binding/verification/TLS and serving; Website keeps no duplicate `host_sites`/`host_deploys` rows and calls Host's routes; a Website build is not a Host deploy; Website composes Host + Codes + Actor + Run + Media and is not OpenVibe.Sites | Proposed 2026-10-05 (plan T19), for the owner's review |
| [ADR-053](ADR-053-website-host-boundary.md) | The Website/Host boundary: OpenVibe.Website owns authoring (projects, pages, revisions, builds, Media asset pointers and intended domains) and OpenVibe.Host owns site, deploy, activation, domain binding/verification/TLS and serving; Website keeps no duplicate `host_sites`/`host_deploys` rows and calls Host's routes; a Website build is not a Host deploy; Website composes Host + Codes + Actor + Run + Media and is not OpenVibe.Sites | Proposed 2026-10-05 (plan T19), for the owner's review |
| [ADR-054](ADR-054-inventory-authority.md) | The OpenVibe inventory: a new authority, OpenVibe.Inventory (`inventory`, `ov_inventory`), owns item kinds (contract + renderer per surface), definitions (`itd_`), instances (`inv_`), the equipped set and an append-only ledger; issuers grant within their namespace; no selling, buying, trading or conversion until a later money ADR (ADR-012/ADR-025); Live's cosmetics are the first kinds, migrated convert-verify-delete | Accepted 2026-10-09 (plan T21) |
| [ADR-054](ADR-054-inventory-authority.md) | The OpenVibe inventory: a new authority, OpenVibe.Inventory (`inventory`, `ov_inventory`), owns item kinds (contract + renderer per surface), definitions (`itd_`), instances (`inv_`), the equipped set and an append-only ledger; issuers grant within their namespace; no selling, buying, trading or conversion until a later money ADR (ADR-012/ADR-025); Live's cosmetics are the first kinds, migrated convert-verify-delete | Accepted 2026-10-09 (plan T21) |
+| [ADR-055](ADR-055-inventory-money.md) | Money and the inventory, in phases: A primary sales (an issuer prices an item in Vibes, booked by Billing as an ENTITLEMENT with a creator share, or in OpenCoins as a loyalty shop with no payout); B gifting between people for giftable items (an ADR-012 rule 6 amendment); C trading and a market stay closed (ADR-025); never paid chance (no cases, crates, loot boxes) | Proposed 2026-10-09 (plan T21), for the owner's decision |