From 751923d326007a196fa5f5f2fcd039a642455a8a Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 31 Oct 2026 06:01:43 +0100 Subject: [PATCH] schemas: regenerate the mind request and response wire schemas for the Pulse kind Co-Authored-By: Claude Sonnet 5.5 --- .../huginn.mind_request.v1.schema.json | 76 ++++++++++++-- .../huginn.mind_response.v1.schema.json | 99 ++++++++++++++++++- 2 files changed, 166 insertions(+), 9 deletions(-) diff --git a/schemas/cultnet/huginn.mind_request.v1.schema.json b/schemas/cultnet/huginn.mind_request.v1.schema.json index 0059e46..3f42cb9 100644 --- a/schemas/cultnet/huginn.mind_request.v1.schema.json +++ b/schemas/cultnet/huginn.mind_request.v1.schema.json @@ -494,7 +494,10 @@ "description": "Text of at most 1,000 UTF-8 bytes.", "type": "string", "maxLength": 1000 - }, + +thread 'wire::tests::published_wire_schemas_match_derivation' (6195) panicked at crates/huginn-mind/src/wire.rs:365:9: +assertion `left == right` failed + left: "{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"HuginnMindRequest\",\n \"description\": \"Every operation a mind answers. `Admit` carries the batch whole because the\\nbatch already names the instance and the asker; a second `instance` beside\\nit would be two declarations. Every read names the instance because ruling\\n14 refuses another mind's identity whatever the transport, and a read of\\nthe wrong mind is that same collision on the read side. `Whoami` names\\nnone: it is how a client learns which mind it reached.\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\n \"Whoami\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"Admit\": {\n \"$ref\": \"#/$defs/PipelineAdmissionBatch\"\n }\n },\n \"additionalProperties\": false,\n \"required\": [\n \"Admit\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"View\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"$ref\": \"#/$defs/PipelineRef\"\n },\n \"instance\": {\n \"$ref\": \"#/$defs/Slug\"\n }\n },\n \"required\": [\n \"instance\",\n \"id\"\n ]\n }\n },\n \"additionalProperties\": false,\n \"required\": [\n \"View\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"Query\": {\n \"type\": \"object\",\n \"properties\": {\n \"instance\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"selection\": {\n \"$ref\": \"https://github.com/GameCult/CultLib/contracts/cultnet/cultnet.selection.schema.json\"\n },\n \"semantic\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/$defs/SemanticQuery\"\n },\n {\n \"type\": \"null\"\n }\n ]\n }\n },\n \"required\": [\n \"instance\",\n \"selection\"\n ]\n }\n },\n \"additionalProperties\": false,\n \"required\": [\n \"Query\"\n ]\n },\n {\n \"description\": \"The mind's persona document, if one is stored.\",\n \"type\": \"object\",\n \"properties\": {\n \"PersonaGet\": {\n \"type\": \"object\",\n \"properties\": {\n \"instance\": {\n \"$ref\": \"#/$defs/Slug\"\n }\n },\n \"required\": [\n \"instance\"\n ]\n }\n },\n \"additionalProperties\": false,\n \"required\": [\n \"PersonaGet\"\n ]\n },\n {\n \"description\": \"Replaces the mind's persona document whole. `expected_updated_at` is\\nthe stored document's `updatedAt`, none for the first put. The\\nprovenance is the asker's, as for `Admit`.\",\n \"type\": \"object\",\n \"properties\": {\n \"PersonaPut\": {\n \"type\": \"object\",\n \"properties\": {\n \"expected_updated_at\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n },\n \"instance\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"provenance\": {\n \"$ref\": \"#/$defs/PipelineProvenance\"\n },\n \"state\": true\n },\n \"required\": [\n \"instance\",\n \"provenance\",\n \"state\"\n ]\n }\n },\n \"additionalProperties\": false,\n \"required\": [\n \"PersonaPut\"\n ]\n }\n ],\n \"$defs\": {\n \"AuthorityMap\": {\n \"type\": \"object\",\n \"properties\": {\n \"deletion_line\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"derived_state\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 16\n },\n \"forbidden_writers\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 16\n },\n \"inputs\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 16\n },\n \"outputs\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 16\n },\n \"owner\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"shared_paths\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 16\n }\n },\n \"required\": [\n \"owner\",\n \"inputs\",\n \"outputs\",\n \"derived_state\",\n \"forbidden_writers\",\n \"shared_paths\",\n \"deletion_line\"\n ]\n },\n \"ClaimOutcome\": {\n \"type\": \"string\",\n \"enum\": [\n \"Holds\",\n \"Falsified\",\n \"Unproven\"\n ]\n },\n \"CodeLocation\": {\n \"type\": \"object\",\n \"properties\": {\n \"end_line\": {\n \"type\": [\n \"integer\",\n \"null\"\n ],\n \"format\": \"uint32\",\n \"minimum\": 0\n },\n \"line\": {\n \"type\": \"integer\",\n \"format\": \"uint32\",\n \"minimum\": 0\n },\n \"path\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"symbol\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/$defs/Symbol\"\n },\n {\n \"type\": \"null\"\n }\n ]\n }\n },\n \"required\": [\n \"path\",\n \"line\"\n ]\n },\n \"CommitRange\": {\n \"type\": \"object\",\n \"properties\": {\n \"base\": {\n \"$ref\": \"#/$defs/Sha\"\n },\n \"head\": {\n \"$ref\": \"#/$defs/Sha\"\n }\n },\n \"required\": [\n \"base\",\n \"head\"\n ]\n },\n \"CutDelete\": {\n \"type\": \"object\",\n \"properties\": {\n \"lines\": {\n \"type\": \"integer\",\n \"format\": \"uint32\",\n \"minimum\": 0\n },\n \"note\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"path\": {\n \"$ref\": \"#/$defs/Short\"\n }\n },\n \"required\": [\n \"path\",\n \"lines\",\n \"note\"\n ]\n },\n \"CutVerification\": {\n \"type\": \"object\",\n \"properties\": {\n \"builds\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 64\n },\n \"negative\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/NegativeCheck\"\n },\n \"maxItems\": 64\n },\n \"operator\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 64\n },\n \"tests\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/VerificationTest\"\n },\n \"maxItems\": 64\n }\n },\n \"required\": [\n \"builds\",\n \"tests\",\n \"negative\",\n \"operator\"\n ]\n },\n \"Date\": {\n \"description\": \"A calendar date, `YYYY-MM-DD`.\",\n \"type\": \"string\",\n \"maxLength\": 10\n },\n \"Deviation\": {\n \"type\": \"object\",\n \"properties\": {\n \"what\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"why\": {\n \"$ref\": \"#/$defs/Line\"\n }\n },\n \"required\": [\n \"what\",\n \"why\"\n ]\n },\n \"DocRef\": {\n \"type\": \"object\",\n \"properties\": {\n \"commit\": {\n \"$ref\": \"#/$defs/Sha\"\n },\n \"end_line\": {\n \"type\": \"integer\",\n \"format\": \"uint32\",\n \"minimum\": 0\n },\n \"path\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"start_line\": {\n \"type\": \"integer\",\n \"format\": \"uint32\",\n \"minimum\": 0\n }\n },\n \"required\": [\n \"path\",\n \"start_line\",\n \"end_line\",\n \"commit\"\n ]\n },\n \"Evidence\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"$ref\": \"#/$defs/EvidenceKind\"\n },\n \"locator\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"result\": {\n \"$ref\": \"#/$defs/Line\"\n }\n },\n \"required\": [\n \"kind\",\n \"locator\",\n \"result\"\n ]\n },\n \"EvidenceKind\": {\n \"type\": \"string\",\n \"enum\": [\n \"Command\",\n \"Test\",\n \"Mutation\",\n \"Probe\",\n \"SourceRead\",\n \"Capture\"\n ]\n },\n \"Faculty\": {\n \"description\": \"Which faculty a batch was admitted as. Attribution, not authority\\n(ruling 18): no admission rule trusts it, and Cut 9's views read it back\\nfrom the receipt.\",\n \"type\": \"string\",\n \"enum\": [\n \"SelfFaculty\",\n \"Imagination\",\n \"Hands\",\n \"Soul\",\n \"Life\",\n \"Eyes\",\n \"Operator\"\n ]\n },\n \"FileChange\": {\n \"type\": \"object\",\n \"properties\": {\n \"change\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"location\": {\n \"$ref\": \"#/$defs/CodeLocation\"\n }\n },\n \"required\": [\n \"location\",\n \"change\"\n ]\n },\n \"FindingConfidence\": {\n \"type\": \"string\",\n \"enum\": [\n \"Confirmed\",\n \"Plausible\"\n ]\n },\n \"FindingOrigin\": {\n \"type\": \"string\",\n \"enum\": [\n \"Introduced\",\n \"PreExisting\"\n ]\n },\n \"FindingSeverity\": {\n \"type\": \"string\",\n \"enum\": [\n \"Blocker\",\n \"High\",\n \"Medium\",\n \"Low\"\n ]\n },\n \"ForeignRef\": {\n \"description\": \"A citation of a document in another repo's pipeline store (D6).\",\n \"type\": \"object\",\n \"properties\": {\n \"commit\": {\n \"$ref\": \"#/$defs/FullSha\"\n },\n \"id\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"kind\": {\n \"$ref\": \"#/$defs/PipelineKind\"\n },\n \"payload_sha256\": {\n \"$ref\": \"#/$defs/Sha256Hex\"\n },\n \"repo\": {\n \"$ref\": \"#/$defs/OrgRepo\"\n }\n },\n \"required\": [\n \"repo\",\n \"commit\",\n \"kind\",\n \"id\",\n \"payload_sha256\"\n ]\n },\n \"FullSha\": {\n \"description\": \"A full git commit id: exactly 40 lowercase hex characters.\",\n \"type\": \"string\",\n \"maxLength\": 40\n },\n \"Label\": {\n \"description\": \"A key label: `[A-Za-z0-9_-]{1,64}`.\",\n \"type\": \"string\",\n \"maxLength\": 64\n },\n \"LandedName\": {\n \"description\": \"A name the cut landed, and where it lives.\",\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"path\": {\n \"$ref\": \"#/$defs/Short\"\n }\n },\n \"required\": [\n \"name\",\n \"path\"\n ]\n },\n \"Line\": {\n \"description\": \"Text of at most 1,000 UTF-8 bytes.\",\n \"type\": \"string\",\n \"maxLength\": 1000\n },\n \"MutationRecord\": {\n \"description\": \"One mutation a report ran: a key-safe label a verdict claim can name,\\nthe exact edit, and the tree it was applied to.\",\n \"type\": \"object\",\n \"properties\": {\n \"after\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"before\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"commit\": {\n \"$ref\": \"#/$defs/Sha\"\n },\n \"failed_as_expected\": {\n \"type\": \"boolean\"\n },\n \"label\": {\n \"$ref\": \"#/$defs/Label\"\n },\n \"location\": {\n \"$ref\": \"#/$defs/CodeLocation\"\n },\n \"rule\": {\n \"$ref\": \"#/$defs/Line\"\n }\n },\n \"required\": [\n \"label\",\n \"rule\",\n \"location\",\n \"before\",\n \"after\",\n \"commit\",\n \"failed_as_expected\"\n ]\n },\n \"NegativeCheck\": {\n \"type\": \"object\",\n \"properties\": {\n \"pattern\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"scope\": {\n \"$ref\": \"#/$defs/Line\"\n }\n },\n \"required\": [\n \"pattern\",\n \"scope\"\n ]\n },\n \"OrgRepo\": {\n \"description\": \"A GitHub repository as `Org/Repo`, at most 140 UTF-8 bytes (39 + 1 +\\n100). The owner is 1 to 39 `[A-Za-z0-9-]` bytes with no leading or\\ntrailing hyphen; the repo is 1 to 100 `[A-Za-z0-9._-]` bytes, is never\\n`.` or `..`, and does not end in `.git`, ASCII-case-insensitively.\\nIdentity is case-insensitive: `GameCult/Epiphany` and `gamecult/epiphany`\\nare the same repository.\",\n \"type\": \"string\",\n \"maxLength\": 140\n },\n \"Para\": {\n \"description\": \"Text of at most 4,000 UTF-8 bytes; longer narrative is cited by `DocRef`.\",\n \"type\": \"string\",\n \"maxLength\": 4000\n },\n \"PipelineAdmissionBatch\": {\n \"description\": \"One admission request: the mind it is for, who asks, and the documents.\\nRides the wire whole (`wire::HuginnMindRequest::Admit`).\",\n \"type\": \"object\",\n \"properties\": {\n \"documents\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/PipelineDocument\"\n }\n },\n \"instance\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"provenance\": {\n \"$ref\": \"#/$defs/PipelineProvenance\"\n }\n },\n \"required\": [\n \"instance\",\n \"provenance\",\n \"documents\"\n ]\n },\n \"PipelineCampaign\": {\n \"type\": \"object\",\n \"properties\": {\n \"repos\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/OrgRepo\"\n },\n \"maxItems\": 8\n },\n \"slug\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"target_doc\": {\n \"$ref\": \"#/$defs/DocRef\"\n },\n \"title\": {\n \"$ref\": \"#/$defs/Title\"\n },\n \"working_branch\": {\n \"$ref\": \"#/$defs/Short\"\n }\n },\n \"required\": [\n \"slug\",\n \"title\",\n \"repos\",\n \"working_branch\",\n \"target_doc\"\n ]\n },\n \"PipelineCutReport\": {\n \"type\": \"object\",\n \"properties\": {\n \"attempt\": {\n \"type\": \"integer\",\n \"format\": \"uint32\",\n \"minimum\": 0\n },\n \"branch\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"campaign\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"commits\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/ReportCommit\"\n },\n \"maxItems\": 128\n },\n \"cut_spec\": {\n }, "MutationRecord": { "description": "One mutation a report ran: a key-safe label a verdict claim can name,\nthe exact edit, and the tree it was applied to.", "type": "object", @@ -717,13 +720,16 @@ "adds": { "type": "array", "items": { - "$ref": "#/$defs/Line" + \"$ref\": \"#/$defs/Short\"\n },\n \"deviations\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Deviation\"\n },\n \"maxItems\": 32\n },\n \"forks\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"maxItems\": 8\n },\n \"landed_names\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/LandedName\"\n },\n \"maxItems\": 128\n },\n \"mutations\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/MutationRecord\"\n },\n \"maxItems\": 64\n },\n \"promises\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Promise\"\n },\n \"maxItems\": 64\n },\n \"range\": {\n \"$ref\": \"#/$defs/CommitRange\"\n },\n \"repo\": {\n \"$ref\": \"#/$defs/OrgRepo\"\n },\n \"structural_delta\": {\n \"$ref\": \"#/$defs/StructuralDelta\"\n },\n \"undone\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 32\n },\n \"verification\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Evidence\"\n },\n \"maxItems\": 64\n }\n },\n \"required\": [\n \"campaign\",\n \"cut_spec\",\n \"attempt\",\n \"repo\",\n \"branch\",\n \"commits\",\n \"range\",\n \"verification\",\n \"mutations\",\n \"deviations\",\n \"forks\",\n \"structural_delta\",\n \"landed_names\",\n \"undone\",\n \"promises\"\n ]\n },\n \"PipelineCutSpec\": {\n \"type\": \"object\",\n \"properties\": {\n \"adds\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 64\n },\n \"authority_map\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/$defs/AuthorityMap\"\n },\n {\n \"type\": \"null\"\n }\n ]\n },\n \"base\": {\n \"$ref\": \"#/$defs/Sha\"\n },\n \"branch\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"campaign\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"cut\": {\n \"$ref\": \"#/$defs/Label\"\n },\n \"deletes\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/CutDelete\"\n },\n \"maxItems\": 64\n },\n \"depends_on\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"maxItems\": 8\n },\n \"estimate\": {\n \"$ref\": \"#/$defs/StructuralDelta\"\n },\n \"file_changes\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/FileChange\"\n },\n \"maxItems\": 256\n },\n \"first\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 16\n },\n \"keeps_moves\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 64\n },\n \"questions\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"maxItems\": 16\n },\n \"reads\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/ReadAnchor\"\n },\n \"maxItems\": 16\n },\n \"repo\": {\n \"$ref\": \"#/$defs/OrgRepo\"\n },\n \"revision\": {\n \"type\": \"integer\",\n \"format\": \"uint32\",\n \"minimum\": 0\n },\n \"rulings\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"maxItems\": 32\n },\n \"title\": {\n \"$ref\": \"#/$defs/Title\"\n },\n \"verification\": {\n \"$ref\": \"#/$defs/CutVerification\"\n }\n },\n \"required\": [\n \"campaign\",\n \"cut\",\n \"revision\",\n \"title\",\n \"repo\",\n \"branch\",\n \"base\",\n \"depends_on\",\n \"first\",\n \"deletes\",\n \"keeps_moves\",\n \"adds\",\n \"file_changes\",\n \"verification\",\n \"estimate\",\n \"rulings\",\n \"questions\"\n ]\n },\n \"PipelineDocument\": {\n \"description\": \"The envelope enum, adjacently tagged on the kind name: a document\\non a wire is `{ kind, value }`, and `kind` is exactly what\\n`PipelineKind::name()` returns, so a reader dispatches on the kind\\nsegment it already knows from the key and needs no second registry\\nmapping variant spellings to kinds. Adjacent rather than internal\\nbecause a value is a named map of its own and an internal tag would\\nhave to be merged into it; the tag stays beside the value instead.\\nThis is not a published schema: `schemas/cultnet` publishes the\\nfourteen per-kind value documents, and the envelope is the wire's\\nshape, not a document's.\",\n \"oneOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"campaign\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineCampaign\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"target\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineTarget\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"question\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineQuestion\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"ruling\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineRuling\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"cut_spec\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineCutSpec\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"cut_report\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineCutReport\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"verdict\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineVerdict\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"finding\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineFinding\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"follow_up\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineFollowUp\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"resolution\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineResolution\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"instance\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineInstance\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"stewardship\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineStewardship\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"hand_off\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineHandOff\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\",\n \"const\": \"run\"\n },\n \"value\": {\n \"$ref\": \"#/$defs/PipelineRun\"\n }\n },\n \"required\": [\n \"kind\",\n \"value\"\n ]\n }\n ]\n },\n \"PipelineFinding\": {\n \"type\": \"object\",\n \"properties\": {\n \"campaign\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"claim\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"confidence\": {\n \"$ref\": \"#/$defs/FindingConfidence\"\n },\n \"evidence\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Evidence\"\n },\n \"maxItems\": 16\n },\n \"failure_scenario\": {\n \"$ref\": \"#/$defs/Para\"\n },\n \"invariants\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Label\"\n },\n \"maxItems\": 8\n },\n \"label\": {\n \"$ref\": \"#/$defs/Label\"\n },\n \"locations\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/CodeLocation\"\n },\n \"maxItems\": 16\n },\n \"origin\": {\n \"$ref\": \"#/$defs/FindingOrigin\"\n },\n \"precedents\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/ForeignRef\"\n },\n \"maxItems\": 8\n },\n \"range\": {\n \"$ref\": \"#/$defs/CommitRange\"\n },\n \"severity\": {\n \"$ref\": \"#/$defs/FindingSeverity\"\n },\n \"verdict\": {\n \"$ref\": \"#/$defs/Short\"\n }\n },\n \"required\": [\n \"campaign\",\n \"verdict\",\n \"label\",\n \"range\",\n \"confidence\",\n \"severity\",\n \"claim\",\n \"invariants\",\n \"locations\",\n \"failure_scenario\",\n \"evidence\",\n \"precedents\",\n \"origin\"\n ]\n },\n \"PipelineFollowUp\": {\n \"type\": \"object\",\n \"properties\": {\n \"campaign\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"item\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"label\": {\n \"$ref\": \"#/$defs/Label\"\n },\n \"locations\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/CodeLocation\"\n },\n \"maxItems\": 16\n },\n \"owner\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"repo\": {\n \"$ref\": \"#/$defs/OrgRepo\"\n },\n \"source\": {\n \"$ref\": \"#/$defs/PipelineRef\"\n },\n \"why_it_can_wait\": {\n \"$ref\": \"#/$defs/Line\"\n }\n },\n \"required\": [\n \"campaign\",\n \"label\",\n \"source\",\n \"repo\",\n \"locations\",\n \"item\",\n \"why_it_can_wait\",\n \"owner\"\n ]\n },\n \"PipelineHandOff\": {\n \"description\": \"A reassignment of stewardship, recorded in both minds. `documents` names\\nwhat travels with it.\",\n \"type\": \"object\",\n \"properties\": {\n \"documents\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"maxItems\": 256\n },\n \"from_instance\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"handed_on\": {\n \"$ref\": \"#/$defs/Date\"\n },\n \"reason\": {\n \"$ref\": \"#/$defs/Para\"\n },\n \"repo\": {\n \"$ref\": \"#/$defs/OrgRepo\"\n },\n \"to_instance\": {\n \"$ref\": \"#/$defs/Slug\"\n }\n },\n \"required\": [\n \"from_instance\",\n \"to_instance\",\n \"repo\",\n \"documents\",\n \"reason\",\n \"handed_on\"\n ]\n },\n \"PipelineInstance\": {\n \"description\": \"A mind's identity document. A store is canonical to exactly one\\ninstance, and this says which; identity lives in the state, not in a\\npath.\",\n \"type\": \"object\",\n \"properties\": {\n \"created_at\": {\n \"$ref\": \"#/$defs/Date\"\n },\n \"display_name\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"host\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"instance\": {\n \"$ref\": \"#/$defs/Slug\"\n }\n },\n \"required\": [\n \"instance\",\n \"display_name\",\n \"created_at\",\n \"host\"\n ]\n },\n \"PipelineKind\": {\n \"type\": \"string\",\n \"enum\": [\n \"Campaign\",\n \"Target\",\n \"Question\",\n \"Ruling\",\n \"CutSpec\",\n \"CutReport\",\n \"Verdict\",\n \"Finding\",\n \"FollowUp\",\n \"Resolution\",\n \"Instance\",\n \"Stewardship\",\n \"HandOff\",\n \"Run\"\n ]\n },\n \"PipelineProvenance\": {\n \"description\": \"Who admitted a batch: the faculty, the agent, its session and the tool.\\nA field o "$ref": "#/$defs/Line" }, - "maxItems": 64 +n the receipt and nothing else; the digest excludes it.\",\n \"type\": \"object\",\n \"properties\": {\n \"agent\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"faculty\": {\n \"$ref\": \"#/$defs/Faculty\"\n },\n \"session\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"tool\": {\n \"$ref\": \"#/$defs/Short\"\n }\n },\n \"required\": [\n \"faculty\",\n \"agent\",\n \"session\",\n \"tool\"\n ]\n },\n \"PipelineQuestion\": {\n \"type\": \"object\",\n \"properties\": {\n \"asked_on\": {\n \"$ref\": \"#/$defs/Date\"\n },\n \"campaign\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"depends\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/Line\"\n },\n \"maxItems\": 8\n },\n \"label\": {\n \"$ref\": \"#/$defs/Label\"\n },\n \"options\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/QuestionOption\"\n },\n \"maxItems\": 8\n },\n \"question\": {\n \"$ref\": \"#/$defs/Para\"\n },\n \"raised_in\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/$defs/PipelineRef\"\n },\n {\n \"type\": \"null\"\n }\n ]\n },\n \"recommended\": {\n \"$ref\": \"#/$defs/Label\"\n },\n \"title\": {\n \"$ref\": \"#/$defs/Title\"\n }\n },\n \"required\": [\n \"campaign\",\n \"label\",\n \"title\",\n \"question\",\n \"options\",\n \"recommended\",\n \"depends\",\n \"asked_on\"\n ]\n },\n \"PipelineRef\": {\n \"description\": \"A reference to another document. The id is parsed as a full pipeline id of\\nthe declared `kind`, so the kind and the id's kind segment cannot disagree.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"$ref\": \"#/$defs/Short\"\n },\n \"kind\": {\n \"$ref\": \"#/$defs/PipelineKind\"\n }\n },\n \"required\": [\n \"kind\",\n \"id\"\n ]\n },\n \"PipelineResolution\": {\n \"description\": \"The record of how a subject was closed and by what. `sequence` is per\\nsubject and set by the writer, `1` for the first, and it is the last\\npart of the key, so a subject's resolutions share a prefix and a\\nwithdrawn one is kept under its subject rather than overwritten.\\nWhether a sequence is the previous plus one, and whether an earlier\\nresolution still stands, are admission's rules: this crate refuses\\nneither `0` nor a gap, exactly as it refuses neither `revision: 0` nor\\na `revision` with no predecessor.\",\n \"type\": \"object\",\n \"properties\": {\n \"outcome\": {\n \"$ref\": \"#/$defs/ResolutionOutcome\"\n },\n \"rationale\": {\n \"$ref\": \"#/$defs/Para\"\n },\n \"resolved_on\": {\n \"$ref\": \"#/$defs/Date\"\n },\n \"sequence\": {\n \"type\": \"integer\",\n \"format\": \"uint32\",\n \"minimum\": 0\n },\n \"subject\": {\n \"$ref\": \"#/$defs/PipelineRef\"\n }\n },\n \"required\": [\n \"subject\",\n \"sequence\",\n \"outcome\",\n \"rationale\",\n \"resolved_on\"\n ]\n },\n \"PipelineRuling\": {\n \"type\": \"object\",\n \"properties\": {\n \"answers\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/$defs/Short\"\n },\n {\n \"type\": \"null\"\n }\n ]\n },\n \"authority\": {\n \"$ref\": \"#/$defs/RulingAuthority\"\n },\n \"campaign\": {\n \"$ref\": \"#/$defs/Slug\"\n },\n \"choice\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/$defs/Label\"\n },\n {\n \"type\": \"null\"\n }\n ]\n },\n \"label\": {\n \"$ref\": \"#/$defs/Label\"\n },\n \"operator_quote\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/$defs/Para\"\n },\n {\n \"type\": \"null\"\n }\n ]\n },\n \"precedents\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/$defs/ForeignRef\"\n },\n \"maxItems\": 8\n },\n \"ruled_on\": {\n \"$ref\": \"#/$defs/Date\"\n },\n \"ruling\": {\n \"$ref\": \"#/$defs/Para\"\n },\n \"title\": {\n \"$ref\": \"#/$defs/Title\"\n }\n },\n \"required\": [\n \"campaign\",\n \"label\",\n \"title\",\n \"ruling\",\n \"ruled_on\",\n \"precedents\",\n \"authority\"\n ]\n },\n \"PipelineRun\": {\n \"description\": \"One launch of a Self or a Persona turn: the one record of what it took\\non. `claims` are the work it holds, and a claim is live while its run\\nhas no resolution in force. `budget_usd` is a canonical decimal string,\\n`0` for an interactive run. Instance-rooted like stewardship: the key\\nis `:run: