{ "repository": "OpenVibers/OpenVibe.Inventory", "stage": "alpha", "code": true, "wave": "W20", "plan": "Plan track T21 (the OpenVibe inventory), ADR-054: step 2, the authority with Live's cosmetics as the first kinds", "runtime": "node 22, express 4, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9", "port": "5030", "domain": "inventory.openvibe.network", "contracts": "openvibe-contracts v0.419.0", "sdk": "openvibe-sdk v0.161.0", "shared": "openvibe-shared v4.237.0", "packages": [ "openvibe-contracts v0.419.0", "openvibe-sdk v0.161.0", "openvibe-shared v4.237.0", "openvibe-publishing v1.7.0" ], "summary": "OpenVibe.Inventory — one inventory for an OpenVibe account (ADR-054). Item kinds (a contract plus a renderer per surface), definitions, instances, the equipped set and an append-only ledger in its own PostgreSQL database. Issuers (services, apps) grant only within their namespace; people see and equip what they own; every movement is a ledger row and an inventory.* event. Nothing is sold, bought, traded or converted. Live's name effects, particles, hats and voices are the first kinds (70 definitions seeded at boot), and scripts/import-live.js moves Live's unlocks and equipped slots here, row for row.", "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)", "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": [ "Profiles on Network showing the showcase; equip in Chat, Community and Games", "Trading and a market: not before a money ADR (ADR-054 §5)" ], "capabilitiesRegistered": true, "serviceManifestRegistered": true, "deployed": true, "placeholderInSites": false, "features": [ "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-11-13" }