openvibers/openvibe.contracts Commits
v0.7.0: Community Wave 5 — community.comment.write, community.comment.moderate, community.pulse.write; community.post.create is active (1.1)
Changes
nnew file mode 100644@@@ -0,0 +1,27 @@++{++ "id": "community.comment.moderate",++ "version": "1.0",++ "owner": "community",++ "status": "active",++ "visibility": "internal",++ "description": "Moderation of discussions: set a comment thread's visibility (public, hidden, locked — e.g. when the owner service hides the entity), delete any comment or forum post, pin and lock forum threads, read hidden threads, administer the Discord relay. Acting as itself (no X-OV-Subject) the service is the moderator; acting for a person it must vouch with X-OV-Staff: 1 that the person is staff.",++ "permissions": [++ "community:moderate"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "community-moderate",++ "events": [++ "community.comment.moderated",++ "community.thread.moderated"++ ],++ "implementedBy": [++ "PUT /api/v1/comments/threads/:id/visibility",++ "DELETE /api/v1/comments/:commentId",++ "PUT /api/v1/spaces/:space/threads/:slug/state",++ "DELETE /api/v1/spaces/:space/threads/:slug",++ "PUT|DELETE /api/v1/posts/:id",++ "GET|POST|PUT /api/v1/relay/*"++ ]++}nnew file mode 100644@@@ -0,0 +1,29 @@++{++ "id": "community.comment.write",++ "version": "1.0",++ "owner": "community",++ "status": "active",++ "visibility": "first-party",++ "description": "Typed comment threads as a service: resolve the thread of any EntityRef (browsers are limited to an allowlist of types), and comment, vote and delete one's own comments as the acting subject (X-OV-Subject), or comment as origin \"ai\" (never attributed to a person, roadmap 33). Ownership and limits are checked by Community.",++ "inputSchema": "common.entity-ref@1",++ "outputSchema": "common.entity-ref@1",++ "permissions": [++ "community:write"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "community-write",++ "events": [++ "community.comment.created",++ "community.comment.deleted",++ "community.comment.voted"++ ],++ "implementedBy": [++ "POST /api/v1/comments/threads/resolve",++ "GET /api/v1/comments/threads/:id",++ "POST /api/v1/comments/threads/:id/comments",++ "DELETE /api/v1/comments/:commentId",++ "POST /api/v1/comments/:commentId/votes"++ ]++}@@@ -1,10 +1,10 @@{"id": "community.post.create",-- "version": "1.0",++ "version": "1.1","owner": "community",-- "status": "planned",++ "status": "active","visibility": "public",-- "description": "Create a post in a thread or typed comment thread (Wave 5).",++ "description": "Forum writes as a service: create threads and replies in a space, vote on threads, and edit or delete one's own posts, as the acting subject (X-OV-Subject) or as origin \"ai\" (no author, labelled as AI). Space visibility (public, members, staff), locks and limits are checked by Community.","outputSchema": "common.entity-ref@1","permissions": ["community:write"@@@ -14,7 +14,14 @@],"quotaClass": "community-write","events": [++ "community.thread.created","community.post.created"],-- "implementedBy": []++ "implementedBy": [++ "POST /api/v1/spaces/:space/threads",++ "POST /api/v1/spaces/:space/threads/:slug/posts",++ "POST /api/v1/spaces/:space/threads/:slug/votes",++ "PUT|DELETE /api/v1/posts/:id",++ "DELETE /api/v1/spaces/:space/threads/:slug"++ ]}nnew file mode 100644@@@ -0,0 +1,23 @@++{++ "id": "community.pulse.write",++ "version": "1.0",++ "owner": "community",++ "status": "active",++ "visibility": "first-party",++ "description": "Publish public activity of the calling service's own entities to Pulse (EntityRef + title + url + origin user|ai|system + occurred_at), or retract it. Only visibility public is accepted; the ref's service must be the caller's. Provenance is kept: the first record's origin, actor (X-OV-Subject, never for ai/system) and time stand.",++ "inputSchema": "common.entity-ref@1",++ "permissions": [++ "community:write"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "community-write",++ "events": [++ "community.pulse.item_recorded"++ ],++ "implementedBy": [++ "POST /api/v1/pulse/items",++ "DELETE /api/v1/pulse/items/:service/:type/:id"++ ]++}@@@ -16,7 +16,10 @@"community.paste.create","community.paste.write","community.paste.moderate",-- "community.post.create"++ "community.post.create",++ "community.comment.write",++ "community.comment.moderate",++ "community.pulse.write"],"eventsProduced": [],"eventsConsumed": [],@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.6.0",++ "version": "0.7.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",
new file mode 100644
new file mode 100644
@@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
+{
+ "id": "community.comment.moderate",
+ "version": "1.0",
+ "owner": "community",
+ "status": "active",
+ "visibility": "internal",
+ "description": "Moderation of discussions: set a comment thread's visibility (public, hidden, locked — e.g. when the owner service hides the entity), delete any comment or forum post, pin and lock forum threads, read hidden threads, administer the Discord relay. Acting as itself (no X-OV-Subject) the service is the moderator; acting for a person it must vouch with X-OV-Staff: 1 that the person is staff.",
+ "permissions": [
+ "community:moderate"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "community-moderate",
+ "events": [
+ "community.comment.moderated",
+ "community.thread.moderated"
+ ],
+ "implementedBy": [
+ "PUT /api/v1/comments/threads/:id/visibility",
+ "DELETE /api/v1/comments/:commentId",
+ "PUT /api/v1/spaces/:space/threads/:slug/state",
+ "DELETE /api/v1/spaces/:space/threads/:slug",
+ "PUT|DELETE /api/v1/posts/:id",
+ "GET|POST|PUT /api/v1/relay/*"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
+{
+ "id": "community.comment.write",
+ "version": "1.0",
+ "owner": "community",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Typed comment threads as a service: resolve the thread of any EntityRef (browsers are limited to an allowlist of types), and comment, vote and delete one's own comments as the acting subject (X-OV-Subject), or comment as origin \"ai\" (never attributed to a person, roadmap 33). Ownership and limits are checked by Community.",
+ "inputSchema": "common.entity-ref@1",
+ "outputSchema": "common.entity-ref@1",
+ "permissions": [
+ "community:write"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "community-write",
+ "events": [
+ "community.comment.created",
+ "community.comment.deleted",
+ "community.comment.voted"
+ ],
+ "implementedBy": [
+ "POST /api/v1/comments/threads/resolve",
+ "GET /api/v1/comments/threads/:id",
+ "POST /api/v1/comments/threads/:id/comments",
+ "DELETE /api/v1/comments/:commentId",
+ "POST /api/v1/comments/:commentId/votes"
+ ]
+}
@@ -1,10 +1,10 @@
@@ -1,10 +1,10 @@
{
{
"id": "community.post.create",
"id": "community.post.create",
- "version": "1.0",
+ "version": "1.1",
"owner": "community",
"owner": "community",
- "status": "planned",
+ "status": "active",
"visibility": "public",
"visibility": "public",
- "description": "Create a post in a thread or typed comment thread (Wave 5).",
+ "description": "Forum writes as a service: create threads and replies in a space, vote on threads, and edit or delete one's own posts, as the acting subject (X-OV-Subject) or as origin \"ai\" (no author, labelled as AI). Space visibility (public, members, staff), locks and limits are checked by Community.",
"outputSchema": "common.entity-ref@1",
"outputSchema": "common.entity-ref@1",
"permissions": [
"permissions": [
"community:write"
"community:write"
@@ -14,7 +14,14 @@
@@ -14,7 +14,14 @@
],
],
"quotaClass": "community-write",
"quotaClass": "community-write",
"events": [
"events": [
+ "community.thread.created",
"community.post.created"
"community.post.created"
],
],
- "implementedBy": []
+ "implementedBy": [
+ "POST /api/v1/spaces/:space/threads",
+ "POST /api/v1/spaces/:space/threads/:slug/posts",
+ "POST /api/v1/spaces/:space/threads/:slug/votes",
+ "PUT|DELETE /api/v1/posts/:id",
+ "DELETE /api/v1/spaces/:space/threads/:slug"
+ ]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
+{
+ "id": "community.pulse.write",
+ "version": "1.0",
+ "owner": "community",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Publish public activity of the calling service's own entities to Pulse (EntityRef + title + url + origin user|ai|system + occurred_at), or retract it. Only visibility public is accepted; the ref's service must be the caller's. Provenance is kept: the first record's origin, actor (X-OV-Subject, never for ai/system) and time stand.",
+ "inputSchema": "common.entity-ref@1",
+ "permissions": [
+ "community:write"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "community-write",
+ "events": [
+ "community.pulse.item_recorded"
+ ],
+ "implementedBy": [
+ "POST /api/v1/pulse/items",
+ "DELETE /api/v1/pulse/items/:service/:type/:id"
+ ]
+}
@@ -16,7 +16,10 @@
@@ -16,7 +16,10 @@
"community.paste.create",
"community.paste.create",
"community.paste.write",
"community.paste.write",
"community.paste.moderate",
"community.paste.moderate",
- "community.post.create"
+ "community.post.create",
+ "community.comment.write",
+ "community.comment.moderate",
+ "community.pulse.write"
],
],
"eventsProduced": [],
"eventsProduced": [],
"eventsConsumed": [],
"eventsConsumed": [],
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.6.0",
+ "version": "0.7.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",