From 15c065d2bb1e05fcda7c33d7b50e433f598a3ce3 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 11 Nov 2026 10:47:35 +0100 Subject: [PATCH] CT8: the seat mesh-delivery-checker: the events owed per repository and number, and checked MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Builds: design 47 G §162, §164, §260 (owed on mesh.seat.mesh-delivery-checker.event.owed.., kept 7 days and 64 MiB per §396; checked). Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ --- .../fixtures/events.json | 47 +++++ .../seats/mesh-delivery-checker/seat.json | 161 +++++++++++++++++- 2 files changed, 206 insertions(+), 2 deletions(-) diff --git a/contracts/seats/mesh-delivery-checker/fixtures/events.json b/contracts/seats/mesh-delivery-checker/fixtures/events.json index 7df46f68..f73f5340 100644 --- a/contracts/seats/mesh-delivery-checker/fixtures/events.json +++ b/contracts/seats/mesh-delivery-checker/fixtures/events.json @@ -40,5 +40,52 @@ "of": "holder-event:preview.written", "subject": "mesh.stream.mesh-delivery-checker.event.preview.written", "given": {} + }, + { + "name": "checked is said", + "of": "event:checked", + "subject": "mesh.seat.mesh-delivery-checker.event.checked", + "given": { + "group": "feat/47-G", + "heads": "0123456789ab", + "source": 3611, + "catalog": 3612, + "verdict": "pass", + "entries": [ + { + "module": "mesh-delivery-gate", + "fp": "src2:1480985e" + } + ], + "at": "2026-11-09T20:30:00Z" + } + }, + { + "name": "checked is said when it could not run", + "of": "event:checked", + "subject": "mesh.seat.mesh-delivery-checker.event.checked", + "given": { + "group": "feat/47-G", + "heads": "0123456789ab", + "verdict": "could not run", + "words": "the seat git's holder did not answer" + } + }, + { + "name": "owed is said", + "of": "event:owed", + "subject": "mesh.seat.mesh-delivery-checker.event.owed.novox/mesh-sdk.178", + "given": { + "id": "status.novox/mesh-sdk#178.aaaaaaaaaaaa.mesh/check", + "act": "status", + "repository": "novox/mesh-sdk", + "number": 178, + "head": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "context": "mesh/check", + "state": "success", + "description": "passed", + "target": "https://forge.test/x", + "said": "2026-11-09T20:30:00Z" + } } ] diff --git a/contracts/seats/mesh-delivery-checker/seat.json b/contracts/seats/mesh-delivery-checker/seat.json index 4354b5ca..17c9b7f4 100644 --- a/contracts/seats/mesh-delivery-checker/seat.json +++ b/contracts/seats/mesh-delivery-checker/seat.json @@ -176,7 +176,79 @@ } } ], - "description": "The merge check's tries: start one, read one, end one. The checker's own events stay under its own subjects (ADR 0620 §2).", + "description": "The merge check's tries: start one, read one, end one. The seat says each check's end as checked and what the checker owes the forge as owed; the checker's other events stay under its own subjects (ADR 0620 \u00a72).", + "family": { + "name": "mesh-delivery-checker.events", + "max-age-days": 7 + }, + "events": [ + { + "name": "checked", + "body": { + "type": "object", + "description": "a candidate checked: its entries judged at the group's heads (design 47 *What each step says*)", + "properties": { + "group": { + "type": "string", + "description": "the group, its branch" + }, + "heads": { + "type": "string", + "description": "the heads checked, 12 hex digits, as the candidate's revisions are keyed" + }, + "source": { + "type": "integer", + "description": "the source revision the heads are merged onto" + }, + "catalog": { + "type": "integer", + "description": "the candidate's catalog graph revision judged, by its number on the seat mesh-catalog" + }, + "verdict": { + "type": "string", + "enum": [ + "pass", + "fail", + "could not run" + ], + "description": "pass, fail, or could not run when a part the check needs did not answer" + }, + "words": { + "type": "string", + "description": "what failed first, or the part not heard" + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/defs/CheckedEntry" + }, + "description": "the entries checked" + }, + "at": { + "type": "string", + "format": "date-time", + "description": "when" + } + }, + "required": [ + "group", + "heads", + "verdict" + ] + } + }, + { + "name": "owed", + "subject": "owed..", + "body": { + "$ref": "#/defs/Owed" + }, + "keep": { + "max-age-days": 7, + "max-mib": 64 + } + } + ], "holder-events": [ { "name": "verdict", @@ -746,5 +818,90 @@ "description": "the previews of a head merged onto a trunk", "history": 5 } - ] + ], + "defs": { + "Owed": { + "type": "object", + "description": "the status the checker owes the forge for a head, said under its id and safe to repeat (a status replaces what stands); the forge bridge performs it through the seat git's verb status (design 47 *What the gate owes the forge*)", + "properties": { + "id": { + "type": "string", + "description": "the act's id, the same each time it is said again" + }, + "act": { + "type": "string", + "enum": [ + "status" + ], + "description": "the act: always status" + }, + "repository": { + "type": "string", + "description": "the repository, /", + "minLength": 1 + }, + "number": { + "type": "integer", + "description": "the pull request's number" + }, + "head": { + "type": "string", + "description": "the pull request's head the status is on", + "pattern": "^[0-9a-f]{40}$" + }, + "context": { + "type": "string", + "description": "its context, mesh/check" + }, + "state": { + "type": "string", + "description": "pending, success, failure or error" + }, + "description": { + "type": "string", + "description": "what it says" + }, + "target": { + "type": "string", + "description": "the page it links to" + }, + "said": { + "type": "string", + "format": "date-time", + "description": "when the checker first said it" + } + }, + "required": [ + "id", + "act", + "repository", + "number", + "head", + "context", + "state" + ] + }, + "CheckedEntry": { + "type": "object", + "description": "one entry of the candidate checked: a module at its fingerprint", + "properties": { + "module": { + "type": "string", + "description": "the module" + }, + "fp": { + "type": "string", + "description": "the entry's fingerprint" + }, + "node": { + "type": "string", + "description": "the node it was composed for, when the check composed it on one" + } + }, + "required": [ + "module", + "fp" + ] + } + } }