openvibers/openvibe.contracts Commits

Locker's service manifest; Computer is live (#359)

OP OpenVibers committed 6 days ago · e612505f1a · 2 files, +100 −9

Changes

ddiff --git a/manifests/services/computer.json b/manifests/services/computer.json
iindex 4a034b8d..c98d92a6 100644
---- a/manifests/services/computer.json
++++ b/manifests/services/computer.json
@@@ -12,21 +12,34 @@
],
"publicOrigin": "https://openvibe.computer",
"exposure": {
-- "state": "repository",
-- "publicSite": null,
-- "note": "Computer is a new front door over Run. The repo and reference vhost are prepared; host launch is pending review."
++ "state": "live",
++ "publicSite": "service",
++ "note": "openvibe.computer is live (launched 2026-11-08): a front door over OpenVibe.Run."
},
"capabilities": [],
"eventsProduced": [],
"eventsConsumed": [],
"namespacesOwned": [],
"lifecycle": {
-- "liveness": { "none": "Computer is prepared in the repository and is not installed on a host yet." },
-- "shutdown": { "none": "Computer has no running host process yet." },
-- "startupRecovery": { "none": "Computer has no running host process or local state yet." },
-- "rollback": { "none": "Host deployment is pending review." },
-- "contracts": { "range": ">=0.346.0 <1.0.0" },
-- "leases": { "none": "Computer keeps no sessions; OpenVibe.Run owns session state and placement." }
++ "liveness": {
++ "endpoint": "/api/health",
++ "means": "the process is up and answers HTTP"
++ },
++ "shutdown": {
++ "none": "Computer has no running host process yet."
++ },
++ "startupRecovery": {
++ "none": "Computer has no running host process or local state yet."
++ },
++ "rollback": {
++ "none": "Host deployment is pending review."
++ },
++ "contracts": {
++ "range": ">=0.346.0 <1.0.0"
++ },
++ "leases": {
++ "none": "Computer keeps no sessions; OpenVibe.Run owns session state and placement."
++ }
},
"site": {
"name": "Computer",
ddiff --git a/manifests/services/locker.json b/manifests/services/locker.json
nnew file mode 100644
iindex 00000000..3d5a2002
---- /dev/null
++++ b/manifests/services/locker.json
@@@ -0,0 +1,78 @@
++{
++ "version": "0.1.0",
++ "contractRanges": {
++ "openvibe-contracts": ">=0.346.0 <1.0.0"
++ },
++ "id": "locker",
++ "name": "OpenVibe.Locker",
++ "status": "alpha",
++ "repository": "OpenVibers/OpenVibe.Locker",
++ "domains": [
++ "openvibe.locker"
++ ],
++ "publicOrigin": "https://openvibe.locker",
++ "exposure": {
++ "state": "live",
++ "publicSite": "service",
++ "note": "openvibe.locker serves Drive, Sends and the recovery kit once Locker's vhost replaces the parked 302 to openvibe.download (Network #678, the same step)."
++ },
++ "capabilities": [],
++ "eventsProduced": [],
++ "eventsConsumed": [],
++ "namespacesOwned": [
++ "locker"
++ ],
++ "lifecycle": {
++ "liveness": {
++ "endpoint": "/api/health",
++ "means": "the process is up and answers HTTP"
++ },
++ "shutdown": {
++ "signal": "SIGTERM",
++ "deadlineSeconds": 1800,
++ "drains": [
++ "uploads in flight finish or keep their resumable parts",
++ "the cleanup timer stops after its batch",
++ "HTTP server closed and in-flight requests drained",
++ "PostgreSQL pool closed, then the process exits"
++ ]
++ },
++ "startupRecovery": {
++ "resumes": [
++ {
++ "kind": "state",
++ "what": "items, Sends, reservations and upload sessions in ov_locker survive a stop; ciphertext lives in Media's locker tenant"
++ },
++ {
++ "kind": "schedule",
++ "what": "the cleanup is due-based: its first run after a stop expires Sends, releases abandoned uploads and retries Media erasure"
++ }
++ ]
++ },
++ "rollback": {
++ "conditions": [
++ "automatic: ovhost deploy puts the previous sha back and restarts again when the ready URL does not answer 2xx within ready.timeoutSeconds after the restart (exit 3)",
++ "manual: ovhost rollback <service> --to <sha>"
++ ],
++ "window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",
++ "blockers": {
++ "none": "migrations are expand only; an earlier release reads none of what a later one added"
++ }
++ },
++ "contracts": {
++ "range": ">=0.346.0 <1.0.0"
++ },
++ "leases": {
++ "none": "Locker holds no cross-service leases; quota reservations are rows in its own database."
++ }
++ },
++ "site": {
++ "name": "Locker",
++ "icon": "lock",
++ "tagline": "Files only you can open",
++ "what": "End-to-end encrypted files and expiring Sends: OpenVibe stores only ciphertext and cannot read what is inside.",
++ "legalProfile": "hosting",
++ "position": 54,
++ "neighbourhood": "make"
++ }
++}