openvibers/openvibe.contracts Commits
Contracts 0.399.0: consolidate four contract releases (#420)
Changes
@@@ -1,5 +1,12 @@# Changelog++## 0.399.0 — 2026-11-10++++- #408: add `quest.today@1`, the private Quest today response.++- #412: extend `network.operator-alerts-request@1` with browser-check evidence and release timing details.++- #415: add the `git.checks.write` capability for reporting commit statuses.++- #416: add `agent.finding@1` for confirmed findings, leads that need validation and rejected claims.++## 0.398.0 — 2026-11-10- `codes.task@2`'s outcome state names a goal task's honest end state: `ready` only with an accepted independent verdict, `waiting`, `blocked` at its no-progress limit, `failed`, `dropped` by the person, or `stopped_by_budget`. A task without a goal keeps `done`, `unfinished` and `stopped`.@@@ -5,7 +5,7 @@**Docs:** https://openvibe.services · **For AI:** https://openvibe.services/llms.txt**Install and test:** `npm ci && npm test` (Node 20 or newer)--**Status:** alpha (first released in Wave 1; the release is package.json's `version`, tagged). At v0.391.0: 1214 schemas in `contracts/catalog.json`, 65 service manifests, 512 capability manifests, 13 namespace manifests and the staff capability map. Service repositories run `openvibe-contracts-check` and the pin-drift check in CI, and deployed services verify service and app tokens with `serviceAuth` in production. Consumers pin release tags (each repository's `STATUS.json` names its pin). `node scripts/docs-currency.js <root>` checks every checkout's README and `STATUS.json` against its code: the pins and versions they name, a library's consumer list, the deployed flag against the manifest, README links, and the paths and migrations they name. `node scripts/estate.js` generates `docs/ESTATE.md` and `manifests/repositories/` from the estate checkouts, and `--check` fails on drift (plan T1 step 3).++**Status:** alpha (first released in Wave 1; the release is package.json's `version`, tagged). At v0.399.0: 1219 schemas in `contracts/catalog.json`, 65 service manifests, 513 capability manifests, 13 namespace manifests and the staff capability map. Service repositories run `openvibe-contracts-check` and the pin-drift check in CI, and deployed services verify service and app tokens with `serviceAuth` in production. Consumers pin release tags (each repository's `STATUS.json` names its pin). `node scripts/docs-currency.js <root>` checks every checkout's README and `STATUS.json` against its code: the pins and versions they name, a library's consumer list, the deployed flag against the manifest, README links, and the paths and migrations they name. `node scripts/estate.js` generates `docs/ESTATE.md` and `manifests/repositories/` from the estate checkouts, and `--check` fails on drift (plan T1 step 3).**Plan:** OpenVibe Development Roadmap, Wave 1 (implementation plan rev 3, §3.1 and §18.11).**License:** AGPL-3.0 (same as every OpenVibe service).@@@ -49,5 +49,5 @@"bench.benchmark@1 and bench.run@1 with the capabilities bench.benchmark.write, bench.run.publish and bench.run.read: the benchmark registry and the results API (spec 2026-10-30, stage B1)","mail.agent_inbox.received@1, mail.agent-inbox-message@1, mail.agent-reply-request@1, mail.agent-reply-result@1 and mail.inbox-answering@1, with the capabilities mail.agent.read, mail.agent.reply and mail.agent.answering (track HO6): an agent answers the mail sent to its own OpenVibe.Mail address, reads it in full text on the owner's behalf, replies from its own address in the thread, and answers only when the person's switch for that address is on"],-- "updated": "2026-11-07"++ "updated": "2026-11-10"}nnew file mode 100644@@@ -0,0 +1,231 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/agent/finding.v1.json",++ "title": "AgentFinding",++ "description": "One finding of a review, a hunt or a security pass. The verdict is the evidence bar, not the severity: `confirmed` means the finding was reproduced or re-read and carries `severity` and `confidence`; `needs_validation` is an unprovable claim turned into a lead with an exact `blockers` entry and a `validation_plan`, and it has no severity by design (never noise, never a silent pass); `rejected` says why it does not stand. `fingerprint` is the stable identity — repository-relative file plus whitespace-normalised, lowercased text — so a re-wrapped finding keeps its id while a real rewording becomes a new one. `trace` and `evidence` carry repository-relative locations and the commands or answers that show the fact. A validator must also refuse `severity.overall_severity` above the demonstrated `severity.impact`; the schema cannot rank two enums, so `description` states the rule.",++ "type": "object",++ "additionalProperties": false,++ "required": ["verdict", "fingerprint", "title", "description", "trace", "evidence"],++ "properties": {++ "verdict": {++ "type": "string",++ "enum": ["confirmed", "needs_validation", "rejected"],++ "description": "confirmed: reproduced or re-read by a second agent. needs_validation: a lead that could not be proven locally; it carries blockers and a plan, never a severity. rejected: the claim was refuted; it carries a reason."++ },++ "fingerprint": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200,++ "description": "The stable id: repository-relative file + whitespace-normalised, lowercased finding text (for example `server/x.js:the cache never expires`)."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200++ },++ "description": {++ "type": "string",++ "minLength": 1,++ "maxLength": 4000,++ "description": "What is wrong, in plain words; no severity claim beyond the evidence."++ },++ "trace": {++ "type": "array",++ "minItems": 1,++ "maxItems": 50,++ "items": { "$ref": "#/$defs/location" },++ "description": "Where the issue lives, repository-relative, most specific first."++ },++ "evidence": {++ "type": "array",++ "minItems": 1,++ "maxItems": 50,++ "items": { "$ref": "#/$defs/evidence" },++ "description": "What shows the fact: the source read, the command and its output, the response, the screenshot or the test."++ },++ "severity": { "$ref": "#/$defs/severity" },++ "confidence": { "$ref": "#/$defs/confidence" },++ "remediation": { "$ref": "#/$defs/remediation" },++ "claimed_root_cause": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000,++ "description": "The suspected cause of a needs_validation lead, stated as a claim to test."++ },++ "blockers": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": { "type": "string", "minLength": 1, "maxLength": 500 },++ "description": "The exact reason the claim could not be proven here (a credential, an environment, data, a downstream service)."++ },++ "validation_plan": { "$ref": "#/$defs/validation_plan" },++ "reason": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000,++ "description": "Why a rejected claim does not stand."++ }++ },++ "allOf": [++ {++ "if": { "properties": { "verdict": { "const": "confirmed" } }, "required": ["verdict"] },++ "then": { "required": ["severity", "confidence"] }++ },++ {++ "if": { "properties": { "verdict": { "const": "needs_validation" } }, "required": ["verdict"] },++ "then": {++ "required": ["claimed_root_cause", "blockers", "validation_plan"],++ "not": { "required": ["severity"] }++ }++ },++ {++ "if": { "properties": { "verdict": { "const": "rejected" } }, "required": ["verdict"] },++ "then": {++ "required": ["reason"],++ "not": { "required": ["severity"] }++ }++ }++ ],++ "$defs": {++ "location": {++ "type": "object",++ "additionalProperties": false,++ "required": ["file"],++ "properties": {++ "file": {++ "type": "string",++ "minLength": 1,++ "maxLength": 500,++ "description": "Repository-relative path; no leading slash and no `..`."++ },++ "line": {++ "type": "integer",++ "minimum": 1,++ "description": "The line the finding is about, when it is one line."++ },++ "symbol": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200,++ "description": "The function, route or job the line belongs to."++ }++ }++ },++ "evidence": {++ "type": "object",++ "additionalProperties": false,++ "required": ["kind", "summary"],++ "properties": {++ "kind": {++ "type": "string",++ "enum": ["source", "command", "response", "screenshot", "log", "test"],++ "description": "What kind of evidence this is."++ },++ "summary": {++ "type": "string",++ "minLength": 1,++ "maxLength": 1000,++ "description": "What this shows, in one sentence."++ },++ "location": { "$ref": "#/$defs/location" },++ "command": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000++ },++ "output": {++ "type": "string",++ "minLength": 1,++ "maxLength": 4000++ }++ }++ },++ "severity": {++ "type": "object",++ "additionalProperties": false,++ "required": ["likelihood", "impact", "overall_severity"],++ "description": "The two axes stay separate: likelihood is how easily it is reached, impact is what it does, overall_severity may not exceed impact.",++ "properties": {++ "likelihood": { "$ref": "#/$defs/level" },++ "impact": { "$ref": "#/$defs/level" },++ "overall_severity": { "$ref": "#/$defs/level" }++ }++ },++ "level": {++ "type": "string",++ "enum": ["informational", "low", "medium", "high", "critical"]++ },++ "confidence": {++ "type": "object",++ "additionalProperties": false,++ "required": ["level", "reason"],++ "properties": {++ "level": {++ "type": "string",++ "enum": ["low", "medium", "high"]++ },++ "reason": {++ "type": "string",++ "minLength": 1,++ "maxLength": 1000++ }++ }++ },++ "remediation": {++ "type": "object",++ "additionalProperties": false,++ "required": ["strategy"],++ "properties": {++ "strategy": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000++ },++ "code_changes": {++ "type": "array",++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": ["file", "change"],++ "properties": {++ "file": {++ "type": "string",++ "minLength": 1,++ "maxLength": 500++ },++ "change": {++ "type": "string",++ "minLength": 1,++ "maxLength": 1000++ }++ }++ }++ }++ }++ },++ "validation_plan": {++ "type": "object",++ "additionalProperties": false,++ "properties": {++ "local": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000,++ "description": "How to prove or refute the lead on a machine with the repository."++ },++ "deployment": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000,++ "description": "How to prove or refute it where only a deployed service, its data or its credentials can."++ }++ },++ "anyOf": [++ { "required": ["local"] },++ { "required": ["deployment"] }++ ]++ }++ }++}@@@ -8587,6 +8587,15 @@"compatibility": "backward","status": "active"},++ {++ "id": "quest.today",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "quest/today.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },{"id": "quest.step-type","version": "1.0.0",@@@ -11160,6 +11169,15 @@"compatibility": "backward","status": "active"},++ {++ "id": "agent.finding",++ "version": "1.0.0",++ "owner": "actor",++ "schema": "agent/finding.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },{"id": "ai.effort","version": "1.0.0",@@@ -2,7 +2,7 @@"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://openvibe.network/contracts/network/operator-alerts-request.v1.json","title": "NetworkOperatorAlertsRequest",-- "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.",++ "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations. A browser-check alert may carry what its result file knows (details, the release and its commit link, when the check ran, since when it has been failing) so the notification can explain the problem in words and link to the page, the commit and the rule's help page. Every string is text, never markup; every URL is https.","type": "object","required": ["source", "alerts"],"additionalProperties": false,@@@ -23,7 +23,35 @@"summary": { "type": "string", "minLength": 1, "maxLength": 300 },"description": { "type": "string", "maxLength": 1000 },"service": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,39}$" },-- "started_at": { "type": "string", "format": "date-time" }++ "started_at": { "type": "string", "format": "date-time" },++ "details": {++ "type": "array",++ "maxItems": 5,++ "description": "What failed, for a browser-check alert (from the check's result file), most useful first. Plain text: a notification shows it escaped, never as markup.",++ "items": {++ "type": "object",++ "required": ["check"],++ "additionalProperties": false,++ "properties": {++ "route": { "type": "string", "maxLength": 200, "description": "The page's path on the site, e.g. /pricing." },++ "check": { "type": "string", "maxLength": 40, "description": "status, errors, overflow, scripts, jsonld or axe." },++ "rule": { "type": "string", "maxLength": 100, "description": "The axe rule id when check is axe." },++ "impact": { "enum": ["minor", "moderate", "serious", "critical"] },++ "targets": { "type": "array", "maxItems": 5, "items": { "type": "string", "maxLength": 160 }, "description": "The elements the rule names, as axe's target selectors." },++ "help": { "type": "string", "maxLength": 300, "description": "The rule's own help text (axe's help), for a rule the notification does not know." },++ "help_url": { "type": "string", "format": "uri", "maxLength": 500, "description": "The rule's help page (axe's helpUrl), when the check kept it." },++ "page_url": { "type": "string", "format": "uri", "maxLength": 500, "description": "The page that failed, on the site's own https origin." },++ "message": { "type": "string", "maxLength": 300, "description": "A console error's text, or a JSON-LD entity's type." },++ "width": { "type": "integer", "minimum": 0, "maximum": 10000, "description": "The viewport width the failure was seen at, when it is width-specific." },++ "status": { "type": "integer", "minimum": 100, "maximum": 599 },++ "offenders": { "type": "array", "maxItems": 5, "items": { "type": "string", "maxLength": 160 }, "description": "The elements that overflow the viewport." }++ }++ }++ },++ "release": { "type": "string", "pattern": "^[0-9a-f]{7,40}$", "description": "The deployed commit the browser check saw (the full sha when the host can resolve it)." },++ "release_url": { "type": "string", "format": "uri", "maxLength": 500, "description": "The release commit's page: git.openvibe.codes when the repository is mirrored there, else github.com." },++ "checked_at": { "type": "string", "format": "date-time", "description": "When the browser check that found this ran." },++ "failing_since": { "type": "string", "format": "date-time", "description": "When this alert started firing; the same instant as started_at, named for the notification's Failing since fact." }}}}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/today.v1.json",++ "title": "QuestToday",++ "description": "quest.today@1: today's private quest and progress for the signed-in person. GET /api/v1/quests/today requires a person token.",++ "$ref": "daily-progress.v1.json"++}nnew file mode 100644@@@ -0,0 +1,9 @@++{++ "verdict": "confirmed",++ "fingerprint": "server/x.js:a confirmed finding without severity",++ "title": "A confirmed finding without a severity",++ "description": "A confirmed finding must say how likely and how bad it is.",++ "trace": [ { "file": "server/x.js", "line": 1 } ],++ "evidence": [ { "kind": "test", "summary": "The failing test." } ],++ "confidence": { "level": "high", "reason": "The test fails." }++}nnew file mode 100644@@@ -0,0 +1,12 @@++{++ "verdict": "needs_validation",++ "fingerprint": "server/x.js:a lead with a severity",++ "title": "A lead that still carries a severity",++ "description": "A claim that could not be proven must stay a lead and carry no severity.",++ "trace": [ { "file": "server/x.js", "line": 1 } ],++ "evidence": [ { "kind": "source", "summary": "The source." } ],++ "claimed_root_cause": "A guess.",++ "blockers": [ "No credential." ],++ "validation_plan": { "local": "Try it." },++ "severity": { "likelihood": "low", "impact": "low", "overall_severity": "low" }++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "verdict": "needs_validation",++ "fingerprint": "server/x.js:a lead without its blocker",++ "title": "A lead without a blocker",++ "description": "An unprovable claim must say exactly what blocked it.",++ "trace": [ { "file": "server/x.js", "line": 1 } ],++ "evidence": [ { "kind": "source", "summary": "The source." } ],++ "claimed_root_cause": "A guess.",++ "validation_plan": { "local": "Try it." }++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "verdict": "rejected",++ "fingerprint": "server/x.js:a rejected claim without a reason",++ "title": "A rejected claim without a reason",++ "description": "A rejected finding must say why it does not stand.",++ "trace": [ { "file": "server/x.js", "line": 1 } ],++ "evidence": [ { "kind": "source", "summary": "The source." } ]++}nnew file mode 100644@@@ -0,0 +1,28 @@++{++ "verdict": "confirmed",++ "fingerprint": "server/session.js:the cookie is set without httponly",++ "title": "Session cookie has no HttpOnly flag",++ "description": "The sign-in response sets ov_session without HttpOnly, so a script on the page can read it.",++ "trace": [++ { "file": "server/session.js", "line": 42, "symbol": "setSessionCookie" }++ ],++ "evidence": [++ {++ "kind": "source",++ "summary": "The cookie options omit httpOnly.",++ "location": { "file": "server/session.js", "line": 42 }++ },++ {++ "kind": "command",++ "summary": "The sign-in response shows the cookie without HttpOnly.",++ "command": "curl -si -X POST localhost:4900/signin -d '{}' | grep set-cookie",++ "output": "set-cookie: ov_session=…; Path=/; SameSite=Lax"++ }++ ],++ "severity": { "likelihood": "medium", "impact": "high", "overall_severity": "high" },++ "confidence": { "level": "high", "reason": "Reproduced against the local server and the source shows the same." },++ "remediation": {++ "strategy": "Add HttpOnly to the cookie options.",++ "code_changes": [ { "file": "server/session.js", "change": "Add httpOnly: true to the cookie options." } ]++ }++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "verdict": "needs_validation",++ "fingerprint": "server/billing.js:the retry may debit twice",++ "title": "A retried debit may charge twice",++ "description": "The retry path calls the debit again without reading the receipt; on a real card this could charge twice.",++ "trace": [++ { "file": "server/billing.js", "line": 118, "symbol": "debitRetry" }++ ],++ "evidence": [++ {++ "kind": "source",++ "summary": "The retry calls debit() before the receipt is read.",++ "location": { "file": "server/billing.js", "line": 118 }++ }++ ],++ "claimed_root_cause": "The retry does not look up the first attempt's idempotency key.",++ "blockers": [++ "A test charge needs the live payment provider's sandbox credential, which is not on this machine."++ ],++ "validation_plan": {++ "local": "Point the provider client at the sandbox and post one retried payment; the provider's ledger shows one or two charges.",++ "deployment": "Replay a failed billing retry with a test account and read the provider's ledger."++ },++ "remediation": { "strategy": "Reuse the first attempt's idempotency key on the retry." }++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "verdict": "rejected",++ "fingerprint": "server/cache.js:the cache never expires",++ "title": "The cache never expires",++ "description": "The review said the cache has no expiry; the entry it named has a TTL two lines down.",++ "trace": [++ { "file": "server/cache.js", "line": 31, "symbol": "put" }++ ],++ "evidence": [++ {++ "kind": "source",++ "summary": "The named call passes ttlMs.",++ "location": { "file": "server/cache.js", "line": 31 }++ }++ ],++ "reason": "The TTL is set by the options object on line 34, which the review did not read."++}nnew file mode 100644@@@ -0,0 +1 @@++{ "source": "prometheus", "alerts": [ { "fingerprint": "3f1c2a9b7d4e6f80", "name": "OpenVibeBrowserCheckFailed", "severity": "critical", "summary": "domains: the browser check failed", "started_at": "2026-09-26T05:35:00Z", "details": [ { "route": "/", "rule": "summary-name" } ] } ] }nnew file mode 100644@@@ -0,0 +1,45 @@++{++ "source": "prometheus",++ "sent_at": "2026-11-10T09:20:00Z",++ "alerts": [++ {++ "fingerprint": "4c1f8a2d9e7b6c50",++ "name": "OpenVibeBrowserCheckFailed",++ "severity": "critical",++ "summary": "domains: the browser check of release 74bdff4 failed (1 failing check(s)); run: sudo ovhost browser-watch --sites domains --force",++ "description": "The automatic check of openvibe.domains found a problem after release 74bdff4.",++ "service": "domains",++ "started_at": "2026-11-10T09:12:30Z",++ "failing_since": "2026-11-10T09:12:30Z",++ "release": "74bdff4c0a1e9d2b7f3c5a8e6b4d2f1a0c9e8d7b",++ "release_url": "https://git.openvibe.codes/OpenVibers/OpenVibe.Domains/commit/74bdff4c0a1e9d2b7f3c5a8e6b4d2f1a0c9e8d7b",++ "checked_at": "2026-11-10T09:12:00Z",++ "details": [++ {++ "route": "/",++ "check": "axe",++ "rule": "summary-name",++ "impact": "serious",++ "targets": ["#dev-fold > summary", "#faq-fold > summary"],++ "help": "Ensures the summary element has a non-empty accessible name",++ "help_url": "https://dequeuniversity.com/rules/axe/4.13/summary-name?application=axeAPI",++ "page_url": "https://openvibe.domains/"++ }++ ]++ },++ {++ "fingerprint": "9a8b7c6d5e4f3a2b1c0d",++ "name": "OpenVibeBrowserCheckFailed",++ "severity": "warning",++ "summary": "live: the browser check of release 8caa540 failed (2 failing check(s))",++ "service": "live",++ "started_at": "2026-09-26T14:05:00Z",++ "release": "8caa540",++ "checked_at": "2026-09-26T14:04:00Z",++ "details": [++ { "route": "/", "check": "errors", "message": "WebSocket closed", "width": 390, "page_url": "https://openvibe.live/" },++ { "route": "/", "check": "overflow", "width": 390, "offenders": [".wide"], "page_url": "https://openvibe.live/" }++ ]++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,56 @@++{++ "date": "2026-11-08",++ "title": "Around the network",++ "story": "Visit three places today.",++ "steps": [++ {++ "id": "stream",++ "event_type": "live.stream.started",++ "site": "openvibe.live",++ "sentence": "Do something on openvibe.live",++ "href": "https://openvibe.live/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 1,++ "done": true++ },++ {++ "id": "chat",++ "event_type": "chat.room.message.created",++ "site": "openvibe.chat",++ "sentence": "Do something on openvibe.chat",++ "href": "https://openvibe.chat/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 1,++ "done": true++ },++ {++ "id": "wiki",++ "event_type": "wiki.revision.created",++ "site": "openvibe.wiki",++ "sentence": "Do something on openvibe.wiki",++ "href": "https://openvibe.wiki/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 1,++ "done": true++ }++ ],++ "source": "rotation",++ "finished_today": 3,++ "progress": 4,++ "completed": true,++ "completed_at": "2026-11-08T22:00:00Z",++ "streak": 1,++ "time_zone": "UTC"++}nnew file mode 100644@@@ -0,0 +1,56 @@++{++ "date": "2026-11-08",++ "title": "Around the network",++ "story": "Visit three places today.",++ "steps": [++ {++ "id": "stream",++ "event_type": "live.stream.started",++ "site": "openvibe.live",++ "sentence": "Do something on openvibe.live",++ "href": "https://openvibe.live/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 1,++ "done": true++ },++ {++ "id": "chat",++ "event_type": "chat.room.message.created",++ "site": "openvibe.chat",++ "sentence": "Do something on openvibe.chat",++ "href": "https://openvibe.chat/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 0,++ "done": false++ },++ {++ "id": "wiki",++ "event_type": "wiki.revision.created",++ "site": "openvibe.wiki",++ "sentence": "Do something on openvibe.wiki",++ "href": "https://openvibe.wiki/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 0,++ "done": false++ }++ ],++ "source": "rotation",++ "finished_today": 3,++ "progress": 1,++ "completed": false,++ "completed_at": null,++ "streak": 0,++ "time_zone": "America/Los_Angeles"++}@@@ -36239,7 +36239,7 @@"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://openvibe.network/contracts/network/operator-alerts-request.v1.json","title": "NetworkOperatorAlertsRequest",-- "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.",++ "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations. A browser-check alert may carry what its result file knows (details, the release and its commit link, when the check ran, since when it has been failing) so the notification can explain the problem in words and link to the page, the commit and the rule's help page. Every string is text, never markup; every URL is https.","type": "object","required": ["source",@@@ -36302,6 +36302,115 @@"started_at": {"type": "string","format": "date-time"++ },++ "details": {++ "type": "array",++ "maxItems": 5,++ "description": "What failed, for a browser-check alert (from the check's result file), most useful first. Plain text: a notification shows it escaped, never as markup.",++ "items": {++ "type": "object",++ "required": [++ "check"++ ],++ "additionalProperties": false,++ "properties": {++ "route": {++ "type": "string",++ "maxLength": 200,++ "description": "The page's path on the site, e.g. /pricing."++ },++ "check": {++ "type": "string",++ "maxLength": 40,++ "description": "status, errors, overflow, scripts, jsonld or axe."++ },++ "rule": {++ "type": "string",++ "maxLength": 100,++ "description": "The axe rule id when check is axe."++ },++ "impact": {++ "enum": [++ "minor",++ "moderate",++ "serious",++ "critical"++ ]++ },++ "targets": {++ "type": "array",++ "maxItems": 5,++ "items": {++ "type": "string",++ "maxLength": 160++ },++ "description": "The elements the rule names, as axe's target selectors."++ },++ "help": {++ "type": "string",++ "maxLength": 300,++ "description": "The rule's own help text (axe's help), for a rule the notification does not know."++ },++ "help_url": {++ "type": "string",++ "format": "uri",++ "maxLength": 500,++ "description": "The rule's help page (axe's helpUrl), when the check kept it."++ },++ "page_url": {++ "type": "string",++ "format": "uri",++ "maxLength": 500,++ "description": "The page that failed, on the site's own https origin."++ },++ "message": {++ "type": "string",++ "maxLength": 300,++ "description": "A console error's text, or a JSON-LD entity's type."++ },++ "width": {++ "type": "integer",++ "minimum": 0,++ "maximum": 10000,++ "description": "The viewport width the failure was seen at, when it is width-specific."++ },++ "status": {++ "type": "integer",++ "minimum": 100,++ "maximum": 599++ },++ "offenders": {++ "type": "array",++ "maxItems": 5,++ "items": {++ "type": "string",++ "maxLength": 160++ },++ "description": "The elements that overflow the viewport."++ }++ }++ }++ },++ "release": {++ "type": "string",++ "pattern": "^[0-9a-f]{7,40}$",++ "description": "The deployed commit the browser check saw (the full sha when the host can resolve it)."++ },++ "release_url": {++ "type": "string",++ "format": "uri",++ "maxLength": 500,++ "description": "The release commit's page: git.openvibe.codes when the repository is mirrored there, else github.com."++ },++ "checked_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the browser check that found this ran."++ },++ "failing_since": {++ "type": "string",++ "format": "date-time",++ "description": "When this alert started firing; the same instant as started_at, named for the notification's Failing since fact."}}}@@@ -95584,6 +95693,18 @@}}},++ "quest.today": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/today.v1.json",++ "title": "QuestToday",++ "description": "quest.today@1: today's private quest and progress for the signed-in person. GET /api/v1/quests/today requires a person token.",++ "$ref": "daily-progress.v1.json"++ }++ },"quest.step-type": {"version": "1.0.0","owner": "quest",@@@ -123314,6 +123435,365 @@]}},++ "agent.finding": {++ "version": "1.0.0",++ "owner": "actor",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/agent/finding.v1.json",++ "title": "AgentFinding",++ "description": "One finding of a review, a hunt or a security pass. The verdict is the evidence bar, not the severity: `confirmed` means the finding was reproduced or re-read and carries `severity` and `confidence`; `needs_validation` is an unprovable claim turned into a lead with an exact `blockers` entry and a `validation_plan`, and it has no severity by design (never noise, never a silent pass); `rejected` says why it does not stand. `fingerprint` is the stable identity — repository-relative file plus whitespace-normalised, lowercased text — so a re-wrapped finding keeps its id while a real rewording becomes a new one. `trace` and `evidence` carry repository-relative locations and the commands or answers that show the fact. A validator must also refuse `severity.overall_severity` above the demonstrated `severity.impact`; the schema cannot rank two enums, so `description` states the rule.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "verdict",++ "fingerprint",++ "title",++ "description",++ "trace",++ "evidence"++ ],++ "properties": {++ "verdict": {++ "type": "string",++ "enum": [++ "confirmed",++ "needs_validation",++ "rejected"++ ],++ "description": "confirmed: reproduced or re-read by a second agent. needs_validation: a lead that could not be proven locally; it carries blockers and a plan, never a severity. rejected: the claim was refuted; it carries a reason."++ },++ "fingerprint": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200,++ "description": "The stable id: repository-relative file + whitespace-normalised, lowercased finding text (for example `server/x.js:the cache never expires`)."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200++ },++ "description": {++ "type": "string",++ "minLength": 1,++ "maxLength": 4000,++ "description": "What is wrong, in plain words; no severity claim beyond the evidence."++ },++ "trace": {++ "type": "array",++ "minItems": 1,++ "maxItems": 50,++ "items": {++ "$ref": "#/$defs/location"++ },++ "description": "Where the issue lives, repository-relative, most specific first."++ },++ "evidence": {++ "type": "array",++ "minItems": 1,++ "maxItems": 50,++ "items": {++ "$ref": "#/$defs/evidence"++ },++ "description": "What shows the fact: the source read, the command and its output, the response, the screenshot or the test."++ },++ "severity": {++ "$ref": "#/$defs/severity"++ },++ "confidence": {++ "$ref": "#/$defs/confidence"++ },++ "remediation": {++ "$ref": "#/$defs/remediation"++ },++ "claimed_root_cause": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000,++ "description": "The suspected cause of a needs_validation lead, stated as a claim to test."++ },++ "blockers": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": {++ "type": "string",++ "minLength": 1,++ "maxLength": 500++ },++ "description": "The exact reason the claim could not be proven here (a credential, an environment, data, a downstream service)."++ },++ "validation_plan": {++ "$ref": "#/$defs/validation_plan"++ },++ "reason": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000,++ "description": "Why a rejected claim does not stand."++ }++ },++ "allOf": [++ {++ "if": {++ "properties": {++ "verdict": {++ "const": "confirmed"++ }++ },++ "required": [++ "verdict"++ ]++ },++ "then": {++ "required": [++ "severity",++ "confidence"++ ]++ }++ },++ {++ "if": {++ "properties": {++ "verdict": {++ "const": "needs_validation"++ }++ },++ "required": [++ "verdict"++ ]++ },++ "then": {++ "required": [++ "claimed_root_cause",++ "blockers",++ "validation_plan"++ ],++ "not": {++ "required": [++ "severity"++ ]++ }++ }++ },++ {++ "if": {++ "properties": {++ "verdict": {++ "const": "rejected"++ }++ },++ "required": [++ "verdict"++ ]++ },++ "then": {++ "required": [++ "reason"++ ],++ "not": {++ "required": [++ "severity"++ ]++ }++ }++ }++ ],++ "$defs": {++ "location": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "file"++ ],++ "properties": {++ "file": {++ "type": "string",++ "minLength": 1,++ "maxLength": 500,++ "description": "Repository-relative path; no leading slash and no `..`."++ },++ "line": {++ "type": "integer",++ "minimum": 1,++ "description": "The line the finding is about, when it is one line."++ },++ "symbol": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200,++ "description": "The function, route or job the line belongs to."++ }++ }++ },++ "evidence": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "kind",++ "summary"++ ],++ "properties": {++ "kind": {++ "type": "string",++ "enum": [++ "source",++ "command",++ "response",++ "screenshot",++ "log",++ "test"++ ],++ "description": "What kind of evidence this is."++ },++ "summary": {++ "type": "string",++ "minLength": 1,++ "maxLength": 1000,++ "description": "What this shows, in one sentence."++ },++ "location": {++ "$ref": "#/$defs/location"++ },++ "command": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000++ },++ "output": {++ "type": "string",++ "minLength": 1,++ "maxLength": 4000++ }++ }++ },++ "severity": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "likelihood",++ "impact",++ "overall_severity"++ ],++ "description": "The two axes stay separate: likelihood is how easily it is reached, impact is what it does, overall_severity may not exceed impact.",++ "properties": {++ "likelihood": {++ "$ref": "#/$defs/level"++ },++ "impact": {++ "$ref": "#/$defs/level"++ },++ "overall_severity": {++ "$ref": "#/$defs/level"++ }++ }++ },++ "level": {++ "type": "string",++ "enum": [++ "informational",++ "low",++ "medium",++ "high",++ "critical"++ ]++ },++ "confidence": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "level",++ "reason"++ ],++ "properties": {++ "level": {++ "type": "string",++ "enum": [++ "low",++ "medium",++ "high"++ ]++ },++ "reason": {++ "type": "string",++ "minLength": 1,++ "maxLength": 1000++ }++ }++ },++ "remediation": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "strategy"++ ],++ "properties": {++ "strategy": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000++ },++ "code_changes": {++ "type": "array",++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "file",++ "change"++ ],++ "properties": {++ "file": {++ "type": "string",++ "minLength": 1,++ "maxLength": 500++ },++ "change": {++ "type": "string",++ "minLength": 1,++ "maxLength": 1000++ }++ }++ }++ }++ }++ },++ "validation_plan": {++ "type": "object",++ "additionalProperties": false,++ "properties": {++ "local": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000,++ "description": "How to prove or refute the lead on a machine with the repository."++ },++ "deployment": {++ "type": "string",++ "minLength": 1,++ "maxLength": 2000,++ "description": "How to prove or refute it where only a deployed service, its data or its credentials can."++ }++ },++ "anyOf": [++ {++ "required": [++ "local"++ ]++ },++ {++ "required": [++ "deployment"++ ]++ }++ ]++ }++ }++ }++ },"ai.effort": {"version": "1.0.0","owner": "ai",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bench API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Blog API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bot API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Codes API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe Connect API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Coupons API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Deals API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Design API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Domains API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Events API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Exchange API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Food API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Games API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Git API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -2050,6 +2050,88 @@}}},++ "/api/v1/repos/{owner}/{name}/commits/{sha}/statuses": {++ "post": {++ "operationId": "post_api_v1_repos_owner_name_commits_sha_statuses",++ "summary": "Report commit statuses (checks) on OpenVibe.Git (git.openvibe.codes): POST /api/v1/repos/:owner/:name/commits/:sha/statuses with {context, state: pending|success|failure|error, description?, target_ur",++ "description": "**git.checks.write** (first-party): Report commit statuses (checks) on OpenVibe.Git (git.openvibe.codes): POST /api/v1/repos/:owner/:name/commits/:sha/statuses with {context, state: pending|success|failure|error, description?, target_url?}. A first-party CI service (Run first) holds this capability for the audience openvibe.git and reports any repository it builds; the owner may report their own. Reads (GET, the latest per context) need no capability on a public repository and git.repo.read on a private one. A change is mergeable only when its required contexts are green.",++ "tags": [++ "git.checks"++ ],++ "x-openvibe-capabilities": [++ "git.checks.write"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "git.checks.write"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-request.v1"++ }++ }++ }++ },++ "parameters": [++ {++ "name": "owner",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "name",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "sha",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/git.access-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/repos/{owner}/{name}/compare/{base}...{head}": {"get": {"operationId": "get_api_v1_repos_owner_name_compare_base_head",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Host API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -131,8 +131,8 @@"service": "git","name": "OpenVibe.Git","origin": "https://git.openvibe.codes",-- "operations": 35,-- "capabilities": 2++ "operations": 36,++ "capabilities": 3},{"service": "host",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Live API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Mail API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.MediaHub API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Media API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Network API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -8159,7 +8159,7 @@},"network.operator-alerts-request.v1": {"title": "NetworkOperatorAlertsRequest",-- "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.",++ "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations. A browser-check alert may carry what its result file knows (details, the release and its commit link, when the check ran, since when it has been failing) so the notification can explain the problem in words and link to the page, the commit and the rule's help page. Every string is text, never markup; every URL is https.","type": "object","required": ["source",@@@ -8222,6 +8222,115 @@"started_at": {"type": "string","format": "date-time"++ },++ "details": {++ "type": "array",++ "maxItems": 5,++ "description": "What failed, for a browser-check alert (from the check's result file), most useful first. Plain text: a notification shows it escaped, never as markup.",++ "items": {++ "type": "object",++ "required": [++ "check"++ ],++ "additionalProperties": false,++ "properties": {++ "route": {++ "type": "string",++ "maxLength": 200,++ "description": "The page's path on the site, e.g. /pricing."++ },++ "check": {++ "type": "string",++ "maxLength": 40,++ "description": "status, errors, overflow, scripts, jsonld or axe."++ },++ "rule": {++ "type": "string",++ "maxLength": 100,++ "description": "The axe rule id when check is axe."++ },++ "impact": {++ "enum": [++ "minor",++ "moderate",++ "serious",++ "critical"++ ]++ },++ "targets": {++ "type": "array",++ "maxItems": 5,++ "items": {++ "type": "string",++ "maxLength": 160++ },++ "description": "The elements the rule names, as axe's target selectors."++ },++ "help": {++ "type": "string",++ "maxLength": 300,++ "description": "The rule's own help text (axe's help), for a rule the notification does not know."++ },++ "help_url": {++ "type": "string",++ "format": "uri",++ "maxLength": 500,++ "description": "The rule's help page (axe's helpUrl), when the check kept it."++ },++ "page_url": {++ "type": "string",++ "format": "uri",++ "maxLength": 500,++ "description": "The page that failed, on the site's own https origin."++ },++ "message": {++ "type": "string",++ "maxLength": 300,++ "description": "A console error's text, or a JSON-LD entity's type."++ },++ "width": {++ "type": "integer",++ "minimum": 0,++ "maximum": 10000,++ "description": "The viewport width the failure was seen at, when it is width-specific."++ },++ "status": {++ "type": "integer",++ "minimum": 100,++ "maximum": 599++ },++ "offenders": {++ "type": "array",++ "maxItems": 5,++ "items": {++ "type": "string",++ "maxLength": 160++ },++ "description": "The elements that overflow the viewport."++ }++ }++ }++ },++ "release": {++ "type": "string",++ "pattern": "^[0-9a-f]{7,40}$",++ "description": "The deployed commit the browser check saw (the full sha when the host can resolve it)."++ },++ "release_url": {++ "type": "string",++ "format": "uri",++ "maxLength": 500,++ "description": "The release commit's page: git.openvibe.codes when the repository is mirrored there, else github.com."++ },++ "checked_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the browser check that found this ran."++ },++ "failing_since": {++ "type": "string",++ "format": "date-time",++ "description": "When this alert started firing; the same instant as started_at, named for the notification's Failing since fact."}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenRestream API",-- "version": "0.398.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Play API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Quest API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Report API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Reviews API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Run API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Search API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Services API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Sources API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Space API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tips API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Today API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tools API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Trade API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.VIP API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Vision API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Watch API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Wiki API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Work API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Zone API",-- "version": "0.398.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.399.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"@@@ -180590,7 +180590,7 @@ export interface NetworkFollowStatusResult {/** [email protected] (owner: network) *//**-- * network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.++ * network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations. A browser-check alert may carry what its result file knows (details, the release and its commit link, when the check ran, since when it has been failing) so the notification can explain the problem in words and link to the page, the commit and the rule's help page. Every string is text, never markup; every URL is https.*/export interface NetworkOperatorAlertsRequest {/**@@@ -180609,6 +180609,939 @@ export interface NetworkOperatorAlertsRequest {description?: string;service?: string;started_at: string;++ /**++ * What failed, for a browser-check alert (from the check's result file), most useful first. Plain text: a notification shows it escaped, never as markup.++ *++ * @maxItems 5++ */++ details?:++ | []++ | [++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ }++ ]++ | [++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ }++ ]++ | [++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ }++ ]++ | [++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ }++ ]++ | [++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ },++ {++ /**++ * The page's path on the site, e.g. /pricing.++ */++ route?: string;++ /**++ * status, errors, overflow, scripts, jsonld or axe.++ */++ check: string;++ /**++ * The axe rule id when check is axe.++ */++ rule?: string;++ impact?: "minor" | "moderate" | "serious" | "critical";++ /**++ * The elements the rule names, as axe's target selectors.++ *++ * @maxItems 5++ */++ targets?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ /**++ * The rule's own help text (axe's help), for a rule the notification does not know.++ */++ help?: string;++ /**++ * The rule's help page (axe's helpUrl), when the check kept it.++ */++ help_url?: string;++ /**++ * The page that failed, on the site's own https origin.++ */++ page_url?: string;++ /**++ * A console error's text, or a JSON-LD entity's type.++ */++ message?: string;++ /**++ * The viewport width the failure was seen at, when it is width-specific.++ */++ width?: number;++ status?: number;++ /**++ * The elements that overflow the viewport.++ *++ * @maxItems 5++ */++ offenders?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string];++ }++ ];++ /**++ * The deployed commit the browser check saw (the full sha when the host can resolve it).++ */++ release?: string;++ /**++ * The release commit's page: git.openvibe.codes when the repository is mirrored there, else github.com.++ */++ release_url?: string;++ /**++ * When the browser check that found this ran.++ */++ checked_at?: string;++ /**++ * When this alert started firing; the same instant as started_at, named for the notification's Failing since fact.++ */++ failing_since?: string;}[];}@@@ -279574,6 +280507,71 @@ export interface QuestDailyProgress {time_zone: string;}++/** [email protected] (owner: quest) */++/**++ * quest.today@1: today's private quest and progress for the signed-in person. GET /api/v1/quests/today requires a person token.++ */++export interface QuestToday {++ date: string;++ title: string;++ story: string;++ /**++ * @minItems 3++ * @maxItems 3++ */++ steps: [++ {++ id: string;++ event_type: string;++ site: string;++ sentence: string;++ href: string;++ weight: number;++ count: 1;++ verification: string;++ status: "approved";++ source: string;++ progress: number;++ done: boolean;++ },++ {++ id: string;++ event_type: string;++ site: string;++ sentence: string;++ href: string;++ weight: number;++ count: 1;++ verification: string;++ status: "approved";++ source: string;++ progress: number;++ done: boolean;++ },++ {++ id: string;++ event_type: string;++ site: string;++ sentence: string;++ href: string;++ weight: number;++ count: 1;++ verification: string;++ status: "approved";++ source: string;++ progress: number;++ done: boolean;++ }++ ];++ source: "ai" | "rotation";++ finished_today: number;++ progress: number;++ completed: boolean;++ completed_at?: string | null;++ streak: number;++ time_zone: string;++}++/** [email protected] (owner: quest) *//*** quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.@@@ -329807,6 +330805,1173 @@ export type AgentStage =| "idle"| "working";++/** [email protected] (owner: actor) */++/**++ * One finding of a review, a hunt or a security pass. The verdict is the evidence bar, not the severity: `confirmed` means the finding was reproduced or re-read and carries `severity` and `confidence`; `needs_validation` is an unprovable claim turned into a lead with an exact `blockers` entry and a `validation_plan`, and it has no severity by design (never noise, never a silent pass); `rejected` says why it does not stand. `fingerprint` is the stable identity — repository-relative file plus whitespace-normalised, lowercased text — so a re-wrapped finding keeps its id while a real rewording becomes a new one. `trace` and `evidence` carry repository-relative locations and the commands or answers that show the fact. A validator must also refuse `severity.overall_severity` above the demonstrated `severity.impact`; the schema cannot rank two enums, so `description` states the rule.++ */++export type AgentFinding = {++ [k: string]: unknown | undefined;++} & {++ /**++ * confirmed: reproduced or re-read by a second agent. needs_validation: a lead that could not be proven locally; it carries blockers and a plan, never a severity. rejected: the claim was refuted; it carries a reason.++ */++ verdict: "confirmed" | "needs_validation" | "rejected";++ /**++ * The stable id: repository-relative file + whitespace-normalised, lowercased finding text (for example `server/x.js:the cache never expires`).++ */++ fingerprint: string;++ title: string;++ /**++ * What is wrong, in plain words; no severity claim beyond the evidence.++ */++ description: string;++ /**++ * Where the issue lives, repository-relative, most specific first.++ *++ * @minItems 1++ * @maxItems 50++ */++ trace: [++ {++ /**++ * Repository-relative path; no leading slash and no `..`.++ */++ file: string;++ /**++ * The line the finding is about, when it is one line.++ */++ line?: number;++ /**++ * The function, route or job the line belongs to.++ */++ symbol?: string;++ },++ ...{++ /**++ * Repository-relative path; no leading slash and no `..`.++ */++ file: string;++ /**++ * The line the finding is about, when it is one line.++ */++ line?: number;++ /**++ * The function, route or job the line belongs to.++ */++ symbol?: string;++ }[]++ ];++ /**++ * What shows the fact: the source read, the command and its output, the response, the screenshot or the test.++ *++ * @minItems 1++ * @maxItems 50++ */++ evidence: [++ {++ /**++ * What kind of evidence this is.++ */++ kind: "source" | "command" | "response" | "screenshot" | "log" | "test";++ /**++ * What this shows, in one sentence.++ */++ summary: string;++ location?: {++ /**++ * Repository-relative path; no leading slash and no `..`.++ */++ file: string;++ /**++ * The line the finding is about, when it is one line.++ */++ line?: number;++ /**++ * The function, route or job the line belongs to.++ */++ symbol?: string;++ };++ command?: string;++ output?: string;++ },++ ...{++ /**++ * What kind of evidence this is.++ */++ kind: "source" | "command" | "response" | "screenshot" | "log" | "test";++ /**++ * What this shows, in one sentence.++ */++ summary: string;++ location?: {++ /**++ * Repository-relative path; no leading slash and no `..`.++ */++ file: string;++ /**++ * The line the finding is about, when it is one line.++ */++ line?: number;++ /**++ * The function, route or job the line belongs to.++ */++ symbol?: string;++ };++ command?: string;++ output?: string;++ }[]++ ];++ /**++ * The two axes stay separate: likelihood is how easily it is reached, impact is what it does, overall_severity may not exceed impact.++ */++ severity?: {++ likelihood: "informational" | "low" | "medium" | "high" | "critical";++ impact: "informational" | "low" | "medium" | "high" | "critical";++ overall_severity: "informational" | "low" | "medium" | "high" | "critical";++ };++ confidence?: {++ level: "low" | "medium" | "high";++ reason: string;++ };++ remediation?: {++ strategy: string;++ /**++ * @maxItems 20++ */++ code_changes?:++ | []++ | [++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ]++ | [++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ },++ {++ file: string;++ change: string;++ }++ ];++ };++ /**++ * The suspected cause of a needs_validation lead, stated as a claim to test.++ */++ claimed_root_cause?: string;++ /**++ * The exact reason the claim could not be proven here (a credential, an environment, data, a downstream service).++ *++ * @minItems 1++ * @maxItems 20++ */++ blockers?:++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string]++ | [string, string, string, string, string, string]++ | [string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string, string, string, string, string]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ];++ validation_plan?: {++ [k: string]: unknown | undefined;++ };++ /**++ * Why a rejected claim does not stand.++ */++ reason?: string;++};++/** [email protected] (owner: ai) *//*** Portable reasoning effort. auto resolves to the task default; unsupported model controls are ignored and receipt effort_applied is null.nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "git.checks.write",++ "version": "1.0",++ "owner": "git",++ "status": "active",++ "visibility": "first-party",++ "description": "Report commit statuses (checks) on OpenVibe.Git (git.openvibe.codes): POST /api/v1/repos/:owner/:name/commits/:sha/statuses with {context, state: pending|success|failure|error, description?, target_url?}. A first-party CI service (Run first) holds this capability for the audience openvibe.git and reports any repository it builds; the owner may report their own. Reads (GET, the latest per context) need no capability on a public repository and git.repo.read on a private one. A change is mergeable only when its required contexts are green.",++ "inputSchema": "git.access-request@1",++ "outputSchema": "git.access-result@1",++ "permissions": [++ "git:checks-write"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "POST /api/v1/repos/:owner/:name/commits/:sha/statuses"++ ]++}@@@ -17,7 +17,8 @@},"capabilities": ["git.repo.read",-- "git.repo.write"++ "git.repo.write",++ "git.checks.write"],"eventsProduced": [],"eventsConsumed": [],@@@ -1,12 +1,12 @@{"name": "openvibe-contracts",-- "version": "0.398.0",++ "version": "0.399.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.398.0",++ "version": "0.399.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.398.0",++ "version": "0.399.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",
@@ -1,5 +1,12 @@
@@ -1,5 +1,12 @@
# Changelog
# Changelog
+## 0.399.0 — 2026-11-10
+
+- #408: add `quest.today@1`, the private Quest today response.
+- #412: extend `network.operator-alerts-request@1` with browser-check evidence and release timing details.
+- #415: add the `git.checks.write` capability for reporting commit statuses.
+- #416: add `agent.finding@1` for confirmed findings, leads that need validation and rejected claims.
+
## 0.398.0 — 2026-11-10
## 0.398.0 — 2026-11-10
- `codes.task@2`'s outcome state names a goal task's honest end state: `ready` only with an accepted independent verdict, `waiting`, `blocked` at its no-progress limit, `failed`, `dropped` by the person, or `stopped_by_budget`. A task without a goal keeps `done`, `unfinished` and `stopped`.
- `codes.task@2`'s outcome state names a goal task's honest end state: `ready` only with an accepted independent verdict, `waiting`, `blocked` at its no-progress limit, `failed`, `dropped` by the person, or `stopped_by_budget`. A task without a goal keeps `done`, `unfinished` and `stopped`.
@@ -5,7 +5,7 @@
@@ -5,7 +5,7 @@
**Docs:** https://openvibe.services · **For AI:** https://openvibe.services/llms.txt
**Docs:** https://openvibe.services · **For AI:** https://openvibe.services/llms.txt
**Install and test:** `npm ci && npm test` (Node 20 or newer)
**Install and test:** `npm ci && npm test` (Node 20 or newer)
-**Status:** alpha (first released in Wave 1; the release is package.json's `version`, tagged). At v0.391.0: 1214 schemas in `contracts/catalog.json`, 65 service manifests, 512 capability manifests, 13 namespace manifests and the staff capability map. Service repositories run `openvibe-contracts-check` and the pin-drift check in CI, and deployed services verify service and app tokens with `serviceAuth` in production. Consumers pin release tags (each repository's `STATUS.json` names its pin). `node scripts/docs-currency.js <root>` checks every checkout's README and `STATUS.json` against its code: the pins and versions they name, a library's consumer list, the deployed flag against the manifest, README links, and the paths and migrations they name. `node scripts/estate.js` generates `docs/ESTATE.md` and `manifests/repositories/` from the estate checkouts, and `--check` fails on drift (plan T1 step 3).
+**Status:** alpha (first released in Wave 1; the release is package.json's `version`, tagged). At v0.399.0: 1219 schemas in `contracts/catalog.json`, 65 service manifests, 513 capability manifests, 13 namespace manifests and the staff capability map. Service repositories run `openvibe-contracts-check` and the pin-drift check in CI, and deployed services verify service and app tokens with `serviceAuth` in production. Consumers pin release tags (each repository's `STATUS.json` names its pin). `node scripts/docs-currency.js <root>` checks every checkout's README and `STATUS.json` against its code: the pins and versions they name, a library's consumer list, the deployed flag against the manifest, README links, and the paths and migrations they name. `node scripts/estate.js` generates `docs/ESTATE.md` and `manifests/repositories/` from the estate checkouts, and `--check` fails on drift (plan T1 step 3).
**Plan:** OpenVibe Development Roadmap, Wave 1 (implementation plan rev 3, §3.1 and §18.11).
**Plan:** OpenVibe Development Roadmap, Wave 1 (implementation plan rev 3, §3.1 and §18.11).
**License:** AGPL-3.0 (same as every OpenVibe service).
**License:** AGPL-3.0 (same as every OpenVibe service).
@@ -49,5 +49,5 @@
@@ -49,5 +49,5 @@
"bench.benchmark@1 and bench.run@1 with the capabilities bench.benchmark.write, bench.run.publish and bench.run.read: the benchmark registry and the results API (spec 2026-10-30, stage B1)",
"bench.benchmark@1 and bench.run@1 with the capabilities bench.benchmark.write, bench.run.publish and bench.run.read: the benchmark registry and the results API (spec 2026-10-30, stage B1)",
"mail.agent_inbox.received@1, mail.agent-inbox-message@1, mail.agent-reply-request@1, mail.agent-reply-result@1 and mail.inbox-answering@1, with the capabilities mail.agent.read, mail.agent.reply and mail.agent.answering (track HO6): an agent answers the mail sent to its own OpenVibe.Mail address, reads it in full text on the owner's behalf, replies from its own address in the thread, and answers only when the person's switch for that address is on"
"mail.agent_inbox.received@1, mail.agent-inbox-message@1, mail.agent-reply-request@1, mail.agent-reply-result@1 and mail.inbox-answering@1, with the capabilities mail.agent.read, mail.agent.reply and mail.agent.answering (track HO6): an agent answers the mail sent to its own OpenVibe.Mail address, reads it in full text on the owner's behalf, replies from its own address in the thread, and answers only when the person's switch for that address is on"
],
],
- "updated": "2026-11-07"
+ "updated": "2026-11-10"
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,231 @@
@@ -0,0 +1,231 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/agent/finding.v1.json",
+ "title": "AgentFinding",
+ "description": "One finding of a review, a hunt or a security pass. The verdict is the evidence bar, not the severity: `confirmed` means the finding was reproduced or re-read and carries `severity` and `confidence`; `needs_validation` is an unprovable claim turned into a lead with an exact `blockers` entry and a `validation_plan`, and it has no severity by design (never noise, never a silent pass); `rejected` says why it does not stand. `fingerprint` is the stable identity — repository-relative file plus whitespace-normalised, lowercased text — so a re-wrapped finding keeps its id while a real rewording becomes a new one. `trace` and `evidence` carry repository-relative locations and the commands or answers that show the fact. A validator must also refuse `severity.overall_severity` above the demonstrated `severity.impact`; the schema cannot rank two enums, so `description` states the rule.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["verdict", "fingerprint", "title", "description", "trace", "evidence"],
+ "properties": {
+ "verdict": {
+ "type": "string",
+ "enum": ["confirmed", "needs_validation", "rejected"],
+ "description": "confirmed: reproduced or re-read by a second agent. needs_validation: a lead that could not be proven locally; it carries blockers and a plan, never a severity. rejected: the claim was refuted; it carries a reason."
+ },
+ "fingerprint": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "description": "The stable id: repository-relative file + whitespace-normalised, lowercased finding text (for example `server/x.js:the cache never expires`)."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200
+ },
+ "description": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 4000,
+ "description": "What is wrong, in plain words; no severity claim beyond the evidence."
+ },
+ "trace": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 50,
+ "items": { "$ref": "#/$defs/location" },
+ "description": "Where the issue lives, repository-relative, most specific first."
+ },
+ "evidence": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 50,
+ "items": { "$ref": "#/$defs/evidence" },
+ "description": "What shows the fact: the source read, the command and its output, the response, the screenshot or the test."
+ },
+ "severity": { "$ref": "#/$defs/severity" },
+ "confidence": { "$ref": "#/$defs/confidence" },
+ "remediation": { "$ref": "#/$defs/remediation" },
+ "claimed_root_cause": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000,
+ "description": "The suspected cause of a needs_validation lead, stated as a claim to test."
+ },
+ "blockers": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": { "type": "string", "minLength": 1, "maxLength": 500 },
+ "description": "The exact reason the claim could not be proven here (a credential, an environment, data, a downstream service)."
+ },
+ "validation_plan": { "$ref": "#/$defs/validation_plan" },
+ "reason": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000,
+ "description": "Why a rejected claim does not stand."
+ }
+ },
+ "allOf": [
+ {
+ "if": { "properties": { "verdict": { "const": "confirmed" } }, "required": ["verdict"] },
+ "then": { "required": ["severity", "confidence"] }
+ },
+ {
+ "if": { "properties": { "verdict": { "const": "needs_validation" } }, "required": ["verdict"] },
+ "then": {
+ "required": ["claimed_root_cause", "blockers", "validation_plan"],
+ "not": { "required": ["severity"] }
+ }
+ },
+ {
+ "if": { "properties": { "verdict": { "const": "rejected" } }, "required": ["verdict"] },
+ "then": {
+ "required": ["reason"],
+ "not": { "required": ["severity"] }
+ }
+ }
+ ],
+ "$defs": {
+ "location": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["file"],
+ "properties": {
+ "file": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500,
+ "description": "Repository-relative path; no leading slash and no `..`."
+ },
+ "line": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "The line the finding is about, when it is one line."
+ },
+ "symbol": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "description": "The function, route or job the line belongs to."
+ }
+ }
+ },
+ "evidence": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["kind", "summary"],
+ "properties": {
+ "kind": {
+ "type": "string",
+ "enum": ["source", "command", "response", "screenshot", "log", "test"],
+ "description": "What kind of evidence this is."
+ },
+ "summary": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000,
+ "description": "What this shows, in one sentence."
+ },
+ "location": { "$ref": "#/$defs/location" },
+ "command": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000
+ },
+ "output": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 4000
+ }
+ }
+ },
+ "severity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["likelihood", "impact", "overall_severity"],
+ "description": "The two axes stay separate: likelihood is how easily it is reached, impact is what it does, overall_severity may not exceed impact.",
+ "properties": {
+ "likelihood": { "$ref": "#/$defs/level" },
+ "impact": { "$ref": "#/$defs/level" },
+ "overall_severity": { "$ref": "#/$defs/level" }
+ }
+ },
+ "level": {
+ "type": "string",
+ "enum": ["informational", "low", "medium", "high", "critical"]
+ },
+ "confidence": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["level", "reason"],
+ "properties": {
+ "level": {
+ "type": "string",
+ "enum": ["low", "medium", "high"]
+ },
+ "reason": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ }
+ }
+ },
+ "remediation": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["strategy"],
+ "properties": {
+ "strategy": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000
+ },
+ "code_changes": {
+ "type": "array",
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["file", "change"],
+ "properties": {
+ "file": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500
+ },
+ "change": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ }
+ }
+ }
+ }
+ }
+ },
+ "validation_plan": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "local": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000,
+ "description": "How to prove or refute the lead on a machine with the repository."
+ },
+ "deployment": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000,
+ "description": "How to prove or refute it where only a deployed service, its data or its credentials can."
+ }
+ },
+ "anyOf": [
+ { "required": ["local"] },
+ { "required": ["deployment"] }
+ ]
+ }
+ }
+}
@@ -8587,6 +8587,15 @@
@@ -8587,6 +8587,15 @@
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"status": "active"
},
},
+ {
+ "id": "quest.today",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "quest/today.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
{
{
"id": "quest.step-type",
"id": "quest.step-type",
"version": "1.0.0",
"version": "1.0.0",
@@ -11160,6 +11169,15 @@
@@ -11160,6 +11169,15 @@
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"status": "active"
},
},
+ {
+ "id": "agent.finding",
+ "version": "1.0.0",
+ "owner": "actor",
+ "schema": "agent/finding.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
{
{
"id": "ai.effort",
"id": "ai.effort",
"version": "1.0.0",
"version": "1.0.0",
@@ -2,7 +2,7 @@
@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/network/operator-alerts-request.v1.json",
"$id": "https://openvibe.network/contracts/network/operator-alerts-request.v1.json",
"title": "NetworkOperatorAlertsRequest",
"title": "NetworkOperatorAlertsRequest",
- "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.",
+ "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations. A browser-check alert may carry what its result file knows (details, the release and its commit link, when the check ran, since when it has been failing) so the notification can explain the problem in words and link to the page, the commit and the rule's help page. Every string is text, never markup; every URL is https.",
"type": "object",
"type": "object",
"required": ["source", "alerts"],
"required": ["source", "alerts"],
"additionalProperties": false,
"additionalProperties": false,
@@ -23,7 +23,35 @@
@@ -23,7 +23,35 @@
"summary": { "type": "string", "minLength": 1, "maxLength": 300 },
"summary": { "type": "string", "minLength": 1, "maxLength": 300 },
"description": { "type": "string", "maxLength": 1000 },
"description": { "type": "string", "maxLength": 1000 },
"service": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,39}$" },
"service": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,39}$" },
- "started_at": { "type": "string", "format": "date-time" }
+ "started_at": { "type": "string", "format": "date-time" },
+ "details": {
+ "type": "array",
+ "maxItems": 5,
+ "description": "What failed, for a browser-check alert (from the check's result file), most useful first. Plain text: a notification shows it escaped, never as markup.",
+ "items": {
+ "type": "object",
+ "required": ["check"],
+ "additionalProperties": false,
+ "properties": {
+ "route": { "type": "string", "maxLength": 200, "description": "The page's path on the site, e.g. /pricing." },
+ "check": { "type": "string", "maxLength": 40, "description": "status, errors, overflow, scripts, jsonld or axe." },
+ "rule": { "type": "string", "maxLength": 100, "description": "The axe rule id when check is axe." },
+ "impact": { "enum": ["minor", "moderate", "serious", "critical"] },
+ "targets": { "type": "array", "maxItems": 5, "items": { "type": "string", "maxLength": 160 }, "description": "The elements the rule names, as axe's target selectors." },
+ "help": { "type": "string", "maxLength": 300, "description": "The rule's own help text (axe's help), for a rule the notification does not know." },
+ "help_url": { "type": "string", "format": "uri", "maxLength": 500, "description": "The rule's help page (axe's helpUrl), when the check kept it." },
+ "page_url": { "type": "string", "format": "uri", "maxLength": 500, "description": "The page that failed, on the site's own https origin." },
+ "message": { "type": "string", "maxLength": 300, "description": "A console error's text, or a JSON-LD entity's type." },
+ "width": { "type": "integer", "minimum": 0, "maximum": 10000, "description": "The viewport width the failure was seen at, when it is width-specific." },
+ "status": { "type": "integer", "minimum": 100, "maximum": 599 },
+ "offenders": { "type": "array", "maxItems": 5, "items": { "type": "string", "maxLength": 160 }, "description": "The elements that overflow the viewport." }
+ }
+ }
+ },
+ "release": { "type": "string", "pattern": "^[0-9a-f]{7,40}$", "description": "The deployed commit the browser check saw (the full sha when the host can resolve it)." },
+ "release_url": { "type": "string", "format": "uri", "maxLength": 500, "description": "The release commit's page: git.openvibe.codes when the repository is mirrored there, else github.com." },
+ "checked_at": { "type": "string", "format": "date-time", "description": "When the browser check that found this ran." },
+ "failing_since": { "type": "string", "format": "date-time", "description": "When this alert started firing; the same instant as started_at, named for the notification's Failing since fact." }
}
}
}
}
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/today.v1.json",
+ "title": "QuestToday",
+ "description": "quest.today@1: today's private quest and progress for the signed-in person. GET /api/v1/quests/today requires a person token.",
+ "$ref": "daily-progress.v1.json"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "verdict": "confirmed",
+ "fingerprint": "server/x.js:a confirmed finding without severity",
+ "title": "A confirmed finding without a severity",
+ "description": "A confirmed finding must say how likely and how bad it is.",
+ "trace": [ { "file": "server/x.js", "line": 1 } ],
+ "evidence": [ { "kind": "test", "summary": "The failing test." } ],
+ "confidence": { "level": "high", "reason": "The test fails." }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
+{
+ "verdict": "needs_validation",
+ "fingerprint": "server/x.js:a lead with a severity",
+ "title": "A lead that still carries a severity",
+ "description": "A claim that could not be proven must stay a lead and carry no severity.",
+ "trace": [ { "file": "server/x.js", "line": 1 } ],
+ "evidence": [ { "kind": "source", "summary": "The source." } ],
+ "claimed_root_cause": "A guess.",
+ "blockers": [ "No credential." ],
+ "validation_plan": { "local": "Try it." },
+ "severity": { "likelihood": "low", "impact": "low", "overall_severity": "low" }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "verdict": "needs_validation",
+ "fingerprint": "server/x.js:a lead without its blocker",
+ "title": "A lead without a blocker",
+ "description": "An unprovable claim must say exactly what blocked it.",
+ "trace": [ { "file": "server/x.js", "line": 1 } ],
+ "evidence": [ { "kind": "source", "summary": "The source." } ],
+ "claimed_root_cause": "A guess.",
+ "validation_plan": { "local": "Try it." }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "verdict": "rejected",
+ "fingerprint": "server/x.js:a rejected claim without a reason",
+ "title": "A rejected claim without a reason",
+ "description": "A rejected finding must say why it does not stand.",
+ "trace": [ { "file": "server/x.js", "line": 1 } ],
+ "evidence": [ { "kind": "source", "summary": "The source." } ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
+{
+ "verdict": "confirmed",
+ "fingerprint": "server/session.js:the cookie is set without httponly",
+ "title": "Session cookie has no HttpOnly flag",
+ "description": "The sign-in response sets ov_session without HttpOnly, so a script on the page can read it.",
+ "trace": [
+ { "file": "server/session.js", "line": 42, "symbol": "setSessionCookie" }
+ ],
+ "evidence": [
+ {
+ "kind": "source",
+ "summary": "The cookie options omit httpOnly.",
+ "location": { "file": "server/session.js", "line": 42 }
+ },
+ {
+ "kind": "command",
+ "summary": "The sign-in response shows the cookie without HttpOnly.",
+ "command": "curl -si -X POST localhost:4900/signin -d '{}' | grep set-cookie",
+ "output": "set-cookie: ov_session=…; Path=/; SameSite=Lax"
+ }
+ ],
+ "severity": { "likelihood": "medium", "impact": "high", "overall_severity": "high" },
+ "confidence": { "level": "high", "reason": "Reproduced against the local server and the source shows the same." },
+ "remediation": {
+ "strategy": "Add HttpOnly to the cookie options.",
+ "code_changes": [ { "file": "server/session.js", "change": "Add httpOnly: true to the cookie options." } ]
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "verdict": "needs_validation",
+ "fingerprint": "server/billing.js:the retry may debit twice",
+ "title": "A retried debit may charge twice",
+ "description": "The retry path calls the debit again without reading the receipt; on a real card this could charge twice.",
+ "trace": [
+ { "file": "server/billing.js", "line": 118, "symbol": "debitRetry" }
+ ],
+ "evidence": [
+ {
+ "kind": "source",
+ "summary": "The retry calls debit() before the receipt is read.",
+ "location": { "file": "server/billing.js", "line": 118 }
+ }
+ ],
+ "claimed_root_cause": "The retry does not look up the first attempt's idempotency key.",
+ "blockers": [
+ "A test charge needs the live payment provider's sandbox credential, which is not on this machine."
+ ],
+ "validation_plan": {
+ "local": "Point the provider client at the sandbox and post one retried payment; the provider's ledger shows one or two charges.",
+ "deployment": "Replay a failed billing retry with a test account and read the provider's ledger."
+ },
+ "remediation": { "strategy": "Reuse the first attempt's idempotency key on the retry." }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "verdict": "rejected",
+ "fingerprint": "server/cache.js:the cache never expires",
+ "title": "The cache never expires",
+ "description": "The review said the cache has no expiry; the entry it named has a TTL two lines down.",
+ "trace": [
+ { "file": "server/cache.js", "line": 31, "symbol": "put" }
+ ],
+ "evidence": [
+ {
+ "kind": "source",
+ "summary": "The named call passes ttlMs.",
+ "location": { "file": "server/cache.js", "line": 31 }
+ }
+ ],
+ "reason": "The TTL is set by the options object on line 34, which the review did not read."
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "source": "prometheus", "alerts": [ { "fingerprint": "3f1c2a9b7d4e6f80", "name": "OpenVibeBrowserCheckFailed", "severity": "critical", "summary": "domains: the browser check failed", "started_at": "2026-09-26T05:35:00Z", "details": [ { "route": "/", "rule": "summary-name" } ] } ] }
new file mode 100644
new file mode 100644
@@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
+{
+ "source": "prometheus",
+ "sent_at": "2026-11-10T09:20:00Z",
+ "alerts": [
+ {
+ "fingerprint": "4c1f8a2d9e7b6c50",
+ "name": "OpenVibeBrowserCheckFailed",
+ "severity": "critical",
+ "summary": "domains: the browser check of release 74bdff4 failed (1 failing check(s)); run: sudo ovhost browser-watch --sites domains --force",
+ "description": "The automatic check of openvibe.domains found a problem after release 74bdff4.",
+ "service": "domains",
+ "started_at": "2026-11-10T09:12:30Z",
+ "failing_since": "2026-11-10T09:12:30Z",
+ "release": "74bdff4c0a1e9d2b7f3c5a8e6b4d2f1a0c9e8d7b",
+ "release_url": "https://git.openvibe.codes/OpenVibers/OpenVibe.Domains/commit/74bdff4c0a1e9d2b7f3c5a8e6b4d2f1a0c9e8d7b",
+ "checked_at": "2026-11-10T09:12:00Z",
+ "details": [
+ {
+ "route": "/",
+ "check": "axe",
+ "rule": "summary-name",
+ "impact": "serious",
+ "targets": ["#dev-fold > summary", "#faq-fold > summary"],
+ "help": "Ensures the summary element has a non-empty accessible name",
+ "help_url": "https://dequeuniversity.com/rules/axe/4.13/summary-name?application=axeAPI",
+ "page_url": "https://openvibe.domains/"
+ }
+ ]
+ },
+ {
+ "fingerprint": "9a8b7c6d5e4f3a2b1c0d",
+ "name": "OpenVibeBrowserCheckFailed",
+ "severity": "warning",
+ "summary": "live: the browser check of release 8caa540 failed (2 failing check(s))",
+ "service": "live",
+ "started_at": "2026-09-26T14:05:00Z",
+ "release": "8caa540",
+ "checked_at": "2026-09-26T14:04:00Z",
+ "details": [
+ { "route": "/", "check": "errors", "message": "WebSocket closed", "width": 390, "page_url": "https://openvibe.live/" },
+ { "route": "/", "check": "overflow", "width": 390, "offenders": [".wide"], "page_url": "https://openvibe.live/" }
+ ]
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
+{
+ "date": "2026-11-08",
+ "title": "Around the network",
+ "story": "Visit three places today.",
+ "steps": [
+ {
+ "id": "stream",
+ "event_type": "live.stream.started",
+ "site": "openvibe.live",
+ "sentence": "Do something on openvibe.live",
+ "href": "https://openvibe.live/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 1,
+ "done": true
+ },
+ {
+ "id": "chat",
+ "event_type": "chat.room.message.created",
+ "site": "openvibe.chat",
+ "sentence": "Do something on openvibe.chat",
+ "href": "https://openvibe.chat/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 1,
+ "done": true
+ },
+ {
+ "id": "wiki",
+ "event_type": "wiki.revision.created",
+ "site": "openvibe.wiki",
+ "sentence": "Do something on openvibe.wiki",
+ "href": "https://openvibe.wiki/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 1,
+ "done": true
+ }
+ ],
+ "source": "rotation",
+ "finished_today": 3,
+ "progress": 4,
+ "completed": true,
+ "completed_at": "2026-11-08T22:00:00Z",
+ "streak": 1,
+ "time_zone": "UTC"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
+{
+ "date": "2026-11-08",
+ "title": "Around the network",
+ "story": "Visit three places today.",
+ "steps": [
+ {
+ "id": "stream",
+ "event_type": "live.stream.started",
+ "site": "openvibe.live",
+ "sentence": "Do something on openvibe.live",
+ "href": "https://openvibe.live/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 1,
+ "done": true
+ },
+ {
+ "id": "chat",
+ "event_type": "chat.room.message.created",
+ "site": "openvibe.chat",
+ "sentence": "Do something on openvibe.chat",
+ "href": "https://openvibe.chat/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 0,
+ "done": false
+ },
+ {
+ "id": "wiki",
+ "event_type": "wiki.revision.created",
+ "site": "openvibe.wiki",
+ "sentence": "Do something on openvibe.wiki",
+ "href": "https://openvibe.wiki/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 0,
+ "done": false
+ }
+ ],
+ "source": "rotation",
+ "finished_today": 3,
+ "progress": 1,
+ "completed": false,
+ "completed_at": null,
+ "streak": 0,
+ "time_zone": "America/Los_Angeles"
+}
@@ -36239,7 +36239,7 @@
@@ -36239,7 +36239,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/network/operator-alerts-request.v1.json",
"$id": "https://openvibe.network/contracts/network/operator-alerts-request.v1.json",
"title": "NetworkOperatorAlertsRequest",
"title": "NetworkOperatorAlertsRequest",
- "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.",
+ "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations. A browser-check alert may carry what its result file knows (details, the release and its commit link, when the check ran, since when it has been failing) so the notification can explain the problem in words and link to the page, the commit and the rule's help page. Every string is text, never markup; every URL is https.",
"type": "object",
"type": "object",
"required": [
"required": [
"source",
"source",
@@ -36302,6 +36302,115 @@
@@ -36302,6 +36302,115 @@
"started_at": {
"started_at": {
"type": "string",
"type": "string",
"format": "date-time"
"format": "date-time"
+ },
+ "details": {
+ "type": "array",
+ "maxItems": 5,
+ "description": "What failed, for a browser-check alert (from the check's result file), most useful first. Plain text: a notification shows it escaped, never as markup.",
+ "items": {
+ "type": "object",
+ "required": [
+ "check"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "route": {
+ "type": "string",
+ "maxLength": 200,
+ "description": "The page's path on the site, e.g. /pricing."
+ },
+ "check": {
+ "type": "string",
+ "maxLength": 40,
+ "description": "status, errors, overflow, scripts, jsonld or axe."
+ },
+ "rule": {
+ "type": "string",
+ "maxLength": 100,
+ "description": "The axe rule id when check is axe."
+ },
+ "impact": {
+ "enum": [
+ "minor",
+ "moderate",
+ "serious",
+ "critical"
+ ]
+ },
+ "targets": {
+ "type": "array",
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 160
+ },
+ "description": "The elements the rule names, as axe's target selectors."
+ },
+ "help": {
+ "type": "string",
+ "maxLength": 300,
+ "description": "The rule's own help text (axe's help), for a rule the notification does not know."
+ },
+ "help_url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 500,
+ "description": "The rule's help page (axe's helpUrl), when the check kept it."
+ },
+ "page_url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 500,
+ "description": "The page that failed, on the site's own https origin."
+ },
+ "message": {
+ "type": "string",
+ "maxLength": 300,
+ "description": "A console error's text, or a JSON-LD entity's type."
+ },
+ "width": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 10000,
+ "description": "The viewport width the failure was seen at, when it is width-specific."
+ },
+ "status": {
+ "type": "integer",
+ "minimum": 100,
+ "maximum": 599
+ },
+ "offenders": {
+ "type": "array",
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 160
+ },
+ "description": "The elements that overflow the viewport."
+ }
+ }
+ }
+ },
+ "release": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{7,40}$",
+ "description": "The deployed commit the browser check saw (the full sha when the host can resolve it)."
+ },
+ "release_url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 500,
+ "description": "The release commit's page: git.openvibe.codes when the repository is mirrored there, else github.com."
+ },
+ "checked_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the browser check that found this ran."
+ },
+ "failing_since": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When this alert started firing; the same instant as started_at, named for the notification's Failing since fact."
}
}
}
}
}
}
@@ -95584,6 +95693,18 @@
@@ -95584,6 +95693,18 @@
}
}
}
}
},
},
+ "quest.today": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/today.v1.json",
+ "title": "QuestToday",
+ "description": "quest.today@1: today's private quest and progress for the signed-in person. GET /api/v1/quests/today requires a person token.",
+ "$ref": "daily-progress.v1.json"
+ }
+ },
"quest.step-type": {
"quest.step-type": {
"version": "1.0.0",
"version": "1.0.0",
"owner": "quest",
"owner": "quest",
@@ -123314,6 +123435,365 @@
@@ -123314,6 +123435,365 @@
]
]
}
}
},
},
+ "agent.finding": {
+ "version": "1.0.0",
+ "owner": "actor",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/agent/finding.v1.json",
+ "title": "AgentFinding",
+ "description": "One finding of a review, a hunt or a security pass. The verdict is the evidence bar, not the severity: `confirmed` means the finding was reproduced or re-read and carries `severity` and `confidence`; `needs_validation` is an unprovable claim turned into a lead with an exact `blockers` entry and a `validation_plan`, and it has no severity by design (never noise, never a silent pass); `rejected` says why it does not stand. `fingerprint` is the stable identity — repository-relative file plus whitespace-normalised, lowercased text — so a re-wrapped finding keeps its id while a real rewording becomes a new one. `trace` and `evidence` carry repository-relative locations and the commands or answers that show the fact. A validator must also refuse `severity.overall_severity` above the demonstrated `severity.impact`; the schema cannot rank two enums, so `description` states the rule.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "verdict",
+ "fingerprint",
+ "title",
+ "description",
+ "trace",
+ "evidence"
+ ],
+ "properties": {
+ "verdict": {
+ "type": "string",
+ "enum": [
+ "confirmed",
+ "needs_validation",
+ "rejected"
+ ],
+ "description": "confirmed: reproduced or re-read by a second agent. needs_validation: a lead that could not be proven locally; it carries blockers and a plan, never a severity. rejected: the claim was refuted; it carries a reason."
+ },
+ "fingerprint": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "description": "The stable id: repository-relative file + whitespace-normalised, lowercased finding text (for example `server/x.js:the cache never expires`)."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200
+ },
+ "description": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 4000,
+ "description": "What is wrong, in plain words; no severity claim beyond the evidence."
+ },
+ "trace": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/$defs/location"
+ },
+ "description": "Where the issue lives, repository-relative, most specific first."
+ },
+ "evidence": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/$defs/evidence"
+ },
+ "description": "What shows the fact: the source read, the command and its output, the response, the screenshot or the test."
+ },
+ "severity": {
+ "$ref": "#/$defs/severity"
+ },
+ "confidence": {
+ "$ref": "#/$defs/confidence"
+ },
+ "remediation": {
+ "$ref": "#/$defs/remediation"
+ },
+ "claimed_root_cause": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000,
+ "description": "The suspected cause of a needs_validation lead, stated as a claim to test."
+ },
+ "blockers": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500
+ },
+ "description": "The exact reason the claim could not be proven here (a credential, an environment, data, a downstream service)."
+ },
+ "validation_plan": {
+ "$ref": "#/$defs/validation_plan"
+ },
+ "reason": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000,
+ "description": "Why a rejected claim does not stand."
+ }
+ },
+ "allOf": [
+ {
+ "if": {
+ "properties": {
+ "verdict": {
+ "const": "confirmed"
+ }
+ },
+ "required": [
+ "verdict"
+ ]
+ },
+ "then": {
+ "required": [
+ "severity",
+ "confidence"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "verdict": {
+ "const": "needs_validation"
+ }
+ },
+ "required": [
+ "verdict"
+ ]
+ },
+ "then": {
+ "required": [
+ "claimed_root_cause",
+ "blockers",
+ "validation_plan"
+ ],
+ "not": {
+ "required": [
+ "severity"
+ ]
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "verdict": {
+ "const": "rejected"
+ }
+ },
+ "required": [
+ "verdict"
+ ]
+ },
+ "then": {
+ "required": [
+ "reason"
+ ],
+ "not": {
+ "required": [
+ "severity"
+ ]
+ }
+ }
+ }
+ ],
+ "$defs": {
+ "location": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500,
+ "description": "Repository-relative path; no leading slash and no `..`."
+ },
+ "line": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "The line the finding is about, when it is one line."
+ },
+ "symbol": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "description": "The function, route or job the line belongs to."
+ }
+ }
+ },
+ "evidence": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "kind",
+ "summary"
+ ],
+ "properties": {
+ "kind": {
+ "type": "string",
+ "enum": [
+ "source",
+ "command",
+ "response",
+ "screenshot",
+ "log",
+ "test"
+ ],
+ "description": "What kind of evidence this is."
+ },
+ "summary": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000,
+ "description": "What this shows, in one sentence."
+ },
+ "location": {
+ "$ref": "#/$defs/location"
+ },
+ "command": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000
+ },
+ "output": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 4000
+ }
+ }
+ },
+ "severity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "likelihood",
+ "impact",
+ "overall_severity"
+ ],
+ "description": "The two axes stay separate: likelihood is how easily it is reached, impact is what it does, overall_severity may not exceed impact.",
+ "properties": {
+ "likelihood": {
+ "$ref": "#/$defs/level"
+ },
+ "impact": {
+ "$ref": "#/$defs/level"
+ },
+ "overall_severity": {
+ "$ref": "#/$defs/level"
+ }
+ }
+ },
+ "level": {
+ "type": "string",
+ "enum": [
+ "informational",
+ "low",
+ "medium",
+ "high",
+ "critical"
+ ]
+ },
+ "confidence": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "level",
+ "reason"
+ ],
+ "properties": {
+ "level": {
+ "type": "string",
+ "enum": [
+ "low",
+ "medium",
+ "high"
+ ]
+ },
+ "reason": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ }
+ }
+ },
+ "remediation": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "strategy"
+ ],
+ "properties": {
+ "strategy": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000
+ },
+ "code_changes": {
+ "type": "array",
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "file",
+ "change"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500
+ },
+ "change": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ }
+ }
+ }
+ }
+ }
+ },
+ "validation_plan": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "local": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000,
+ "description": "How to prove or refute the lead on a machine with the repository."
+ },
+ "deployment": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2000,
+ "description": "How to prove or refute it where only a deployed service, its data or its credentials can."
+ }
+ },
+ "anyOf": [
+ {
+ "required": [
+ "local"
+ ]
+ },
+ {
+ "required": [
+ "deployment"
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
"ai.effort": {
"ai.effort": {
"version": "1.0.0",
"version": "1.0.0",
"owner": "ai",
"owner": "ai",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bench API",
"title": "OpenVibe.Bench API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"title": "OpenVibe.Codes API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe Connect API",
"title": "OpenVibe Connect API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Design API",
"title": "OpenVibe.Design API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"title": "OpenVibe.Domains API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Exchange API",
"title": "OpenVibe.Exchange API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Git API",
"title": "OpenVibe.Git API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -2050,6 +2050,88 @@
@@ -2050,6 +2050,88 @@
}
}
}
}
},
},
+ "/api/v1/repos/{owner}/{name}/commits/{sha}/statuses": {
+ "post": {
+ "operationId": "post_api_v1_repos_owner_name_commits_sha_statuses",
+ "summary": "Report commit statuses (checks) on OpenVibe.Git (git.openvibe.codes): POST /api/v1/repos/:owner/:name/commits/:sha/statuses with {context, state: pending|success|failure|error, description?, target_ur",
+ "description": "**git.checks.write** (first-party): Report commit statuses (checks) on OpenVibe.Git (git.openvibe.codes): POST /api/v1/repos/:owner/:name/commits/:sha/statuses with {context, state: pending|success|failure|error, description?, target_url?}. A first-party CI service (Run first) holds this capability for the audience openvibe.git and reports any repository it builds; the owner may report their own. Reads (GET, the latest per context) need no capability on a public repository and git.repo.read on a private one. A change is mergeable only when its required contexts are green.",
+ "tags": [
+ "git.checks"
+ ],
+ "x-openvibe-capabilities": [
+ "git.checks.write"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "git.checks.write"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-request.v1"
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "owner",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "sha",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/git.access-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/repos/{owner}/{name}/compare/{base}...{head}": {
"/api/v1/repos/{owner}/{name}/compare/{base}...{head}": {
"get": {
"get": {
"operationId": "get_api_v1_repos_owner_name_compare_base_head",
"operationId": "get_api_v1_repos_owner_name_compare_base_head",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -131,8 +131,8 @@
@@ -131,8 +131,8 @@
"service": "git",
"service": "git",
"name": "OpenVibe.Git",
"name": "OpenVibe.Git",
"origin": "https://git.openvibe.codes",
"origin": "https://git.openvibe.codes",
- "operations": 35,
- "capabilities": 2
+ "operations": 36,
+ "capabilities": 3
},
},
{
{
"service": "host",
"service": "host",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Mail API",
"title": "OpenVibe.Mail API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -8159,7 +8159,7 @@
@@ -8159,7 +8159,7 @@
},
},
"network.operator-alerts-request.v1": {
"network.operator-alerts-request.v1": {
"title": "NetworkOperatorAlertsRequest",
"title": "NetworkOperatorAlertsRequest",
- "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.",
+ "description": "network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations. A browser-check alert may carry what its result file knows (details, the release and its commit link, when the check ran, since when it has been failing) so the notification can explain the problem in words and link to the page, the commit and the rule's help page. Every string is text, never markup; every URL is https.",
"type": "object",
"type": "object",
"required": [
"required": [
"source",
"source",
@@ -8222,6 +8222,115 @@
@@ -8222,6 +8222,115 @@
"started_at": {
"started_at": {
"type": "string",
"type": "string",
"format": "date-time"
"format": "date-time"
+ },
+ "details": {
+ "type": "array",
+ "maxItems": 5,
+ "description": "What failed, for a browser-check alert (from the check's result file), most useful first. Plain text: a notification shows it escaped, never as markup.",
+ "items": {
+ "type": "object",
+ "required": [
+ "check"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "route": {
+ "type": "string",
+ "maxLength": 200,
+ "description": "The page's path on the site, e.g. /pricing."
+ },
+ "check": {
+ "type": "string",
+ "maxLength": 40,
+ "description": "status, errors, overflow, scripts, jsonld or axe."
+ },
+ "rule": {
+ "type": "string",
+ "maxLength": 100,
+ "description": "The axe rule id when check is axe."
+ },
+ "impact": {
+ "enum": [
+ "minor",
+ "moderate",
+ "serious",
+ "critical"
+ ]
+ },
+ "targets": {
+ "type": "array",
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 160
+ },
+ "description": "The elements the rule names, as axe's target selectors."
+ },
+ "help": {
+ "type": "string",
+ "maxLength": 300,
+ "description": "The rule's own help text (axe's help), for a rule the notification does not know."
+ },
+ "help_url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 500,
+ "description": "The rule's help page (axe's helpUrl), when the check kept it."
+ },
+ "page_url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 500,
+ "description": "The page that failed, on the site's own https origin."
+ },
+ "message": {
+ "type": "string",
+ "maxLength": 300,
+ "description": "A console error's text, or a JSON-LD entity's type."
+ },
+ "width": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 10000,
+ "description": "The viewport width the failure was seen at, when it is width-specific."
+ },
+ "status": {
+ "type": "integer",
+ "minimum": 100,
+ "maximum": 599
+ },
+ "offenders": {
+ "type": "array",
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 160
+ },
+ "description": "The elements that overflow the viewport."
+ }
+ }
+ }
+ },
+ "release": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{7,40}$",
+ "description": "The deployed commit the browser check saw (the full sha when the host can resolve it)."
+ },
+ "release_url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 500,
+ "description": "The release commit's page: git.openvibe.codes when the repository is mirrored there, else github.com."
+ },
+ "checked_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the browser check that found this ran."
+ },
+ "failing_since": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When this alert started firing; the same instant as started_at, named for the notification's Failing since fact."
}
}
}
}
}
}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.398.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"title": "OpenVibe.Play API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"title": "OpenVibe.Quest API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Report API",
"title": "OpenVibe.Report API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Today API",
"title": "OpenVibe.Today API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"title": "OpenVibe.Vision API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"title": "OpenVibe.Zone API",
- "version": "0.398.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.398.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.399.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.399.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -180590,7 +180590,7 @@ export interface NetworkFollowStatusResult {
@@ -180590,7 +180590,7 @@ export interface NetworkFollowStatusResult {
/** [email protected] (owner: network) */
/** [email protected] (owner: network) */
/**
/**
- * network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.
+ * network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations. A browser-check alert may carry what its result file knows (details, the release and its commit link, when the check ran, since when it has been failing) so the notification can explain the problem in words and link to the page, the commit and the rule's help page. Every string is text, never markup; every URL is https.
*/
*/
export interface NetworkOperatorAlertsRequest {
export interface NetworkOperatorAlertsRequest {
/**
/**
@@ -180609,6 +180609,939 @@ export interface NetworkOperatorAlertsRequest {
@@ -180609,6 +180609,939 @@ export interface NetworkOperatorAlertsRequest {
description?: string;
description?: string;
service?: string;
service?: string;
started_at: string;
started_at: string;
+ /**
+ * What failed, for a browser-check alert (from the check's result file), most useful first. Plain text: a notification shows it escaped, never as markup.
+ *
+ * @maxItems 5
+ */
+ details?:
+ | []
+ | [
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ }
+ ]
+ | [
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ }
+ ]
+ | [
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ }
+ ]
+ | [
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ }
+ ]
+ | [
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ },
+ {
+ /**
+ * The page's path on the site, e.g. /pricing.
+ */
+ route?: string;
+ /**
+ * status, errors, overflow, scripts, jsonld or axe.
+ */
+ check: string;
+ /**
+ * The axe rule id when check is axe.
+ */
+ rule?: string;
+ impact?: "minor" | "moderate" | "serious" | "critical";
+ /**
+ * The elements the rule names, as axe's target selectors.
+ *
+ * @maxItems 5
+ */
+ targets?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ /**
+ * The rule's own help text (axe's help), for a rule the notification does not know.
+ */
+ help?: string;
+ /**
+ * The rule's help page (axe's helpUrl), when the check kept it.
+ */
+ help_url?: string;
+ /**
+ * The page that failed, on the site's own https origin.
+ */
+ page_url?: string;
+ /**
+ * A console error's text, or a JSON-LD entity's type.
+ */
+ message?: string;
+ /**
+ * The viewport width the failure was seen at, when it is width-specific.
+ */
+ width?: number;
+ status?: number;
+ /**
+ * The elements that overflow the viewport.
+ *
+ * @maxItems 5
+ */
+ offenders?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string];
+ }
+ ];
+ /**
+ * The deployed commit the browser check saw (the full sha when the host can resolve it).
+ */
+ release?: string;
+ /**
+ * The release commit's page: git.openvibe.codes when the repository is mirrored there, else github.com.
+ */
+ release_url?: string;
+ /**
+ * When the browser check that found this ran.
+ */
+ checked_at?: string;
+ /**
+ * When this alert started firing; the same instant as started_at, named for the notification's Failing since fact.
+ */
+ failing_since?: string;
}[];
}[];
}
}
@@ -279574,6 +280507,71 @@ export interface QuestDailyProgress {
@@ -279574,6 +280507,71 @@ export interface QuestDailyProgress {
time_zone: string;
time_zone: string;
}
}
+/** [email protected] (owner: quest) */
+/**
+ * quest.today@1: today's private quest and progress for the signed-in person. GET /api/v1/quests/today requires a person token.
+ */
+export interface QuestToday {
+ date: string;
+ title: string;
+ story: string;
+ /**
+ * @minItems 3
+ * @maxItems 3
+ */
+ steps: [
+ {
+ id: string;
+ event_type: string;
+ site: string;
+ sentence: string;
+ href: string;
+ weight: number;
+ count: 1;
+ verification: string;
+ status: "approved";
+ source: string;
+ progress: number;
+ done: boolean;
+ },
+ {
+ id: string;
+ event_type: string;
+ site: string;
+ sentence: string;
+ href: string;
+ weight: number;
+ count: 1;
+ verification: string;
+ status: "approved";
+ source: string;
+ progress: number;
+ done: boolean;
+ },
+ {
+ id: string;
+ event_type: string;
+ site: string;
+ sentence: string;
+ href: string;
+ weight: number;
+ count: 1;
+ verification: string;
+ status: "approved";
+ source: string;
+ progress: number;
+ done: boolean;
+ }
+ ];
+ source: "ai" | "rotation";
+ finished_today: number;
+ progress: number;
+ completed: boolean;
+ completed_at?: string | null;
+ streak: number;
+ time_zone: string;
+}
+
/** [email protected] (owner: quest) */
/** [email protected] (owner: quest) */
/**
/**
* quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.
* quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.
@@ -329807,6 +330805,1173 @@ export type AgentStage =
@@ -329807,6 +330805,1173 @@ export type AgentStage =
| "idle"
| "idle"
| "working";
| "working";
+/** [email protected] (owner: actor) */
+/**
+ * One finding of a review, a hunt or a security pass. The verdict is the evidence bar, not the severity: `confirmed` means the finding was reproduced or re-read and carries `severity` and `confidence`; `needs_validation` is an unprovable claim turned into a lead with an exact `blockers` entry and a `validation_plan`, and it has no severity by design (never noise, never a silent pass); `rejected` says why it does not stand. `fingerprint` is the stable identity — repository-relative file plus whitespace-normalised, lowercased text — so a re-wrapped finding keeps its id while a real rewording becomes a new one. `trace` and `evidence` carry repository-relative locations and the commands or answers that show the fact. A validator must also refuse `severity.overall_severity` above the demonstrated `severity.impact`; the schema cannot rank two enums, so `description` states the rule.
+ */
+export type AgentFinding = {
+ [k: string]: unknown | undefined;
+} & {
+ /**
+ * confirmed: reproduced or re-read by a second agent. needs_validation: a lead that could not be proven locally; it carries blockers and a plan, never a severity. rejected: the claim was refuted; it carries a reason.
+ */
+ verdict: "confirmed" | "needs_validation" | "rejected";
+ /**
+ * The stable id: repository-relative file + whitespace-normalised, lowercased finding text (for example `server/x.js:the cache never expires`).
+ */
+ fingerprint: string;
+ title: string;
+ /**
+ * What is wrong, in plain words; no severity claim beyond the evidence.
+ */
+ description: string;
+ /**
+ * Where the issue lives, repository-relative, most specific first.
+ *
+ * @minItems 1
+ * @maxItems 50
+ */
+ trace: [
+ {
+ /**
+ * Repository-relative path; no leading slash and no `..`.
+ */
+ file: string;
+ /**
+ * The line the finding is about, when it is one line.
+ */
+ line?: number;
+ /**
+ * The function, route or job the line belongs to.
+ */
+ symbol?: string;
+ },
+ ...{
+ /**
+ * Repository-relative path; no leading slash and no `..`.
+ */
+ file: string;
+ /**
+ * The line the finding is about, when it is one line.
+ */
+ line?: number;
+ /**
+ * The function, route or job the line belongs to.
+ */
+ symbol?: string;
+ }[]
+ ];
+ /**
+ * What shows the fact: the source read, the command and its output, the response, the screenshot or the test.
+ *
+ * @minItems 1
+ * @maxItems 50
+ */
+ evidence: [
+ {
+ /**
+ * What kind of evidence this is.
+ */
+ kind: "source" | "command" | "response" | "screenshot" | "log" | "test";
+ /**
+ * What this shows, in one sentence.
+ */
+ summary: string;
+ location?: {
+ /**
+ * Repository-relative path; no leading slash and no `..`.
+ */
+ file: string;
+ /**
+ * The line the finding is about, when it is one line.
+ */
+ line?: number;
+ /**
+ * The function, route or job the line belongs to.
+ */
+ symbol?: string;
+ };
+ command?: string;
+ output?: string;
+ },
+ ...{
+ /**
+ * What kind of evidence this is.
+ */
+ kind: "source" | "command" | "response" | "screenshot" | "log" | "test";
+ /**
+ * What this shows, in one sentence.
+ */
+ summary: string;
+ location?: {
+ /**
+ * Repository-relative path; no leading slash and no `..`.
+ */
+ file: string;
+ /**
+ * The line the finding is about, when it is one line.
+ */
+ line?: number;
+ /**
+ * The function, route or job the line belongs to.
+ */
+ symbol?: string;
+ };
+ command?: string;
+ output?: string;
+ }[]
+ ];
+ /**
+ * The two axes stay separate: likelihood is how easily it is reached, impact is what it does, overall_severity may not exceed impact.
+ */
+ severity?: {
+ likelihood: "informational" | "low" | "medium" | "high" | "critical";
+ impact: "informational" | "low" | "medium" | "high" | "critical";
+ overall_severity: "informational" | "low" | "medium" | "high" | "critical";
+ };
+ confidence?: {
+ level: "low" | "medium" | "high";
+ reason: string;
+ };
+ remediation?: {
+ strategy: string;
+ /**
+ * @maxItems 20
+ */
+ code_changes?:
+ | []
+ | [
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ]
+ | [
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ },
+ {
+ file: string;
+ change: string;
+ }
+ ];
+ };
+ /**
+ * The suspected cause of a needs_validation lead, stated as a claim to test.
+ */
+ claimed_root_cause?: string;
+ /**
+ * The exact reason the claim could not be proven here (a credential, an environment, data, a downstream service).
+ *
+ * @minItems 1
+ * @maxItems 20
+ */
+ blockers?:
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string]
+ | [string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string, string, string, string, string]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ];
+ validation_plan?: {
+ [k: string]: unknown | undefined;
+ };
+ /**
+ * Why a rejected claim does not stand.
+ */
+ reason?: string;
+};
+
/** [email protected] (owner: ai) */
/** [email protected] (owner: ai) */
/**
/**
* Portable reasoning effort. auto resolves to the task default; unsupported model controls are ignored and receipt effort_applied is null.
* Portable reasoning effort. auto resolves to the task default; unsupported model controls are ignored and receipt effort_applied is null.
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "git.checks.write",
+ "version": "1.0",
+ "owner": "git",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Report commit statuses (checks) on OpenVibe.Git (git.openvibe.codes): POST /api/v1/repos/:owner/:name/commits/:sha/statuses with {context, state: pending|success|failure|error, description?, target_url?}. A first-party CI service (Run first) holds this capability for the audience openvibe.git and reports any repository it builds; the owner may report their own. Reads (GET, the latest per context) need no capability on a public repository and git.repo.read on a private one. A change is mergeable only when its required contexts are green.",
+ "inputSchema": "git.access-request@1",
+ "outputSchema": "git.access-result@1",
+ "permissions": [
+ "git:checks-write"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/repos/:owner/:name/commits/:sha/statuses"
+ ]
+}
@@ -17,7 +17,8 @@
@@ -17,7 +17,8 @@
},
},
"capabilities": [
"capabilities": [
"git.repo.read",
"git.repo.read",
- "git.repo.write"
+ "git.repo.write",
+ "git.checks.write"
],
],
"eventsProduced": [],
"eventsProduced": [],
"eventsConsumed": [],
"eventsConsumed": [],
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.398.0",
+ "version": "0.399.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.398.0",
+ "version": "0.399.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.398.0",
+ "version": "0.399.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",