openvibers/openvibe.inventory Commits
STATUS moves Live's switch to Inventory and the Workshop from notYet to works (both done: Live's tables dropped on 2026-10-15, the Workshop shipped in 0.4.0), and the README names Games as a grantor (#62)
Changes
@@@ -83,8 +83,9 @@ and the account subscriptions) and `identity.subject.resolve` (OpenVibe.Network;Only a kind's issuer defines and grants its items: `service:live` for `live.*`. An issuer may name **grantors** onone of its items (ADR-054 §3 amendment): other services or apps that may grant that item and nothing more (no edit,no revoke), recorded in the ledger as the actor. Live names OpenVibe.Quest on six common items, so they are earned as--quest rewards ([server/data/live-grantors.json](server/data/live-grantors.json), applied at boot); their pages say--where to earn them. **Nothing is sold, bought, traded or++quest rewards, and OpenVibe.Games on six more, earned as achievements++([server/data/live-grantors.json](server/data/live-grantors.json), applied at boot); their pages say where to earn++them. **Nothing is sold, bought, traded orconverted into OpenCoins or Vibes**, and there are no paid random rewards, until a later ADR covers the legal basis andBilling (ADR-054 §5). A test fails if a route or a column for that appears.@@@ -147,8 +148,9 @@ node --env-file=/etc/openvibe/inventory.env scripts/import-live.js --live-env /e```The script only reads Live's database, and never prints its URL. `--apply` keeps unlock times and grants nothing twice.--`--verify` compares every person's items and slots, row for row. Live then reads and writes through this API--(`INVENTORY_AUTHORITY=inventory`), and its tables are dropped after the N-1 window.++`--verify` compares every person's items and slots, row for row. Live has read and written only through this API++since 2026-10-09 (`INVENTORY_AUTHORITY=inventory`), and its migration `0005_drop_live_cosmetics` dropped Live's three++cosmetics tables on 2026-10-15.## Configuration@@@ -20,18 +20,20 @@"works": ["Kinds and definitions seeded at boot from data/kinds.json and data/live-definitions.json (Live's catalog, its item ids kept as aliases)","Grants by an issuer within its namespace: idempotent per key, supply caps with serial numbers, a non-stackable item answers the one already owned; consume and revoke",++ "Grantors (ADR-054 §3 amendment): Live names OpenVibe.Quest on six of its items (quest rewards) and OpenVibe.Games on six more (achievements); a grantor may grant those and nothing more","Equip one item per slot (a person, or a service acting for them with X-OV-Subject); a batch read of up to 100 equipped sets in one query","Public reads (kinds, definitions, a person's inventory and equipped set) and the person's own full inventory","Definitions created and edited by their issuer; rarity, attributes and supply fixed once published; attributes validated against the kind's schema","Pages: home, every item by kind, one item, your inventory with plain equip forms, a person's public inventory, /updates","Events (inventory.item.granted/consumed/revoked/equipped/unequipped, inventory.definition.published) through the openvibe-sdk outbox","Account export and deletion (ADR-033) at the loopback POST /internal/events, subscriptions created at boot",-- "scripts/import-live.js: dry run, --apply (origin migrated, unlock times kept, idempotent) and --verify (row for row)"++ "scripts/import-live.js: dry run, --apply (origin migrated, unlock times kept, idempotent) and --verify (row for row)",++ "The Workshop (ADR-054 §6): community badges anyone can make, shown only after staff publish them, with staff takedown",++ "Live reads and writes cosmetics only here since 2026-10-09 (INVENTORY_AUTHORITY=inventory); Live's migration 0005_drop_live_cosmetics dropped its tables on 2026-10-15",++ "Item pages in OpenVibe.Search through openvibe-publishing/search-feed, IndexNow and the sitemap"],"notYet": [-- "Live reading and writing through Inventory (INVENTORY_AUTHORITY), then Live's tables dropped (ADR-054 §8)","Profiles on Network showing the showcase; equip in Chat, Community and Games",-- "Creator submissions and staff review (the Workshop, ADR-054 §6)","Trading and a market: not before a money ADR (ADR-054 §5)","Account merge (ADR-029): instances moving to the surviving subject"],@@@ -43,11 +45,14 @@"item kinds","definitions","grants",++ "grantors","equip","public inventory",++ "the Workshop (community badges, staff review)",++ "Search feed","Live migration","account export and deletion"],"deployment": "openvibe-ovh: unit openvibe-inventory.service on 127.0.0.1:5030 (git checkout /opt/inventory.openvibe.network, env /etc/openvibe/inventory.env, database ov_inventory), deployed with `sudo ovhost deploy inventory`; public at https://inventory.openvibe.network since 2026-10-09.",-- "updated": "2026-10-20"++ "updated": "2026-10-22"}
@@ -83,8 +83,9 @@ and the account subscriptions) and `identity.subject.resolve` (OpenVibe.Network;
@@ -83,8 +83,9 @@ and the account subscriptions) and `identity.subject.resolve` (OpenVibe.Network;
Only a kind's issuer defines and grants its items: `service:live` for `live.*`. An issuer may name **grantors** on
Only a kind's issuer defines and grants its items: `service:live` for `live.*`. An issuer may name **grantors** on
one of its items (ADR-054 §3 amendment): other services or apps that may grant that item and nothing more (no edit,
one of its items (ADR-054 §3 amendment): other services or apps that may grant that item and nothing more (no edit,
no revoke), recorded in the ledger as the actor. Live names OpenVibe.Quest on six common items, so they are earned as
no revoke), recorded in the ledger as the actor. Live names OpenVibe.Quest on six common items, so they are earned as
-quest rewards ([server/data/live-grantors.json](server/data/live-grantors.json), applied at boot); their pages say
-where to earn them. **Nothing is sold, bought, traded or
+quest rewards, and OpenVibe.Games on six more, earned as achievements
+([server/data/live-grantors.json](server/data/live-grantors.json), applied at boot); their pages say where to earn
+them. **Nothing is sold, bought, traded or
converted into OpenCoins or Vibes**, and there are no paid random rewards, until a later ADR covers the legal basis and
converted into OpenCoins or Vibes**, and there are no paid random rewards, until a later ADR covers the legal basis and
Billing (ADR-054 §5). A test fails if a route or a column for that appears.
Billing (ADR-054 §5). A test fails if a route or a column for that appears.
@@ -147,8 +148,9 @@ node --env-file=/etc/openvibe/inventory.env scripts/import-live.js --live-env /e
@@ -147,8 +148,9 @@ node --env-file=/etc/openvibe/inventory.env scripts/import-live.js --live-env /e
```
```
The script only reads Live's database, and never prints its URL. `--apply` keeps unlock times and grants nothing twice.
The script only reads Live's database, and never prints its URL. `--apply` keeps unlock times and grants nothing twice.
-`--verify` compares every person's items and slots, row for row. Live then reads and writes through this API
-(`INVENTORY_AUTHORITY=inventory`), and its tables are dropped after the N-1 window.
+`--verify` compares every person's items and slots, row for row. Live has read and written only through this API
+since 2026-10-09 (`INVENTORY_AUTHORITY=inventory`), and its migration `0005_drop_live_cosmetics` dropped Live's three
+cosmetics tables on 2026-10-15.
## Configuration
## Configuration
@@ -20,18 +20,20 @@
@@ -20,18 +20,20 @@
"works": [
"works": [
"Kinds and definitions seeded at boot from data/kinds.json and data/live-definitions.json (Live's catalog, its item ids kept as aliases)",
"Kinds and definitions seeded at boot from data/kinds.json and data/live-definitions.json (Live's catalog, its item ids kept as aliases)",
"Grants by an issuer within its namespace: idempotent per key, supply caps with serial numbers, a non-stackable item answers the one already owned; consume and revoke",
"Grants by an issuer within its namespace: idempotent per key, supply caps with serial numbers, a non-stackable item answers the one already owned; consume and revoke",
+ "Grantors (ADR-054 §3 amendment): Live names OpenVibe.Quest on six of its items (quest rewards) and OpenVibe.Games on six more (achievements); a grantor may grant those and nothing more",
"Equip one item per slot (a person, or a service acting for them with X-OV-Subject); a batch read of up to 100 equipped sets in one query",
"Equip one item per slot (a person, or a service acting for them with X-OV-Subject); a batch read of up to 100 equipped sets in one query",
"Public reads (kinds, definitions, a person's inventory and equipped set) and the person's own full inventory",
"Public reads (kinds, definitions, a person's inventory and equipped set) and the person's own full inventory",
"Definitions created and edited by their issuer; rarity, attributes and supply fixed once published; attributes validated against the kind's schema",
"Definitions created and edited by their issuer; rarity, attributes and supply fixed once published; attributes validated against the kind's schema",
"Pages: home, every item by kind, one item, your inventory with plain equip forms, a person's public inventory, /updates",
"Pages: home, every item by kind, one item, your inventory with plain equip forms, a person's public inventory, /updates",
"Events (inventory.item.granted/consumed/revoked/equipped/unequipped, inventory.definition.published) through the openvibe-sdk outbox",
"Events (inventory.item.granted/consumed/revoked/equipped/unequipped, inventory.definition.published) through the openvibe-sdk outbox",
"Account export and deletion (ADR-033) at the loopback POST /internal/events, subscriptions created at boot",
"Account export and deletion (ADR-033) at the loopback POST /internal/events, subscriptions created at boot",
- "scripts/import-live.js: dry run, --apply (origin migrated, unlock times kept, idempotent) and --verify (row for row)"
+ "scripts/import-live.js: dry run, --apply (origin migrated, unlock times kept, idempotent) and --verify (row for row)",
+ "The Workshop (ADR-054 §6): community badges anyone can make, shown only after staff publish them, with staff takedown",
+ "Live reads and writes cosmetics only here since 2026-10-09 (INVENTORY_AUTHORITY=inventory); Live's migration 0005_drop_live_cosmetics dropped its tables on 2026-10-15",
+ "Item pages in OpenVibe.Search through openvibe-publishing/search-feed, IndexNow and the sitemap"
],
],
"notYet": [
"notYet": [
- "Live reading and writing through Inventory (INVENTORY_AUTHORITY), then Live's tables dropped (ADR-054 §8)",
"Profiles on Network showing the showcase; equip in Chat, Community and Games",
"Profiles on Network showing the showcase; equip in Chat, Community and Games",
- "Creator submissions and staff review (the Workshop, ADR-054 §6)",
"Trading and a market: not before a money ADR (ADR-054 §5)",
"Trading and a market: not before a money ADR (ADR-054 §5)",
"Account merge (ADR-029): instances moving to the surviving subject"
"Account merge (ADR-029): instances moving to the surviving subject"
],
],
@@ -43,11 +45,14 @@
@@ -43,11 +45,14 @@
"item kinds",
"item kinds",
"definitions",
"definitions",
"grants",
"grants",
+ "grantors",
"equip",
"equip",
"public inventory",
"public inventory",
+ "the Workshop (community badges, staff review)",
+ "Search feed",
"Live migration",
"Live migration",
"account export and deletion"
"account export and deletion"
],
],
"deployment": "openvibe-ovh: unit openvibe-inventory.service on 127.0.0.1:5030 (git checkout /opt/inventory.openvibe.network, env /etc/openvibe/inventory.env, database ov_inventory), deployed with `sudo ovhost deploy inventory`; public at https://inventory.openvibe.network since 2026-10-09.",
"deployment": "openvibe-ovh: unit openvibe-inventory.service on 127.0.0.1:5030 (git checkout /opt/inventory.openvibe.network, env /etc/openvibe/inventory.env, database ov_inventory), deployed with `sudo ovhost deploy inventory`; public at https://inventory.openvibe.network since 2026-10-09.",
- "updated": "2026-10-20"
+ "updated": "2026-10-22"
}
}