openvibers/openvibe.contracts Commits

Contracts 0.124.0: the Workshop v1 (ADR-054 §6) — Workshop kinds, network.badge, staff review (inventory.review-request@1, inventory.definition.review active), media_id on equipped slots (#72)

OP OpenVibers committed 9 Oct 2026 · 9a9a8cf94b · 46 files, +380 −69

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 9f537fc4..c86921c1 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,17 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
++## 0.124.0 — 2026-10-09
++
++- ADR-054 §6 amendment, **the Workshop v1**: Workshop kinds (any person may submit a definition, issued by and
++ credited to them, published only after staff review); the first is `network.badge` (a small reviewed image before a
++ person's name, renderer `network.badge.image@1`). Review, free giving within a cap and a daily limit, submission
++ limits and takedown are all specified there.
++- `inventory/kind@1` gains `workshop`; an `inventory/equipped@1` slot gains `media_id` (the art image, so a renderer
++ needs no second read).
++- New `inventory/review-request@1` (publish, optionally with a rarity, or reject with a reason, with fixtures).
++ `inventory.definition.review` is active: `POST /api/v1/definitions/:id/review`, staff only. Additive.
++
## 0.123.0 — 2026-10-09
- ADR-054 amendment, §3 "Grantors": `inventory/definition@1` and `inventory/definition-request@1` gain an optional
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex 6e649596..981e86a3 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -6469,6 +6469,16 @@
"status": "active",
"adr": "ADR-054"
},
++ {
++ "id": "inventory.review-request",
++ "version": "1.0.0",
++ "owner": "inventory",
++ "schema": "inventory/review-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active",
++ "adr": "ADR-054"
++ },
{
"id": "inventory.equip-request",
"version": "1.0.0",
ddiff --git a/contracts/inventory/equipped.v1.json b/contracts/inventory/equipped.v1.json
iindex 83be54b2..e046f575 100644
---- a/contracts/inventory/equipped.v1.json
++++ b/contracts/inventory/equipped.v1.json
@@@ -40,6 +40,11 @@
"type": "string",
"maxLength": 80,
"description": "The definition's art token, so a renderer needs no second read."
++ },
++ "media_id": {
++ "type": "string",
++ "pattern": "^med_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "The definition's art image (an OpenVibe.Media object), so a renderer needs no second read."
}
}
},
ddiff --git a/contracts/inventory/kind.v1.json b/contracts/inventory/kind.v1.json
iindex 985c2db7..42809a7e 100644
---- a/contracts/inventory/kind.v1.json
++++ b/contracts/inventory/kind.v1.json
@@@ -78,6 +78,10 @@
"type": "string",
"pattern": "^(service:[a-z][a-z0-9-]*|app:app_[0-9A-HJKMNP-TV-Z]{26}|user:usr_[0-9A-HJKMNP-TV-Z]{26})$",
"description": "Who owns the kind's namespace."
++ },
++ "workshop": {
++ "type": "boolean",
++ "description": "A Workshop kind (ADR-054 §6): any signed-in person may submit a definition of it, issued by and credited to them, published only after staff review."
}
}
}
ddiff --git a/contracts/inventory/review-request.v1.json b/contracts/inventory/review-request.v1.json
nnew file mode 100644
iindex 00000000..39884481
---- /dev/null
++++ b/contracts/inventory/review-request.v1.json
@@@ -0,0 +1,48 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/review-request.v1.json",
++ "title": "InventoryReviewRequest",
++ "description": "Staff's decision on a Workshop definition in review (ADR-054 §6): publish it (optionally with an honest rarity other than common) or reject it with a reason the creator sees.",
++ "type": "object",
++ "required": [
++ "decision"
++ ],
++ "additionalProperties": false,
++ "properties": {
++ "decision": {
++ "type": "string",
++ "enum": [
++ "publish",
++ "reject"
++ ]
++ },
++ "reason": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 300,
++ "description": "Required for reject: what the creator reads."
++ },
++ "rarity": {
++ "type": "string",
++ "enum": [
++ "common",
++ "uncommon",
++ "rare",
++ "epic",
++ "legendary"
++ ]
++ }
++ },
++ "if": {
++ "properties": {
++ "decision": {
++ "const": "reject"
++ }
++ }
++ },
++ "then": {
++ "required": [
++ "reason"
++ ]
++ }
++}
ddiff --git a/docs/adr/ADR-054-inventory-authority.md b/docs/adr/ADR-054-inventory-authority.md
iindex 6b03cf62..33c3c41a 100644
---- a/docs/adr/ADR-054-inventory-authority.md
++++ b/docs/adr/ADR-054-inventory-authority.md
@@@ -108,6 +108,23 @@ ADR-012 and ADR-025 hold until a later ADR changes them.
- Review covers safety, art rights and honest rarity before anything is published.
- A published item credits its creator. A revenue share waits for §5's ADR.
++**The Workshop, v1 (amendment, 2026-10-09).** Money stays out (§5); everything below is free.
++
++- **Workshop kinds.** A kind may be marked `workshop`. Any signed-in person may submit a definition of it: the person is
++ its issuer (`user:usr_…`) and its credit, and it starts `in_review`. Nobody else sees it until staff publish it.
++- **The first Workshop kind is `network.badge`:** one small image shown just before a person's name in chat and on
++ their profile (renderer `network.badge.image@1`), one worn at a time. The image is PNG or WebP, square, 64 to 512
++ pixels and at most 200 KB, stored in OpenVibe.Media. The equipped read carries its `media_id`, so a renderer needs
++ no second read.
++- **Review** (`inventory.definition.review`, staff only): safety, art rights (the creator confirms they made the
++ image or may use it) and an honest rarity (common unless staff decide otherwise). Staff publish it or reject it with a
++ reason the creator reads. A rejected item stays visible to its creator; they can submit another.
++- **Giving.** A creator gives their published item, free, to the people they choose: origin `granted`, within the
++ supply cap they set (at most 10 000) and at most 100 gifts a day. Nothing is sold, bought or traded.
++- **Limits.** At most 5 items in review at once and 20 submissions a day per person.
++- **Takedown.** Staff retire an item (it is no longer given; owned instances stay) or revoke every instance when it
++ breaks the rules. Both are recorded in the ledger.
++
### 7. Account data and merge
- **Export (ADR-033):** the person's instances, equipped set and ledger rows.
ddiff --git a/fixtures/inventory.review-request/invalid/reject-without-reason.json b/fixtures/inventory.review-request/invalid/reject-without-reason.json
nnew file mode 100644
iindex 00000000..580276af
---- /dev/null
++++ b/fixtures/inventory.review-request/invalid/reject-without-reason.json
@@@ -0,0 +1,3 @@
++{
++ "decision": "reject"
++}
ddiff --git a/fixtures/inventory.review-request/invalid/unknown-decision.json b/fixtures/inventory.review-request/invalid/unknown-decision.json
nnew file mode 100644
iindex 00000000..af2add95
---- /dev/null
++++ b/fixtures/inventory.review-request/invalid/unknown-decision.json
@@@ -0,0 +1,3 @@
++{
++ "decision": "approve"
++}
ddiff --git a/fixtures/inventory.review-request/valid/publish.json b/fixtures/inventory.review-request/valid/publish.json
nnew file mode 100644
iindex 00000000..0ce3001b
---- /dev/null
++++ b/fixtures/inventory.review-request/valid/publish.json
@@@ -0,0 +1,4 @@
++{
++ "decision": "publish",
++ "rarity": "uncommon"
++}
ddiff --git a/fixtures/inventory.review-request/valid/reject.json b/fixtures/inventory.review-request/valid/reject.json
nnew file mode 100644
iindex 00000000..27abf5f7
---- /dev/null
++++ b/fixtures/inventory.review-request/valid/reject.json
@@@ -0,0 +1,4 @@
++{
++ "decision": "reject",
++ "reason": "The image is someone else's artwork."
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex d92185ed..9d390863 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -73899,6 +73899,10 @@
"type": "string",
"pattern": "^(service:[a-z][a-z0-9-]*|app:app_[0-9A-HJKMNP-TV-Z]{26}|user:usr_[0-9A-HJKMNP-TV-Z]{26})$",
"description": "Who owns the kind's namespace."
++ },
++ "workshop": {
++ "type": "boolean",
++ "description": "A Workshop kind (ADR-054 §6): any signed-in person may submit a definition of it, issued by and credited to them, published only after staff review."
}
}
}
@@@ -74223,6 +74227,11 @@
"type": "string",
"maxLength": 80,
"description": "The definition's art token, so a renderer needs no second read."
++ },
++ "media_id": {
++ "type": "string",
++ "pattern": "^med_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "The definition's art image (an OpenVibe.Media object), so a renderer needs no second read."
}
}
},
@@@ -74308,6 +74317,59 @@
}
}
},
++ "inventory.review-request": {
++ "version": "1.0.0",
++ "owner": "inventory",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/review-request.v1.json",
++ "title": "InventoryReviewRequest",
++ "description": "Staff's decision on a Workshop definition in review (ADR-054 §6): publish it (optionally with an honest rarity other than common) or reject it with a reason the creator sees.",
++ "type": "object",
++ "required": [
++ "decision"
++ ],
++ "additionalProperties": false,
++ "properties": {
++ "decision": {
++ "type": "string",
++ "enum": [
++ "publish",
++ "reject"
++ ]
++ },
++ "reason": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 300,
++ "description": "Required for reject: what the creator reads."
++ },
++ "rarity": {
++ "type": "string",
++ "enum": [
++ "common",
++ "uncommon",
++ "rare",
++ "epic",
++ "legendary"
++ ]
++ }
++ },
++ "if": {
++ "properties": {
++ "decision": {
++ "const": "reject"
++ }
++ }
++ },
++ "then": {
++ "required": [
++ "reason"
++ ]
++ }
++ }
++ },
"inventory.equip-request": {
"version": "1.0.0",
"owner": "inventory",
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex d1db0049..ea0084b7 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Actor API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex cc7cd0d3..9a4f74e9 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.AI API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex 6118c5ed..e202a5fd 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Billing API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex 790fea10..b75de238 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Blog API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex 97d204ec..edb36a14 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bot API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex 284e1f6b..4eeb5ce4 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Chat API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex e17df173..77037732 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Community API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex 62da1651..f213ca50 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Coupons API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex 01251e28..d812cd92 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Deals API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex ec062bca..f7f3bffb 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Events API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex 8362c6d2..2918d23c 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Food API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex 0e7d52d6..6d3e8f0f 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Games API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex 0799e065..56a4c28c 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Host API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/index.json b/generated/openapi/index.json
iindex 4af8e050..8ce87c84 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -96,8 +96,8 @@
"service": "inventory",
"name": "OpenVibe.Inventory",
"origin": "https://inventory.openvibe.network",
-- "operations": 14,
-- "capabilities": 6
++ "operations": 15,
++ "capabilities": 7
},
{
"service": "live",
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex 21274fba..8747da65 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Inventory API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
@@@ -236,6 +236,72 @@
}
}
},
++ "/api/v1/definitions/{id}/review": {
++ "post": {
++ "operationId": "post_api_v1_definitions_id_review",
++ "summary": "Staff publish or reject a submitted Workshop definition (POST /api/v1/definitions/:id/review with { decision: publish | reject, reason, rarity?",
++ "description": "**inventory.definition.review** (internal): Staff publish or reject a submitted Workshop definition (POST /api/v1/definitions/:id/review with { decision: publish | reject, reason, rarity? } → inventory.definition@1), checking safety, art rights and an honest rarity (ADR-054 §6). Persons with the staff role only.",
++ "tags": [
++ "inventory.definition"
++ ],
++ "x-openvibe-capabilities": [
++ "inventory.definition.review"
++ ],
++ "x-openvibe-visibility": [
++ "internal"
++ ],
++ "x-openvibe-quota-class": "inventory-write",
++ "security": [
++ {
++ "openvibeToken": [
++ "inventory.definition.review"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/inventory.review-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/inventory.definition.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
"/api/v1/equipped": {
"get": {
"operationId": "get_api_v1_equipped",
@@@ -1151,6 +1217,11 @@
"type": "string",
"maxLength": 80,
"description": "The definition's art token, so a renderer needs no second read."
++ },
++ "media_id": {
++ "type": "string",
++ "pattern": "^med_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "The definition's art image (an OpenVibe.Media object), so a renderer needs no second read."
}
}
},
@@@ -1300,6 +1371,52 @@
"maxLength": 200
}
}
++ },
++ "inventory.review-request.v1": {
++ "title": "InventoryReviewRequest",
++ "description": "Staff's decision on a Workshop definition in review (ADR-054 §6): publish it (optionally with an honest rarity other than common) or reject it with a reason the creator sees.",
++ "type": "object",
++ "required": [
++ "decision"
++ ],
++ "additionalProperties": false,
++ "properties": {
++ "decision": {
++ "type": "string",
++ "enum": [
++ "publish",
++ "reject"
++ ]
++ },
++ "reason": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 300,
++ "description": "Required for reject: what the creator reads."
++ },
++ "rarity": {
++ "type": "string",
++ "enum": [
++ "common",
++ "uncommon",
++ "rare",
++ "epic",
++ "legendary"
++ ]
++ }
++ },
++ "if": {
++ "properties": {
++ "decision": {
++ "const": "reject"
++ }
++ }
++ },
++ "then": {
++ "required": [
++ "reason"
++ ]
++ }
}
},
"securitySchemes": {
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex e298c5ea..e8836d4c 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Live API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex 46602ba3..6f5b40f4 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Media API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex 9e018e4c..80a78110 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Network API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex 00fc5267..e8f0a811 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.News API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex d946a109..b9305d3f 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenRe.Stream API",
-- "version": "0.123.0",
-- "description": "Routes of OpenRe.Stream as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenRe.Stream as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex 40a816b9..8235f618 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Reviews API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex 80fe237c..7caf7622 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Run API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex 5fb839b0..020105f8 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Search API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex 619c116b..c968f25f 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Services API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex b5471731..ebce4387 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Sources API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex a9295997..a2db2328 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tips API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex 102ba1d0..13fcb0f9 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tools API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex 783a0460..8530a89d 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Trade API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex b565b55b..44257125 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.VIP API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex e75e1ae7..5da136fd 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Watch API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex b9eae7bf..699b6bf3 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Wiki API",
-- "version": "0.123.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.123.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.124.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.124.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex 5d8c49ce..83e8a070 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -60521,6 +60521,10 @@ export interface InventoryKind {
* Who owns the kind's namespace.
*/
issuer: string;
++ /**
++ * A Workshop kind (ADR-054 §6): any signed-in person may submit a definition of it, issued by and credited to them, published only after staff review.
++ */
++ workshop?: boolean;
}
/** [email protected] (owner: inventory) */
@@@ -60654,6 +60658,10 @@ export interface InventoryEquipped {
* The definition's art token, so a renderer needs no second read.
*/
token?: string;
++ /**
++ * The definition's art image (an OpenVibe.Media object), so a renderer needs no second read.
++ */
++ media_id?: string;
}
| undefined;
};
@@@ -60687,6 +60695,19 @@ export interface InventoryGrantRequest {
attributes?: {};
}
++/** [email protected] (owner: inventory) */
++/**
++ * Staff's decision on a Workshop definition in review (ADR-054 §6): publish it (optionally with an honest rarity other than common) or reject it with a reason the creator sees.
++ */
++export interface InventoryReviewRequest {
++ decision: "publish" | "reject";
++ /**
++ * Required for reject: what the creator reads.
++ */
++ reason?: string;
++ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary";
++}
++
/** [email protected] (owner: inventory) */
/**
* Equip an instance the person owns in one slot of its kind, or clear the slot (instance_id null). One item per slot; equipping replaces what was there.
ddiff --git a/manifests/capabilities/inventory.definition.review.json b/manifests/capabilities/inventory.definition.review.json
iindex 3cf5ae1e..2143d17d 100644
---- a/manifests/capabilities/inventory.definition.review.json
++++ b/manifests/capabilities/inventory.definition.review.json
@@@ -2,10 +2,10 @@
"id": "inventory.definition.review",
"version": "1.0",
"owner": "inventory",
-- "status": "planned",
++ "status": "active",
"visibility": "internal",
-- "description": "PLANNED (ADR-054, plan T21): Staff publish or reject a submitted definition (POST /api/v1/definitions/:id/review → inventory.definition@1), checking safety, art rights and an honest rarity (ADR-054 §6). It becomes active when OpenVibe.Inventory implements the route.",
-- "inputSchema": "common.no-body@1",
++ "description": "Staff publish or reject a submitted Workshop definition (POST /api/v1/definitions/:id/review with { decision: publish | reject, reason, rarity? } → inventory.definition@1), checking safety, art rights and an honest rarity (ADR-054 §6). Persons with the staff role only.",
++ "inputSchema": "inventory.review-request@1",
"outputSchema": "inventory.definition@1",
"permissions": [
"inventory:review"
@@@ -13,5 +13,7 @@
"resourceConstraints": [],
"quotaClass": "inventory-write",
"events": [],
-- "implementedBy": []
++ "implementedBy": [
++ "POST /api/v1/definitions/:id/review"
++ ]
}
ddiff --git a/package-lock.json b/package-lock.json
iindex 54795af0..405aa428 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-contracts",
-- "version": "0.123.0",
++ "version": "0.124.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-contracts",
-- "version": "0.123.0",
++ "version": "0.124.0",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
ddiff --git a/package.json b/package.json
iindex 1c65c492..3a066f73 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.123.0",
++ "version": "0.124.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"types": "generated/typescript/index.d.ts",