openvibers/openvibe.contracts Commits

v0.5.0: paste capabilities owned by Community (create, write as acting subject, moderate); identity.subject.resolve active

OP OpenVibers committed 22 Sept 2026 · 814c00bbf8 · 7 files, +61 −10


Changes

ddiff --git a/manifests/capabilities/community.paste.create.json b/manifests/capabilities/community.paste.create.json
iindex 2f8c3ac4..2a881a8a 100644
---- a/manifests/capabilities/community.paste.create.json
++++ b/manifests/capabilities/community.paste.create.json
@@@ -1,10 +1,10 @@
{
"id": "community.paste.create",
"version": "1.0",
-- "owner": "live",
++ "owner": "community",
"status": "active",
"visibility": "public",
-- "description": "Create a paste. Authority moves to OpenVibe.Community in Wave 5.",
++ "description": "Create a paste (text or screenshot). A service token creates it for the acting subject named in X-OV-Subject, or as origin \"ai\" for derived pastes (roadmap 33).",
"outputSchema": "common.entity-ref@1",
"permissions": [
"community:write"
@@@ -17,6 +17,6 @@
"community.paste.created"
],
"implementedBy": [
-- "POST /api/pastes (Live; Community proxies)"
++ "POST /api/pastes (Community)"
]
}
ddiff --git a/manifests/capabilities/community.paste.moderate.json b/manifests/capabilities/community.paste.moderate.json
nnew file mode 100644
iindex 00000000..497bc721
---- /dev/null
++++ b/manifests/capabilities/community.paste.moderate.json
@@@ -0,0 +1,23 @@
++{
++ "id": "community.paste.moderate",
++ "version": "1.0",
++ "owner": "community",
++ "status": "active",
++ "visibility": "internal",
++ "description": "Staff moderation of any paste or comment (censor, delete, bulk). The caller vouches that the acting subject is staff.",
++ "permissions": [
++ "community:moderate"
++ ],
++ "resourceConstraints": [
++ "none"
++ ],
++ "quotaClass": "community-moderate",
++ "events": [
++ "community.paste.moderated"
++ ],
++ "implementedBy": [
++ "POST /api/pastes/:slug/censor",
++ "POST /api/pastes/bulk",
++ "DELETE /api/pastes/:slug/comments/:id"
++ ]
++}
ddiff --git a/manifests/capabilities/community.paste.write.json b/manifests/capabilities/community.paste.write.json
nnew file mode 100644
iindex 00000000..3c3b8299
---- /dev/null
++++ b/manifests/capabilities/community.paste.write.json
@@@ -0,0 +1,23 @@
++{
++ "id": "community.paste.write",
++ "version": "1.0",
++ "owner": "community",
++ "status": "active",
++ "visibility": "first-party",
++ "description": "Edit, delete, fork, like, copy and comment on pastes as the acting subject (X-OV-Subject). Ownership is checked by Community, never by the caller.",
++ "permissions": [
++ "community:write"
++ ],
++ "resourceConstraints": [
++ "owner"
++ ],
++ "quotaClass": "community-write",
++ "events": [
++ "community.paste.updated",
++ "community.comment.created"
++ ],
++ "implementedBy": [
++ "PUT|DELETE /api/pastes/:slug",
++ "POST /api/pastes/:slug/{fork,like,copy,comments}"
++ ]
++}
ddiff --git a/manifests/capabilities/identity.subject.resolve.json b/manifests/capabilities/identity.subject.resolve.json
iindex 5905789d..d7a912a9 100644
---- a/manifests/capabilities/identity.subject.resolve.json
++++ b/manifests/capabilities/identity.subject.resolve.json
@@@ -2,7 +2,7 @@
"id": "identity.subject.resolve",
"version": "1.0",
"owner": "network",
-- "status": "planned",
++ "status": "active",
"visibility": "first-party",
"description": "Resolve a subject (or a legacy service-local id) to its canonical SubjectRef and display projection.",
"inputSchema": "identity.legacy-identity-map@1",
@@@ -15,5 +15,8 @@
],
"quotaClass": "identity-read",
"events": [],
-- "implementedBy": []
++ "implementedBy": [
++ "GET /internal/identity/resolve",
++ "POST /internal/identity/resolve-batch"
++ ]
}
ddiff --git a/manifests/services/community.json b/manifests/services/community.json
iindex 834788c2..f9a63137 100644
---- a/manifests/services/community.json
++++ b/manifests/services/community.json
@@@ -1,7 +1,7 @@
{
"version": "0.1.0",
"contractRanges": {
-- "openvibe-contracts": "^0.1.0"
++ "openvibe-contracts": ">=0.5.0 <1.0.0"
},
"id": "community",
"name": "OpenVibe.Community",
@@@ -13,6 +13,9 @@
"publicOrigin": "https://openvibe.community",
"health": "/api/health",
"capabilities": [
++ "community.paste.create",
++ "community.paste.write",
++ "community.paste.moderate",
"community.post.create"
],
"eventsProduced": [],
ddiff --git a/manifests/services/live.json b/manifests/services/live.json
iindex 056d83e7..72795b40 100644
---- a/manifests/services/live.json
++++ b/manifests/services/live.json
@@@ -15,13 +15,12 @@
"health": "/api/health",
"ready": "/api/ready",
"capabilities": [
-- "chat.message.send",
-- "community.paste.create"
++ "chat.message.send"
],
"eventsProduced": [],
"eventsConsumed": [],
"namespacesOwned": [
"live.*"
],
-- "notes": "Still hosts chat, ingest, comments, money and AI authorities until Waves 5-13."
++ "notes": "Still hosts chat, ingest, money and AI authorities until Waves 6-13; paste authority moved to Community (W5)."
}
ddiff --git a/package.json b/package.json
iindex 1809c9a1..3335503a 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.4.0",
++ "version": "0.5.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",