Tool reference
Every customer-visible Semel MCP tool — purpose, required scopes, idempotency, common errors, and related tools — generated from the live operation registry.
On this page
This reference is generated from the server’s operation registry. Treat the live MCP tools/list result as the authority for the current session; the page explains the same inputs, outputs, scopes, state assumptions, idempotency rules, risks, errors, and related operations in a browsable form.
MCP tools
brief_checklist_update
write · idempotent (needs idempotencyKey)Toggle a single QA-checklist row on a brief on or off, without rewriting the rest of the brief. Use to tick off or clear one acceptance check as work is verified.
- Mode
- write · low risk
- Scopes
- brief:read, brief:write
- Confirmation
- implicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel check off the third QA item on the checkout brief”“/semel mark the login QA check as done”
- Errors
- PROJECT_ACCESS_DENIEDBRIEF_VERSION_CONFLICT
- Related
- brief_update, brief_get_full
Arguments
indexinteger · requiredZero-based QA checklist item position, guarded by expectedText against reorder races. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
expectedTextstring · requiredExpected current checklist text at index; a mismatch fails instead of updating the wrong row. Accepted length or value is 1 through 262144, inclusive.
minimum length: 1 · maximum length: 262144
checkedboolean · requiredWhether this QA checklist item is currently complete.
ifVersionNuminteger · optionalOptional optimistic precondition using the current brief contract version number. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"briefId": "brf_fixture_checkout",
"index": 0,
"expectedText": "API contract reviewed",
"checked": true,
"ifVersionNum": 4,
"idempotencyKey": "recipe-brief-checklist-update-v1"
}{
"briefId": "{{briefId}}",
"index": 0,
"expectedText": "API contract reviewed",
"checked": true,
"ifVersionNum": 4,
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"index": {
"type": "integer",
"minimum": 0,
"description": "Zero-based QA checklist item position, guarded by expectedText against reorder races. Minimum accepted length or value is 0. The value must be an integer."
},
"expectedText": {
"type": "string",
"minLength": 1,
"maxLength": 262144,
"description": "Expected current checklist text at index; a mismatch fails instead of updating the wrong row. Accepted length or value is 1 through 262144, inclusive."
},
"checked": {
"type": "boolean",
"description": "Whether this QA checklist item is currently complete."
},
"ifVersionNum": {
"type": "integer",
"description": "Optional optimistic precondition using the current brief contract version number. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"index",
"expectedText",
"checked",
"briefId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
briefobject · requiredCurrent brief record returned by the operation.
brief.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
brief.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
brief.titlestring · requiredHuman-readable title displayed in Semel.
brief.state"drafting" | "in_review" | "baselined" | "in_development" | "checked" | "superseded" | "closed" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: "drafting", "in_review", "baselined", "in_development", "checked", "superseded", "closed".
brief.currentVersionHashstring | null · requiredHash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available.
brief.contentobject · requiredComplete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable.
Map values · any JSON value
brief.versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
brief.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
brief.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
brief.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
brief.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
brief.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
brief.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
brief.createdNewVersionboolean · requiredWhether the write changed canonical content and minted a new immutable brief version.
brief.staledApprovalsinteger · requiredNumber of prior approval rows made stale by this content change. The value must be an integer.
{
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
},
{
"id": "AC-02",
"text": "The response identifies the original payment intent."
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
],
"checklist": [
{
"text": "API contract reviewed",
"checked": true
}
]
},
"versionNum": 5,
"createdNewVersion": true,
"staledApprovals": 0
}
}{
"content": [
{
"type": "text",
"text": "{\"brief\":{\"id\":\"brf_fixture_checkout\",\"projectId\":\"prj_fixture_checkout\",\"title\":\"Retry-safe checkout\",\"state\":\"drafting\",\"currentVersionHash\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\"content\":{\"goal\":\"Prevent duplicate charges when checkout retries.\",\"requirements\":[\"Reuse one payment intent for retried submissions.\"],\"acceptanceCriteria\":[{\"id\":\"AC-01\",\"text\":\"A retried request returns the original successful result.\"},{\"id\":\"AC-02\",\"text\":\"The response identifies the original payment intent.\"}],\"sourceArtifactLinks\":[{\"label\":\"Linear ENG-42\",\"kind\":\"linear\"}],\"checklist\":[{\"text\":\"API contract reviewed\",\"checked\":true}]},\"versionNum\":5,\"createdNewVersion\":true,\"staledApprovals\":0}}"
}
],
"structuredContent": {
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
},
{
"id": "AC-02",
"text": "The response identifies the original payment intent."
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
],
"checklist": [
{
"text": "API contract reviewed",
"checked": true
}
]
},
"versionNum": 5,
"createdNewVersion": true,
"staledApprovals": 0
}
}
}- checklistVersionCreated ← structuredContent.brief.createdNewVersion
Next permitted action: Use this atomic result instead of replacing the full checklist.
Complete raw result schema
{
"type": "object",
"properties": {
"brief": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"title": {
"type": "string",
"description": "Human-readable title displayed in Semel."
},
"state": {
"type": "string",
"enum": [
"drafting",
"in_review",
"baselined",
"in_development",
"checked",
"superseded",
"closed"
],
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: \"drafting\", \"in_review\", \"baselined\", \"in_development\", \"checked\", \"superseded\", \"closed\"."
},
"currentVersionHash": {
"type": [
"string",
"null"
],
"description": "Hash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available."
},
"content": {
"type": "object",
"additionalProperties": {},
"description": "Complete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
},
"createdNewVersion": {
"type": "boolean",
"description": "Whether the write changed canonical content and minted a new immutable brief version."
},
"staledApprovals": {
"type": "integer",
"description": "Number of prior approval rows made stale by this content change. The value must be an integer."
}
},
"required": [
"id",
"projectId",
"title",
"state",
"currentVersionHash",
"content",
"versionNum",
"createdNewVersion",
"staledApprovals"
],
"additionalProperties": false,
"description": "Current brief record returned by the operation."
}
},
"required": [
"brief"
],
"additionalProperties": false
}brief_collection_list
readPage through one durable brief collection (versions, decisionHistory, proposals, …) by keyset cursor. Use to walk a collection beyond the first page that brief_get_full returns.
- Mode
- read · low risk
- Scopes
- brief:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel list the version history for this brief”“/semel show the decision history of the checkout brief”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- brief_list, brief_get_full
Arguments
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier.
minimum length: 1
collection"versions" | "decisionHistory" | "findings" | "proposals" | "approvals" | "comments" | "artifacts" | "workOrders" | "reviewSessions" | "shares" · requiredDurable collection to page within this brief. Use one of the advertised collection keys; the result contains only that collection.
cursorstring · optionalOpaque keyset cursor returned as nextCursor by the preceding page for this same brief and collection. Omit to read the first page.
minimum length: 1
limitinteger · optionalMaximum records to return, as an integer from 1 through 200. Omit to use the server default.
minimum: 1 · maximum: 200
{
"briefId": "brf_fixture_checkout",
"collection": "decisionHistory",
"limit": 50
}{
"briefId": "{{briefId}}",
"collection": "decisionHistory",
"limit": 50
}Complete raw parameter schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier."
},
"collection": {
"type": "string",
"enum": [
"versions",
"decisionHistory",
"findings",
"proposals",
"approvals",
"comments",
"artifacts",
"workOrders",
"reviewSessions",
"shares"
],
"description": "Durable collection to page within this brief. Use one of the advertised collection keys; the result contains only that collection."
},
"cursor": {
"type": "string",
"minLength": 1,
"description": "Opaque keyset cursor returned as nextCursor by the preceding page for this same brief and collection. Omit to read the first page."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Maximum records to return, as an integer from 1 through 200. Omit to use the server default."
}
},
"required": [
"briefId",
"collection"
],
"additionalProperties": false
}Structured result
collection"versions" | "decisionHistory" | "findings" | "proposals" | "approvals" | "comments" | "artifacts" | "workOrders" | "reviewSessions" | "shares" · requiredNamed durable brief collection to page; use one of the documented enum values. Allowed values: "versions", "decisionHistory", "findings", "proposals", "approvals", "comments", "artifacts", "workOrders", "reviewSessions", "shares".
itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
Map values · any JSON value
nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
{
"collection": "decisionHistory",
"items": [],
"nextCursor": null
}{
"content": [
{
"type": "text",
"text": "{\"collection\":\"decisionHistory\",\"items\":[],\"nextCursor\":null}"
}
],
"structuredContent": {
"collection": "decisionHistory",
"items": [],
"nextCursor": null
}
}- nextCursor ← structuredContent.nextCursor
Next permitted action: Repeat with the returned cursor until nextCursor is null.
Complete raw result schema
{
"type": "object",
"properties": {
"collection": {
"type": "string",
"enum": [
"versions",
"decisionHistory",
"findings",
"proposals",
"approvals",
"comments",
"artifacts",
"workOrders",
"reviewSessions",
"shares"
],
"description": "Named durable brief collection to page; use one of the documented enum values. Allowed values: \"versions\", \"decisionHistory\", \"findings\", \"proposals\", \"approvals\", \"comments\", \"artifacts\", \"workOrders\", \"reviewSessions\", \"shares\"."
},
"items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"collection",
"items",
"nextCursor"
],
"additionalProperties": false
}brief_comment_resolve
write · idempotent (needs idempotencyKey)Resolve one brief comment or finding by id. Already-resolved comments return their existing resolution; this operation never reopens a comment.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel resolve the addressed comment on the checkout brief”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- brief_get_full, brief_update
Arguments
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier.
minimum length: 1
commentIdstring · requiredIdentifier of the brief comment to resolve.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"briefId": "brf_fixture_checkout",
"commentId": "bcm_fixture_contract",
"idempotencyKey": "recipe-brief-comment-resolve-v1"
}{
"briefId": "{{briefId}}",
"commentId": "{{commentId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier."
},
"commentId": {
"type": "string",
"minLength": 1,
"description": "Identifier of the brief comment to resolve."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"briefId",
"commentId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
commentobject · requiredThe comment after resolution, carrying who resolved it, when, and through which channel.
comment.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
comment.briefIdstring · requiredBrief identifier returned by brief_create or brief_list; it determines the project authorization boundary.
comment.sectionKeystring · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result.
comment.anchorstring | null · requiredOptional structured location within a brief section for this comment; null means the comment applies to the section as a whole. A null value explicitly means no current value is available.
comment.textstring · requiredHuman-authored or model-produced text for this typed record.
comment.authorIdstring · requiredSemel user identifier for the comment or content author.
comment.authorEmailany of · optionalDisplay email of the comment author when the caller may read it; null or omitted otherwise.
any of
Branch 1
format: email
Branch 2
comment.resolvedAtstring | null · requiredRFC 3339 timestamp when the comment was resolved; null means unresolved. A null value explicitly means no current value is available.
comment.resolvedBystring | null · requiredSemel user identifier that resolved the comment; absent until resolution. A null value explicitly means no current value is available.
comment.channel"web" | "mcp" · optionalTyped delivery or answer channel recorded as provenance. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: "web", "mcp".
comment.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
comment.updatedAtstring · requiredRFC 3339 timestamp when this record was last updated.
{
"comment": {
"id": "bcm_fixture_contract",
"briefId": "brf_fixture_checkout",
"sectionKey": "example",
"anchor": "example",
"text": "example",
"authorId": "example",
"resolvedAt": "2026-09-07T16:00:00.000Z",
"resolvedBy": "usr_fixture_owner",
"createdAt": "example",
"updatedAt": "example",
"channel": "mcp"
}
}{
"content": [
{
"type": "text",
"text": "{\"comment\":{\"id\":\"bcm_fixture_contract\",\"briefId\":\"brf_fixture_checkout\",\"sectionKey\":\"example\",\"anchor\":\"example\",\"text\":\"example\",\"authorId\":\"example\",\"resolvedAt\":\"2026-09-07T16:00:00.000Z\",\"resolvedBy\":\"usr_fixture_owner\",\"createdAt\":\"example\",\"updatedAt\":\"example\",\"channel\":\"mcp\"}}"
}
],
"structuredContent": {
"comment": {
"id": "bcm_fixture_contract",
"briefId": "brf_fixture_checkout",
"sectionKey": "example",
"anchor": "example",
"text": "example",
"authorId": "example",
"resolvedAt": "2026-09-07T16:00:00.000Z",
"resolvedBy": "usr_fixture_owner",
"createdAt": "example",
"updatedAt": "example",
"channel": "mcp"
}
}
}- commentResolvedAt ← structuredContent.comment.resolvedAt
Next permitted action: Report the resolution; an already-resolved comment returns its original resolver and channel.
Complete raw result schema
{
"type": "object",
"properties": {
"comment": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"briefId": {
"type": "string",
"description": "Brief identifier returned by brief_create or brief_list; it determines the project authorization boundary."
},
"sectionKey": {
"type": "string",
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result."
},
"anchor": {
"type": [
"string",
"null"
],
"description": "Optional structured location within a brief section for this comment; null means the comment applies to the section as a whole. A null value explicitly means no current value is available."
},
"text": {
"type": "string",
"description": "Human-authored or model-produced text for this typed record."
},
"authorId": {
"type": "string",
"description": "Semel user identifier for the comment or content author."
},
"authorEmail": {
"anyOf": [
{
"type": "string",
"format": "email"
},
{
"type": "null"
}
],
"description": "Display email of the comment author when the caller may read it; null or omitted otherwise."
},
"resolvedAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp when the comment was resolved; null means unresolved. A null value explicitly means no current value is available."
},
"resolvedBy": {
"type": [
"string",
"null"
],
"description": "Semel user identifier that resolved the comment; absent until resolution. A null value explicitly means no current value is available."
},
"channel": {
"type": "string",
"enum": [
"web",
"mcp"
],
"description": "Typed delivery or answer channel recorded as provenance. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: \"web\", \"mcp\"."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
},
"updatedAt": {
"type": "string",
"description": "RFC 3339 timestamp when this record was last updated."
}
},
"required": [
"id",
"briefId",
"sectionKey",
"anchor",
"text",
"authorId",
"resolvedAt",
"resolvedBy",
"createdAt",
"updatedAt"
],
"additionalProperties": false,
"description": "The comment after resolution, carrying who resolved it, when, and through which channel."
}
},
"required": [
"comment"
],
"additionalProperties": false
}brief_create
write · idempotent (needs idempotencyKey)Create a new brief inside a project — its title and first contract version — as the starting artifact for an effort's requirements. Use once the project exists to begin capturing what will be built.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel create a brief for the checkout flow”“/semel start a new brief in the billing project”
- Errors
- PROJECT_ACCESS_DENIEDPROJECT_ALREADY_HAS_BRIEF
- Related
- brief_update, brief_get_full, project_create
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
titlestring · requiredHuman-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive.
minimum length: 1 · maximum length: 500
contentobject · optionalComplete replacement brief document for agent writes, limited to 262144 serialized bytes. Known sections use the canonical nested shapes; unknown metadata and _draft remain round-trippable.
content.goalstring · optionalConcise statement of the outcome this brief must achieve. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.userPersonaContextstring · optionalUser and situational context that explains who needs the outcome and why. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.customerFacingLaunchMessagestring · optionalCopy-ready end-user launch message stating the capability, value, and one concrete example. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.scopestring · optionalWork explicitly included in this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.outOfScopestring · optionalWork explicitly excluded from this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.requirementsarray · optionalOrdered product requirements; an empty array explicitly records none. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.edgeCasesarray · optionalKnown edge cases the implementation must handle. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.acceptanceCriteriaarray · optionalStable-ID acceptance criteria that define completion of the brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.acceptanceCriteria[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.acceptanceCriteria[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.acceptanceCriteria[].implementationboolean · optionalWhether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value.
content.acceptanceCriteria[].manualEvidenceobject · optionalStructured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value.
content.acceptanceCriteria[].manualEvidence.rationalestring · requiredDurable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.acceptanceCriteria[].manualEvidence.evidencePathstring · requiredDurable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.rolesPermissionsarray · optionalRoles and permission boundaries relevant to the feature. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.statesarray · optionalUser-visible and system lifecycle states the feature must represent. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.productSolutionstring · optionalProduct behavior chosen to satisfy the goal and requirements. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.technicalSolutionstring · optionalImplementation approach and major technical constraints. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.dataModelImplicationsstring · optionalRequired data model changes, invariants, and migration implications. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.architectureAssumptionsstring · optionalArchitecture assumptions the implementation relies on. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.designstring · optionalInteraction and visual design requirements for the feature. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.testingQaChecklistarray · optionalMutable QA checklist; checked state and attribution are preserved by server reconciliation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.testingQaChecklist[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.testingQaChecklist[].checkedboolean · requiredWhether this QA checklist item is currently complete.
content.testingQaChecklist[].addedBystring · optionalActor label that added the QA item; omission means legacy or unavailable attribution. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
content.testingQaChecklist[].checkedBystring · optionalActor label that last checked the item; omission means it has no check attribution. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
content.testingQaChecklist[].checkedAtstring · optionalRFC 3339 timestamp when the item was checked; omission means it is unchecked or legacy data. Omit the field when it does not apply; omission is distinct from an empty value. Use an RFC 3339 date-time string.
format: date-time
content.testPlanUnitarray · optionalUnit-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.testPlanIntegrationarray · optionalIntegration-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.testPlanUiUxarray · optionalBrowser, accessibility, and visual verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.openQuestionsarray · optionalUnresolved questions that still require an explicit answer. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.generatedTicketsarray · optionalOrdered implementation work orders derived from this brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.generatedTickets[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.generatedTickets[].titlestring · requiredHuman-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive.
minimum length: 1 · maximum length: 500
content.generatedTickets[].descriptionany of · requiredHuman-readable explanatory text; null or omission means no description was supplied. A null value explicitly means no current value is available. Maximum accepted length or value is 10000.
any of
Branch 1
maximum length: 10000
Branch 2
content.generatedTickets[].boundCriteriaarray · requiredStable acceptance-criterion IDs implemented by this work order. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.generatedTickets[].boundRequirementsarray · optionalStable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.requiredEvidencearray · optionalStable-ID evidence requirements needed to prove completion. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.requiredEvidence[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.requiredEvidence[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.requiredEvidence[].implementationboolean · optionalWhether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value.
content.requiredEvidence[].manualEvidenceobject · optionalStructured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value.
content.requiredEvidence[].manualEvidence.rationalestring · requiredDurable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.requiredEvidence[].manualEvidence.evidencePathstring · requiredDurable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.decisionsarray · optionalRecorded product or engineering decisions with optional source provenance. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.decisions[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.decisions[].sourcestring · optionalOptional human-readable provenance for the decision. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 1000.
maximum length: 1000
content.decisions[].statedboolean · optionalWhether the decision was explicitly stated rather than inferred; omission means unknown legacy provenance. Omit the field when it does not apply; omission is distinct from an empty value.
content.sourceArtifactLinksarray · optionalArtifact labels referenced by the brief; an empty array means none are linked. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.sourceArtifactLinks[].labelstring · requiredHuman-readable label displayed for this record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.sourceArtifactLinks[].kindstring · optionalDiscriminator identifying the typed variant represented by this object. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
content.sourceArtifactLinks[].readboolean · optionalWhether the referenced source artifact was read when the brief snapshot was produced. Omit the field when it does not apply; omission is distinct from an empty value.
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
]
},
"idempotencyKey": "recipe-brief-create-v1"
}{
"projectId": "{{projectId}}",
"title": "{{briefTitle}}",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
]
},
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Human-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive."
},
"content": {
"type": "object",
"properties": {
"goal": {
"type": "string",
"maxLength": 4000,
"description": "Concise statement of the outcome this brief must achieve. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"userPersonaContext": {
"type": "string",
"maxLength": 4000,
"description": "User and situational context that explains who needs the outcome and why. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"customerFacingLaunchMessage": {
"type": "string",
"maxLength": 4000,
"description": "Copy-ready end-user launch message stating the capability, value, and one concrete example. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"scope": {
"type": "string",
"maxLength": 4000,
"description": "Work explicitly included in this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"outOfScope": {
"type": "string",
"maxLength": 4000,
"description": "Work explicitly excluded from this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"requirements": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Ordered product requirements; an empty array explicitly records none. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"edgeCases": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Known edge cases the implementation must handle. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"acceptanceCriteria": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive."
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"implementation": {
"type": "boolean",
"description": "Whether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value."
},
"manualEvidence": {
"type": "object",
"properties": {
"rationale": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive."
},
"evidencePath": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"rationale",
"evidencePath"
],
"additionalProperties": false,
"description": "Structured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"id",
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Stable-ID acceptance criteria that define completion of the brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"rolesPermissions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Roles and permission boundaries relevant to the feature. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"states": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "User-visible and system lifecycle states the feature must represent. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"productSolution": {
"type": "string",
"maxLength": 4000,
"description": "Product behavior chosen to satisfy the goal and requirements. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"technicalSolution": {
"type": "string",
"maxLength": 4000,
"description": "Implementation approach and major technical constraints. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"dataModelImplications": {
"type": "string",
"maxLength": 4000,
"description": "Required data model changes, invariants, and migration implications. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"architectureAssumptions": {
"type": "string",
"maxLength": 4000,
"description": "Architecture assumptions the implementation relies on. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"design": {
"type": "string",
"maxLength": 4000,
"description": "Interaction and visual design requirements for the feature. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"testingQaChecklist": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"checked": {
"type": "boolean",
"description": "Whether this QA checklist item is currently complete."
},
"addedBy": {
"type": "string",
"maxLength": 200,
"description": "Actor label that added the QA item; omission means legacy or unavailable attribution. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"checkedBy": {
"type": "string",
"maxLength": 200,
"description": "Actor label that last checked the item; omission means it has no check attribution. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"checkedAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp when the item was checked; omission means it is unchecked or legacy data. Omit the field when it does not apply; omission is distinct from an empty value. Use an RFC 3339 date-time string."
}
},
"required": [
"text",
"checked"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Mutable QA checklist; checked state and attribution are preserved by server reconciliation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanUnit": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Unit-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanIntegration": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Integration-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanUiUx": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Browser, accessibility, and visual verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"openQuestions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Unresolved questions that still require an explicit answer. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"generatedTickets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Human-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 10000
},
{
"type": "null"
}
],
"description": "Human-readable explanatory text; null or omission means no description was supplied. A null value explicitly means no current value is available. Maximum accepted length or value is 10000."
},
"boundCriteria": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"maxItems": 50,
"description": "Stable acceptance-criterion IDs implemented by this work order. An empty array explicitly means no matching items."
},
"boundRequirements": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"maxItems": 50,
"description": "Stable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"id",
"title",
"description",
"boundCriteria"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Ordered implementation work orders derived from this brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"requiredEvidence": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive."
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"implementation": {
"type": "boolean",
"description": "Whether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value."
},
"manualEvidence": {
"type": "object",
"properties": {
"rationale": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive."
},
"evidencePath": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"rationale",
"evidencePath"
],
"additionalProperties": false,
"description": "Structured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"id",
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Stable-ID evidence requirements needed to prove completion. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"decisions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"source": {
"type": "string",
"maxLength": 1000,
"description": "Optional human-readable provenance for the decision. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 1000."
},
"stated": {
"type": "boolean",
"description": "Whether the decision was explicitly stated rather than inferred; omission means unknown legacy provenance. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Recorded product or engineering decisions with optional source provenance. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"sourceArtifactLinks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-readable label displayed for this record. Accepted length or value is 1 through 1000, inclusive."
},
"kind": {
"type": "string",
"maxLength": 200,
"description": "Discriminator identifying the typed variant represented by this object. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"read": {
"type": "boolean",
"description": "Whether the referenced source artifact was read when the brief snapshot was produced. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"label"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Artifact labels referenced by the brief; an empty array means none are linked. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"additionalProperties": true,
"description": "Complete replacement brief document for agent writes, limited to 262144 serialized bytes. Known sections use the canonical nested shapes; unknown metadata and _draft remain round-trippable."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"projectId",
"title",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
briefobject · requiredCurrent brief record returned by the operation.
brief.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
brief.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
brief.titlestring · requiredHuman-readable title displayed in Semel.
brief.state"drafting" | "in_review" | "baselined" | "in_development" | "checked" | "superseded" | "closed" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: "drafting", "in_review", "baselined", "in_development", "checked", "superseded", "closed".
brief.currentVersionHashstring | null · requiredHash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available.
brief.contentobject · requiredComplete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable.
Map values · any JSON value
brief.versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
brief.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
brief.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
brief.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
brief.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
brief.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
brief.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
{
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
]
},
"versionNum": 1
}
}{
"content": [
{
"type": "text",
"text": "{\"brief\":{\"id\":\"brf_fixture_checkout\",\"projectId\":\"prj_fixture_checkout\",\"title\":\"Retry-safe checkout\",\"state\":\"drafting\",\"currentVersionHash\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\"content\":{\"goal\":\"Prevent duplicate charges when checkout retries.\",\"requirements\":[\"Reuse one payment intent for retried submissions.\"],\"acceptanceCriteria\":[{\"id\":\"AC-01\",\"text\":\"A retried request returns the original successful result.\"}],\"sourceArtifactLinks\":[{\"label\":\"Linear ENG-42\",\"kind\":\"linear\"}]},\"versionNum\":1}}"
}
],
"structuredContent": {
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
]
},
"versionNum": 1
}
}
}- briefId ← structuredContent.brief.id
Next permitted action: Load the complete persisted aggregate by the returned brief id.
Complete raw result schema
{
"type": "object",
"properties": {
"brief": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"title": {
"type": "string",
"description": "Human-readable title displayed in Semel."
},
"state": {
"type": "string",
"enum": [
"drafting",
"in_review",
"baselined",
"in_development",
"checked",
"superseded",
"closed"
],
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: \"drafting\", \"in_review\", \"baselined\", \"in_development\", \"checked\", \"superseded\", \"closed\"."
},
"currentVersionHash": {
"type": [
"string",
"null"
],
"description": "Hash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available."
},
"content": {
"type": "object",
"additionalProperties": {},
"description": "Complete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"id",
"projectId",
"title",
"state",
"currentVersionHash",
"content",
"versionNum"
],
"additionalProperties": false,
"description": "Current brief record returned by the operation."
}
},
"required": [
"brief"
],
"additionalProperties": false
}brief_delivery_status_set
write · idempotent (needs idempotencyKey)Set or correct an explicit brief delivery status. This never changes the brief contract or review state.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel mark brief brf_… as deployed”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- brief_get_full, project_delivery_status_set
Arguments
deliveryStatusany of · requiredDesired explicit delivery state; null deliberately clears the marker and does not alter review, approval, or contract state.
any of
Branch 1
Branch 2
ifDeliveryStatusVersioninteger · requiredRequired optimistic-concurrency precondition copied from the latest deliveryStatusVersion returned by Semel.
minimum: 0
correctionReasonstring · optionalTrimmed audit reason required for backward transitions and clears; tabs and line breaks are allowed but other control characters are rejected.
minimum length: 1 · maximum length: 500
briefIdstring · requiredBrief identifier whose explicit delivery status should be changed.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"briefId": "brf_fixture_checkout",
"deliveryStatus": "shipped",
"ifDeliveryStatusVersion": 0,
"idempotencyKey": "recipe-brief-delivery-status-set-v1"
}{
"briefId": "{{briefId}}",
"deliveryStatus": "{{briefDeliveryStatus}}",
"ifDeliveryStatusVersion": 0,
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Desired explicit delivery state; null deliberately clears the marker and does not alter review, approval, or contract state."
},
"ifDeliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Required optimistic-concurrency precondition copied from the latest deliveryStatusVersion returned by Semel."
},
"correctionReason": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Trimmed audit reason required for backward transitions and clears; tabs and line breaks are allowed but other control characters are rejected."
},
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier whose explicit delivery status should be changed."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"deliveryStatus",
"ifDeliveryStatusVersion",
"briefId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
briefobject · requiredCurrent brief record returned by the operation.
brief.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
brief.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
brief.titlestring · requiredHuman-readable title displayed in Semel.
brief.state"drafting" | "in_review" | "baselined" | "in_development" | "checked" | "superseded" | "closed" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: "drafting", "in_review", "baselined", "in_development", "checked", "superseded", "closed".
brief.currentVersionHashstring | null · requiredHash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available.
brief.contentobject · requiredComplete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable.
Map values · any JSON value
brief.versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
brief.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
brief.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
brief.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
brief.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
brief.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
brief.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
deliveryobject · requiredCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state.
delivery.projectionobject · requiredAuthoritative delivery projection after the operation, including an exact no-op response.
delivery.projection.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
delivery.projection.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
delivery.projection.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
delivery.projection.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
delivery.projection.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
delivery.changedboolean · requiredTrue when projection and audit event were committed; false for an exact event-free no-op.
delivery.eventIdstring | null · requiredImmutable delivery-status audit event identifier for a committed change; null for an exact no-op.
{
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {},
"versionNum": 0,
"delivery": {
"deliveryStatus": "shipped",
"deliveryStatusVersion": 1,
"changedAt": "2026-09-07T16:00:00.000Z",
"changedById": "example",
"source": "mcp"
}
},
"delivery": {
"projection": {
"deliveryStatus": "shipped",
"deliveryStatusVersion": 1,
"changedAt": "2026-09-07T16:00:00.000Z",
"changedById": "example",
"source": "mcp"
},
"changed": true,
"eventId": "example"
}
}{
"content": [
{
"type": "text",
"text": "{\"brief\":{\"id\":\"brf_fixture_checkout\",\"projectId\":\"prj_fixture_checkout\",\"title\":\"Retry-safe checkout\",\"state\":\"drafting\",\"currentVersionHash\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\"content\":{},\"versionNum\":0,\"delivery\":{\"deliveryStatus\":\"shipped\",\"deliveryStatusVersion\":1,\"changedAt\":\"2026-09-07T16:00:00.000Z\",\"changedById\":\"example\",\"source\":\"mcp\"}},\"delivery\":{\"projection\":{\"deliveryStatus\":\"shipped\",\"deliveryStatusVersion\":1,\"changedAt\":\"2026-09-07T16:00:00.000Z\",\"changedById\":\"example\",\"source\":\"mcp\"},\"changed\":true,\"eventId\":\"example\"}}"
}
],
"structuredContent": {
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {},
"versionNum": 0,
"delivery": {
"deliveryStatus": "shipped",
"deliveryStatusVersion": 1,
"changedAt": "2026-09-07T16:00:00.000Z",
"changedById": "example",
"source": "mcp"
}
},
"delivery": {
"projection": {
"deliveryStatus": "shipped",
"deliveryStatusVersion": 1,
"changedAt": "2026-09-07T16:00:00.000Z",
"changedById": "example",
"source": "mcp"
},
"changed": true,
"eventId": "example"
}
}
}- briefDeliveryStatus ← structuredContent.delivery.projection.deliveryStatus
Next permitted action: Keep delivery status separate from the complete-content replacement and its contract version.
Complete raw result schema
{
"type": "object",
"properties": {
"brief": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"title": {
"type": "string",
"description": "Human-readable title displayed in Semel."
},
"state": {
"type": "string",
"enum": [
"drafting",
"in_review",
"baselined",
"in_development",
"checked",
"superseded",
"closed"
],
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: \"drafting\", \"in_review\", \"baselined\", \"in_development\", \"checked\", \"superseded\", \"closed\"."
},
"currentVersionHash": {
"type": [
"string",
"null"
],
"description": "Hash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available."
},
"content": {
"type": "object",
"additionalProperties": {},
"description": "Complete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"id",
"projectId",
"title",
"state",
"currentVersionHash",
"content",
"versionNum"
],
"additionalProperties": false,
"description": "Current brief record returned by the operation."
},
"delivery": {
"type": "object",
"properties": {
"projection": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Authoritative delivery projection after the operation, including an exact no-op response."
},
"changed": {
"type": "boolean",
"description": "True when projection and audit event were committed; false for an exact event-free no-op."
},
"eventId": {
"type": [
"string",
"null"
],
"description": "Immutable delivery-status audit event identifier for a committed change; null for an exact no-op."
}
},
"required": [
"projection",
"changed",
"eventId"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state."
}
},
"required": [
"brief",
"delivery"
],
"additionalProperties": false
}brief_export_markdown
readDEPRECATED compatibility export that renders a brief to Markdown only. It is not a verified implementation handoff; use brief_export_package instead.
- Mode
- read · low risk
- Scopes
- brief:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel export this brief as markdown”“/semel give me the markdown for the checkout brief”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- brief_export_package, brief_get_full
Arguments
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier.
minimum length: 1
{
"briefId": "brf_fixture_checkout"
}{
"briefId": "{{briefId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier."
}
},
"required": [
"briefId"
],
"additionalProperties": false
}Structured result
filenamestring · requiredSafe suggested filename for the downloaded export.
resourceany of · requiredOptional MCP resource descriptor for the Markdown export; null means the export is available only in the inline payload. A null value explicitly means no current value is available.
any of
Branch 1
resource.uristring · requiredAbsolute or same-origin URI for the referenced resource or required operator action.
resource.namestring · requiredHuman-readable name displayed in Semel.
resource.mimeTypestring · requiredInternet media type of the artifact or exported resource; null means the producer did not record one.
Branch 2
downloadUrlstring | null · requiredShort-lived or public download URL returned by Semel; do not construct or persist it as an identifier. A null value explicitly means no current value is available.
markdownstring | null · requiredExact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters. A null value explicitly means no current value is available.
{
"filename": "retry-safe-checkout.zip",
"resource": {
"uri": "https://mcp.semel.ai/brief-exports/brf_fixture_checkout.md",
"name": "retry-safe-checkout.md",
"mimeType": "text/markdown"
},
"downloadUrl": "example",
"markdown": "example"
}{
"content": [
{
"type": "text",
"text": "{\"filename\":\"retry-safe-checkout.zip\",\"resource\":{\"uri\":\"https://mcp.semel.ai/brief-exports/brf_fixture_checkout.md\",\"name\":\"retry-safe-checkout.md\",\"mimeType\":\"text/markdown\"},\"downloadUrl\":\"example\",\"markdown\":\"example\"}"
},
{
"type": "resource_link",
"uri": "https://mcp.semel.ai/brief-exports/brf_fixture_checkout.md",
"name": "retry-safe-checkout.md",
"mimeType": "text/markdown"
}
],
"structuredContent": {
"filename": "retry-safe-checkout.zip",
"resource": {
"uri": "https://mcp.semel.ai/brief-exports/brf_fixture_checkout.md",
"name": "retry-safe-checkout.md",
"mimeType": "text/markdown"
},
"downloadUrl": "example",
"markdown": "example"
}
}- legacyResource ← structuredContent.resource
Next permitted action: Label the result deprecated and do not treat it as a verified handoff.
Complete raw result schema
{
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Safe suggested filename for the downloaded export."
},
"resource": {
"anyOf": [
{
"type": "object",
"properties": {
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"mimeType": {
"type": "string",
"description": "Internet media type of the artifact or exported resource; null means the producer did not record one."
}
},
"required": [
"uri",
"name",
"mimeType"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Optional MCP resource descriptor for the Markdown export; null means the export is available only in the inline payload. A null value explicitly means no current value is available."
},
"downloadUrl": {
"type": [
"string",
"null"
],
"description": "Short-lived or public download URL returned by Semel; do not construct or persist it as an identifier. A null value explicitly means no current value is available."
},
"markdown": {
"type": [
"string",
"null"
],
"description": "Exact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters. A null value explicitly means no current value is available."
}
},
"required": [
"filename",
"resource",
"downloadUrl",
"markdown"
],
"additionalProperties": false
}brief_export_package
write · idempotent (needs idempotencyKey)Create a verified, immutable ZIP implementation handoff for a brief — the canonical R9 export. Use to hand a completed brief off to implementation; if it errors, no usable package exists and you should not fall back to the deprecated Markdown export.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel export the checkout brief as an implementation package”“/semel build the handoff package for this brief”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- brief_get_full, brief_export_markdown
Arguments
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"briefId": "brf_fixture_checkout",
"idempotencyKey": "recipe-brief-export-package-v1"
}{
"briefId": "{{briefId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"briefId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
exportIdstring · requiredOpaque identifier assigned to this deterministic export package; use returned download metadata rather than constructing it. Minimum accepted length or value is 1.
minimum length: 1
status"ready" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "ready".
filenamestring · requiredSafe suggested filename for the downloaded export. Minimum accepted length or value is 1.
minimum length: 1
downloadUrlstring · requiredShort-lived or public download URL returned by Semel; do not construct or persist it as an identifier. Minimum accepted length or value is 1.
minimum length: 1
manifestSha256string · requiredLowercase hexadecimal SHA-256 digest of the export manifest.
pattern: ^[a-f0-9]{64}$
implementationReadytrue · requiredWhether the exported brief satisfies Semel implementation-readiness checks. This branch always uses true.
expiresAtstring · requiredRFC 3339 expiration timestamp. Use an RFC 3339 date-time string.
format: date-time
snapshotIdstring · requiredImmutable export snapshot identifier used to reproduce the exported brief state. Minimum accepted length or value is 1.
minimum length: 1
contractVersionIdstring · requiredImmutable brief contract-version identifier resolved by Semel. Minimum accepted length or value is 1.
minimum length: 1
{
"exportId": "example",
"status": "ready",
"filename": "retry-safe-checkout.zip",
"downloadUrl": "https://mcp.semel.ai/brief-exports/exp_fixture_checkout",
"manifestSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"implementationReady": true,
"expiresAt": "2026-09-07T16:00:00.000Z",
"snapshotId": "example",
"contractVersionId": "example"
}{
"content": [
{
"type": "text",
"text": "{\"exportId\":\"example\",\"status\":\"ready\",\"filename\":\"retry-safe-checkout.zip\",\"downloadUrl\":\"https://mcp.semel.ai/mcp/brief-exports/example/download\",\"manifestSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"implementationReady\":true,\"expiresAt\":\"2026-09-07T16:00:00.000Z\",\"snapshotId\":\"example\",\"contractVersionId\":\"example\"}"
},
{
"type": "resource_link",
"uri": "https://mcp.semel.ai/mcp/brief-exports/example/download",
"name": "retry-safe-checkout.zip",
"mimeType": "application/zip"
}
],
"structuredContent": {
"exportId": "example",
"status": "ready",
"filename": "retry-safe-checkout.zip",
"downloadUrl": "https://mcp.semel.ai/mcp/brief-exports/example/download",
"manifestSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"implementationReady": true,
"expiresAt": "2026-09-07T16:00:00.000Z",
"snapshotId": "example",
"contractVersionId": "example"
}
}- downloadUrl ← structuredContent.downloadUrl
Next permitted action: Fetch the bearer-authenticated resource before expiresAt and verify the manifest/hash.
Complete raw result schema
{
"type": "object",
"properties": {
"exportId": {
"type": "string",
"minLength": 1,
"description": "Opaque identifier assigned to this deterministic export package; use returned download metadata rather than constructing it. Minimum accepted length or value is 1."
},
"status": {
"type": "string",
"const": "ready",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"ready\"."
},
"filename": {
"type": "string",
"minLength": 1,
"description": "Safe suggested filename for the downloaded export. Minimum accepted length or value is 1."
},
"downloadUrl": {
"type": "string",
"minLength": 1,
"description": "Short-lived or public download URL returned by Semel; do not construct or persist it as an identifier. Minimum accepted length or value is 1."
},
"manifestSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest of the export manifest."
},
"implementationReady": {
"type": "boolean",
"const": true,
"description": "Whether the exported brief satisfies Semel implementation-readiness checks. This branch always uses true."
},
"expiresAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 expiration timestamp. Use an RFC 3339 date-time string."
},
"snapshotId": {
"type": "string",
"minLength": 1,
"description": "Immutable export snapshot identifier used to reproduce the exported brief state. Minimum accepted length or value is 1."
},
"contractVersionId": {
"type": "string",
"minLength": 1,
"description": "Immutable brief contract-version identifier resolved by Semel. Minimum accepted length or value is 1."
}
},
"required": [
"exportId",
"status",
"filename",
"downloadUrl",
"manifestSha256",
"implementationReady",
"expiresAt",
"snapshotId",
"contractVersionId"
],
"additionalProperties": false
}brief_get_full
readRead the complete brief aggregate in one call — the current content plus the first page of every durable collection (versions, decision history, proposals, and more). Use to load everything about a brief before acting on it.
- Mode
- read · low risk
- Scopes
- brief:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel show me everything in the checkout brief”“/semel open the full brief for the billing project”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- brief_list, brief_collection_list, brief_export_package
Arguments
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier.
minimum length: 1
{
"briefId": "brf_fixture_checkout"
}{
"briefId": "{{briefId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier."
}
},
"required": [
"briefId"
],
"additionalProperties": false
}Structured result
briefobject · requiredCurrent brief record returned by the operation.
brief.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
brief.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
brief.titlestring · requiredHuman-readable title displayed in Semel.
brief.state"drafting" | "in_review" | "baselined" | "in_development" | "checked" | "superseded" | "closed" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: "drafting", "in_review", "baselined", "in_development", "checked", "superseded", "closed".
brief.currentVersionHashstring | null · requiredHash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available.
brief.contentobject · requiredComplete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable.
Map values · any JSON value
brief.versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
brief.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
brief.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
brief.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
brief.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
brief.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
brief.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
collectionsobject · requiredFirst page of each durable collection associated with the brief.
collections.versionsobject · requiredImmutable brief version summaries, newest first.
collections.versions.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.versions.items[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
collections.versions.items[].versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
collections.versions.items[].contentHashstring · requiredHash of the immutable brief content snapshot.
collections.versions.items[].aiReviewerRolestring | null · requiredReviewer role that authored this immutable brief version; null means a human or legacy source authored it. A null value explicitly means no current value is available.
collections.versions.items[].aiReviewerIdentityobject · optionalServer-stamped identity of the reviewer occurrence that authored this immutable brief version. Omit the field when it does not apply; omission is distinct from an empty value.
collections.versions.items[].aiReviewerIdentity.schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
collections.versions.items[].aiReviewerIdentity.occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.versions.items[].aiReviewerIdentity.reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.versions.items[].aiReviewerIdentity.reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.versions.items[].aiReviewerIdentity.reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.versions.items[].aiReviewerIdentity.reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.versions.items[].aiReviewerIdentity.reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.versions.items[].aiReviewerIdentity.reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.versions.items[].aiReviewerIdentity.labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.versions.items[].aiReviewerIdentity.legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
collections.versions.items[].sourceRunIdstring | null · requiredReview-run identifier that authored this brief version; null means the version was not created by a reviewer run. A null value explicitly means no current value is available.
collections.versions.items[].isRevertboolean · requiredWhether this immutable version was created by reverting to prior content.
collections.versions.items[].createdByIdstring · requiredSemel user identifier recorded as the initiating creator.
collections.versions.items[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
collections.versions.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.decisionHistoryobject · requiredDurable question and decision history for the brief.
collections.decisionHistory.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.decisionHistory.items[].kind"canonical_decision" | "reviewer_question" · requiredDiscriminator identifying the typed variant represented by this object. Allowed values: "canonical_decision", "reviewer_question".
collections.decisionHistory.items[].sourceIdstring · requiredOpaque source identifier returned by project_context_sources_list; pass it back unchanged.
collections.decisionHistory.items[].textstring · requiredHuman-authored or model-produced text for this typed record.
collections.decisionHistory.items[].answerstring | null · requiredDurable answer text recorded for this decision-history entry; null means the question had no accepted answer at this snapshot. A null value explicitly means no current value is available.
collections.decisionHistory.items[].statusstring | null · requiredCurrent typed status; the schema enum or union branch lists every allowed value. A null value explicitly means no current value is available.
collections.decisionHistory.items[].reviewerRolestring | null · requiredReviewer role attributed to this question, finding, or version. A null value explicitly means no current value is available.
collections.decisionHistory.items[].reviewerIdentityobject · optionalServer-stamped reviewer occurrence identity, or the bounded occurrence echo accepted from a schema-2 result. Omit the field when it does not apply; omission is distinct from an empty value.
collections.decisionHistory.items[].reviewerIdentity.schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
collections.decisionHistory.items[].reviewerIdentity.occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.decisionHistory.items[].reviewerIdentity.reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.decisionHistory.items[].reviewerIdentity.reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.decisionHistory.items[].reviewerIdentity.reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.decisionHistory.items[].reviewerIdentity.reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.decisionHistory.items[].reviewerIdentity.reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.decisionHistory.items[].reviewerIdentity.reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.decisionHistory.items[].reviewerIdentity.labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.decisionHistory.items[].reviewerIdentity.legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
collections.decisionHistory.items[].sectionstring | null · requiredCanonical brief section key associated with the question, finding, proposal, or decision entry. A null value explicitly means no current value is available.
collections.decisionHistory.items[].iterationRoundany of · requiredOne-based review iteration that produced this decision-history entry; null means legacy round data is unavailable. A null value explicitly means no current value is available. The value must be an integer.
any of
Branch 1
Branch 2
collections.decisionHistory.items[].sessionIdstring | null · requiredReview-session identifier associated with this historical record; null means legacy provenance is unavailable. A null value explicitly means no current value is available.
collections.decisionHistory.items[].runIdstring | null · requiredReview-run identifier returned by a review start, status, or cascade handoff result. A null value explicitly means no current value is available.
collections.decisionHistory.items[].actorUserIdstring | null · requiredAccountable Semel user identifier recorded on the event. A null value explicitly means no current value is available.
collections.decisionHistory.items[].createdAtstring | null · requiredRFC 3339 timestamp assigned by Semel when this record was created. A null value explicitly means no current value is available.
collections.decisionHistory.items[].answeredAtstring | null · requiredRFC 3339 timestamp when the active answer was recorded. A null value explicitly means no current value is available.
collections.decisionHistory.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.findingsobject · requiredReviewer findings associated with the selected brief version.
collections.findings.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.findings.items[].sectionstring · requiredCanonical brief section key associated with the question, finding, proposal, or decision entry.
collections.findings.items[].notestring · requiredReviewer-facing finding detail that explains the observed issue and the evidence-based change requested.
collections.findings.items[].severity"info" | "warn" | "block" · requiredFinding impact level: info is advisory, warn requires attention, and block prevents approval or completion. Allowed values: "info", "warn", "block".
collections.findings.items[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
Array item · any of
any of
Branch 1
collections.findings.items[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
collections.findings.items[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
collections.findings.items[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.findings.items[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
collections.findings.items[].citations[].briefIdstring · requiredBrief identifier returned by brief_create or brief_list; it determines the project authorization boundary.
collections.findings.items[].citations[].contractVersionIdstring · requiredImmutable brief contract-version identifier resolved by Semel.
collections.findings.items[].citations[].versionNuminteger · optionalMonotonic brief contract version number assigned by Semel. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citations[].reviewersarray · requiredReviewer roles whose evidence processing verified or contributed this citation. An empty array explicitly means no matching items.
minimum items: 1
Array item · "product" | "engineering" | "design" | "security" | "test"
collections.findings.items[].citations[].verification"exact" | "canonical" | "unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: "exact", "canonical", "unverified".
Branch 2
collections.findings.items[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
collections.findings.items[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.findings.items[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
collections.findings.items[].citations[].extractedTextHashstring · requiredHash of the normalized text extracted from the cited artifact, used to bind the citation to exact processed content.
collections.findings.items[].citations[].reviewersarray · requiredReviewer roles whose evidence processing verified or contributed this citation. An empty array explicitly means no matching items.
minimum items: 1
Array item · "product" | "engineering" | "design" | "security" | "test"
collections.findings.items[].citations[].verification"exact" | "canonical" | "unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: "exact", "canonical", "unverified".
Branch 3
collections.findings.items[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
collections.findings.items[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.findings.items[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
collections.findings.items[].citations[].evidenceManifestIdstring · requiredImmutable evidence-manifest identifier captured for the review run. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citations[].evidenceManifestItemIdstring · requiredIdentifier of the exact item inside the immutable evidence manifest. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citations[].workspaceRepositoryIdstring · requiredWorkspace-scoped connected repository identifier recorded in evidence provenance. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citations[].revisionIdstring · requiredImmutable indexed repository revision identifier. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citations[].commitShastring · requiredGit commit SHA pinned by the evidence manifest.
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
collections.findings.items[].citations[].blobShastring · requiredGit blob SHA for the cited file contents.
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
collections.findings.items[].citations[].pathstring · requiredRepository-relative source path; it never denotes an arbitrary local filesystem path. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citations[].startLineinteger · requiredOne-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citations[].endLineinteger · requiredOne-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citations[].excerptSha256string · requiredLowercase hexadecimal SHA-256 digest of the exact cited excerpt.
pattern: ^[a-f0-9]{64}$
collections.findings.items[].citations[].route"exact" | "lexical" | "hybrid" · requiredRepository route or evidence route label recorded with the citation. Allowed values: "exact", "lexical", "hybrid".
collections.findings.items[].citations[].coverageobject · requiredEvidence coverage metadata or typed completeness level for the cited source; unknown or partial coverage must not imply absence.
Map values · any JSON value
collections.findings.items[].citations[].reviewersarray · requiredReviewer roles whose evidence processing verified or contributed this citation. An empty array explicitly means no matching items.
minimum items: 1
Array item · "product" | "engineering" | "design" | "security" | "test"
collections.findings.items[].citations[].verification"exact" | "canonical" | "unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: "exact", "canonical", "unverified".
Branch 4
collections.findings.items[].citations[].sourceType"local-worktree" · requiredDiscriminator identifying the evidence source variant. This branch always uses "local-worktree".
collections.findings.items[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.findings.items[].citations[].repositoryIdstring · requiredRepository identifier from the connected-codebase inventory. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citations[].headShastring · requiredGit commit SHA of the local worktree HEAD at binding or citation time.
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
collections.findings.items[].citations[].fileShaany of · optionalGit blob SHA of the local working file computed with git hash-object; null when unavailable. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available.
any of
Branch 1
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
Branch 2
collections.findings.items[].citations[].pathstring · requiredRepository-relative source path; it never denotes an arbitrary local filesystem path. Accepted length or value is 1 through 4096, inclusive.
minimum length: 1 · maximum length: 4096
collections.findings.items[].citations[].startLineinteger · requiredOne-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citations[].endLineinteger · requiredOne-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citations[].excerptSha256string · requiredLowercase hexadecimal SHA-256 digest of the exact cited excerpt.
pattern: ^[a-f0-9]{64}$
collections.findings.items[].citations[].dirtyboolean · requiredWhether the local worktree had uncommitted changes at binding or citation time.
collections.findings.items[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
collections.findings.items[].citations[].verification"unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. This branch always uses "unverified".
collections.findings.items[].citations[].reviewersarray · requiredReviewer roles whose evidence processing verified or contributed this citation. An empty array explicitly means no matching items.
minimum items: 1
Array item · "product" | "engineering" | "design" | "security" | "test"
collections.findings.items[].citationsV2array · optionalSchema-2 evidence citations carrying server-stamped reviewer occurrence attribution. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
Array item · any of
any of
Branch 1
collections.findings.items[].citationsV2[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
collections.findings.items[].citationsV2[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
collections.findings.items[].citationsV2[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.findings.items[].citationsV2[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
collections.findings.items[].citationsV2[].briefIdstring · requiredBrief identifier returned by brief_create or brief_list; it determines the project authorization boundary.
collections.findings.items[].citationsV2[].contractVersionIdstring · requiredImmutable brief contract-version identifier resolved by Semel.
collections.findings.items[].citationsV2[].versionNuminteger · optionalMonotonic brief contract version number assigned by Semel. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citationsV2[].verification"exact" | "canonical" | "unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: "exact", "canonical", "unverified".
collections.findings.items[].citationsV2[].identitySchemaVersion2 · requiredVersion of the reviewer identity attribution stamped on this citation record. This branch always uses 2.
collections.findings.items[].citationsV2[].reviewerIdentitiesarray · requiredServer-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
collections.findings.items[].citationsV2[].reviewerIdentities[].schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
collections.findings.items[].citationsV2[].reviewerIdentities[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
Branch 2
collections.findings.items[].citationsV2[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
collections.findings.items[].citationsV2[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.findings.items[].citationsV2[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
collections.findings.items[].citationsV2[].extractedTextHashstring · requiredHash of the normalized text extracted from the cited artifact, used to bind the citation to exact processed content.
collections.findings.items[].citationsV2[].verification"exact" | "canonical" | "unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: "exact", "canonical", "unverified".
collections.findings.items[].citationsV2[].identitySchemaVersion2 · requiredVersion of the reviewer identity attribution stamped on this citation record. This branch always uses 2.
collections.findings.items[].citationsV2[].reviewerIdentitiesarray · requiredServer-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
collections.findings.items[].citationsV2[].reviewerIdentities[].schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
collections.findings.items[].citationsV2[].reviewerIdentities[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
Branch 3
collections.findings.items[].citationsV2[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
collections.findings.items[].citationsV2[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.findings.items[].citationsV2[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
collections.findings.items[].citationsV2[].evidenceManifestIdstring · requiredImmutable evidence-manifest identifier captured for the review run. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].evidenceManifestItemIdstring · requiredIdentifier of the exact item inside the immutable evidence manifest. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].workspaceRepositoryIdstring · requiredWorkspace-scoped connected repository identifier recorded in evidence provenance. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].revisionIdstring · requiredImmutable indexed repository revision identifier. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].commitShastring · requiredGit commit SHA pinned by the evidence manifest.
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
collections.findings.items[].citationsV2[].blobShastring · requiredGit blob SHA for the cited file contents.
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
collections.findings.items[].citationsV2[].pathstring · requiredRepository-relative source path; it never denotes an arbitrary local filesystem path. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].startLineinteger · requiredOne-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citationsV2[].endLineinteger · requiredOne-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citationsV2[].excerptSha256string · requiredLowercase hexadecimal SHA-256 digest of the exact cited excerpt.
pattern: ^[a-f0-9]{64}$
collections.findings.items[].citationsV2[].route"exact" | "lexical" | "hybrid" · requiredRepository route or evidence route label recorded with the citation. Allowed values: "exact", "lexical", "hybrid".
collections.findings.items[].citationsV2[].coverageobject · requiredEvidence coverage metadata or typed completeness level for the cited source; unknown or partial coverage must not imply absence.
Map values · any JSON value
collections.findings.items[].citationsV2[].verification"exact" | "canonical" | "unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: "exact", "canonical", "unverified".
collections.findings.items[].citationsV2[].identitySchemaVersion2 · requiredVersion of the reviewer identity attribution stamped on this citation record. This branch always uses 2.
collections.findings.items[].citationsV2[].reviewerIdentitiesarray · requiredServer-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
collections.findings.items[].citationsV2[].reviewerIdentities[].schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
collections.findings.items[].citationsV2[].reviewerIdentities[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
Branch 4
collections.findings.items[].citationsV2[].sourceType"local-worktree" · requiredDiscriminator identifying the evidence source variant. This branch always uses "local-worktree".
collections.findings.items[].citationsV2[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.findings.items[].citationsV2[].repositoryIdstring · requiredRepository identifier from the connected-codebase inventory. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].headShastring · requiredGit commit SHA of the local worktree HEAD at binding or citation time.
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
collections.findings.items[].citationsV2[].fileShaany of · optionalGit blob SHA of the local working file computed with git hash-object; null when unavailable. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available.
any of
Branch 1
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
Branch 2
collections.findings.items[].citationsV2[].pathstring · requiredRepository-relative source path; it never denotes an arbitrary local filesystem path. Accepted length or value is 1 through 4096, inclusive.
minimum length: 1 · maximum length: 4096
collections.findings.items[].citationsV2[].startLineinteger · requiredOne-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citationsV2[].endLineinteger · requiredOne-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
collections.findings.items[].citationsV2[].excerptSha256string · requiredLowercase hexadecimal SHA-256 digest of the exact cited excerpt.
pattern: ^[a-f0-9]{64}$
collections.findings.items[].citationsV2[].dirtyboolean · requiredWhether the local worktree had uncommitted changes at binding or citation time.
collections.findings.items[].citationsV2[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
collections.findings.items[].citationsV2[].verification"unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. This branch always uses "unverified".
collections.findings.items[].citationsV2[].identitySchemaVersion2 · requiredVersion of the reviewer identity attribution stamped on this citation record. This branch always uses 2.
collections.findings.items[].citationsV2[].reviewerIdentitiesarray · requiredServer-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
collections.findings.items[].citationsV2[].reviewerIdentities[].schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
collections.findings.items[].citationsV2[].reviewerIdentities[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].citationsV2[].reviewerIdentities[].legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
collections.findings.items[].reviewerIdentitiesarray · optionalServer-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
collections.findings.items[].reviewerIdentities[].schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
collections.findings.items[].reviewerIdentities[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.findings.items[].reviewerIdentities[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.findings.items[].reviewerIdentities[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.findings.items[].reviewerIdentities[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.findings.items[].reviewerIdentities[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.findings.items[].reviewerIdentities[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.findings.items[].reviewerIdentities[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.findings.items[].reviewerIdentities[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.findings.items[].reviewerIdentities[].legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
collections.findings.items[].evidenceUnavailableboolean · optionalWhether the finding was emitted without the evidence normally required for verification; omission means evidence availability was not separately recorded. Omit the field when it does not apply; omission is distinct from an empty value.
collections.findings.items[].claimDisposition"verified" | "unverified" · optionalPublished support disposition for a code claim; omission indicates a legacy row that is treated as verified. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: "verified", "unverified".
collections.findings.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.proposalsobject · requiredReviewer proposals and their decision/commit state.
collections.proposals.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.proposals.items[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
collections.proposals.items[].sessionIdstring · requiredReview-session identifier associated with this historical record; null means legacy provenance is unavailable.
collections.proposals.items[].sectionstring · requiredCanonical brief section key associated with the question, finding, proposal, or decision entry.
collections.proposals.items[].summarystring | null · requiredConcise safe summary intended for users and logs. A null value explicitly means no current value is available.
collections.proposals.items[].statusstring · requiredCurrent typed status; the schema enum or union branch lists every allowed value.
collections.proposals.items[].decidedByIdstring | null · requiredSemel user identifier that decided this proposal; absent until a decision exists. A null value explicitly means no current value is available.
collections.proposals.items[].decidedAtstring | null · requiredRFC 3339 timestamp of the proposal decision; null means undecided. A null value explicitly means no current value is available.
collections.proposals.items[].decisionSourcestring | null · requiredTyped provenance showing whether a proposal decision came from a user, reviewer, or system rule; null means unavailable legacy provenance. A null value explicitly means no current value is available.
collections.proposals.items[].committedAtstring | null · requiredRFC 3339 timestamp when the accepted proposal was committed; null means not committed. A null value explicitly means no current value is available.
collections.proposals.items[].sourceRoundany of · requiredReview round that produced this proposal; null means no round provenance was recorded. A null value explicitly means no current value is available. The value must be an integer.
any of
Branch 1
Branch 2
collections.proposals.items[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
collections.proposals.items[].reviewerIdentitiesarray · optionalServer-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
collections.proposals.items[].reviewerIdentities[].schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
collections.proposals.items[].reviewerIdentities[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.proposals.items[].reviewerIdentities[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.proposals.items[].reviewerIdentities[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.proposals.items[].reviewerIdentities[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.proposals.items[].reviewerIdentities[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.proposals.items[].reviewerIdentities[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.proposals.items[].reviewerIdentities[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.proposals.items[].reviewerIdentities[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.proposals.items[].reviewerIdentities[].legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
collections.proposals.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.approvalsobject · requiredAppend-only human approval records for brief versions.
collections.approvals.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.approvals.items[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
collections.approvals.items[].contractVersionIdstring · requiredImmutable brief contract-version identifier resolved by Semel.
collections.approvals.items[].approverIdstring · requiredSemel user identifier for the human who recorded this approval decision.
collections.approvals.items[].actionstring · requiredTyped human approval action recorded in the append-only approval ledger.
collections.approvals.items[].isStaleboolean · requiredWhether this historical approval no longer targets the current brief version.
collections.approvals.items[].reRequestReasonstring | null · requiredReason a previously decided approval was requested again; null means no re-request reason applies. A null value explicitly means no current value is available.
collections.approvals.items[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
collections.approvals.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.commentsobject · requiredHuman comments attached to brief sections or anchors.
collections.comments.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.comments.items[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
collections.comments.items[].sectionKeystring · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result.
collections.comments.items[].anchorstring | null · requiredOptional structured location within a brief section for this comment; null means the comment applies to the section as a whole. A null value explicitly means no current value is available.
collections.comments.items[].textstring · requiredHuman-authored or model-produced text for this typed record.
collections.comments.items[].authorIdstring · requiredSemel user identifier for the comment or content author.
collections.comments.items[].resolvedAtstring | null · requiredRFC 3339 timestamp when the comment was resolved; null means unresolved. A null value explicitly means no current value is available.
collections.comments.items[].resolvedBystring | null · requiredSemel user identifier that resolved the comment; absent until resolution. A null value explicitly means no current value is available.
collections.comments.items[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
collections.comments.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.artifactsobject · requiredSource artifacts attached to the brief.
collections.artifacts.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.artifacts.items[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
collections.artifacts.items[].artifactTypestring · requiredSemel artifact classification used to select ingestion and display behavior for this source material.
collections.artifacts.items[].labelstring | null · requiredHuman-readable label displayed for this record. A null value explicitly means no current value is available.
collections.artifacts.items[].sourceUrlstring | null · requiredOriginal source URL recorded for the artifact; null means the artifact has no external source URL. A null value explicitly means no current value is available.
collections.artifacts.items[].mimeTypestring | null · requiredInternet media type of the artifact or exported resource; null means the producer did not record one. A null value explicitly means no current value is available.
collections.artifacts.items[].sizeBytesany of · requiredArtifact size in bytes. A null value explicitly means no current value is available. The value must be an integer.
any of
Branch 1
Branch 2
collections.artifacts.items[].ingestionStatusstring · requiredCurrent artifact ingestion lifecycle state; only ready artifacts may supply reviewed evidence.
collections.artifacts.items[].createdByIdstring | null · requiredSemel user identifier recorded as the initiating creator. A null value explicitly means no current value is available.
collections.artifacts.items[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
collections.artifacts.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.workOrdersobject · requiredMaterialized implementation work orders for the brief.
collections.workOrders.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.workOrders.items[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
collections.workOrders.items[].titlestring · requiredHuman-readable title displayed in Semel.
collections.workOrders.items[].descriptionstring | null · requiredHuman-readable explanatory text; null or omission means no description was supplied. A null value explicitly means no current value is available.
collections.workOrders.items[].positioninteger · requiredStable zero-based or configured ordering position returned by Semel. The value must be an integer.
collections.workOrders.items[].boundCriteriaarray · requiredStable acceptance-criterion IDs implemented by this work order. An empty array explicitly means no matching items.
Array item · string
collections.workOrders.items[].boundRequirementsarray · requiredStable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. An empty array explicitly means no matching items.
Array item · string
collections.workOrders.items[].externalTrackerstring | null · requiredExternal issue-tracker provider associated with the work order; null means the work order has not been exported. A null value explicitly means no current value is available.
collections.workOrders.items[].externalUrlstring | null · requiredExternal tracker URL associated with the work order; null means no issue is linked. A null value explicitly means no current value is available.
collections.workOrders.items[].exportStatestring · requiredCurrent external-tracker export lifecycle state for this generated work order.
collections.workOrders.items[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
collections.workOrders.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.reviewSessionsobject · requiredReview session summaries associated with the brief.
collections.reviewSessions.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.reviewSessions.items[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
collections.reviewSessions.items[].runIdstring · requiredReview-run identifier returned by a review start, status, or cascade handoff result.
collections.reviewSessions.items[].statusstring · requiredCurrent typed status; the schema enum or union branch lists every allowed value.
collections.reviewSessions.items[].reviewerSetarray · requiredOrdered reviewer roles configured for this cascade. An empty array explicitly means no matching items.
Array item · string
collections.reviewSessions.items[].reviewerIdentitySchemaVersion2 · optionalVersion of the reviewer identity schema attached to this historical review session. Omit the field when it does not apply; omission is distinct from an empty value. This branch always uses 2.
collections.reviewSessions.items[].cascadeExecutionSnapshotIdstring · optionalIdentifier of the immutable cascade snapshot shared by every reviewer session in this pass. Omit the field when it does not apply; omission is distinct from an empty value.
collections.reviewSessions.items[].activeReviewerOccurrenceIdstring · optionalEnabled reviewer occurrence assigned to this individual review session or execution. Omit the field when it does not apply; omission is distinct from an empty value.
collections.reviewSessions.items[].reviewerOccurrencesarray · optionalComplete ordered reviewer occurrence list preserved in the immutable cascade execution snapshot. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
collections.reviewSessions.items[].reviewerOccurrences[].positioninteger · requiredStable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
collections.reviewSessions.items[].reviewerOccurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
collections.reviewSessions.items[].reviewerOccurrences[].identityobject · requiredFrozen reviewer occurrence identity used for display and exact historical attribution.
collections.reviewSessions.items[].reviewerOccurrences[].identity.occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
collections.reviewSessions.items[].reviewerOccurrences[].identity.reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
collections.reviewSessions.items[].reviewerOccurrences[].identity.reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
collections.reviewSessions.items[].reviewerOccurrences[].identity.reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
collections.reviewSessions.items[].reviewerOccurrences[].identity.reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
collections.reviewSessions.items[].reviewerOccurrences[].identity.reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
collections.reviewSessions.items[].reviewerOccurrences[].identity.reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
collections.reviewSessions.items[].reviewerOccurrences[].identity.labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
collections.reviewSessions.items[].reviewerOccurrences[].identity.legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
collections.reviewSessions.items[].reviewerOccurrences[].pinobject · requiredExact skill, framing, capability, and model pins for this reviewer occurrence.
collections.reviewSessions.items[].reviewerOccurrences[].pin.skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
collections.reviewSessions.items[].reviewerOccurrences[].pin.skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.reviewSessions.items[].reviewerOccurrences[].pin.skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
collections.reviewSessions.items[].reviewerOccurrences[].pin.framingobject · requiredExact shared reviewer framing artifact pin used for this occurrence.
collections.reviewSessions.items[].reviewerOccurrences[].pin.framing.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.reviewSessions.items[].reviewerOccurrences[].pin.framing.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
collections.reviewSessions.items[].reviewerOccurrences[].pin.capabilitiesarray · requiredOrdered exact capability artifact pins available to this reviewer occurrence. An empty array explicitly means no matching items.
maximum items: 32
Array item · object
collections.reviewSessions.items[].reviewerOccurrences[].pin.capabilities[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.reviewSessions.items[].reviewerOccurrences[].pin.capabilities[].versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.reviewSessions.items[].reviewerOccurrences[].pin.capabilities[].sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
collections.reviewSessions.items[].reviewerOccurrences[].pin.modelobject · requiredOptional model name declared by the harness.
collections.reviewSessions.items[].reviewerOccurrences[].pin.model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
collections.reviewSessions.items[].reviewerOccurrences[].pin.model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
collections.reviewSessions.items[].reviewerOccurrences[].pin.model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
collections.reviewSessions.items[].reviewerConfigurationobject · optionalImmutable configuration revision and adoption origin preserved for this review session. Omit the field when it does not apply; omission is distinct from an empty value.
collections.reviewSessions.items[].reviewerConfiguration.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
collections.reviewSessions.items[].reviewerConfiguration.originobject · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default.
collections.reviewSessions.items[].reviewerConfiguration.origin.kind"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredDiscriminator identifying the typed variant represented by this object. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
collections.reviewSessions.items[].reviewerConfiguration.origin.presetVersionIdany of · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available. Accepted length or value is 1 through 200, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 200
Branch 2
collections.reviewSessions.items[].reviewedContractVersionIdstring | null · requiredImmutable contract-version identifier actually reviewed by this session; null means the session has not pinned one. A null value explicitly means no current value is available.
collections.reviewSessions.items[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
collections.reviewSessions.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
collections.sharesobject · requiredShare-link records associated with the brief.
collections.shares.itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
collections.shares.items[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
collections.shares.items[].accessLevelstring · requiredShare-link access policy assigned by Semel; the enum identifies whether the recipient may only view or may also interact.
collections.shares.items[].sharedByIdstring · requiredSemel user identifier for the person who created the share.
collections.shares.items[].isActiveboolean · requiredWhether this share link remains active.
collections.shares.items[].expiresAtstring | null · requiredRFC 3339 expiration timestamp. A null value explicitly means no current value is available.
collections.shares.items[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
collections.shares.nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
gateNotificationStatusany of · requiredLatest human gate notification status; null means no notification request exists. A null value explicitly means no current value is available.
any of
Branch 1
gateNotificationStatus.requestIdstring · requiredServer request identifier used for support correlation; it is not an idempotency key.
gateNotificationStatus.assignmentIdstring | null · requiredHuman gate assignment identifier created by Semel. A null value explicitly means no current value is available.
gateNotificationStatus.contentHashstring | null · requiredHash of the immutable brief content snapshot. A null value explicitly means no current value is available.
gateNotificationStatus.notifiedAtstring | null · requiredRFC 3339 timestamp when the gate notification was sent; null means not sent. A null value explicitly means no current value is available.
gateNotificationStatus.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
Branch 2
{
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
],
"checklist": [
{
"text": "API contract reviewed",
"checked": false
}
]
},
"versionNum": 3
},
"collections": {
"versions": {
"items": [],
"nextCursor": null
},
"decisionHistory": {
"items": [],
"nextCursor": null
},
"findings": {
"items": [],
"nextCursor": null
},
"proposals": {
"items": [],
"nextCursor": null
},
"approvals": {
"items": [],
"nextCursor": null
},
"comments": {
"items": [],
"nextCursor": null
},
"artifacts": {
"items": [],
"nextCursor": null
},
"workOrders": {
"items": [],
"nextCursor": null
},
"reviewSessions": {
"items": [],
"nextCursor": null
},
"shares": {
"items": [],
"nextCursor": null
}
},
"gateNotificationStatus": null
}{
"content": [
{
"type": "text",
"text": "{\"brief\":{\"id\":\"brf_fixture_checkout\",\"projectId\":\"prj_fixture_checkout\",\"title\":\"Retry-safe checkout\",\"state\":\"drafting\",\"currentVersionHash\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\"content\":{\"goal\":\"Prevent duplicate charges when checkout retries.\",\"requirements\":[\"Reuse one payment intent for retried submissions.\"],\"acceptanceCriteria\":[{\"id\":\"AC-01\",\"text\":\"A retried request returns the original successful result.\"}],\"sourceArtifactLinks\":[{\"label\":\"Linear ENG-42\",\"kind\":\"linear\"}],\"checklist\":[{\"text\":\"API contract reviewed\",\"checked\":false}]},\"versionNum\":3},\"collections\":{\"versions\":{\"items\":[],\"nextCursor\":null},\"decisionHistory\":{\"items\":[],\"nextCursor\":null},\"findings\":{\"items\":[],\"nextCursor\":null},\"proposals\":{\"items\":[],\"nextCursor\":null},\"approvals\":{\"items\":[],\"nextCursor\":null},\"comments\":{\"items\":[],\"nextCursor\":null},\"artifacts\":{\"items\":[],\"nextCursor\":null},\"workOrders\":{\"items\":[],\"nextCursor\":null},\"reviewSessions\":{\"items\":[],\"nextCursor\":null},\"shares\":{\"items\":[],\"nextCursor\":null}},\"gateNotificationStatus\":null}"
}
],
"structuredContent": {
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
],
"checklist": [
{
"text": "API contract reviewed",
"checked": false
}
]
},
"versionNum": 3
},
"collections": {
"versions": {
"items": [],
"nextCursor": null
},
"decisionHistory": {
"items": [],
"nextCursor": null
},
"findings": {
"items": [],
"nextCursor": null
},
"proposals": {
"items": [],
"nextCursor": null
},
"approvals": {
"items": [],
"nextCursor": null
},
"comments": {
"items": [],
"nextCursor": null
},
"artifacts": {
"items": [],
"nextCursor": null
},
"workOrders": {
"items": [],
"nextCursor": null
},
"reviewSessions": {
"items": [],
"nextCursor": null
},
"shares": {
"items": [],
"nextCursor": null
}
},
"gateNotificationStatus": null
}
}- currentContent ← structuredContent.brief.content
Next permitted action: Apply the requested edit locally while preserving every untouched key.
Complete raw result schema
{
"type": "object",
"properties": {
"brief": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"title": {
"type": "string",
"description": "Human-readable title displayed in Semel."
},
"state": {
"type": "string",
"enum": [
"drafting",
"in_review",
"baselined",
"in_development",
"checked",
"superseded",
"closed"
],
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: \"drafting\", \"in_review\", \"baselined\", \"in_development\", \"checked\", \"superseded\", \"closed\"."
},
"currentVersionHash": {
"type": [
"string",
"null"
],
"description": "Hash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available."
},
"content": {
"type": "object",
"additionalProperties": {},
"description": "Complete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"id",
"projectId",
"title",
"state",
"currentVersionHash",
"content",
"versionNum"
],
"additionalProperties": false,
"description": "Current brief record returned by the operation."
},
"collections": {
"type": "object",
"properties": {
"versions": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"contentHash": {
"type": "string",
"description": "Hash of the immutable brief content snapshot."
},
"aiReviewerRole": {
"type": [
"string",
"null"
],
"description": "Reviewer role that authored this immutable brief version; null means a human or legacy source authored it. A null value explicitly means no current value is available."
},
"aiReviewerIdentity": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"schemaVersion",
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false,
"description": "Server-stamped identity of the reviewer occurrence that authored this immutable brief version. Omit the field when it does not apply; omission is distinct from an empty value."
},
"sourceRunId": {
"type": [
"string",
"null"
],
"description": "Review-run identifier that authored this brief version; null means the version was not created by a reviewer run. A null value explicitly means no current value is available."
},
"isRevert": {
"type": "boolean",
"description": "Whether this immutable version was created by reverting to prior content."
},
"createdById": {
"type": "string",
"description": "Semel user identifier recorded as the initiating creator."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"versionNum",
"contentHash",
"aiReviewerRole",
"sourceRunId",
"isRevert",
"createdById",
"createdAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Immutable brief version summaries, newest first."
},
"decisionHistory": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"canonical_decision",
"reviewer_question"
],
"description": "Discriminator identifying the typed variant represented by this object. Allowed values: \"canonical_decision\", \"reviewer_question\"."
},
"sourceId": {
"type": "string",
"description": "Opaque source identifier returned by project_context_sources_list; pass it back unchanged."
},
"text": {
"type": "string",
"description": "Human-authored or model-produced text for this typed record."
},
"answer": {
"type": [
"string",
"null"
],
"description": "Durable answer text recorded for this decision-history entry; null means the question had no accepted answer at this snapshot. A null value explicitly means no current value is available."
},
"status": {
"type": [
"string",
"null"
],
"description": "Current typed status; the schema enum or union branch lists every allowed value. A null value explicitly means no current value is available."
},
"reviewerRole": {
"type": [
"string",
"null"
],
"description": "Reviewer role attributed to this question, finding, or version. A null value explicitly means no current value is available."
},
"reviewerIdentity": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"schemaVersion",
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false,
"description": "Server-stamped reviewer occurrence identity, or the bounded occurrence echo accepted from a schema-2 result. Omit the field when it does not apply; omission is distinct from an empty value."
},
"section": {
"type": [
"string",
"null"
],
"description": "Canonical brief section key associated with the question, finding, proposal, or decision entry. A null value explicitly means no current value is available."
},
"iterationRound": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "One-based review iteration that produced this decision-history entry; null means legacy round data is unavailable. A null value explicitly means no current value is available. The value must be an integer."
},
"sessionId": {
"type": [
"string",
"null"
],
"description": "Review-session identifier associated with this historical record; null means legacy provenance is unavailable. A null value explicitly means no current value is available."
},
"runId": {
"type": [
"string",
"null"
],
"description": "Review-run identifier returned by a review start, status, or cascade handoff result. A null value explicitly means no current value is available."
},
"actorUserId": {
"type": [
"string",
"null"
],
"description": "Accountable Semel user identifier recorded on the event. A null value explicitly means no current value is available."
},
"createdAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp assigned by Semel when this record was created. A null value explicitly means no current value is available."
},
"answeredAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp when the active answer was recorded. A null value explicitly means no current value is available."
}
},
"required": [
"kind",
"sourceId",
"text",
"answer",
"status",
"reviewerRole",
"section",
"iterationRound",
"sessionId",
"runId",
"actorUserId",
"createdAt",
"answeredAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Durable question and decision history for the brief."
},
"findings": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"section": {
"type": "string",
"description": "Canonical brief section key associated with the question, finding, proposal, or decision entry."
},
"note": {
"type": "string",
"description": "Reviewer-facing finding detail that explains the observed issue and the evidence-based change requested."
},
"severity": {
"type": "string",
"enum": [
"info",
"warn",
"block"
],
"description": "Finding impact level: info is advisory, warn requires attention, and block prevents approval or completion. Allowed values: \"info\", \"warn\", \"block\"."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
},
"briefId": {
"type": "string",
"description": "Brief identifier returned by brief_create or brief_list; it determines the project authorization boundary."
},
"contractVersionId": {
"type": "string",
"description": "Immutable brief contract-version identifier resolved by Semel."
},
"versionNum": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Monotonic brief contract version number assigned by Semel. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 0. The value must be an integer."
},
"reviewers": {
"type": "array",
"items": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
"minItems": 1,
"description": "Reviewer roles whose evidence processing verified or contributed this citation. An empty array explicitly means no matching items."
},
"verification": {
"type": "string",
"enum": [
"exact",
"canonical",
"unverified"
],
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: \"exact\", \"canonical\", \"unverified\"."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim",
"briefId",
"contractVersionId",
"reviewers",
"verification"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
},
"extractedTextHash": {
"type": "string",
"description": "Hash of the normalized text extracted from the cited artifact, used to bind the citation to exact processed content."
},
"reviewers": {
"type": "array",
"items": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
"minItems": 1,
"description": "Reviewer roles whose evidence processing verified or contributed this citation. An empty array explicitly means no matching items."
},
"verification": {
"type": "string",
"enum": [
"exact",
"canonical",
"unverified"
],
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: \"exact\", \"canonical\", \"unverified\"."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim",
"extractedTextHash",
"reviewers",
"verification"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
},
"evidenceManifestId": {
"type": "string",
"minLength": 1,
"description": "Immutable evidence-manifest identifier captured for the review run. Minimum accepted length or value is 1."
},
"evidenceManifestItemId": {
"type": "string",
"minLength": 1,
"description": "Identifier of the exact item inside the immutable evidence manifest. Minimum accepted length or value is 1."
},
"workspaceRepositoryId": {
"type": "string",
"minLength": 1,
"description": "Workspace-scoped connected repository identifier recorded in evidence provenance. Minimum accepted length or value is 1."
},
"revisionId": {
"type": "string",
"minLength": 1,
"description": "Immutable indexed repository revision identifier. Minimum accepted length or value is 1."
},
"commitSha": {
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
"description": "Git commit SHA pinned by the evidence manifest."
},
"blobSha": {
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
"description": "Git blob SHA for the cited file contents."
},
"path": {
"type": "string",
"minLength": 1,
"description": "Repository-relative source path; it never denotes an arbitrary local filesystem path. Minimum accepted length or value is 1."
},
"startLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"endLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"excerptSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest of the exact cited excerpt."
},
"route": {
"type": "string",
"enum": [
"exact",
"lexical",
"hybrid"
],
"description": "Repository route or evidence route label recorded with the citation. Allowed values: \"exact\", \"lexical\", \"hybrid\"."
},
"coverage": {
"type": "object",
"additionalProperties": {},
"description": "Evidence coverage metadata or typed completeness level for the cited source; unknown or partial coverage must not imply absence."
},
"reviewers": {
"type": "array",
"items": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
"minItems": 1,
"description": "Reviewer roles whose evidence processing verified or contributed this citation. An empty array explicitly means no matching items."
},
"verification": {
"type": "string",
"enum": [
"exact",
"canonical",
"unverified"
],
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: \"exact\", \"canonical\", \"unverified\"."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim",
"evidenceManifestId",
"evidenceManifestItemId",
"workspaceRepositoryId",
"revisionId",
"commitSha",
"blobSha",
"path",
"startLine",
"endLine",
"excerptSha256",
"route",
"coverage",
"reviewers",
"verification"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "local-worktree",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"local-worktree\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"repositoryId": {
"type": "string",
"minLength": 1,
"description": "Repository identifier from the connected-codebase inventory. Minimum accepted length or value is 1."
},
"headSha": {
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
"description": "Git commit SHA of the local worktree HEAD at binding or citation time."
},
"fileSha": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"
},
{
"type": "null"
}
],
"description": "Git blob SHA of the local working file computed with git hash-object; null when unavailable. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available."
},
"path": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Repository-relative source path; it never denotes an arbitrary local filesystem path. Accepted length or value is 1 through 4096, inclusive."
},
"startLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"endLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"excerptSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest of the exact cited excerpt."
},
"dirty": {
"type": "boolean",
"description": "Whether the local worktree had uncommitted changes at binding or citation time."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
},
"verification": {
"type": "string",
"const": "unverified",
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. This branch always uses \"unverified\"."
},
"reviewers": {
"type": "array",
"items": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
"minItems": 1,
"description": "Reviewer roles whose evidence processing verified or contributed this citation. An empty array explicitly means no matching items."
}
},
"required": [
"sourceType",
"citationKey",
"repositoryId",
"headSha",
"path",
"startLine",
"endLine",
"excerptSha256",
"dirty",
"verbatim",
"verification",
"reviewers"
],
"additionalProperties": false
}
]
},
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"citationsV2": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
},
"briefId": {
"type": "string",
"description": "Brief identifier returned by brief_create or brief_list; it determines the project authorization boundary."
},
"contractVersionId": {
"type": "string",
"description": "Immutable brief contract-version identifier resolved by Semel."
},
"versionNum": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Monotonic brief contract version number assigned by Semel. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 0. The value must be an integer."
},
"verification": {
"type": "string",
"enum": [
"exact",
"canonical",
"unverified"
],
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: \"exact\", \"canonical\", \"unverified\"."
},
"identitySchemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the reviewer identity attribution stamped on this citation record. This branch always uses 2."
},
"reviewerIdentities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"schemaVersion",
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Server-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. An empty array explicitly means no matching items."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim",
"briefId",
"contractVersionId",
"verification",
"identitySchemaVersion",
"reviewerIdentities"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
},
"extractedTextHash": {
"type": "string",
"description": "Hash of the normalized text extracted from the cited artifact, used to bind the citation to exact processed content."
},
"verification": {
"type": "string",
"enum": [
"exact",
"canonical",
"unverified"
],
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: \"exact\", \"canonical\", \"unverified\"."
},
"identitySchemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the reviewer identity attribution stamped on this citation record. This branch always uses 2."
},
"reviewerIdentities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"schemaVersion",
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Server-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. An empty array explicitly means no matching items."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim",
"extractedTextHash",
"verification",
"identitySchemaVersion",
"reviewerIdentities"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
},
"evidenceManifestId": {
"type": "string",
"minLength": 1,
"description": "Immutable evidence-manifest identifier captured for the review run. Minimum accepted length or value is 1."
},
"evidenceManifestItemId": {
"type": "string",
"minLength": 1,
"description": "Identifier of the exact item inside the immutable evidence manifest. Minimum accepted length or value is 1."
},
"workspaceRepositoryId": {
"type": "string",
"minLength": 1,
"description": "Workspace-scoped connected repository identifier recorded in evidence provenance. Minimum accepted length or value is 1."
},
"revisionId": {
"type": "string",
"minLength": 1,
"description": "Immutable indexed repository revision identifier. Minimum accepted length or value is 1."
},
"commitSha": {
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
"description": "Git commit SHA pinned by the evidence manifest."
},
"blobSha": {
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
"description": "Git blob SHA for the cited file contents."
},
"path": {
"type": "string",
"minLength": 1,
"description": "Repository-relative source path; it never denotes an arbitrary local filesystem path. Minimum accepted length or value is 1."
},
"startLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"endLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"excerptSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest of the exact cited excerpt."
},
"route": {
"type": "string",
"enum": [
"exact",
"lexical",
"hybrid"
],
"description": "Repository route or evidence route label recorded with the citation. Allowed values: \"exact\", \"lexical\", \"hybrid\"."
},
"coverage": {
"type": "object",
"additionalProperties": {},
"description": "Evidence coverage metadata or typed completeness level for the cited source; unknown or partial coverage must not imply absence."
},
"verification": {
"type": "string",
"enum": [
"exact",
"canonical",
"unverified"
],
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. Allowed values: \"exact\", \"canonical\", \"unverified\"."
},
"identitySchemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the reviewer identity attribution stamped on this citation record. This branch always uses 2."
},
"reviewerIdentities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"schemaVersion",
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Server-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. An empty array explicitly means no matching items."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim",
"evidenceManifestId",
"evidenceManifestItemId",
"workspaceRepositoryId",
"revisionId",
"commitSha",
"blobSha",
"path",
"startLine",
"endLine",
"excerptSha256",
"route",
"coverage",
"verification",
"identitySchemaVersion",
"reviewerIdentities"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "local-worktree",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"local-worktree\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"repositoryId": {
"type": "string",
"minLength": 1,
"description": "Repository identifier from the connected-codebase inventory. Minimum accepted length or value is 1."
},
"headSha": {
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
"description": "Git commit SHA of the local worktree HEAD at binding or citation time."
},
"fileSha": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"
},
{
"type": "null"
}
],
"description": "Git blob SHA of the local working file computed with git hash-object; null when unavailable. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available."
},
"path": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Repository-relative source path; it never denotes an arbitrary local filesystem path. Accepted length or value is 1 through 4096, inclusive."
},
"startLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"endLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"excerptSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest of the exact cited excerpt."
},
"dirty": {
"type": "boolean",
"description": "Whether the local worktree had uncommitted changes at binding or citation time."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
},
"verification": {
"type": "string",
"const": "unverified",
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. This branch always uses \"unverified\"."
},
"identitySchemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the reviewer identity attribution stamped on this citation record. This branch always uses 2."
},
"reviewerIdentities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"schemaVersion",
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Server-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. An empty array explicitly means no matching items."
}
},
"required": [
"sourceType",
"citationKey",
"repositoryId",
"headSha",
"path",
"startLine",
"endLine",
"excerptSha256",
"dirty",
"verbatim",
"verification",
"identitySchemaVersion",
"reviewerIdentities"
],
"additionalProperties": false
}
]
},
"description": "Schema-2 evidence citations carrying server-stamped reviewer occurrence attribution. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"reviewerIdentities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"schemaVersion",
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Server-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"evidenceUnavailable": {
"type": "boolean",
"description": "Whether the finding was emitted without the evidence normally required for verification; omission means evidence availability was not separately recorded. Omit the field when it does not apply; omission is distinct from an empty value."
},
"claimDisposition": {
"type": "string",
"enum": [
"verified",
"unverified"
],
"description": "Published support disposition for a code claim; omission indicates a legacy row that is treated as verified. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: \"verified\", \"unverified\"."
}
},
"required": [
"section",
"note",
"severity"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Reviewer findings associated with the selected brief version."
},
"proposals": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"sessionId": {
"type": "string",
"description": "Review-session identifier associated with this historical record; null means legacy provenance is unavailable."
},
"section": {
"type": "string",
"description": "Canonical brief section key associated with the question, finding, proposal, or decision entry."
},
"summary": {
"type": [
"string",
"null"
],
"description": "Concise safe summary intended for users and logs. A null value explicitly means no current value is available."
},
"status": {
"type": "string",
"description": "Current typed status; the schema enum or union branch lists every allowed value."
},
"decidedById": {
"type": [
"string",
"null"
],
"description": "Semel user identifier that decided this proposal; absent until a decision exists. A null value explicitly means no current value is available."
},
"decidedAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp of the proposal decision; null means undecided. A null value explicitly means no current value is available."
},
"decisionSource": {
"type": [
"string",
"null"
],
"description": "Typed provenance showing whether a proposal decision came from a user, reviewer, or system rule; null means unavailable legacy provenance. A null value explicitly means no current value is available."
},
"committedAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp when the accepted proposal was committed; null means not committed. A null value explicitly means no current value is available."
},
"sourceRound": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Review round that produced this proposal; null means no round provenance was recorded. A null value explicitly means no current value is available. The value must be an integer."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
},
"reviewerIdentities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"schemaVersion",
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Server-stamped reviewer occurrence identities attributed to this finding, proposal, or citation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"id",
"sessionId",
"section",
"summary",
"status",
"decidedById",
"decidedAt",
"decisionSource",
"committedAt",
"sourceRound",
"createdAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Reviewer proposals and their decision/commit state."
},
"approvals": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"contractVersionId": {
"type": "string",
"description": "Immutable brief contract-version identifier resolved by Semel."
},
"approverId": {
"type": "string",
"description": "Semel user identifier for the human who recorded this approval decision."
},
"action": {
"type": "string",
"description": "Typed human approval action recorded in the append-only approval ledger."
},
"isStale": {
"type": "boolean",
"description": "Whether this historical approval no longer targets the current brief version."
},
"reRequestReason": {
"type": [
"string",
"null"
],
"description": "Reason a previously decided approval was requested again; null means no re-request reason applies. A null value explicitly means no current value is available."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"contractVersionId",
"approverId",
"action",
"isStale",
"reRequestReason",
"createdAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Append-only human approval records for brief versions."
},
"comments": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"sectionKey": {
"type": "string",
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result."
},
"anchor": {
"type": [
"string",
"null"
],
"description": "Optional structured location within a brief section for this comment; null means the comment applies to the section as a whole. A null value explicitly means no current value is available."
},
"text": {
"type": "string",
"description": "Human-authored or model-produced text for this typed record."
},
"authorId": {
"type": "string",
"description": "Semel user identifier for the comment or content author."
},
"resolvedAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp when the comment was resolved; null means unresolved. A null value explicitly means no current value is available."
},
"resolvedBy": {
"type": [
"string",
"null"
],
"description": "Semel user identifier that resolved the comment; absent until resolution. A null value explicitly means no current value is available."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"sectionKey",
"anchor",
"text",
"authorId",
"resolvedAt",
"resolvedBy",
"createdAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Human comments attached to brief sections or anchors."
},
"artifacts": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"artifactType": {
"type": "string",
"description": "Semel artifact classification used to select ingestion and display behavior for this source material."
},
"label": {
"type": [
"string",
"null"
],
"description": "Human-readable label displayed for this record. A null value explicitly means no current value is available."
},
"sourceUrl": {
"type": [
"string",
"null"
],
"description": "Original source URL recorded for the artifact; null means the artifact has no external source URL. A null value explicitly means no current value is available."
},
"mimeType": {
"type": [
"string",
"null"
],
"description": "Internet media type of the artifact or exported resource; null means the producer did not record one. A null value explicitly means no current value is available."
},
"sizeBytes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Artifact size in bytes. A null value explicitly means no current value is available. The value must be an integer."
},
"ingestionStatus": {
"type": "string",
"description": "Current artifact ingestion lifecycle state; only ready artifacts may supply reviewed evidence."
},
"createdById": {
"type": [
"string",
"null"
],
"description": "Semel user identifier recorded as the initiating creator. A null value explicitly means no current value is available."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"artifactType",
"label",
"sourceUrl",
"mimeType",
"sizeBytes",
"ingestionStatus",
"createdById",
"createdAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Source artifacts attached to the brief."
},
"workOrders": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"title": {
"type": "string",
"description": "Human-readable title displayed in Semel."
},
"description": {
"type": [
"string",
"null"
],
"description": "Human-readable explanatory text; null or omission means no description was supplied. A null value explicitly means no current value is available."
},
"position": {
"type": "integer",
"description": "Stable zero-based or configured ordering position returned by Semel. The value must be an integer."
},
"boundCriteria": {
"type": "array",
"items": {
"type": "string"
},
"description": "Stable acceptance-criterion IDs implemented by this work order. An empty array explicitly means no matching items."
},
"boundRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Stable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. An empty array explicitly means no matching items."
},
"externalTracker": {
"type": [
"string",
"null"
],
"description": "External issue-tracker provider associated with the work order; null means the work order has not been exported. A null value explicitly means no current value is available."
},
"externalUrl": {
"type": [
"string",
"null"
],
"description": "External tracker URL associated with the work order; null means no issue is linked. A null value explicitly means no current value is available."
},
"exportState": {
"type": "string",
"description": "Current external-tracker export lifecycle state for this generated work order."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"title",
"description",
"position",
"boundCriteria",
"boundRequirements",
"externalTracker",
"externalUrl",
"exportState",
"createdAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Materialized implementation work orders for the brief."
},
"reviewSessions": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"runId": {
"type": "string",
"description": "Review-run identifier returned by a review start, status, or cascade handoff result."
},
"status": {
"type": "string",
"description": "Current typed status; the schema enum or union branch lists every allowed value."
},
"reviewerSet": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ordered reviewer roles configured for this cascade. An empty array explicitly means no matching items."
},
"reviewerIdentitySchemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the reviewer identity schema attached to this historical review session. Omit the field when it does not apply; omission is distinct from an empty value. This branch always uses 2."
},
"cascadeExecutionSnapshotId": {
"type": "string",
"description": "Identifier of the immutable cascade snapshot shared by every reviewer session in this pass. Omit the field when it does not apply; omission is distinct from an empty value."
},
"activeReviewerOccurrenceId": {
"type": "string",
"description": "Enabled reviewer occurrence assigned to this individual review session or execution. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reviewerOccurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"position": {
"type": "integer",
"minimum": 0,
"description": "Stable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"identity": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false,
"description": "Frozen reviewer occurrence identity used for display and exact historical attribution."
},
"pin": {
"type": "object",
"properties": {
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"framing": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact shared reviewer framing artifact pin used for this occurrence."
},
"capabilities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive."
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"id",
"version",
"sha256"
],
"additionalProperties": false
},
"maxItems": 32,
"description": "Ordered exact capability artifact pins available to this reviewer occurrence. An empty array explicitly means no matching items."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"skill",
"framing",
"capabilities",
"model"
],
"additionalProperties": false,
"description": "Exact skill, framing, capability, and model pins for this reviewer occurrence."
}
},
"required": [
"position",
"enabled",
"identity",
"pin"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Complete ordered reviewer occurrence list preserved in the immutable cascade execution snapshot. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"reviewerConfiguration": {
"type": "object",
"properties": {
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"origin": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Discriminator identifying the typed variant represented by this object. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available. Accepted length or value is 1 through 200, inclusive."
}
},
"required": [
"kind",
"presetVersionId"
],
"additionalProperties": false,
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default."
}
},
"required": [
"revision",
"origin"
],
"additionalProperties": false,
"description": "Immutable configuration revision and adoption origin preserved for this review session. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reviewedContractVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable contract-version identifier actually reviewed by this session; null means the session has not pinned one. A null value explicitly means no current value is available."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"runId",
"status",
"reviewerSet",
"reviewedContractVersionId",
"createdAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Review session summaries associated with the brief."
},
"shares": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"accessLevel": {
"type": "string",
"description": "Share-link access policy assigned by Semel; the enum identifies whether the recipient may only view or may also interact."
},
"sharedById": {
"type": "string",
"description": "Semel user identifier for the person who created the share."
},
"isActive": {
"type": "boolean",
"description": "Whether this share link remains active."
},
"expiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 expiration timestamp. A null value explicitly means no current value is available."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"accessLevel",
"sharedById",
"isActive",
"expiresAt",
"createdAt"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"items",
"nextCursor"
],
"additionalProperties": false,
"description": "Share-link records associated with the brief."
}
},
"required": [
"versions",
"decisionHistory",
"findings",
"proposals",
"approvals",
"comments",
"artifacts",
"workOrders",
"reviewSessions",
"shares"
],
"additionalProperties": false,
"description": "First page of each durable collection associated with the brief."
},
"gateNotificationStatus": {
"anyOf": [
{
"type": "object",
"properties": {
"requestId": {
"type": "string",
"description": "Server request identifier used for support correlation; it is not an idempotency key."
},
"assignmentId": {
"type": [
"string",
"null"
],
"description": "Human gate assignment identifier created by Semel. A null value explicitly means no current value is available."
},
"contentHash": {
"type": [
"string",
"null"
],
"description": "Hash of the immutable brief content snapshot. A null value explicitly means no current value is available."
},
"notifiedAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp when the gate notification was sent; null means not sent. A null value explicitly means no current value is available."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"requestId",
"assignmentId",
"contentHash",
"notifiedAt",
"createdAt"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest human gate notification status; null means no notification request exists. A null value explicitly means no current value is available."
}
},
"required": [
"brief",
"collections",
"gateNotificationStatus"
],
"additionalProperties": false
}brief_list
readList the briefs this principal may reach (filtered by its project allowlist), newest-updated first. Use to find a brief before reading or editing it.
- Mode
- read · low risk
- Scopes
- brief:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel list my briefs”“/semel what briefs are there in progress?”
- Related
- brief_get_full, brief_collection_list
Arguments
cursorstring · optionalOpaque keyset cursor returned as nextCursor by the preceding brief_list response. Omit to read the first page.
minimum length: 1
limitinteger · optionalMaximum briefs to return, as an integer from 1 through 200. Omit to use the server default.
minimum: 1 · maximum: 200
{
"limit": 50
}{
"limit": 50
}Complete raw parameter schema
{
"type": "object",
"properties": {
"cursor": {
"type": "string",
"minLength": 1,
"description": "Opaque keyset cursor returned as nextCursor by the preceding brief_list response. Omit to read the first page."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Maximum briefs to return, as an integer from 1 through 200. Omit to use the server default."
}
},
"additionalProperties": false
}Structured result
briefsarray · requiredBrief summaries reachable by the authenticated principal. An empty array explicitly means no matching items.
Array item · object
briefs[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
briefs[].projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
briefs[].titlestring · requiredHuman-readable title displayed in Semel.
briefs[].statestring · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
briefs[].versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
briefs[].updatedAtstring · requiredRFC 3339 timestamp when this record was last updated.
briefs[].deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
briefs[].delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
briefs[].delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
briefs[].delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
briefs[].delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
briefs[].delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
{
"briefs": [
{
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"versionNum": 3,
"updatedAt": "2026-09-07T16:00:00.000Z"
}
],
"nextCursor": null
}{
"content": [
{
"type": "text",
"text": "{\"briefs\":[{\"id\":\"brf_fixture_checkout\",\"projectId\":\"prj_fixture_checkout\",\"title\":\"Retry-safe checkout\",\"state\":\"drafting\",\"versionNum\":3,\"updatedAt\":\"2026-09-07T16:00:00.000Z\"}],\"nextCursor\":null}"
}
],
"structuredContent": {
"briefs": [
{
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"versionNum": 3,
"updatedAt": "2026-09-07T16:00:00.000Z"
}
],
"nextCursor": null
}
}- briefId ← structuredContent.briefs[0].id
Next permitted action: Select an exact brief or ask the human to disambiguate.
Complete raw result schema
{
"type": "object",
"properties": {
"briefs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"title": {
"type": "string",
"description": "Human-readable title displayed in Semel."
},
"state": {
"type": "string",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"updatedAt": {
"type": "string",
"description": "RFC 3339 timestamp when this record was last updated."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"id",
"projectId",
"title",
"state",
"versionNum",
"updatedAt"
],
"additionalProperties": false
},
"description": "Brief summaries reachable by the authenticated principal. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"briefs",
"nextCursor"
],
"additionalProperties": false
}brief_update
write · idempotent (needs idempotencyKey)Edit a brief's title and content, minting a new immutable contract version whenever the content changes. Use to revise requirements or work orders on an existing brief; pass ifVersionNum to guard against a concurrent edit.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel update the checkout brief with the new acceptance criteria”“/semel revise the requirements on this brief”
- Errors
- PROJECT_ACCESS_DENIEDBRIEF_VERSION_CONFLICT
- Related
- brief_create, brief_get_full, brief_checklist_update
Arguments
contentobject · requiredComplete replacement brief document for agent writes, limited to 262144 serialized bytes. Known sections use the canonical nested shapes; unknown metadata and _draft remain round-trippable.
content.goalstring · optionalConcise statement of the outcome this brief must achieve. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.userPersonaContextstring · optionalUser and situational context that explains who needs the outcome and why. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.customerFacingLaunchMessagestring · optionalCopy-ready end-user launch message stating the capability, value, and one concrete example. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.scopestring · optionalWork explicitly included in this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.outOfScopestring · optionalWork explicitly excluded from this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.requirementsarray · optionalOrdered product requirements; an empty array explicitly records none. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.edgeCasesarray · optionalKnown edge cases the implementation must handle. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.acceptanceCriteriaarray · optionalStable-ID acceptance criteria that define completion of the brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.acceptanceCriteria[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.acceptanceCriteria[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.acceptanceCriteria[].implementationboolean · optionalWhether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value.
content.acceptanceCriteria[].manualEvidenceobject · optionalStructured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value.
content.acceptanceCriteria[].manualEvidence.rationalestring · requiredDurable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.acceptanceCriteria[].manualEvidence.evidencePathstring · requiredDurable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.rolesPermissionsarray · optionalRoles and permission boundaries relevant to the feature. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.statesarray · optionalUser-visible and system lifecycle states the feature must represent. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.productSolutionstring · optionalProduct behavior chosen to satisfy the goal and requirements. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.technicalSolutionstring · optionalImplementation approach and major technical constraints. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.dataModelImplicationsstring · optionalRequired data model changes, invariants, and migration implications. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.architectureAssumptionsstring · optionalArchitecture assumptions the implementation relies on. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.designstring · optionalInteraction and visual design requirements for the feature. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
content.testingQaChecklistarray · optionalMutable QA checklist; checked state and attribution are preserved by server reconciliation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.testingQaChecklist[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.testingQaChecklist[].checkedboolean · requiredWhether this QA checklist item is currently complete.
content.testingQaChecklist[].addedBystring · optionalActor label that added the QA item; omission means legacy or unavailable attribution. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
content.testingQaChecklist[].checkedBystring · optionalActor label that last checked the item; omission means it has no check attribution. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
content.testingQaChecklist[].checkedAtstring · optionalRFC 3339 timestamp when the item was checked; omission means it is unchecked or legacy data. Omit the field when it does not apply; omission is distinct from an empty value. Use an RFC 3339 date-time string.
format: date-time
content.testPlanUnitarray · optionalUnit-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.testPlanIntegrationarray · optionalIntegration-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.testPlanUiUxarray · optionalBrowser, accessibility, and visual verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.openQuestionsarray · optionalUnresolved questions that still require an explicit answer. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
content.generatedTicketsarray · optionalOrdered implementation work orders derived from this brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.generatedTickets[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.generatedTickets[].titlestring · requiredHuman-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive.
minimum length: 1 · maximum length: 500
content.generatedTickets[].descriptionany of · requiredHuman-readable explanatory text; null or omission means no description was supplied. A null value explicitly means no current value is available. Maximum accepted length or value is 10000.
any of
Branch 1
maximum length: 10000
Branch 2
content.generatedTickets[].boundCriteriaarray · requiredStable acceptance-criterion IDs implemented by this work order. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.generatedTickets[].boundRequirementsarray · optionalStable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.requiredEvidencearray · optionalStable-ID evidence requirements needed to prove completion. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.requiredEvidence[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
content.requiredEvidence[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.requiredEvidence[].implementationboolean · optionalWhether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value.
content.requiredEvidence[].manualEvidenceobject · optionalStructured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value.
content.requiredEvidence[].manualEvidence.rationalestring · requiredDurable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.requiredEvidence[].manualEvidence.evidencePathstring · requiredDurable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.decisionsarray · optionalRecorded product or engineering decisions with optional source provenance. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.decisions[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.decisions[].sourcestring · optionalOptional human-readable provenance for the decision. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 1000.
maximum length: 1000
content.decisions[].statedboolean · optionalWhether the decision was explicitly stated rather than inferred; omission means unknown legacy provenance. Omit the field when it does not apply; omission is distinct from an empty value.
content.sourceArtifactLinksarray · optionalArtifact labels referenced by the brief; an empty array means none are linked. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
content.sourceArtifactLinks[].labelstring · requiredHuman-readable label displayed for this record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
content.sourceArtifactLinks[].kindstring · optionalDiscriminator identifying the typed variant represented by this object. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
content.sourceArtifactLinks[].readboolean · optionalWhether the referenced source artifact was read when the brief snapshot was produced. Omit the field when it does not apply; omission is distinct from an empty value.
titlestring · optionalHuman-readable title displayed in Semel. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 500, inclusive.
minimum length: 1 · maximum length: 500
ifVersionNuminteger · optionalOptional optimistic precondition using the current brief contract version number. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
clearDraftboolean · optionalWhen true, explicitly clears draft state after the complete document update; omission leaves it unchanged. Omit the field when it does not apply; omission is distinct from an empty value.
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"briefId": "brf_fixture_checkout",
"title": "Retry-safe checkout",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
},
{
"id": "AC-02",
"text": "The response identifies the original payment intent."
}
],
"checklist": [
{
"text": "API contract reviewed",
"checked": false
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
]
},
"ifVersionNum": 3,
"idempotencyKey": "recipe-brief-update-v1"
}{
"briefId": "{{briefId}}",
"title": "{{briefTitle}}",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
},
{
"id": "AC-02",
"text": "The response identifies the original payment intent."
}
],
"checklist": [
{
"text": "API contract reviewed",
"checked": false
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
]
},
"ifVersionNum": 3,
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"content": {
"type": "object",
"properties": {
"goal": {
"type": "string",
"maxLength": 4000,
"description": "Concise statement of the outcome this brief must achieve. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"userPersonaContext": {
"type": "string",
"maxLength": 4000,
"description": "User and situational context that explains who needs the outcome and why. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"customerFacingLaunchMessage": {
"type": "string",
"maxLength": 4000,
"description": "Copy-ready end-user launch message stating the capability, value, and one concrete example. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"scope": {
"type": "string",
"maxLength": 4000,
"description": "Work explicitly included in this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"outOfScope": {
"type": "string",
"maxLength": 4000,
"description": "Work explicitly excluded from this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"requirements": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Ordered product requirements; an empty array explicitly records none. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"edgeCases": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Known edge cases the implementation must handle. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"acceptanceCriteria": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive."
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"implementation": {
"type": "boolean",
"description": "Whether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value."
},
"manualEvidence": {
"type": "object",
"properties": {
"rationale": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive."
},
"evidencePath": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"rationale",
"evidencePath"
],
"additionalProperties": false,
"description": "Structured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"id",
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Stable-ID acceptance criteria that define completion of the brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"rolesPermissions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Roles and permission boundaries relevant to the feature. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"states": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "User-visible and system lifecycle states the feature must represent. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"productSolution": {
"type": "string",
"maxLength": 4000,
"description": "Product behavior chosen to satisfy the goal and requirements. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"technicalSolution": {
"type": "string",
"maxLength": 4000,
"description": "Implementation approach and major technical constraints. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"dataModelImplications": {
"type": "string",
"maxLength": 4000,
"description": "Required data model changes, invariants, and migration implications. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"architectureAssumptions": {
"type": "string",
"maxLength": 4000,
"description": "Architecture assumptions the implementation relies on. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"design": {
"type": "string",
"maxLength": 4000,
"description": "Interaction and visual design requirements for the feature. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"testingQaChecklist": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"checked": {
"type": "boolean",
"description": "Whether this QA checklist item is currently complete."
},
"addedBy": {
"type": "string",
"maxLength": 200,
"description": "Actor label that added the QA item; omission means legacy or unavailable attribution. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"checkedBy": {
"type": "string",
"maxLength": 200,
"description": "Actor label that last checked the item; omission means it has no check attribution. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"checkedAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp when the item was checked; omission means it is unchecked or legacy data. Omit the field when it does not apply; omission is distinct from an empty value. Use an RFC 3339 date-time string."
}
},
"required": [
"text",
"checked"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Mutable QA checklist; checked state and attribution are preserved by server reconciliation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanUnit": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Unit-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanIntegration": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Integration-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanUiUx": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Browser, accessibility, and visual verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"openQuestions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Unresolved questions that still require an explicit answer. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"generatedTickets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Human-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 10000
},
{
"type": "null"
}
],
"description": "Human-readable explanatory text; null or omission means no description was supplied. A null value explicitly means no current value is available. Maximum accepted length or value is 10000."
},
"boundCriteria": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"maxItems": 50,
"description": "Stable acceptance-criterion IDs implemented by this work order. An empty array explicitly means no matching items."
},
"boundRequirements": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"maxItems": 50,
"description": "Stable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"id",
"title",
"description",
"boundCriteria"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Ordered implementation work orders derived from this brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"requiredEvidence": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive."
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"implementation": {
"type": "boolean",
"description": "Whether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value."
},
"manualEvidence": {
"type": "object",
"properties": {
"rationale": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive."
},
"evidencePath": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"rationale",
"evidencePath"
],
"additionalProperties": false,
"description": "Structured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"id",
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Stable-ID evidence requirements needed to prove completion. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"decisions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"source": {
"type": "string",
"maxLength": 1000,
"description": "Optional human-readable provenance for the decision. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 1000."
},
"stated": {
"type": "boolean",
"description": "Whether the decision was explicitly stated rather than inferred; omission means unknown legacy provenance. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Recorded product or engineering decisions with optional source provenance. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"sourceArtifactLinks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-readable label displayed for this record. Accepted length or value is 1 through 1000, inclusive."
},
"kind": {
"type": "string",
"maxLength": 200,
"description": "Discriminator identifying the typed variant represented by this object. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"read": {
"type": "boolean",
"description": "Whether the referenced source artifact was read when the brief snapshot was produced. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"label"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Artifact labels referenced by the brief; an empty array means none are linked. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"additionalProperties": true,
"description": "Complete replacement brief document for agent writes, limited to 262144 serialized bytes. Known sections use the canonical nested shapes; unknown metadata and _draft remain round-trippable."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Human-readable title displayed in Semel. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 500, inclusive."
},
"ifVersionNum": {
"type": "integer",
"description": "Optional optimistic precondition using the current brief contract version number. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"clearDraft": {
"type": "boolean",
"description": "When true, explicitly clears draft state after the complete document update; omission leaves it unchanged. Omit the field when it does not apply; omission is distinct from an empty value."
},
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; the caller must have access to its project. Supply a non-empty identifier."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"content",
"briefId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
briefobject · requiredCurrent brief record returned by the operation.
brief.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
brief.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
brief.titlestring · requiredHuman-readable title displayed in Semel.
brief.state"drafting" | "in_review" | "baselined" | "in_development" | "checked" | "superseded" | "closed" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: "drafting", "in_review", "baselined", "in_development", "checked", "superseded", "closed".
brief.currentVersionHashstring | null · requiredHash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available.
brief.contentobject · requiredComplete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable.
Map values · any JSON value
brief.versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
brief.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
brief.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
brief.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
brief.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
brief.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
brief.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
brief.createdNewVersionboolean · requiredWhether the write changed canonical content and minted a new immutable brief version.
brief.staledApprovalsinteger · requiredNumber of prior approval rows made stale by this content change. The value must be an integer.
{
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
},
{
"id": "AC-02",
"text": "The response identifies the original payment intent."
}
],
"checklist": [
{
"text": "API contract reviewed",
"checked": false
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
]
},
"versionNum": 4,
"createdNewVersion": true,
"staledApprovals": 0
}
}{
"content": [
{
"type": "text",
"text": "{\"brief\":{\"id\":\"brf_fixture_checkout\",\"projectId\":\"prj_fixture_checkout\",\"title\":\"Retry-safe checkout\",\"state\":\"drafting\",\"currentVersionHash\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\"content\":{\"goal\":\"Prevent duplicate charges when checkout retries.\",\"requirements\":[\"Reuse one payment intent for retried submissions.\"],\"acceptanceCriteria\":[{\"id\":\"AC-01\",\"text\":\"A retried request returns the original successful result.\"},{\"id\":\"AC-02\",\"text\":\"The response identifies the original payment intent.\"}],\"checklist\":[{\"text\":\"API contract reviewed\",\"checked\":false}],\"sourceArtifactLinks\":[{\"label\":\"Linear ENG-42\",\"kind\":\"linear\"}]},\"versionNum\":4,\"createdNewVersion\":true,\"staledApprovals\":0}}"
}
],
"structuredContent": {
"brief": {
"id": "brf_fixture_checkout",
"projectId": "prj_fixture_checkout",
"title": "Retry-safe checkout",
"state": "drafting",
"currentVersionHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"content": {
"goal": "Prevent duplicate charges when checkout retries.",
"requirements": [
"Reuse one payment intent for retried submissions."
],
"acceptanceCriteria": [
{
"id": "AC-01",
"text": "A retried request returns the original successful result."
},
{
"id": "AC-02",
"text": "The response identifies the original payment intent."
}
],
"checklist": [
{
"text": "API contract reviewed",
"checked": false
}
],
"sourceArtifactLinks": [
{
"label": "Linear ENG-42",
"kind": "linear"
}
]
},
"versionNum": 4,
"createdNewVersion": true,
"staledApprovals": 0
}
}
}- versionNum ← structuredContent.brief.versionNum
Next permitted action: Inspect createdNewVersion and the returned current version.
Complete raw result schema
{
"type": "object",
"properties": {
"brief": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"title": {
"type": "string",
"description": "Human-readable title displayed in Semel."
},
"state": {
"type": "string",
"enum": [
"drafting",
"in_review",
"baselined",
"in_development",
"checked",
"superseded",
"closed"
],
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: \"drafting\", \"in_review\", \"baselined\", \"in_development\", \"checked\", \"superseded\", \"closed\"."
},
"currentVersionHash": {
"type": [
"string",
"null"
],
"description": "Hash of the current canonical brief version; null means no canonical version exists yet. A null value explicitly means no current value is available."
},
"content": {
"type": "object",
"additionalProperties": {},
"description": "Complete brief logical document for writes, or the stored snapshot on reads; unknown metadata remains round-trippable."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
},
"createdNewVersion": {
"type": "boolean",
"description": "Whether the write changed canonical content and minted a new immutable brief version."
},
"staledApprovals": {
"type": "integer",
"description": "Number of prior approval rows made stale by this content change. The value must be an integer."
}
},
"required": [
"id",
"projectId",
"title",
"state",
"currentVersionHash",
"content",
"versionNum",
"createdNewVersion",
"staledApprovals"
],
"additionalProperties": false,
"description": "Current brief record returned by the operation."
}
},
"required": [
"brief"
],
"additionalProperties": false
}cascade_default_get
readInspect the exact personal and team default bindings and optimistic revisions before changing a default.
- Mode
- read · low risk
- Scopes
- brief:read, skills:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel inspect the exact saved reviewer cascade preset”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- cascade_default_set, cascade_preset_get
Arguments
{}{}Complete raw parameter schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Structured result
personalobject · requiredCaller-owned cascade default state, including its optimistic revision and exact preset binding when selected.
personal.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
personal.bindingany of · requiredCurrent exact preset binding after the default mutation; null means the default is reset. A null value explicitly means no current value is available.
any of
Branch 1
personal.binding.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
personal.binding.audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
personal.binding.ownerUserIdstring | null · requiredAccountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available.
personal.binding.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
personal.binding.presetIdstring · requiredStable cascade preset identifier returned by an exact preset save, list, or read.
personal.binding.presetVersionIdstring · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset.
personal.binding.presetNamestring · requiredHuman-readable name of the exact preset currently bound as a default.
personal.binding.updatedAtstring · requiredRFC 3339 timestamp when this record was last updated.
Branch 2
teamobject · requiredWorkspace team cascade default state, including its optimistic revision and exact preset binding when selected.
team.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
team.bindingany of · requiredCurrent exact preset binding after the default mutation; null means the default is reset. A null value explicitly means no current value is available.
any of
Branch 1
team.binding.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
team.binding.audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
team.binding.ownerUserIdstring | null · requiredAccountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available.
team.binding.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
team.binding.presetIdstring · requiredStable cascade preset identifier returned by an exact preset save, list, or read.
team.binding.presetVersionIdstring · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset.
team.binding.presetNamestring · requiredHuman-readable name of the exact preset currently bound as a default.
team.binding.updatedAtstring · requiredRFC 3339 timestamp when this record was last updated.
Branch 2
effectiveobject · requiredExact cascade selection that a newly created project would inherit after this operation.
effective.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
effective.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
effective.payloadobject · requiredComplete ordered cascade selection preserved in this immutable preset or configuration version.
effective.payload.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
effective.payload.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
effective.payload.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
effective.payload.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
effective.payload.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
effective.payload.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
effective.payload.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
effective.payload.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
effective.payload.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
effective.payload.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
effective.payload.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
effective.payload.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
effective.payload.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
effective.payload.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
effective.payload.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
effective.payload.occurrences[].modelobject · requiredOptional model name declared by the harness.
effective.payload.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
effective.payload.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
effective.payload.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
canEditTeamboolean · requiredWhether the current authenticated caller may change the workspace team cascade default.
{
"personal": {
"revision": "0",
"binding": null
},
"team": {
"revision": "0",
"binding": null
},
"effective": {
"origin": "builtin_fallback",
"presetVersionId": null,
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
}
},
"canEditTeam": true
}{
"content": [
{
"type": "text",
"text": "{\"personal\":{\"revision\":\"0\",\"binding\":null},\"team\":{\"revision\":\"0\",\"binding\":null},\"effective\":{\"origin\":\"builtin_fallback\",\"presetVersionId\":null,\"payload\":{\"schemaVersion\":1,\"occurrences\":[{\"occurrenceId\":\"checkout-reliability\",\"reviewerRef\":{\"kind\":\"custom\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\"},\"label\":\"Checkout reliability\",\"enabled\":true,\"skill\":{\"version\":\"skv_recipe_checkout_1\",\"sha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"},\"model\":{\"provider\":\"openai\",\"model\":\"gpt-5.2\",\"reasoning\":\"high\"}}]}},\"canEditTeam\":true}"
}
],
"structuredContent": {
"personal": {
"revision": "0",
"binding": null
},
"team": {
"revision": "0",
"binding": null
},
"effective": {
"origin": "builtin_fallback",
"presetVersionId": null,
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
}
},
"canEditTeam": true
}
}- personalDefaultRevision ← structuredContent.personal.revision
Next permitted action: Read the current personal default revision before the guarded update.
Complete raw result schema
{
"type": "object",
"properties": {
"personal": {
"type": "object",
"properties": {
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"binding": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"ownerUserId": {
"type": [
"string",
"null"
],
"description": "Accountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"presetId": {
"type": "string",
"description": "Stable cascade preset identifier returned by an exact preset save, list, or read."
},
"presetVersionId": {
"type": "string",
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset."
},
"presetName": {
"type": "string",
"description": "Human-readable name of the exact preset currently bound as a default."
},
"updatedAt": {
"type": "string",
"description": "RFC 3339 timestamp when this record was last updated."
}
},
"required": [
"id",
"audience",
"ownerUserId",
"revision",
"presetId",
"presetVersionId",
"presetName",
"updatedAt"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Current exact preset binding after the default mutation; null means the default is reset. A null value explicitly means no current value is available."
}
},
"required": [
"revision",
"binding"
],
"additionalProperties": false,
"description": "Caller-owned cascade default state, including its optimistic revision and exact preset binding when selected."
},
"team": {
"type": "object",
"properties": {
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"binding": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"ownerUserId": {
"type": [
"string",
"null"
],
"description": "Accountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"presetId": {
"type": "string",
"description": "Stable cascade preset identifier returned by an exact preset save, list, or read."
},
"presetVersionId": {
"type": "string",
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset."
},
"presetName": {
"type": "string",
"description": "Human-readable name of the exact preset currently bound as a default."
},
"updatedAt": {
"type": "string",
"description": "RFC 3339 timestamp when this record was last updated."
}
},
"required": [
"id",
"audience",
"ownerUserId",
"revision",
"presetId",
"presetVersionId",
"presetName",
"updatedAt"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Current exact preset binding after the default mutation; null means the default is reset. A null value explicitly means no current value is available."
}
},
"required": [
"revision",
"binding"
],
"additionalProperties": false,
"description": "Workspace team cascade default state, including its optimistic revision and exact preset binding when selected."
},
"effective": {
"type": "object",
"properties": {
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"payload": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Complete ordered cascade selection preserved in this immutable preset or configuration version."
}
},
"required": [
"origin",
"presetVersionId",
"payload"
],
"additionalProperties": false,
"description": "Exact cascade selection that a newly created project would inherit after this operation."
},
"canEditTeam": {
"type": "boolean",
"description": "Whether the current authenticated caller may change the workspace team cascade default."
}
},
"required": [
"personal",
"team",
"effective",
"canEditTeam"
],
"additionalProperties": false
}cascade_default_set
write · idempotent (needs idempotencyKey)Set or reset the caller personal default, or the workspace-owner team default, to one exact immutable preset version for future projects.
- Mode
- write · medium risk
- Scopes
- brief:read, review:configure, skills:read
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel save this exact published reviewer sequence as my default”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- cascade_preset_get, cascade_preset_save
Arguments
audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
expectedRevisionstring · requiredOptimistic concurrency value copied from the latest preset, default, or project configuration read. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
presetVersionIdany of · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available. Minimum accepted length or value is 1.
any of
Branch 1
minimum length: 1
Branch 2
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"audience": "personal",
"expectedRevision": "0",
"presetVersionId": "cpv_recipe_checkout_1",
"idempotencyKey": "recipe-cascade-default-set-v1"
}{
"audience": "personal",
"expectedRevision": "{{personalDefaultRevision}}",
"presetVersionId": "{{cascadePresetVersionId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"expectedRevision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Optimistic concurrency value copied from the latest preset, default, or project configuration read. Accepted length or value is 1 through 20, inclusive."
},
"presetVersionId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available. Minimum accepted length or value is 1."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"audience",
"expectedRevision",
"presetVersionId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this mutation attempt and its durable idempotent receipt.
bindingany of · requiredCurrent exact preset binding after the default mutation; null means the default is reset. A null value explicitly means no current value is available.
any of
Branch 1
binding.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
binding.audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
binding.ownerUserIdstring | null · requiredAccountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available.
binding.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
binding.presetIdstring · requiredStable cascade preset identifier returned by an exact preset save, list, or read.
binding.presetVersionIdstring · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset.
binding.presetNamestring · requiredHuman-readable name of the exact preset currently bound as a default.
binding.updatedAtstring · requiredRFC 3339 timestamp when this record was last updated.
Branch 2
effectiveobject · requiredExact cascade selection that a newly created project would inherit after this operation.
effective.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
effective.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
effective.payloadobject · requiredComplete ordered cascade selection preserved in this immutable preset or configuration version.
effective.payload.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
effective.payload.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
effective.payload.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
effective.payload.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
effective.payload.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
effective.payload.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
effective.payload.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
effective.payload.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
effective.payload.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
effective.payload.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
effective.payload.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
effective.payload.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
effective.payload.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
effective.payload.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
effective.payload.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
effective.payload.occurrences[].modelobject · requiredOptional model name declared by the harness.
effective.payload.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
effective.payload.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
effective.payload.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
{
"operationId": "example",
"binding": {
"id": "record_fixture_01",
"audience": "personal",
"ownerUserId": "example",
"revision": "1",
"presetId": "example",
"presetVersionId": "cpv_recipe_checkout_1",
"presetName": "example",
"updatedAt": "example"
},
"effective": {
"origin": "personal_default",
"presetVersionId": "cpv_recipe_checkout_1",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
}
}
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"binding\":{\"id\":\"record_fixture_01\",\"audience\":\"personal\",\"ownerUserId\":\"example\",\"revision\":\"1\",\"presetId\":\"example\",\"presetVersionId\":\"cpv_recipe_checkout_1\",\"presetName\":\"example\",\"updatedAt\":\"example\"},\"effective\":{\"origin\":\"personal_default\",\"presetVersionId\":\"cpv_recipe_checkout_1\",\"payload\":{\"schemaVersion\":1,\"occurrences\":[{\"occurrenceId\":\"checkout-reliability\",\"reviewerRef\":{\"kind\":\"custom\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\"},\"label\":\"Checkout reliability\",\"enabled\":true,\"skill\":{\"version\":\"skv_recipe_checkout_1\",\"sha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"},\"model\":{\"provider\":\"openai\",\"model\":\"gpt-5.2\",\"reasoning\":\"high\"}}]}}}"
}
],
"structuredContent": {
"operationId": "example",
"binding": {
"id": "record_fixture_01",
"audience": "personal",
"ownerUserId": "example",
"revision": "1",
"presetId": "example",
"presetVersionId": "cpv_recipe_checkout_1",
"presetName": "example",
"updatedAt": "example"
},
"effective": {
"origin": "personal_default",
"presetVersionId": "cpv_recipe_checkout_1",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
}
}
}
}- defaultPresetVersionId ← structuredContent.binding.presetVersionId
Next permitted action: Preview the exact preset version against the project revision before saving it.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"description": "Stable identifier for this mutation attempt and its durable idempotent receipt."
},
"binding": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"ownerUserId": {
"type": [
"string",
"null"
],
"description": "Accountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"presetId": {
"type": "string",
"description": "Stable cascade preset identifier returned by an exact preset save, list, or read."
},
"presetVersionId": {
"type": "string",
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset."
},
"presetName": {
"type": "string",
"description": "Human-readable name of the exact preset currently bound as a default."
},
"updatedAt": {
"type": "string",
"description": "RFC 3339 timestamp when this record was last updated."
}
},
"required": [
"id",
"audience",
"ownerUserId",
"revision",
"presetId",
"presetVersionId",
"presetName",
"updatedAt"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Current exact preset binding after the default mutation; null means the default is reset. A null value explicitly means no current value is available."
},
"effective": {
"type": "object",
"properties": {
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"payload": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Complete ordered cascade selection preserved in this immutable preset or configuration version."
}
},
"required": [
"origin",
"presetVersionId",
"payload"
],
"additionalProperties": false,
"description": "Exact cascade selection that a newly created project would inherit after this operation."
}
},
"required": [
"operationId",
"binding",
"effective"
],
"additionalProperties": false
}cascade_preset_get
readInspect one currently authorized preset and one exact immutable saved version without loading reviewer source bytes.
- Mode
- read · low risk
- Scopes
- brief:read, skills:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel inspect the exact saved reviewer cascade preset”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- cascade_preset_save, cascade_default_set
Arguments
presetIdstring · requiredStable cascade preset identifier returned by an exact preset save, list, or read. Minimum accepted length or value is 1.
minimum length: 1
versionIdstring · optionalImmutable version identifier returned by the owning brief, reviewer skill, or claim contract. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
{
"presetId": "cpr_recipe_checkout",
"versionId": "cpv_recipe_checkout_1"
}{
"presetId": "{{cascadePresetId}}",
"versionId": "{{cascadePresetVersionId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"presetId": {
"type": "string",
"minLength": 1,
"description": "Stable cascade preset identifier returned by an exact preset save, list, or read. Minimum accepted length or value is 1."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
}
},
"required": [
"presetId"
],
"additionalProperties": false
}Structured result
presetobject · requiredAuthorized cascade preset metadata and its exact immutable selected version.
preset.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
preset.audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
preset.ownerUserIdstring | null · requiredAccountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available.
preset.namestring · requiredHuman-readable name displayed in Semel.
preset.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
preset.archivedAtstring | null · requiredRFC 3339 archive timestamp; null means the preset remains available for new selection. A null value explicitly means no current value is available.
preset.currentVersionobject · requiredCurrent immutable version of this cascade preset, including its exact reviewer pins.
preset.currentVersion.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
preset.currentVersion.presetIdstring · requiredStable cascade preset identifier returned by an exact preset save, list, or read.
preset.currentVersion.versionNumberstring · requiredPositive monotonic publication number assigned to this immutable reviewer-skill version. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
preset.currentVersion.payloadobject · requiredComplete ordered cascade selection preserved in this immutable preset or configuration version.
preset.currentVersion.payload.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
preset.currentVersion.payload.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
preset.currentVersion.payload.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
preset.currentVersion.payload.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
preset.currentVersion.payload.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
preset.currentVersion.payload.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
preset.currentVersion.payload.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
preset.currentVersion.payload.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
preset.currentVersion.payload.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
preset.currentVersion.payload.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
preset.currentVersion.payload.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
preset.currentVersion.payload.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
preset.currentVersion.payload.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
preset.currentVersion.payload.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
preset.currentVersion.payload.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
preset.currentVersion.payload.occurrences[].modelobject · requiredOptional model name declared by the harness.
preset.currentVersion.payload.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
preset.currentVersion.payload.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
preset.currentVersion.payload.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
preset.currentVersion.createdByIdstring · requiredSemel user identifier recorded as the initiating creator.
preset.currentVersion.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
preset.canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
preset.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
preset.updatedAtstring · requiredRFC 3339 timestamp when this record was last updated.
{
"preset": {
"id": "cpr_recipe_checkout",
"audience": "personal",
"ownerUserId": "example",
"name": "Checkout reliability",
"revision": "1",
"archivedAt": "example",
"currentVersion": {
"id": "cpv_recipe_checkout_1",
"presetId": "cpr_recipe_checkout",
"versionNumber": "1",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "example",
"createdAt": "example"
},
"canEdit": false,
"createdAt": "example",
"updatedAt": "example"
}
}{
"content": [
{
"type": "text",
"text": "{\"preset\":{\"id\":\"cpr_recipe_checkout\",\"audience\":\"personal\",\"ownerUserId\":\"example\",\"name\":\"Checkout reliability\",\"revision\":\"1\",\"archivedAt\":\"example\",\"currentVersion\":{\"id\":\"cpv_recipe_checkout_1\",\"presetId\":\"cpr_recipe_checkout\",\"versionNumber\":\"1\",\"payload\":{\"schemaVersion\":1,\"occurrences\":[{\"occurrenceId\":\"checkout-reliability\",\"reviewerRef\":{\"kind\":\"custom\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\"},\"label\":\"Checkout reliability\",\"enabled\":true,\"skill\":{\"version\":\"skv_recipe_checkout_1\",\"sha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"},\"model\":{\"provider\":\"openai\",\"model\":\"gpt-5.2\",\"reasoning\":\"high\"}}]},\"createdById\":\"example\",\"createdAt\":\"example\"},\"canEdit\":false,\"createdAt\":\"example\",\"updatedAt\":\"example\"}}"
}
],
"structuredContent": {
"preset": {
"id": "cpr_recipe_checkout",
"audience": "personal",
"ownerUserId": "example",
"name": "Checkout reliability",
"revision": "1",
"archivedAt": "example",
"currentVersion": {
"id": "cpv_recipe_checkout_1",
"presetId": "cpr_recipe_checkout",
"versionNumber": "1",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "example",
"createdAt": "example"
},
"canEdit": false,
"createdAt": "example",
"updatedAt": "example"
}
}
}- inspectedPresetVersionId ← structuredContent.preset.currentVersion.id
Next permitted action: Set the personal default to that exact inspected version.
Complete raw result schema
{
"type": "object",
"properties": {
"preset": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"ownerUserId": {
"type": [
"string",
"null"
],
"description": "Accountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"archivedAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 archive timestamp; null means the preset remains available for new selection. A null value explicitly means no current value is available."
},
"currentVersion": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"presetId": {
"type": "string",
"description": "Stable cascade preset identifier returned by an exact preset save, list, or read."
},
"versionNumber": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Positive monotonic publication number assigned to this immutable reviewer-skill version. Accepted length or value is 1 through 20, inclusive."
},
"payload": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Complete ordered cascade selection preserved in this immutable preset or configuration version."
},
"createdById": {
"type": "string",
"description": "Semel user identifier recorded as the initiating creator."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"presetId",
"versionNumber",
"payload",
"createdById",
"createdAt"
],
"additionalProperties": false,
"description": "Current immutable version of this cascade preset, including its exact reviewer pins."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
},
"updatedAt": {
"type": "string",
"description": "RFC 3339 timestamp when this record was last updated."
}
},
"required": [
"id",
"audience",
"ownerUserId",
"name",
"revision",
"archivedAt",
"currentVersion",
"canEdit",
"createdAt",
"updatedAt"
],
"additionalProperties": false,
"description": "Authorized cascade preset metadata and its exact immutable selected version."
}
},
"required": [
"preset"
],
"additionalProperties": false
}cascade_preset_save
write · idempotent (needs idempotencyKey)Create or version a personal or team preset from exact published reviewer pins; this does not change defaults, projects, or start a review.
- Mode
- write · medium risk
- Scopes
- brief:read, review:configure, skills:read
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel save this exact published reviewer sequence as my default”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- cascade_preset_get, cascade_default_set
Arguments
presetIdstring · optionalStable cascade preset identifier returned by an exact preset save, list, or read. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
expectedRevisionstring · optionalOptimistic concurrency value copied from the latest preset, default, or project configuration read. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
occurrences[].modelobject · requiredOptional model name declared by the harness.
occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"name": "Checkout reliability cascade",
"audience": "personal",
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
],
"idempotencyKey": "recipe-cascade-preset-save-v1"
}{
"name": "Checkout reliability cascade",
"audience": "personal",
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "{{skillId}}",
"versionId": "{{publishedSkillVersionId}}"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "{{publishedSkillVersionId}}",
"sha256": "{{publishedSkillHash}}"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
],
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"presetId": {
"type": "string",
"minLength": 1,
"description": "Stable cascade preset identifier returned by an exact preset save, list, or read. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"expectedRevision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Optimistic concurrency value copied from the latest preset, default, or project configuration read. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 20, inclusive."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"name",
"audience",
"occurrences",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this mutation attempt and its durable idempotent receipt.
presetobject · requiredAuthorized cascade preset metadata and its exact immutable selected version.
preset.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
preset.audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
preset.ownerUserIdstring | null · requiredAccountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available.
preset.namestring · requiredHuman-readable name displayed in Semel.
preset.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
preset.archivedAtstring | null · requiredRFC 3339 archive timestamp; null means the preset remains available for new selection. A null value explicitly means no current value is available.
preset.currentVersionobject · requiredCurrent immutable version of this cascade preset, including its exact reviewer pins.
preset.currentVersion.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
preset.currentVersion.presetIdstring · requiredStable cascade preset identifier returned by an exact preset save, list, or read.
preset.currentVersion.versionNumberstring · requiredPositive monotonic publication number assigned to this immutable reviewer-skill version. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
preset.currentVersion.payloadobject · requiredComplete ordered cascade selection preserved in this immutable preset or configuration version.
preset.currentVersion.payload.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
preset.currentVersion.payload.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
preset.currentVersion.payload.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
preset.currentVersion.payload.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
preset.currentVersion.payload.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
preset.currentVersion.payload.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
preset.currentVersion.payload.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
preset.currentVersion.payload.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
preset.currentVersion.payload.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
preset.currentVersion.payload.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
preset.currentVersion.payload.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
preset.currentVersion.payload.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
preset.currentVersion.payload.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
preset.currentVersion.payload.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
preset.currentVersion.payload.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
preset.currentVersion.payload.occurrences[].modelobject · requiredOptional model name declared by the harness.
preset.currentVersion.payload.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
preset.currentVersion.payload.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
preset.currentVersion.payload.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
preset.currentVersion.createdByIdstring · requiredSemel user identifier recorded as the initiating creator.
preset.currentVersion.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
preset.canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
preset.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
preset.updatedAtstring · requiredRFC 3339 timestamp when this record was last updated.
{
"operationId": "example",
"preset": {
"id": "cpr_recipe_checkout",
"audience": "personal",
"ownerUserId": "example",
"name": "Checkout reliability cascade",
"revision": "1",
"archivedAt": "example",
"currentVersion": {
"id": "cpv_recipe_checkout_1",
"presetId": "example",
"versionNumber": "1",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "example",
"createdAt": "example"
},
"canEdit": false,
"createdAt": "example",
"updatedAt": "example"
}
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"preset\":{\"id\":\"cpr_recipe_checkout\",\"audience\":\"personal\",\"ownerUserId\":\"example\",\"name\":\"Checkout reliability cascade\",\"revision\":\"1\",\"archivedAt\":\"example\",\"currentVersion\":{\"id\":\"cpv_recipe_checkout_1\",\"presetId\":\"example\",\"versionNumber\":\"1\",\"payload\":{\"schemaVersion\":1,\"occurrences\":[{\"occurrenceId\":\"checkout-reliability\",\"reviewerRef\":{\"kind\":\"custom\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\"},\"label\":\"Checkout reliability\",\"enabled\":true,\"skill\":{\"version\":\"skv_recipe_checkout_1\",\"sha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"},\"model\":{\"provider\":\"openai\",\"model\":\"gpt-5.2\",\"reasoning\":\"high\"}}]},\"createdById\":\"example\",\"createdAt\":\"example\"},\"canEdit\":false,\"createdAt\":\"example\",\"updatedAt\":\"example\"}}"
}
],
"structuredContent": {
"operationId": "example",
"preset": {
"id": "cpr_recipe_checkout",
"audience": "personal",
"ownerUserId": "example",
"name": "Checkout reliability cascade",
"revision": "1",
"archivedAt": "example",
"currentVersion": {
"id": "cpv_recipe_checkout_1",
"presetId": "example",
"versionNumber": "1",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "example",
"createdAt": "example"
},
"canEdit": false,
"createdAt": "example",
"updatedAt": "example"
}
}
}- cascadePresetId ← structuredContent.preset.id
- cascadePresetVersionId ← structuredContent.preset.currentVersion.id
Next permitted action: Inspect the exact immutable preset version before selecting it as a default.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"description": "Stable identifier for this mutation attempt and its durable idempotent receipt."
},
"preset": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"ownerUserId": {
"type": [
"string",
"null"
],
"description": "Accountable owner of a personal reviewer skill; null identifies a workspace-team skill. A null value explicitly means no current value is available."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"archivedAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 archive timestamp; null means the preset remains available for new selection. A null value explicitly means no current value is available."
},
"currentVersion": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"presetId": {
"type": "string",
"description": "Stable cascade preset identifier returned by an exact preset save, list, or read."
},
"versionNumber": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Positive monotonic publication number assigned to this immutable reviewer-skill version. Accepted length or value is 1 through 20, inclusive."
},
"payload": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Complete ordered cascade selection preserved in this immutable preset or configuration version."
},
"createdById": {
"type": "string",
"description": "Semel user identifier recorded as the initiating creator."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"presetId",
"versionNumber",
"payload",
"createdById",
"createdAt"
],
"additionalProperties": false,
"description": "Current immutable version of this cascade preset, including its exact reviewer pins."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
},
"updatedAt": {
"type": "string",
"description": "RFC 3339 timestamp when this record was last updated."
}
},
"required": [
"id",
"audience",
"ownerUserId",
"name",
"revision",
"archivedAt",
"currentVersion",
"canEdit",
"createdAt",
"updatedAt"
],
"additionalProperties": false,
"description": "Authorized cascade preset metadata and its exact immutable selected version."
}
},
"required": [
"operationId",
"preset"
],
"additionalProperties": false
}project_cascade_get
readInspect the exact current reviewer cascade and optimistic revision for one project before previewing or saving a change.
- Mode
- read · low risk
- Scopes
- brief:read, skills:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel inspect the exact saved reviewer cascade preset”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- project_cascade_preview, project_cascade_save
Arguments
projectIdstring · requiredProject identifier whose exact current reviewer cascade should be inspected.
minimum length: 1
{
"projectId": "prj_fixture_checkout"
}{
"projectId": "{{projectId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier whose exact current reviewer cascade should be inspected."
}
},
"required": [
"projectId"
],
"additionalProperties": false
}Structured result
any of
Branch 1
kind"versioned" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "versioned".
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
currentVersionobject · requiredCurrent immutable version of this cascade preset, including its exact reviewer pins.
currentVersion.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
currentVersion.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
currentVersion.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
currentVersion.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
currentVersion.sourcePresetIdstring | null · optionalPreset identifier from which this project configuration was explicitly adopted; null identifies a manual selection. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available.
currentVersion.payloadobject · requiredComplete ordered cascade selection preserved in this immutable preset or configuration version.
currentVersion.payload.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
currentVersion.payload.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1
Array item · object
currentVersion.payload.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
currentVersion.payload.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
currentVersion.payload.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
currentVersion.payload.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
currentVersion.payload.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
currentVersion.payload.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
currentVersion.payload.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
currentVersion.payload.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
currentVersion.payload.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
currentVersion.payload.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
currentVersion.payload.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
currentVersion.payload.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
currentVersion.payload.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
currentVersion.payload.occurrences[].modelobject · requiredOptional model name declared by the harness.
currentVersion.payload.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
currentVersion.payload.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
currentVersion.payload.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
currentVersion.createdByIdstring · requiredSemel user identifier recorded as the initiating creator.
currentVersion.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
Branch 2
kind"legacy" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "legacy".
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
revision"0" · requiredIndexed repository revision used for this evidence result. This branch always uses "0".
stepsarray · requiredConfigured cascade steps in execution order with their latest run state. An empty array explicitly means no matching items.
Array item · object
steps[].stepIdstring · requiredIdentifier of one legacy reviewer-cascade step returned by the current project configuration.
steps[].positioninteger · requiredStable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
steps[].reviewerstring · requiredReviewer role responsible for this submitted result.
steps[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
steps[].providerstring | null · requiredResolved inference provider preserved in the immutable reviewer execution pin. A null value explicitly means no current value is available.
steps[].modelstring | null · requiredOptional model name declared by the harness. A null value explicitly means no current value is available.
steps[].reasoningstring | null · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available.
canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
{
"kind": "versioned",
"projectId": "prj_fixture_checkout",
"revision": "2",
"currentVersion": {
"id": "pcv_recipe_checkout_2",
"revision": "2",
"origin": "explicit_override",
"presetVersionId": "cpv_recipe_checkout_1",
"sourcePresetId": "cpr_recipe_checkout",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "usr_recipe_owner",
"createdAt": "2026-09-07T16:00:00.000Z"
},
"canEdit": true
}{
"content": [
{
"type": "text",
"text": "{\"kind\":\"versioned\",\"projectId\":\"prj_fixture_checkout\",\"revision\":\"2\",\"currentVersion\":{\"id\":\"pcv_recipe_checkout_2\",\"revision\":\"2\",\"origin\":\"explicit_override\",\"presetVersionId\":\"cpv_recipe_checkout_1\",\"sourcePresetId\":\"cpr_recipe_checkout\",\"payload\":{\"schemaVersion\":1,\"occurrences\":[{\"occurrenceId\":\"checkout-reliability\",\"reviewerRef\":{\"kind\":\"custom\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\"},\"label\":\"Checkout reliability\",\"enabled\":true,\"skill\":{\"version\":\"skv_recipe_checkout_1\",\"sha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"},\"model\":{\"provider\":\"openai\",\"model\":\"gpt-5.2\",\"reasoning\":\"high\"}}]},\"createdById\":\"usr_recipe_owner\",\"createdAt\":\"2026-09-07T16:00:00.000Z\"},\"canEdit\":true}"
}
],
"structuredContent": {
"kind": "versioned",
"projectId": "prj_fixture_checkout",
"revision": "2",
"currentVersion": {
"id": "pcv_recipe_checkout_2",
"revision": "2",
"origin": "explicit_override",
"presetVersionId": "cpv_recipe_checkout_1",
"sourcePresetId": "cpr_recipe_checkout",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "usr_recipe_owner",
"createdAt": "2026-09-07T16:00:00.000Z"
},
"canEdit": true
}
}- savedProjectCascadeRevision ← structuredContent.revision
Next permitted action: For a legacy project, use the legacy reviewer-step mutations; otherwise configuration is complete.
Complete raw result schema
{
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "versioned",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"versioned\"."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"currentVersion": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"sourcePresetId": {
"type": [
"string",
"null"
],
"description": "Preset identifier from which this project configuration was explicitly adopted; null identifies a manual selection. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available."
},
"payload": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Complete ordered cascade selection preserved in this immutable preset or configuration version."
},
"createdById": {
"type": "string",
"description": "Semel user identifier recorded as the initiating creator."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"revision",
"origin",
"presetVersionId",
"payload",
"createdById",
"createdAt"
],
"additionalProperties": false,
"description": "Current immutable version of this cascade preset, including its exact reviewer pins."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
}
},
"required": [
"kind",
"projectId",
"revision",
"currentVersion",
"canEdit"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "legacy",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"legacy\"."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"revision": {
"type": "string",
"const": "0",
"description": "Indexed repository revision used for this evidence result. This branch always uses \"0\"."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stepId": {
"type": "string",
"description": "Identifier of one legacy reviewer-cascade step returned by the current project configuration."
},
"position": {
"type": "integer",
"minimum": 0,
"description": "Stable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer."
},
"reviewer": {
"type": "string",
"description": "Reviewer role responsible for this submitted result."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"provider": {
"type": [
"string",
"null"
],
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. A null value explicitly means no current value is available."
},
"model": {
"type": [
"string",
"null"
],
"description": "Optional model name declared by the harness. A null value explicitly means no current value is available."
},
"reasoning": {
"type": [
"string",
"null"
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available."
}
},
"required": [
"stepId",
"position",
"reviewer",
"enabled",
"provider",
"model",
"reasoning"
],
"additionalProperties": false
},
"description": "Configured cascade steps in execution order with their latest run state. An empty array explicitly means no matching items."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
}
},
"required": [
"kind",
"projectId",
"revision",
"steps",
"canEdit"
],
"additionalProperties": false
}
]
}project_cascade_preview
readResolve a preset, explicit override, or reset into exact immutable reviewer pins and validate it before saving.
- Mode
- read · low risk
- Scopes
- brief:read, review:configure, skills:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel inspect the exact saved reviewer cascade preset”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- project_cascade_get, project_cascade_save
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
expectedRevisionstring · requiredOptimistic concurrency value copied from the latest preset, default, or project configuration read. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
candidateany of · requiredProposed project cascade source to resolve and validate: an immutable preset, explicit occurrence override, or default reset.
any of
Branch 1
candidate.kind"preset" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "preset".
candidate.presetVersionIdstring · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. Minimum accepted length or value is 1.
minimum length: 1
Branch 2
candidate.kind"override" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "override".
candidate.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
candidate.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
candidate.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
candidate.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
candidate.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
candidate.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
candidate.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
candidate.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
candidate.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
candidate.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
candidate.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
candidate.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
candidate.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
candidate.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
candidate.occurrences[].modelobject · requiredOptional model name declared by the harness.
candidate.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
candidate.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
candidate.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
Branch 3
candidate.kind"reset" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "reset".
candidate.expectedSelectionobject · optionalExact default selection returned by preview; include it when saving a reset so an unseen default change cannot be substituted. Omit the field when it does not apply; omission is distinct from an empty value.
candidate.expectedSelection.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
candidate.expectedSelection.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
candidate.expectedSelection.payloadSha256string · requiredLowercase hexadecimal SHA-256 digest of the canonical submitted payload.
pattern: ^[a-f0-9]{64}$
{
"projectId": "prj_fixture_checkout",
"expectedRevision": "1",
"candidate": {
"kind": "preset",
"presetVersionId": "cpv_recipe_checkout_1"
}
}{
"projectId": "{{projectId}}",
"expectedRevision": "{{projectCascadeRevision}}",
"candidate": {
"kind": "preset",
"presetVersionId": "{{cascadePresetVersionId}}"
}
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"expectedRevision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Optimistic concurrency value copied from the latest preset, default, or project configuration read. Accepted length or value is 1 through 20, inclusive."
},
"candidate": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "preset",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"preset\"."
},
"presetVersionId": {
"type": "string",
"minLength": 1,
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. Minimum accepted length or value is 1."
}
},
"required": [
"kind",
"presetVersionId"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "override",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"override\"."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"kind",
"occurrences"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "reset",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"reset\"."
},
"expectedSelection": {
"type": "object",
"properties": {
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"payloadSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest of the canonical submitted payload."
}
},
"required": [
"origin",
"presetVersionId",
"payloadSha256"
],
"additionalProperties": false,
"description": "Exact default selection returned by preview; include it when saving a reset so an unseen default change cannot be substituted. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"kind"
],
"additionalProperties": false
}
],
"description": "Proposed project cascade source to resolve and validate: an immutable preset, explicit occurrence override, or default reset."
}
},
"required": [
"projectId",
"expectedRevision",
"candidate"
],
"additionalProperties": false
}Structured result
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
expectedRevisionstring · requiredOptimistic concurrency value copied from the latest preset, default, or project configuration read. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
beforeany of · requiredExact earlier reviewer-skill revision selected as the before side of this comparison.
any of
Branch 1
before.kind"versioned" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "versioned".
before.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
before.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
before.currentVersionobject · requiredCurrent immutable version of this cascade preset, including its exact reviewer pins.
before.currentVersion.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
before.currentVersion.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
before.currentVersion.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
before.currentVersion.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
before.currentVersion.sourcePresetIdstring | null · optionalPreset identifier from which this project configuration was explicitly adopted; null identifies a manual selection. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available.
before.currentVersion.payloadobject · requiredComplete ordered cascade selection preserved in this immutable preset or configuration version.
before.currentVersion.payload.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
before.currentVersion.payload.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1
Array item · object
before.currentVersion.payload.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
before.currentVersion.payload.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
before.currentVersion.payload.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
before.currentVersion.payload.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
before.currentVersion.payload.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
before.currentVersion.payload.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
before.currentVersion.payload.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
before.currentVersion.payload.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
before.currentVersion.payload.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
before.currentVersion.payload.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
before.currentVersion.payload.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
before.currentVersion.payload.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
before.currentVersion.payload.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
before.currentVersion.payload.occurrences[].modelobject · requiredOptional model name declared by the harness.
before.currentVersion.payload.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
before.currentVersion.payload.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
before.currentVersion.payload.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
before.currentVersion.createdByIdstring · requiredSemel user identifier recorded as the initiating creator.
before.currentVersion.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
before.canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
Branch 2
before.kind"legacy" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "legacy".
before.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
before.revision"0" · requiredIndexed repository revision used for this evidence result. This branch always uses "0".
before.stepsarray · requiredConfigured cascade steps in execution order with their latest run state. An empty array explicitly means no matching items.
Array item · object
before.steps[].stepIdstring · requiredIdentifier of one legacy reviewer-cascade step returned by the current project configuration.
before.steps[].positioninteger · requiredStable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
before.steps[].reviewerstring · requiredReviewer role responsible for this submitted result.
before.steps[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
before.steps[].providerstring | null · requiredResolved inference provider preserved in the immutable reviewer execution pin. A null value explicitly means no current value is available.
before.steps[].modelstring | null · requiredOptional model name declared by the harness. A null value explicitly means no current value is available.
before.steps[].reasoningstring | null · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available.
before.canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
afterobject · requiredExact later reviewer-skill revision selected as the after side of this comparison.
after.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
after.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
after.payloadobject · requiredComplete ordered cascade selection preserved in this immutable preset or configuration version.
after.payload.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
after.payload.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
after.payload.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
after.payload.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
after.payload.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
after.payload.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
after.payload.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
after.payload.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
after.payload.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
after.payload.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
after.payload.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
after.payload.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
after.payload.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
after.payload.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
after.payload.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
after.payload.occurrences[].modelobject · requiredOptional model name declared by the harness.
after.payload.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
after.payload.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
after.payload.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
resolvedSelectionobject · requiredExact previewed default or preset identity that Save must match before committing the project configuration.
resolvedSelection.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
resolvedSelection.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
resolvedSelection.payloadSha256string · requiredLowercase hexadecimal SHA-256 digest of the canonical submitted payload.
pattern: ^[a-f0-9]{64}$
{
"projectId": "prj_fixture_checkout",
"expectedRevision": "1",
"before": {
"kind": "versioned",
"projectId": "prj_fixture_checkout",
"revision": "1",
"currentVersion": {
"id": "pcv_recipe_checkout_1",
"revision": "1",
"origin": "explicit_override",
"presetVersionId": "cpv_recipe_checkout_1",
"sourcePresetId": "cpr_recipe_checkout",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "usr_recipe_owner",
"createdAt": "2026-09-07T16:00:00.000Z"
},
"canEdit": true
},
"after": {
"origin": "project",
"presetVersionId": "cpv_recipe_checkout_1",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
}
},
"resolvedSelection": {
"origin": "project",
"presetVersionId": "cpv_recipe_checkout_1",
"payloadSha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
}
}{
"content": [
{
"type": "text",
"text": "{\"projectId\":\"prj_fixture_checkout\",\"expectedRevision\":\"1\",\"before\":{\"kind\":\"versioned\",\"projectId\":\"prj_fixture_checkout\",\"revision\":\"1\",\"currentVersion\":{\"id\":\"pcv_recipe_checkout_1\",\"revision\":\"1\",\"origin\":\"explicit_override\",\"presetVersionId\":\"cpv_recipe_checkout_1\",\"sourcePresetId\":\"cpr_recipe_checkout\",\"payload\":{\"schemaVersion\":1,\"occurrences\":[{\"occurrenceId\":\"checkout-reliability\",\"reviewerRef\":{\"kind\":\"custom\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\"},\"label\":\"Checkout reliability\",\"enabled\":true,\"skill\":{\"version\":\"skv_recipe_checkout_1\",\"sha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"},\"model\":{\"provider\":\"openai\",\"model\":\"gpt-5.2\",\"reasoning\":\"high\"}}]},\"createdById\":\"usr_recipe_owner\",\"createdAt\":\"2026-09-07T16:00:00.000Z\"},\"canEdit\":true},\"after\":{\"origin\":\"project\",\"presetVersionId\":\"cpv_recipe_checkout_1\",\"payload\":{\"schemaVersion\":1,\"occurrences\":[{\"occurrenceId\":\"checkout-reliability\",\"reviewerRef\":{\"kind\":\"custom\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\"},\"label\":\"Checkout reliability\",\"enabled\":true,\"skill\":{\"version\":\"skv_recipe_checkout_1\",\"sha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"},\"model\":{\"provider\":\"openai\",\"model\":\"gpt-5.2\",\"reasoning\":\"high\"}}]}},\"resolvedSelection\":{\"origin\":\"project\",\"presetVersionId\":\"cpv_recipe_checkout_1\",\"payloadSha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"}}"
}
],
"structuredContent": {
"projectId": "prj_fixture_checkout",
"expectedRevision": "1",
"before": {
"kind": "versioned",
"projectId": "prj_fixture_checkout",
"revision": "1",
"currentVersion": {
"id": "pcv_recipe_checkout_1",
"revision": "1",
"origin": "explicit_override",
"presetVersionId": "cpv_recipe_checkout_1",
"sourcePresetId": "cpr_recipe_checkout",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "usr_recipe_owner",
"createdAt": "2026-09-07T16:00:00.000Z"
},
"canEdit": true
},
"after": {
"origin": "project",
"presetVersionId": "cpv_recipe_checkout_1",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
}
},
"resolvedSelection": {
"origin": "project",
"presetVersionId": "cpv_recipe_checkout_1",
"payloadSha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
}
}
}- projectCascadePayloadSha256 ← structuredContent.resolvedSelection.payloadSha256
Next permitted action: Save the identical candidate and expected revision only after inspecting the resolved pins.
Complete raw result schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"expectedRevision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Optimistic concurrency value copied from the latest preset, default, or project configuration read. Accepted length or value is 1 through 20, inclusive."
},
"before": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "versioned",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"versioned\"."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"currentVersion": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"sourcePresetId": {
"type": [
"string",
"null"
],
"description": "Preset identifier from which this project configuration was explicitly adopted; null identifies a manual selection. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available."
},
"payload": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Complete ordered cascade selection preserved in this immutable preset or configuration version."
},
"createdById": {
"type": "string",
"description": "Semel user identifier recorded as the initiating creator."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"revision",
"origin",
"presetVersionId",
"payload",
"createdById",
"createdAt"
],
"additionalProperties": false,
"description": "Current immutable version of this cascade preset, including its exact reviewer pins."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
}
},
"required": [
"kind",
"projectId",
"revision",
"currentVersion",
"canEdit"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "legacy",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"legacy\"."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"revision": {
"type": "string",
"const": "0",
"description": "Indexed repository revision used for this evidence result. This branch always uses \"0\"."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stepId": {
"type": "string",
"description": "Identifier of one legacy reviewer-cascade step returned by the current project configuration."
},
"position": {
"type": "integer",
"minimum": 0,
"description": "Stable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer."
},
"reviewer": {
"type": "string",
"description": "Reviewer role responsible for this submitted result."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"provider": {
"type": [
"string",
"null"
],
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. A null value explicitly means no current value is available."
},
"model": {
"type": [
"string",
"null"
],
"description": "Optional model name declared by the harness. A null value explicitly means no current value is available."
},
"reasoning": {
"type": [
"string",
"null"
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available."
}
},
"required": [
"stepId",
"position",
"reviewer",
"enabled",
"provider",
"model",
"reasoning"
],
"additionalProperties": false
},
"description": "Configured cascade steps in execution order with their latest run state. An empty array explicitly means no matching items."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
}
},
"required": [
"kind",
"projectId",
"revision",
"steps",
"canEdit"
],
"additionalProperties": false
}
],
"description": "Exact earlier reviewer-skill revision selected as the before side of this comparison."
},
"after": {
"type": "object",
"properties": {
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"payload": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Complete ordered cascade selection preserved in this immutable preset or configuration version."
}
},
"required": [
"origin",
"presetVersionId",
"payload"
],
"additionalProperties": false,
"description": "Exact later reviewer-skill revision selected as the after side of this comparison."
},
"resolvedSelection": {
"type": "object",
"properties": {
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"payloadSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest of the canonical submitted payload."
}
},
"required": [
"origin",
"presetVersionId",
"payloadSha256"
],
"additionalProperties": false,
"description": "Exact previewed default or preset identity that Save must match before committing the project configuration."
}
},
"required": [
"projectId",
"expectedRevision",
"before",
"after",
"resolvedSelection"
],
"additionalProperties": false
}project_cascade_save
write · idempotent (needs idempotencyKey)Persist the exact preset, override, or reset candidate already inspected through project_cascade_preview, using optimistic revision and idempotency checks.
- Mode
- write · medium risk
- Scopes
- brief:read, review:configure, skills:read
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel save this exact published reviewer sequence as my default”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- project_cascade_get, project_cascade_preview
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
expectedRevisionstring · requiredOptimistic concurrency value copied from the latest preset, default, or project configuration read. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
candidateany of · requiredProposed project cascade source to resolve and validate: an immutable preset, explicit occurrence override, or default reset.
any of
Branch 1
candidate.kind"preset" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "preset".
candidate.presetVersionIdstring · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. Minimum accepted length or value is 1.
minimum length: 1
Branch 2
candidate.kind"override" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "override".
candidate.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
candidate.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
candidate.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
candidate.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
candidate.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
candidate.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
candidate.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
candidate.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
candidate.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
candidate.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
candidate.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
candidate.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
candidate.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
candidate.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
candidate.occurrences[].modelobject · requiredOptional model name declared by the harness.
candidate.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
candidate.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
candidate.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
Branch 3
candidate.kind"reset" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "reset".
candidate.expectedSelectionobject · optionalExact default selection returned by preview; include it when saving a reset so an unseen default change cannot be substituted. Omit the field when it does not apply; omission is distinct from an empty value.
candidate.expectedSelection.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
candidate.expectedSelection.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
candidate.expectedSelection.payloadSha256string · requiredLowercase hexadecimal SHA-256 digest of the canonical submitted payload.
pattern: ^[a-f0-9]{64}$
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"expectedRevision": "1",
"candidate": {
"kind": "preset",
"presetVersionId": "cpv_recipe_checkout_1"
},
"idempotencyKey": "recipe-project-cascade-save-v1"
}{
"projectId": "{{projectId}}",
"expectedRevision": "{{projectCascadeRevision}}",
"candidate": {
"kind": "preset",
"presetVersionId": "{{cascadePresetVersionId}}"
},
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"expectedRevision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Optimistic concurrency value copied from the latest preset, default, or project configuration read. Accepted length or value is 1 through 20, inclusive."
},
"candidate": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "preset",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"preset\"."
},
"presetVersionId": {
"type": "string",
"minLength": 1,
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. Minimum accepted length or value is 1."
}
},
"required": [
"kind",
"presetVersionId"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "override",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"override\"."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"kind",
"occurrences"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "reset",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"reset\"."
},
"expectedSelection": {
"type": "object",
"properties": {
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"payloadSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest of the canonical submitted payload."
}
},
"required": [
"origin",
"presetVersionId",
"payloadSha256"
],
"additionalProperties": false,
"description": "Exact default selection returned by preview; include it when saving a reset so an unseen default change cannot be substituted. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"kind"
],
"additionalProperties": false
}
],
"description": "Proposed project cascade source to resolve and validate: an immutable preset, explicit occurrence override, or default reset."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"projectId",
"expectedRevision",
"candidate",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this mutation attempt and its durable idempotent receipt.
configany of · requiredExact current project reviewer configuration returned after authorization or a successful save.
any of
Branch 1
config.kind"versioned" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "versioned".
config.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
config.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
config.currentVersionobject · requiredCurrent immutable version of this cascade preset, including its exact reviewer pins.
config.currentVersion.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
config.currentVersion.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
config.currentVersion.origin"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
config.currentVersion.presetVersionIdstring | null · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available.
config.currentVersion.sourcePresetIdstring | null · optionalPreset identifier from which this project configuration was explicitly adopted; null identifies a manual selection. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available.
config.currentVersion.payloadobject · requiredComplete ordered cascade selection preserved in this immutable preset or configuration version.
config.currentVersion.payload.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
config.currentVersion.payload.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1
Array item · object
config.currentVersion.payload.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
config.currentVersion.payload.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
config.currentVersion.payload.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
config.currentVersion.payload.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
config.currentVersion.payload.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
config.currentVersion.payload.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
config.currentVersion.payload.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
config.currentVersion.payload.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
config.currentVersion.payload.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
config.currentVersion.payload.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
config.currentVersion.payload.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
config.currentVersion.payload.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
config.currentVersion.payload.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
config.currentVersion.payload.occurrences[].modelobject · requiredOptional model name declared by the harness.
config.currentVersion.payload.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
config.currentVersion.payload.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
config.currentVersion.payload.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
config.currentVersion.createdByIdstring · requiredSemel user identifier recorded as the initiating creator.
config.currentVersion.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
config.canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
Branch 2
config.kind"legacy" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "legacy".
config.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
config.revision"0" · requiredIndexed repository revision used for this evidence result. This branch always uses "0".
config.stepsarray · requiredConfigured cascade steps in execution order with their latest run state. An empty array explicitly means no matching items.
Array item · object
config.steps[].stepIdstring · requiredIdentifier of one legacy reviewer-cascade step returned by the current project configuration.
config.steps[].positioninteger · requiredStable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
config.steps[].reviewerstring · requiredReviewer role responsible for this submitted result.
config.steps[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
config.steps[].providerstring | null · requiredResolved inference provider preserved in the immutable reviewer execution pin. A null value explicitly means no current value is available.
config.steps[].modelstring | null · requiredOptional model name declared by the harness. A null value explicitly means no current value is available.
config.steps[].reasoningstring | null · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available.
config.canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
{
"operationId": "example",
"config": {
"kind": "versioned",
"projectId": "prj_fixture_checkout",
"revision": "2",
"currentVersion": {
"id": "pcv_recipe_checkout_2",
"revision": "2",
"origin": "explicit_override",
"presetVersionId": "cpv_recipe_checkout_1",
"sourcePresetId": "cpr_recipe_checkout",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "usr_recipe_owner",
"createdAt": "2026-09-07T16:00:00.000Z"
},
"canEdit": true
}
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"config\":{\"kind\":\"versioned\",\"projectId\":\"prj_fixture_checkout\",\"revision\":\"2\",\"currentVersion\":{\"id\":\"pcv_recipe_checkout_2\",\"revision\":\"2\",\"origin\":\"explicit_override\",\"presetVersionId\":\"cpv_recipe_checkout_1\",\"sourcePresetId\":\"cpr_recipe_checkout\",\"payload\":{\"schemaVersion\":1,\"occurrences\":[{\"occurrenceId\":\"checkout-reliability\",\"reviewerRef\":{\"kind\":\"custom\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\"},\"label\":\"Checkout reliability\",\"enabled\":true,\"skill\":{\"version\":\"skv_recipe_checkout_1\",\"sha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\"},\"model\":{\"provider\":\"openai\",\"model\":\"gpt-5.2\",\"reasoning\":\"high\"}}]},\"createdById\":\"usr_recipe_owner\",\"createdAt\":\"2026-09-07T16:00:00.000Z\"},\"canEdit\":true}}"
}
],
"structuredContent": {
"operationId": "example",
"config": {
"kind": "versioned",
"projectId": "prj_fixture_checkout",
"revision": "2",
"currentVersion": {
"id": "pcv_recipe_checkout_2",
"revision": "2",
"origin": "explicit_override",
"presetVersionId": "cpv_recipe_checkout_1",
"sourcePresetId": "cpr_recipe_checkout",
"payload": {
"schemaVersion": 1,
"occurrences": [
{
"occurrenceId": "checkout-reliability",
"reviewerRef": {
"kind": "custom",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1"
},
"label": "Checkout reliability",
"enabled": true,
"skill": {
"version": "skv_recipe_checkout_1",
"sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
"model": {
"provider": "openai",
"model": "gpt-5.2",
"reasoning": "high"
}
}
]
},
"createdById": "usr_recipe_owner",
"createdAt": "2026-09-07T16:00:00.000Z"
},
"canEdit": true
}
}
}- savedProjectCascadeRevision ← structuredContent.config.revision
Next permitted action: Read the project cascade again and verify the saved revision and exact preset pins.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"description": "Stable identifier for this mutation attempt and its durable idempotent receipt."
},
"config": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "versioned",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"versioned\"."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"currentVersion": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"origin": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available."
},
"sourcePresetId": {
"type": [
"string",
"null"
],
"description": "Preset identifier from which this project configuration was explicitly adopted; null identifies a manual selection. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available."
},
"payload": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Complete ordered cascade selection preserved in this immutable preset or configuration version."
},
"createdById": {
"type": "string",
"description": "Semel user identifier recorded as the initiating creator."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"revision",
"origin",
"presetVersionId",
"payload",
"createdById",
"createdAt"
],
"additionalProperties": false,
"description": "Current immutable version of this cascade preset, including its exact reviewer pins."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
}
},
"required": [
"kind",
"projectId",
"revision",
"currentVersion",
"canEdit"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "legacy",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"legacy\"."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"revision": {
"type": "string",
"const": "0",
"description": "Indexed repository revision used for this evidence result. This branch always uses \"0\"."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stepId": {
"type": "string",
"description": "Identifier of one legacy reviewer-cascade step returned by the current project configuration."
},
"position": {
"type": "integer",
"minimum": 0,
"description": "Stable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer."
},
"reviewer": {
"type": "string",
"description": "Reviewer role responsible for this submitted result."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"provider": {
"type": [
"string",
"null"
],
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. A null value explicitly means no current value is available."
},
"model": {
"type": [
"string",
"null"
],
"description": "Optional model name declared by the harness. A null value explicitly means no current value is available."
},
"reasoning": {
"type": [
"string",
"null"
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available."
}
},
"required": [
"stepId",
"position",
"reviewer",
"enabled",
"provider",
"model",
"reasoning"
],
"additionalProperties": false
},
"description": "Configured cascade steps in execution order with their latest run state. An empty array explicitly means no matching items."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
}
},
"required": [
"kind",
"projectId",
"revision",
"steps",
"canEdit"
],
"additionalProperties": false
}
],
"description": "Exact current project reviewer configuration returned after authorization or a successful save."
}
},
"required": [
"operationId",
"config"
],
"additionalProperties": false
}project_codebase_link
write · idempotent (needs idempotencyKey)Turn on one already-connected codebase for a project after the agent inventories plausible repositories and the user confirms the proposed scope.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel add the throughlineos codebase to this project”“/semel use this connected repository as project evidence”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- project_codebases_list, project_context_sources_list, brief_create
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
repositoryIdstring · requiredRepository identifier from the connected-codebase inventory. Minimum accepted length or value is 1.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"repositoryId": "repo_fixture_throughline",
"idempotencyKey": "recipe-project-codebase-link-v1"
}{
"projectId": "{{projectId}}",
"repositoryId": "{{repositoryId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"repositoryId": {
"type": "string",
"minLength": 1,
"description": "Repository identifier from the connected-codebase inventory. Minimum accepted length or value is 1."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"projectId",
"repositoryId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
projectCodebaseobject · requiredProject-to-repository link returned by the operation.
projectCodebase.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
projectCodebase.repositoryIdstring · requiredRepository identifier from the connected-codebase inventory. Minimum accepted length or value is 1.
minimum length: 1
projectCodebase.linkedtrue · requiredWhether the repository is currently linked to the project. This branch always uses true.
projectCodebase.newlyLinkedboolean · requiredWhether this call created the project-to-repository link instead of replaying an existing link.
{
"projectCodebase": {
"projectId": "prj_fixture_checkout",
"repositoryId": "repo_fixture_throughline",
"linked": true,
"newlyLinked": true
}
}{
"content": [
{
"type": "text",
"text": "{\"projectCodebase\":{\"projectId\":\"prj_fixture_checkout\",\"repositoryId\":\"repo_fixture_throughline\",\"linked\":true,\"newlyLinked\":true}}"
}
],
"structuredContent": {
"projectCodebase": {
"projectId": "prj_fixture_checkout",
"repositoryId": "repo_fixture_throughline",
"linked": true,
"newlyLinked": true
}
}
}- linked ← structuredContent.projectCodebase.linked
Next permitted action: Proceed with the confirmed repository in project scope.
Complete raw result schema
{
"type": "object",
"properties": {
"projectCodebase": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"repositoryId": {
"type": "string",
"minLength": 1,
"description": "Repository identifier from the connected-codebase inventory. Minimum accepted length or value is 1."
},
"linked": {
"type": "boolean",
"const": true,
"description": "Whether the repository is currently linked to the project. This branch always uses true."
},
"newlyLinked": {
"type": "boolean",
"description": "Whether this call created the project-to-repository link instead of replaying an existing link."
}
},
"required": [
"projectId",
"repositoryId",
"linked",
"newlyLinked"
],
"additionalProperties": false,
"description": "Project-to-repository link returned by the operation."
}
},
"required": [
"projectCodebase"
],
"additionalProperties": false
}project_codebases_list
readList connected workspace codebases, including unselected ones, and show which are currently in a project so the user can confirm repository scope before brief creation or review. Follow nextCursor until it is null before treating the inventory as complete.
- Mode
- read · low risk
- Scopes
- brief:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel which connected codebases may be relevant to this project?”“/semel show the selected and available repositories for this project”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- project_get, project_codebase_link, brief_create
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
cursorstring · optionalOpaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
limitinteger · optionalMaximum records requested for this page; omission uses the server default and the schema enforces the ceiling. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive. The value must be an integer.
minimum: 1 · maximum: 200
{
"projectId": "prj_fixture_checkout",
"limit": 50
}{
"projectId": "{{projectId}}",
"limit": 50
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"cursor": {
"type": "string",
"minLength": 1,
"description": "Opaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Maximum records requested for this page; omission uses the server default and the schema enforces the ceiling. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive. The value must be an integer."
}
},
"required": [
"projectId"
],
"additionalProperties": false
}Structured result
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
codebasesarray · requiredConnected repository options visible to this project actor. An empty array explicitly means no matching items.
Array item · object
codebases[].repositoryIdstring · requiredRepository identifier from the connected-codebase inventory. Minimum accepted length or value is 1.
minimum length: 1
codebases[].ownerstring · requiredRepository owner or organization slug returned by the connected source provider; pair it with repository name. Minimum accepted length or value is 1.
minimum length: 1
codebases[].namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
codebases[].trackingBranchstring · requiredRepository branch configured for indexing and review evidence. Minimum accepted length or value is 1.
minimum length: 1
codebases[].selectedboolean · requiredWhether this connected repository is selected for the project.
codebases[].selectionStatus"available" | "access_unavailable" | "removing" · requiredCurrent availability state of a connected repository for project selection; unavailable or removing repositories cannot be newly selected. Allowed values: "available", "access_unavailable", "removing".
nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
{
"projectId": "prj_fixture_checkout",
"codebases": [
{
"repositoryId": "repo_fixture_throughline",
"owner": "throughline",
"name": "throughlineos",
"trackingBranch": "main",
"selected": false,
"selectionStatus": "available"
}
],
"nextCursor": null
}{
"content": [
{
"type": "text",
"text": "{\"projectId\":\"prj_fixture_checkout\",\"codebases\":[{\"repositoryId\":\"repo_fixture_throughline\",\"owner\":\"throughline\",\"name\":\"throughlineos\",\"trackingBranch\":\"main\",\"selected\":false,\"selectionStatus\":\"available\"}],\"nextCursor\":null}"
}
],
"structuredContent": {
"projectId": "prj_fixture_checkout",
"codebases": [
{
"repositoryId": "repo_fixture_throughline",
"owner": "throughline",
"name": "throughlineos",
"trackingBranch": "main",
"selected": false,
"selectionStatus": "available"
}
],
"nextCursor": null
}
}- codebases ← structuredContent.codebases
Next permitted action: Follow nextCursor until null before proposing repository scope.
Complete raw result schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"codebases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"repositoryId": {
"type": "string",
"minLength": 1,
"description": "Repository identifier from the connected-codebase inventory. Minimum accepted length or value is 1."
},
"owner": {
"type": "string",
"minLength": 1,
"description": "Repository owner or organization slug returned by the connected source provider; pair it with repository name. Minimum accepted length or value is 1."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"trackingBranch": {
"type": "string",
"minLength": 1,
"description": "Repository branch configured for indexing and review evidence. Minimum accepted length or value is 1."
},
"selected": {
"type": "boolean",
"description": "Whether this connected repository is selected for the project."
},
"selectionStatus": {
"type": "string",
"enum": [
"available",
"access_unavailable",
"removing"
],
"description": "Current availability state of a connected repository for project selection; unavailable or removing repositories cannot be newly selected. Allowed values: \"available\", \"access_unavailable\", \"removing\"."
}
},
"required": [
"repositoryId",
"owner",
"name",
"trackingBranch",
"selected",
"selectionStatus"
],
"additionalProperties": false
},
"description": "Connected repository options visible to this project actor. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"projectId",
"codebases",
"nextCursor"
],
"additionalProperties": false
}project_context_evidence_get
readFetch the bounded excerpt or statement a search result cited, preserving its source/version/provenance.
- Mode
- read · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “show me the code that matched that last search result”
- Errors
- AUTHORIZATION_SCOPE_MISSINGPROJECT_ACCESS_DENIEDCONTEXT_FORBIDDENCONTEXT_UNAVAILABLE
- Related
- project_context_search
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
citationHandlestring · requiredOpaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1.
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"citationHandle": "ctx1.repository.fixture"
}{
"projectId": "{{projectId}}",
"citationHandle": "{{citationHandle}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"citationHandle": {
"type": "string",
"minLength": 1,
"description": "Opaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1."
}
},
"required": [
"projectId",
"citationHandle"
],
"additionalProperties": false
}Structured result
citationany of · requiredDurable citation metadata for the returned evidence excerpt.
any of
Branch 1
citation.citationHandlestring · requiredOpaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1.
minimum length: 1
citation.sourceIdstring · requiredOpaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1.
minimum length: 1
citation.provenance"semel_indexed" | "local_harness" · requiredImmutable repository revision and evidence-source provenance. Allowed values: "semel_indexed", "local_harness".
citation.route"exact" | "lexical" | "hybrid" · requiredRepository route or evidence route label recorded with the citation. Allowed values: "exact", "lexical", "hybrid".
citation.scorenumber · requiredRetrieval relevance score used to order evidence results.
citation.kind"repository" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "repository".
citation.repositoryobject · requiredConnected repository identity and provider metadata.
citation.repository.ownerstring · requiredRepository owner or organization slug returned by the connected source provider; pair it with repository name.
citation.repository.namestring · requiredHuman-readable name displayed in Semel.
citation.revisionobject · requiredIndexed repository revision used for this evidence result.
citation.revision.commitShastring · requiredGit commit SHA pinned by the evidence manifest.
citation.revision.revisionIdstring · requiredImmutable indexed repository revision identifier.
citation.pathstring · requiredRepository-relative source path; it never denotes an arbitrary local filesystem path.
citation.startLineinteger · requiredOne-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
citation.endLineinteger · requiredOne-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
Branch 2
citation.citationHandlestring · requiredOpaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1.
minimum length: 1
citation.sourceIdstring · requiredOpaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1.
minimum length: 1
citation.provenance"semel_indexed" | "local_harness" · requiredImmutable repository revision and evidence-source provenance. Allowed values: "semel_indexed", "local_harness".
citation.route"exact" | "lexical" | "hybrid" · requiredRepository route or evidence route label recorded with the citation. Allowed values: "exact", "lexical", "hybrid".
citation.scorenumber · requiredRetrieval relevance score used to order evidence results.
citation.kind"knowledge_collection" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "knowledge_collection".
citation.collectionobject · requiredNamed durable brief collection to page; use one of the documented enum values.
citation.collection.scopeKind"workspace" | "project" | "repository" · requiredOwnership boundary for a knowledge collection: workspace, project, or repository. Allowed values: "workspace", "project", "repository".
citation.collection.scopeIdstring · requiredStable identifier of the repository scope that produced this evidence.
citation.collection.snapshotIdstring · requiredImmutable export snapshot identifier used to reproduce the exported brief state.
citation.collection.versioninteger · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
citation.sectionKeystring · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result.
citation.statementIndexinteger · requiredZero-based statement position within the cited brief section. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
excerptstring · requiredBounded source excerpt authorized for this result; an empty string means no excerpt text was returned.
truncatedboolean · requiredWhether the returned excerpt was shortened to the response limit.
{
"citation": {
"citationHandle": "ctx1.repository.fixture",
"sourceId": "src_fixture_repository",
"provenance": "semel_indexed",
"route": "exact",
"score": 0,
"kind": "repository",
"repository": {
"owner": "throughline",
"name": "throughlineos"
},
"revision": {
"commitSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"revisionId": "rev_fixture_checkout"
},
"path": "services/api/src/checkout.ts",
"startLine": 42,
"endLine": 58
},
"excerpt": "The checkout handler reuses the payment intent for a repeated idempotency key.",
"truncated": false
}{
"content": [
{
"type": "text",
"text": "{\"citation\":{\"citationHandle\":\"ctx1.repository.fixture\",\"sourceId\":\"src_fixture_repository\",\"provenance\":\"semel_indexed\",\"route\":\"exact\",\"score\":0,\"kind\":\"repository\",\"repository\":{\"owner\":\"throughline\",\"name\":\"throughlineos\"},\"revision\":{\"commitSha\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"revisionId\":\"rev_fixture_checkout\"},\"path\":\"services/api/src/checkout.ts\",\"startLine\":42,\"endLine\":58},\"excerpt\":\"The checkout handler reuses the payment intent for a repeated idempotency key.\",\"truncated\":false}"
}
],
"structuredContent": {
"citation": {
"citationHandle": "ctx1.repository.fixture",
"sourceId": "src_fixture_repository",
"provenance": "semel_indexed",
"route": "exact",
"score": 0,
"kind": "repository",
"repository": {
"owner": "throughline",
"name": "throughlineos"
},
"revision": {
"commitSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"revisionId": "rev_fixture_checkout"
},
"path": "services/api/src/checkout.ts",
"startLine": 42,
"endLine": 58
},
"excerpt": "The checkout handler reuses the payment intent for a repeated idempotency key.",
"truncated": false
}
}- excerpt ← structuredContent.excerpt
Next permitted action: Cite the returned provenance/revision/path and disclose truncated when true.
Complete raw result schema
{
"type": "object",
"properties": {
"citation": {
"anyOf": [
{
"type": "object",
"properties": {
"citationHandle": {
"type": "string",
"minLength": 1,
"description": "Opaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1."
},
"sourceId": {
"type": "string",
"minLength": 1,
"description": "Opaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1."
},
"provenance": {
"type": "string",
"enum": [
"semel_indexed",
"local_harness"
],
"description": "Immutable repository revision and evidence-source provenance. Allowed values: \"semel_indexed\", \"local_harness\"."
},
"route": {
"type": "string",
"enum": [
"exact",
"lexical",
"hybrid"
],
"description": "Repository route or evidence route label recorded with the citation. Allowed values: \"exact\", \"lexical\", \"hybrid\"."
},
"score": {
"type": "number",
"description": "Retrieval relevance score used to order evidence results."
},
"kind": {
"type": "string",
"const": "repository",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"repository\"."
},
"repository": {
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repository owner or organization slug returned by the connected source provider; pair it with repository name."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
}
},
"required": [
"owner",
"name"
],
"additionalProperties": false,
"description": "Connected repository identity and provider metadata."
},
"revision": {
"type": "object",
"properties": {
"commitSha": {
"type": "string",
"description": "Git commit SHA pinned by the evidence manifest."
},
"revisionId": {
"type": "string",
"description": "Immutable indexed repository revision identifier."
}
},
"required": [
"commitSha",
"revisionId"
],
"additionalProperties": false,
"description": "Indexed repository revision used for this evidence result."
},
"path": {
"type": "string",
"description": "Repository-relative source path; it never denotes an arbitrary local filesystem path."
},
"startLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"endLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"citationHandle",
"sourceId",
"provenance",
"route",
"score",
"kind",
"repository",
"revision",
"path",
"startLine",
"endLine"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"citationHandle": {
"type": "string",
"minLength": 1,
"description": "Opaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1."
},
"sourceId": {
"type": "string",
"minLength": 1,
"description": "Opaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1."
},
"provenance": {
"type": "string",
"enum": [
"semel_indexed",
"local_harness"
],
"description": "Immutable repository revision and evidence-source provenance. Allowed values: \"semel_indexed\", \"local_harness\"."
},
"route": {
"type": "string",
"enum": [
"exact",
"lexical",
"hybrid"
],
"description": "Repository route or evidence route label recorded with the citation. Allowed values: \"exact\", \"lexical\", \"hybrid\"."
},
"score": {
"type": "number",
"description": "Retrieval relevance score used to order evidence results."
},
"kind": {
"type": "string",
"const": "knowledge_collection",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"knowledge_collection\"."
},
"collection": {
"type": "object",
"properties": {
"scopeKind": {
"type": "string",
"enum": [
"workspace",
"project",
"repository"
],
"description": "Ownership boundary for a knowledge collection: workspace, project, or repository. Allowed values: \"workspace\", \"project\", \"repository\"."
},
"scopeId": {
"type": "string",
"description": "Stable identifier of the repository scope that produced this evidence."
},
"snapshotId": {
"type": "string",
"description": "Immutable export snapshot identifier used to reproduce the exported brief state."
},
"version": {
"type": "integer",
"minimum": 0,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"scopeKind",
"scopeId",
"snapshotId",
"version"
],
"additionalProperties": false,
"description": "Named durable brief collection to page; use one of the documented enum values."
},
"sectionKey": {
"type": "string",
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result."
},
"statementIndex": {
"type": "integer",
"minimum": 0,
"description": "Zero-based statement position within the cited brief section. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"citationHandle",
"sourceId",
"provenance",
"route",
"score",
"kind",
"collection",
"sectionKey",
"statementIndex"
],
"additionalProperties": false
}
],
"description": "Durable citation metadata for the returned evidence excerpt."
},
"excerpt": {
"type": "string",
"description": "Bounded source excerpt authorized for this result; an empty string means no excerpt text was returned."
},
"truncated": {
"type": "boolean",
"description": "Whether the returned excerpt was shortened to the response limit."
}
},
"required": [
"citation",
"excerpt",
"truncated"
],
"additionalProperties": false
}project_context_search
readSearch one or more already-listed context sources for evidence relevant to the active reviewer skill’s question.
- Mode
- read · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “search the indexed repository for the retry handler”“have we recorded any prior decisions about pricing?”
- Errors
- AUTHORIZATION_SCOPE_MISSINGPROJECT_ACCESS_DENIEDCONTEXT_FORBIDDENCONTEXT_UNAVAILABLE
- Related
- project_context_sources_list, project_context_evidence_get
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
sourceIdsarray · requiredSource identifiers returned by project_context_sources_list that bound this search. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 5
Array item · string
minimum length: 1
querystring · requiredNatural-language or code search query evaluated only against the selected project context sources. Accepted length or value is 1 through 500, inclusive.
minimum length: 1 · maximum length: 500
limitinteger · optionalMaximum records requested for this page; omission uses the server default and the schema enforces the ceiling. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive. The value must be an integer.
minimum: 1 · maximum: 200
{
"projectId": "prj_fixture_checkout",
"sourceIds": [
"src_fixture_repository"
],
"query": "payment retry idempotency",
"limit": 20
}{
"projectId": "{{projectId}}",
"sourceIds": [
"{{sourceId}}"
],
"query": "payment retry idempotency",
"limit": 20
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"sourceIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"maxItems": 5,
"description": "Source identifiers returned by project_context_sources_list that bound this search. An empty array explicitly means no matching items."
},
"query": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Natural-language or code search query evaluated only against the selected project context sources. Accepted length or value is 1 through 500, inclusive."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Maximum records requested for this page; omission uses the server default and the schema enforces the ceiling. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive. The value must be an integer."
}
},
"required": [
"projectId",
"sourceIds",
"query"
],
"additionalProperties": false
}Structured result
resultsarray · requiredRanked evidence matches for the requested sources and query. An empty array explicitly means no matching items.
Array item · object
results[].citationany of · requiredDurable citation metadata for the returned evidence excerpt.
any of
Branch 1
results[].citation.citationHandlestring · requiredOpaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1.
minimum length: 1
results[].citation.sourceIdstring · requiredOpaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1.
minimum length: 1
results[].citation.provenance"semel_indexed" | "local_harness" · requiredImmutable repository revision and evidence-source provenance. Allowed values: "semel_indexed", "local_harness".
results[].citation.route"exact" | "lexical" | "hybrid" · requiredRepository route or evidence route label recorded with the citation. Allowed values: "exact", "lexical", "hybrid".
results[].citation.scorenumber · requiredRetrieval relevance score used to order evidence results.
results[].citation.kind"repository" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "repository".
results[].citation.repositoryobject · requiredConnected repository identity and provider metadata.
results[].citation.repository.ownerstring · requiredRepository owner or organization slug returned by the connected source provider; pair it with repository name.
results[].citation.repository.namestring · requiredHuman-readable name displayed in Semel.
results[].citation.revisionobject · requiredIndexed repository revision used for this evidence result.
results[].citation.revision.commitShastring · requiredGit commit SHA pinned by the evidence manifest.
results[].citation.revision.revisionIdstring · requiredImmutable indexed repository revision identifier.
results[].citation.pathstring · requiredRepository-relative source path; it never denotes an arbitrary local filesystem path.
results[].citation.startLineinteger · requiredOne-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
results[].citation.endLineinteger · requiredOne-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
Branch 2
results[].citation.citationHandlestring · requiredOpaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1.
minimum length: 1
results[].citation.sourceIdstring · requiredOpaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1.
minimum length: 1
results[].citation.provenance"semel_indexed" | "local_harness" · requiredImmutable repository revision and evidence-source provenance. Allowed values: "semel_indexed", "local_harness".
results[].citation.route"exact" | "lexical" | "hybrid" · requiredRepository route or evidence route label recorded with the citation. Allowed values: "exact", "lexical", "hybrid".
results[].citation.scorenumber · requiredRetrieval relevance score used to order evidence results.
results[].citation.kind"knowledge_collection" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "knowledge_collection".
results[].citation.collectionobject · requiredNamed durable brief collection to page; use one of the documented enum values.
results[].citation.collection.scopeKind"workspace" | "project" | "repository" · requiredOwnership boundary for a knowledge collection: workspace, project, or repository. Allowed values: "workspace", "project", "repository".
results[].citation.collection.scopeIdstring · requiredStable identifier of the repository scope that produced this evidence.
results[].citation.collection.snapshotIdstring · requiredImmutable export snapshot identifier used to reproduce the exported brief state.
results[].citation.collection.versioninteger · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
results[].citation.sectionKeystring · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result.
results[].citation.statementIndexinteger · requiredZero-based statement position within the cited brief section. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
searchedSourcesarray · requiredSource identifiers actually searched after authorization and availability checks. An empty array explicitly means no matching items.
Array item · object
searchedSources[].sourceIdstring · requiredOpaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1.
minimum length: 1
searchedSources[].route"exact" | "lexical" | "hybrid" · requiredRepository route or evidence route label recorded with the citation. Allowed values: "exact", "lexical", "hybrid".
searchedSources[].resultCountinteger · requiredNumber of evidence matches returned in this response. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
searchedSources[].abstainedboolean · requiredWhether search deliberately returned no evidence because trust or relevance requirements were unmet.
searchedSources[].abstentionReasonstring · optionalSafe explanation for why evidence search abstained; null means it returned normally. Omit the field when it does not apply; omission is distinct from an empty value.
{
"results": [
{
"citation": {
"citationHandle": "ctx1.repository.fixture",
"sourceId": "src_fixture_repository",
"provenance": "semel_indexed",
"route": "exact",
"score": 0.93,
"kind": "repository",
"repository": {
"owner": "throughline",
"name": "throughlineos"
},
"revision": {
"commitSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"revisionId": "rev_fixture_checkout"
},
"path": "services/api/src/checkout.ts",
"startLine": 42,
"endLine": 58
}
}
],
"searchedSources": [
{
"sourceId": "src_fixture_repository",
"route": "exact",
"resultCount": 1,
"abstained": false
}
]
}{
"content": [
{
"type": "text",
"text": "{\"results\":[{\"citation\":{\"citationHandle\":\"ctx1.repository.fixture\",\"sourceId\":\"src_fixture_repository\",\"provenance\":\"semel_indexed\",\"route\":\"exact\",\"score\":0.93,\"kind\":\"repository\",\"repository\":{\"owner\":\"throughline\",\"name\":\"throughlineos\"},\"revision\":{\"commitSha\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"revisionId\":\"rev_fixture_checkout\"},\"path\":\"services/api/src/checkout.ts\",\"startLine\":42,\"endLine\":58}}],\"searchedSources\":[{\"sourceId\":\"src_fixture_repository\",\"route\":\"exact\",\"resultCount\":1,\"abstained\":false}]}"
}
],
"structuredContent": {
"results": [
{
"citation": {
"citationHandle": "ctx1.repository.fixture",
"sourceId": "src_fixture_repository",
"provenance": "semel_indexed",
"route": "exact",
"score": 0.93,
"kind": "repository",
"repository": {
"owner": "throughline",
"name": "throughlineos"
},
"revision": {
"commitSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"revisionId": "rev_fixture_checkout"
},
"path": "services/api/src/checkout.ts",
"startLine": 42,
"endLine": 58
}
}
],
"searchedSources": [
{
"sourceId": "src_fixture_repository",
"route": "exact",
"resultCount": 1,
"abstained": false
}
]
}
}- citationHandle ← structuredContent.results[0].citation.citationHandle
Next permitted action: Preserve the returned citationHandle exactly; inspect abstention metadata when no result exists.
Complete raw result schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"citation": {
"anyOf": [
{
"type": "object",
"properties": {
"citationHandle": {
"type": "string",
"minLength": 1,
"description": "Opaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1."
},
"sourceId": {
"type": "string",
"minLength": 1,
"description": "Opaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1."
},
"provenance": {
"type": "string",
"enum": [
"semel_indexed",
"local_harness"
],
"description": "Immutable repository revision and evidence-source provenance. Allowed values: \"semel_indexed\", \"local_harness\"."
},
"route": {
"type": "string",
"enum": [
"exact",
"lexical",
"hybrid"
],
"description": "Repository route or evidence route label recorded with the citation. Allowed values: \"exact\", \"lexical\", \"hybrid\"."
},
"score": {
"type": "number",
"description": "Retrieval relevance score used to order evidence results."
},
"kind": {
"type": "string",
"const": "repository",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"repository\"."
},
"repository": {
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repository owner or organization slug returned by the connected source provider; pair it with repository name."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
}
},
"required": [
"owner",
"name"
],
"additionalProperties": false,
"description": "Connected repository identity and provider metadata."
},
"revision": {
"type": "object",
"properties": {
"commitSha": {
"type": "string",
"description": "Git commit SHA pinned by the evidence manifest."
},
"revisionId": {
"type": "string",
"description": "Immutable indexed repository revision identifier."
}
},
"required": [
"commitSha",
"revisionId"
],
"additionalProperties": false,
"description": "Indexed repository revision used for this evidence result."
},
"path": {
"type": "string",
"description": "Repository-relative source path; it never denotes an arbitrary local filesystem path."
},
"startLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"endLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"citationHandle",
"sourceId",
"provenance",
"route",
"score",
"kind",
"repository",
"revision",
"path",
"startLine",
"endLine"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"citationHandle": {
"type": "string",
"minLength": 1,
"description": "Opaque evidence handle returned by project_context_search; pass it unchanged to evidence_get. Minimum accepted length or value is 1."
},
"sourceId": {
"type": "string",
"minLength": 1,
"description": "Opaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1."
},
"provenance": {
"type": "string",
"enum": [
"semel_indexed",
"local_harness"
],
"description": "Immutable repository revision and evidence-source provenance. Allowed values: \"semel_indexed\", \"local_harness\"."
},
"route": {
"type": "string",
"enum": [
"exact",
"lexical",
"hybrid"
],
"description": "Repository route or evidence route label recorded with the citation. Allowed values: \"exact\", \"lexical\", \"hybrid\"."
},
"score": {
"type": "number",
"description": "Retrieval relevance score used to order evidence results."
},
"kind": {
"type": "string",
"const": "knowledge_collection",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"knowledge_collection\"."
},
"collection": {
"type": "object",
"properties": {
"scopeKind": {
"type": "string",
"enum": [
"workspace",
"project",
"repository"
],
"description": "Ownership boundary for a knowledge collection: workspace, project, or repository. Allowed values: \"workspace\", \"project\", \"repository\"."
},
"scopeId": {
"type": "string",
"description": "Stable identifier of the repository scope that produced this evidence."
},
"snapshotId": {
"type": "string",
"description": "Immutable export snapshot identifier used to reproduce the exported brief state."
},
"version": {
"type": "integer",
"minimum": 0,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"scopeKind",
"scopeId",
"snapshotId",
"version"
],
"additionalProperties": false,
"description": "Named durable brief collection to page; use one of the documented enum values."
},
"sectionKey": {
"type": "string",
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result."
},
"statementIndex": {
"type": "integer",
"minimum": 0,
"description": "Zero-based statement position within the cited brief section. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"citationHandle",
"sourceId",
"provenance",
"route",
"score",
"kind",
"collection",
"sectionKey",
"statementIndex"
],
"additionalProperties": false
}
],
"description": "Durable citation metadata for the returned evidence excerpt."
}
},
"required": [
"citation"
],
"additionalProperties": false
},
"description": "Ranked evidence matches for the requested sources and query. An empty array explicitly means no matching items."
},
"searchedSources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sourceId": {
"type": "string",
"minLength": 1,
"description": "Opaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1."
},
"route": {
"type": "string",
"enum": [
"exact",
"lexical",
"hybrid"
],
"description": "Repository route or evidence route label recorded with the citation. Allowed values: \"exact\", \"lexical\", \"hybrid\"."
},
"resultCount": {
"type": "integer",
"minimum": 0,
"description": "Number of evidence matches returned in this response. Minimum accepted length or value is 0. The value must be an integer."
},
"abstained": {
"type": "boolean",
"description": "Whether search deliberately returned no evidence because trust or relevance requirements were unmet."
},
"abstentionReason": {
"type": "string",
"description": "Safe explanation for why evidence search abstained; null means it returned normally. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sourceId",
"route",
"resultCount",
"abstained"
],
"additionalProperties": false
},
"description": "Source identifiers actually searched after authorization and availability checks. An empty array explicitly means no matching items."
}
},
"required": [
"results",
"searchedSources"
],
"additionalProperties": false
}project_context_sources_list
readDiscover which repositories and knowledge collections this project can search before claiming absence.
- Mode
- read · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “what context sources do I have for this project?”“is there an indexed repository for the checkout project?”
- Errors
- AUTHORIZATION_SCOPE_MISSINGPROJECT_ACCESS_DENIED
- Related
- project_context_search, project_context_evidence_get
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1.
minimum length: 1
cursorstring · optionalOpaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
limitinteger · optionalMaximum records requested for this page; omission uses the server default and the schema enforces the ceiling. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive. The value must be an integer.
minimum: 1 · maximum: 200
{
"projectId": "prj_fixture_checkout",
"limit": 50
}{
"projectId": "{{projectId}}",
"limit": 50
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Minimum accepted length or value is 1."
},
"cursor": {
"type": "string",
"minLength": 1,
"description": "Opaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Maximum records requested for this page; omission uses the server default and the schema enforces the ceiling. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive. The value must be an integer."
}
},
"required": [
"projectId"
],
"additionalProperties": false
}Structured result
sourcesarray · requiredConnected repository sources currently authorized for this project. An empty array explicitly means no matching items.
Array item · object
sources[].sourceIdstring · requiredOpaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1.
minimum length: 1
sources[].kind"repository" | "knowledge_collection" · requiredDiscriminator identifying the typed variant represented by this object. Allowed values: "repository", "knowledge_collection".
sources[].labelstring · requiredHuman-readable label displayed for this record.
sources[].scopeobject · requiredWork explicitly included in this brief.
sources[].scope.kind"workspace" | "project" | "repository" · requiredDiscriminator identifying the typed variant represented by this object. Allowed values: "workspace", "project", "repository".
sources[].scope.idstring | null · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. A null value explicitly means no current value is available.
sources[].repositoryobject · optionalConnected repository identity and provider metadata. Omit the field when it does not apply; omission is distinct from an empty value.
sources[].repository.ownerstring · requiredRepository owner or organization slug returned by the connected source provider; pair it with repository name.
sources[].repository.namestring · requiredHuman-readable name displayed in Semel.
sources[].repository.defaultBranchstring · requiredRepository default branch reported by the connected provider.
sources[].repository.trackingBranchstring · requiredRepository branch configured for indexing and review evidence.
sources[].repository.commitShastring | null · requiredGit commit SHA pinned by the evidence manifest. A null value explicitly means no current value is available.
sources[].repository.revisionIdstring | null · requiredImmutable indexed repository revision identifier. A null value explicitly means no current value is available.
sources[].collectionobject · optionalNamed durable brief collection to page; use one of the documented enum values. Omit the field when it does not apply; omission is distinct from an empty value.
sources[].collection.scopeKind"workspace" | "project" | "repository" · requiredOwnership boundary for a knowledge collection: workspace, project, or repository. Allowed values: "workspace", "project", "repository".
sources[].collection.versioninteger · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
sources[].collection.snapshotIdstring · requiredImmutable export snapshot identifier used to reproduce the exported brief state.
sources[].status"ready" | "syncing" | "stale" | "degraded" | "unavailable" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. Allowed values: "ready", "syncing", "stale", "degraded", "unavailable".
sources[].freshnessobject · requiredRepository indexing freshness and configured tracking branch.
sources[].freshness.asOfstring | null · requiredRFC 3339 timestamp describing evidence freshness. A null value explicitly means no current value is available.
sources[].freshness.coverage"full" | "partial" | "unknown" · requiredEvidence coverage metadata or typed completeness level for the cited source; unknown or partial coverage must not imply absence. Allowed values: "full", "partial", "unknown".
sources[].provenance"semel_indexed" | "local_harness" · requiredImmutable repository revision and evidence-source provenance. Allowed values: "semel_indexed", "local_harness".
nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
{
"sources": [
{
"sourceId": "src_fixture_repository",
"kind": "repository",
"label": "throughlineos repository",
"scope": {
"kind": "project",
"id": "prj_fixture_checkout"
},
"status": "ready",
"freshness": {
"asOf": "2026-09-07T16:00:00.000Z",
"coverage": "full"
},
"provenance": "semel_indexed"
}
],
"nextCursor": null
}{
"content": [
{
"type": "text",
"text": "{\"sources\":[{\"sourceId\":\"src_fixture_repository\",\"kind\":\"repository\",\"label\":\"throughlineos repository\",\"scope\":{\"kind\":\"project\",\"id\":\"prj_fixture_checkout\"},\"status\":\"ready\",\"freshness\":{\"asOf\":\"2026-09-07T16:00:00.000Z\",\"coverage\":\"full\"},\"provenance\":\"semel_indexed\"}],\"nextCursor\":null}"
}
],
"structuredContent": {
"sources": [
{
"sourceId": "src_fixture_repository",
"kind": "repository",
"label": "throughlineos repository",
"scope": {
"kind": "project",
"id": "prj_fixture_checkout"
},
"status": "ready",
"freshness": {
"asOf": "2026-09-07T16:00:00.000Z",
"coverage": "full"
},
"provenance": "semel_indexed"
}
],
"nextCursor": null
}
}- sourceId ← structuredContent.sources[0].sourceId
Next permitted action: Follow nextCursor to completion and distinguish ready, stale, degraded, and unavailable sources.
Complete raw result schema
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sourceId": {
"type": "string",
"minLength": 1,
"description": "Opaque source identifier returned by project_context_sources_list; pass it back unchanged. Minimum accepted length or value is 1."
},
"kind": {
"type": "string",
"enum": [
"repository",
"knowledge_collection"
],
"description": "Discriminator identifying the typed variant represented by this object. Allowed values: \"repository\", \"knowledge_collection\"."
},
"label": {
"type": "string",
"description": "Human-readable label displayed for this record."
},
"scope": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"workspace",
"project",
"repository"
],
"description": "Discriminator identifying the typed variant represented by this object. Allowed values: \"workspace\", \"project\", \"repository\"."
},
"id": {
"type": [
"string",
"null"
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. A null value explicitly means no current value is available."
}
},
"required": [
"kind",
"id"
],
"additionalProperties": false,
"description": "Work explicitly included in this brief."
},
"repository": {
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repository owner or organization slug returned by the connected source provider; pair it with repository name."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"defaultBranch": {
"type": "string",
"description": "Repository default branch reported by the connected provider."
},
"trackingBranch": {
"type": "string",
"description": "Repository branch configured for indexing and review evidence."
},
"commitSha": {
"type": [
"string",
"null"
],
"description": "Git commit SHA pinned by the evidence manifest. A null value explicitly means no current value is available."
},
"revisionId": {
"type": [
"string",
"null"
],
"description": "Immutable indexed repository revision identifier. A null value explicitly means no current value is available."
}
},
"required": [
"owner",
"name",
"defaultBranch",
"trackingBranch",
"commitSha",
"revisionId"
],
"additionalProperties": false,
"description": "Connected repository identity and provider metadata. Omit the field when it does not apply; omission is distinct from an empty value."
},
"collection": {
"type": "object",
"properties": {
"scopeKind": {
"type": "string",
"enum": [
"workspace",
"project",
"repository"
],
"description": "Ownership boundary for a knowledge collection: workspace, project, or repository. Allowed values: \"workspace\", \"project\", \"repository\"."
},
"version": {
"type": "integer",
"minimum": 0,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 0. The value must be an integer."
},
"snapshotId": {
"type": "string",
"description": "Immutable export snapshot identifier used to reproduce the exported brief state."
}
},
"required": [
"scopeKind",
"version",
"snapshotId"
],
"additionalProperties": false,
"description": "Named durable brief collection to page; use one of the documented enum values. Omit the field when it does not apply; omission is distinct from an empty value."
},
"status": {
"type": "string",
"enum": [
"ready",
"syncing",
"stale",
"degraded",
"unavailable"
],
"description": "Current typed status; the schema enum or union branch lists every allowed value. Allowed values: \"ready\", \"syncing\", \"stale\", \"degraded\", \"unavailable\"."
},
"freshness": {
"type": "object",
"properties": {
"asOf": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp describing evidence freshness. A null value explicitly means no current value is available."
},
"coverage": {
"type": "string",
"enum": [
"full",
"partial",
"unknown"
],
"description": "Evidence coverage metadata or typed completeness level for the cited source; unknown or partial coverage must not imply absence. Allowed values: \"full\", \"partial\", \"unknown\"."
}
},
"required": [
"asOf",
"coverage"
],
"additionalProperties": false,
"description": "Repository indexing freshness and configured tracking branch."
},
"provenance": {
"type": "string",
"enum": [
"semel_indexed",
"local_harness"
],
"description": "Immutable repository revision and evidence-source provenance. Allowed values: \"semel_indexed\", \"local_harness\"."
}
},
"required": [
"sourceId",
"kind",
"label",
"scope",
"status",
"freshness",
"provenance"
],
"additionalProperties": false
},
"description": "Connected repository sources currently authorized for this project. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"sources",
"nextCursor"
],
"additionalProperties": false
}project_create
write · idempotent (needs idempotencyKey)Create a new project (a fresh, independent effort) and seed its recommended pre-build review cascade. Use for any net-new effort; reuse an existing project only on considerable overlap.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel create a project for the new onboarding flow”“/semel start a new project called Checkout v2”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- project_list, project_get, brief_create
Arguments
namestring · requiredHuman-readable name displayed in Semel. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
reviewMode"direct" | "propose" · optionalProject review interaction mode configured in Semel. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: "direct", "propose".
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"name": "Checkout reliability",
"reviewMode": "direct",
"idempotencyKey": "recipe-project-create-v1"
}{
"name": "{{projectName}}",
"reviewMode": "direct",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Human-readable name displayed in Semel. Accepted length or value is 1 through 200, inclusive."
},
"reviewMode": {
"type": "string",
"enum": [
"direct",
"propose"
],
"description": "Project review interaction mode configured in Semel. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: \"direct\", \"propose\"."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"name",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
projectobject · requiredProject record returned by the operation.
project.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
project.workspaceIdstring · requiredWorkspace identifier that owns the record; it is resolved from authenticated Semel membership.
project.namestring · requiredHuman-readable name displayed in Semel.
project.reviewMode"direct" | "propose" · requiredProject review interaction mode configured in Semel. Allowed values: "direct", "propose".
project.ownerIdstring · optionalAccountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value.
project.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
project.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
project.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
project.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
project.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
project.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
project.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
{
"project": {
"id": "prj_fixture_checkout",
"workspaceId": "ws_fixture_primary",
"name": "Checkout reliability",
"reviewMode": "direct",
"createdAt": "2026-09-07T16:00:00.000Z"
}
}{
"content": [
{
"type": "text",
"text": "{\"project\":{\"id\":\"prj_fixture_checkout\",\"workspaceId\":\"ws_fixture_primary\",\"name\":\"Checkout reliability\",\"reviewMode\":\"direct\",\"createdAt\":\"2026-09-07T16:00:00.000Z\"}}"
}
],
"structuredContent": {
"project": {
"id": "prj_fixture_checkout",
"workspaceId": "ws_fixture_primary",
"name": "Checkout reliability",
"reviewMode": "direct",
"createdAt": "2026-09-07T16:00:00.000Z"
}
}
}- projectId ← structuredContent.project.id
Next permitted action: Carry project.id into every project-scoped call.
Complete raw result schema
{
"type": "object",
"properties": {
"project": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"workspaceId": {
"type": "string",
"description": "Workspace identifier that owns the record; it is resolved from authenticated Semel membership."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"reviewMode": {
"type": "string",
"enum": [
"direct",
"propose"
],
"description": "Project review interaction mode configured in Semel. Allowed values: \"direct\", \"propose\"."
},
"ownerId": {
"type": "string",
"description": "Accountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"workspaceId",
"name",
"reviewMode",
"createdAt"
],
"additionalProperties": false,
"description": "Project record returned by the operation."
}
},
"required": [
"project"
],
"additionalProperties": false
}project_delivery_status_set
write · idempotent (needs idempotencyKey)Set or correct an explicit project delivery status. This never advances review state or changes briefs.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel mark this project built”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- project_get, brief_delivery_status_set
Arguments
deliveryStatusany of · requiredDesired explicit delivery state; null deliberately clears the marker and does not alter review, approval, or contract state.
any of
Branch 1
Branch 2
ifDeliveryStatusVersioninteger · requiredRequired optimistic-concurrency precondition copied from the latest deliveryStatusVersion returned by Semel.
minimum: 0
correctionReasonstring · optionalTrimmed audit reason required for backward transitions and clears; tabs and line breaks are allowed but other control characters are rejected.
minimum length: 1 · maximum length: 500
projectIdstring · requiredProject identifier whose explicit delivery status should be changed.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"deliveryStatus": "built",
"ifDeliveryStatusVersion": 0,
"idempotencyKey": "recipe-project-delivery-status-set-v1"
}{
"projectId": "{{projectId}}",
"deliveryStatus": "{{projectDeliveryStatus}}",
"ifDeliveryStatusVersion": 0,
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Desired explicit delivery state; null deliberately clears the marker and does not alter review, approval, or contract state."
},
"ifDeliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Required optimistic-concurrency precondition copied from the latest deliveryStatusVersion returned by Semel."
},
"correctionReason": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Trimmed audit reason required for backward transitions and clears; tabs and line breaks are allowed but other control characters are rejected."
},
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier whose explicit delivery status should be changed."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"deliveryStatus",
"ifDeliveryStatusVersion",
"projectId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
projectobject · requiredProject record returned by the operation.
project.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
project.workspaceIdstring · requiredWorkspace identifier that owns the record; it is resolved from authenticated Semel membership.
project.namestring · requiredHuman-readable name displayed in Semel.
project.reviewMode"direct" | "propose" · requiredProject review interaction mode configured in Semel. Allowed values: "direct", "propose".
project.ownerIdstring · optionalAccountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value.
project.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
project.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
project.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
project.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
project.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
project.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
project.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
deliveryobject · requiredCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state.
delivery.projectionobject · requiredAuthoritative delivery projection after the operation, including an exact no-op response.
delivery.projection.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
delivery.projection.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
delivery.projection.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
delivery.projection.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
delivery.projection.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
delivery.changedboolean · requiredTrue when projection and audit event were committed; false for an exact event-free no-op.
delivery.eventIdstring | null · requiredImmutable delivery-status audit event identifier for a committed change; null for an exact no-op.
{
"project": {
"id": "prj_fixture_checkout",
"workspaceId": "ws_fixture_primary",
"name": "Checkout reliability",
"reviewMode": "direct",
"createdAt": "example",
"delivery": {
"deliveryStatus": "built",
"deliveryStatusVersion": 1,
"changedAt": "2026-09-07T16:00:00.000Z",
"changedById": "example",
"source": "mcp"
}
},
"delivery": {
"projection": {
"deliveryStatus": "built",
"deliveryStatusVersion": 1,
"changedAt": "2026-09-07T16:00:00.000Z",
"changedById": "example",
"source": "mcp"
},
"changed": true,
"eventId": "example"
}
}{
"content": [
{
"type": "text",
"text": "{\"project\":{\"id\":\"prj_fixture_checkout\",\"workspaceId\":\"ws_fixture_primary\",\"name\":\"Checkout reliability\",\"reviewMode\":\"direct\",\"createdAt\":\"example\",\"delivery\":{\"deliveryStatus\":\"built\",\"deliveryStatusVersion\":1,\"changedAt\":\"2026-09-07T16:00:00.000Z\",\"changedById\":\"example\",\"source\":\"mcp\"}},\"delivery\":{\"projection\":{\"deliveryStatus\":\"built\",\"deliveryStatusVersion\":1,\"changedAt\":\"2026-09-07T16:00:00.000Z\",\"changedById\":\"example\",\"source\":\"mcp\"},\"changed\":true,\"eventId\":\"example\"}}"
}
],
"structuredContent": {
"project": {
"id": "prj_fixture_checkout",
"workspaceId": "ws_fixture_primary",
"name": "Checkout reliability",
"reviewMode": "direct",
"createdAt": "example",
"delivery": {
"deliveryStatus": "built",
"deliveryStatusVersion": 1,
"changedAt": "2026-09-07T16:00:00.000Z",
"changedById": "example",
"source": "mcp"
}
},
"delivery": {
"projection": {
"deliveryStatus": "built",
"deliveryStatusVersion": 1,
"changedAt": "2026-09-07T16:00:00.000Z",
"changedById": "example",
"source": "mcp"
},
"changed": true,
"eventId": "example"
}
}
}- projectDeliveryStatus ← structuredContent.delivery.projection.deliveryStatus
Next permitted action: Use the returned projection and deliveryStatusVersion as the only committed delivery truth.
Complete raw result schema
{
"type": "object",
"properties": {
"project": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"workspaceId": {
"type": "string",
"description": "Workspace identifier that owns the record; it is resolved from authenticated Semel membership."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"reviewMode": {
"type": "string",
"enum": [
"direct",
"propose"
],
"description": "Project review interaction mode configured in Semel. Allowed values: \"direct\", \"propose\"."
},
"ownerId": {
"type": "string",
"description": "Accountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"workspaceId",
"name",
"reviewMode",
"createdAt"
],
"additionalProperties": false,
"description": "Project record returned by the operation."
},
"delivery": {
"type": "object",
"properties": {
"projection": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Authoritative delivery projection after the operation, including an exact no-op response."
},
"changed": {
"type": "boolean",
"description": "True when projection and audit event were committed; false for an exact event-free no-op."
},
"eventId": {
"type": [
"string",
"null"
],
"description": "Immutable delivery-status audit event identifier for a committed change; null for an exact no-op."
}
},
"required": [
"projection",
"changed",
"eventId"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state."
}
},
"required": [
"project",
"delivery"
],
"additionalProperties": false
}project_get
readRead a single project by id — its name, review mode, creator, and created-at. Use to inspect one project's details, for example after finding it with project_list.
- Mode
- read · low risk
- Scopes
- brief:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel show me the details of this project”“/semel what is the review mode for the checkout project?”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- project_list, project_rename
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project. Supply a non-empty identifier.
minimum length: 1
{
"projectId": "prj_fixture_checkout"
}{
"projectId": "{{projectId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project. Supply a non-empty identifier."
}
},
"required": [
"projectId"
],
"additionalProperties": false
}Structured result
projectobject · requiredCanonical project record returned after authorization and, for project_rename, after the durable name update succeeds.
project.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
project.workspaceIdstring · requiredWorkspace identifier that owns the record; it is resolved from authenticated Semel membership.
project.namestring · requiredHuman-readable name displayed in Semel.
project.reviewMode"direct" | "propose" · requiredProject review interaction mode configured in Semel. Allowed values: "direct", "propose".
project.ownerIdstring · optionalAccountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value.
project.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
project.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
project.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
project.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
project.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
project.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
project.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
{
"project": {
"id": "prj_fixture_checkout",
"workspaceId": "ws_fixture_primary",
"name": "Checkout reliability",
"reviewMode": "direct",
"createdAt": "2026-09-07T16:00:00.000Z"
}
}{
"content": [
{
"type": "text",
"text": "{\"project\":{\"id\":\"prj_fixture_checkout\",\"workspaceId\":\"ws_fixture_primary\",\"name\":\"Checkout reliability\",\"reviewMode\":\"direct\",\"createdAt\":\"2026-09-07T16:00:00.000Z\"}}"
}
],
"structuredContent": {
"project": {
"id": "prj_fixture_checkout",
"workspaceId": "ws_fixture_primary",
"name": "Checkout reliability",
"reviewMode": "direct",
"createdAt": "2026-09-07T16:00:00.000Z"
}
}
}- project ← structuredContent.project
Next permitted action: Confirm the resolved project details before mutation.
Complete raw result schema
{
"type": "object",
"properties": {
"project": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"workspaceId": {
"type": "string",
"description": "Workspace identifier that owns the record; it is resolved from authenticated Semel membership."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"reviewMode": {
"type": "string",
"enum": [
"direct",
"propose"
],
"description": "Project review interaction mode configured in Semel. Allowed values: \"direct\", \"propose\"."
},
"ownerId": {
"type": "string",
"description": "Accountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"workspaceId",
"name",
"reviewMode",
"createdAt"
],
"additionalProperties": false,
"description": "Canonical project record returned after authorization and, for project_rename, after the durable name update succeeds."
}
},
"required": [
"project"
],
"additionalProperties": false
}project_list
readList the projects this principal may reach (project-allowlist filtered), newest first. Use to confirm no considerably-overlapping project already exists before creating one.
- Mode
- read · low risk
- Scopes
- brief:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel list my projects”“/semel what projects do I have?”
- Related
- project_get, project_create
Arguments
{}{}Complete raw parameter schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Structured result
projectsarray · requiredProjects reachable by the authenticated principal, filtered by its project allowlist and ordered newest first. An empty array means none are reachable.
Array item · object
projects[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
projects[].workspaceIdstring · requiredWorkspace identifier that owns the record; it is resolved from authenticated Semel membership.
projects[].namestring · requiredHuman-readable name displayed in Semel.
projects[].reviewMode"direct" | "propose" · requiredProject review interaction mode configured in Semel. Allowed values: "direct", "propose".
projects[].ownerIdstring · optionalAccountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value.
projects[].deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
projects[].delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
projects[].delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
projects[].delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
projects[].delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
projects[].delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
projects[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
{
"projects": []
}{
"content": [
{
"type": "text",
"text": "{\"projects\":[]}"
}
],
"structuredContent": {
"projects": []
}
}- projects ← structuredContent.projects
Next permitted action: Confirm only expected projects are visible and retain human gates for mutations.
Complete raw result schema
{
"type": "object",
"properties": {
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"workspaceId": {
"type": "string",
"description": "Workspace identifier that owns the record; it is resolved from authenticated Semel membership."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"reviewMode": {
"type": "string",
"enum": [
"direct",
"propose"
],
"description": "Project review interaction mode configured in Semel. Allowed values: \"direct\", \"propose\"."
},
"ownerId": {
"type": "string",
"description": "Accountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"workspaceId",
"name",
"reviewMode",
"createdAt"
],
"additionalProperties": false
},
"description": "Projects reachable by the authenticated principal, filtered by its project allowlist and ordered newest first. An empty array means none are reachable."
}
},
"required": [
"projects"
],
"additionalProperties": false
}project_rename
write · idempotent (needs idempotencyKey)Rename a project (name only). Requires the accountable human to be the project creator or the workspace owner (the same guard as the portal). Use to correct or update a project's display name.
- Mode
- write · medium risk
- Scopes
- brief:read, brief:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel rename this project to Checkout v2”“/semel change the billing project name to Payments”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- project_get, project_list
Arguments
projectIdstring · requiredProject identifier returned by project_create or project_list; the accountable human must be the project creator or workspace owner.
minimum length: 1
namestring · requiredReplacement project display name after trimming, from 1 through 200 characters. A successful call durably renames the project.
minimum length: 1 · maximum length: 200
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"name": "Payments reliability",
"idempotencyKey": "recipe-project-rename-v1"
}{
"projectId": "{{projectId}}",
"name": "Payments reliability",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project identifier returned by project_create or project_list; the accountable human must be the project creator or workspace owner."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Replacement project display name after trimming, from 1 through 200 characters. A successful call durably renames the project."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"projectId",
"name",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
projectobject · requiredCanonical project record returned after authorization and, for project_rename, after the durable name update succeeds.
project.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
project.workspaceIdstring · requiredWorkspace identifier that owns the record; it is resolved from authenticated Semel membership.
project.namestring · requiredHuman-readable name displayed in Semel.
project.reviewMode"direct" | "propose" · requiredProject review interaction mode configured in Semel. Allowed values: "direct", "propose".
project.ownerIdstring · optionalAccountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value.
project.deliveryobject · optionalCurrent explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value.
project.delivery.deliveryStatusany of · requiredExplicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state.
any of
Branch 1
Branch 2
project.delivery.deliveryStatusVersioninteger · requiredMonotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write.
minimum: 0
project.delivery.changedAtany of · requiredRFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero.
any of
Branch 1
format: date-time
Branch 2
project.delivery.changedByIdstring | null · requiredAccountable user identifier for the latest committed delivery change; null while no change has been recorded.
project.delivery.sourceany of · requiredTrusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset.
any of
Branch 1
Branch 2
project.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
{
"project": {
"id": "prj_fixture_checkout",
"workspaceId": "ws_fixture_primary",
"name": "Payments reliability",
"reviewMode": "direct",
"createdAt": "2026-09-07T16:00:00.000Z"
}
}{
"content": [
{
"type": "text",
"text": "{\"project\":{\"id\":\"prj_fixture_checkout\",\"workspaceId\":\"ws_fixture_primary\",\"name\":\"Payments reliability\",\"reviewMode\":\"direct\",\"createdAt\":\"2026-09-07T16:00:00.000Z\"}}"
}
],
"structuredContent": {
"project": {
"id": "prj_fixture_checkout",
"workspaceId": "ws_fixture_primary",
"name": "Payments reliability",
"reviewMode": "direct",
"createdAt": "2026-09-07T16:00:00.000Z"
}
}
}- renamedProject ← structuredContent.project
Next permitted action: Keep the same project id after the rename.
Complete raw result schema
{
"type": "object",
"properties": {
"project": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"workspaceId": {
"type": "string",
"description": "Workspace identifier that owns the record; it is resolved from authenticated Semel membership."
},
"name": {
"type": "string",
"description": "Human-readable name displayed in Semel."
},
"reviewMode": {
"type": "string",
"enum": [
"direct",
"propose"
],
"description": "Project review interaction mode configured in Semel. Allowed values: \"direct\", \"propose\"."
},
"ownerId": {
"type": "string",
"description": "Accountable Semel user identifier recorded as the project owner. Omit the field when it does not apply; omission is distinct from an empty value."
},
"delivery": {
"type": "object",
"properties": {
"deliveryStatus": {
"anyOf": [
{
"type": "string",
"enum": [
"built",
"shipped",
"deployed"
]
},
{
"type": "null"
}
],
"description": "Explicit operator-asserted delivery state; null means it has not been marked and never implies review or approval state."
},
"deliveryStatusVersion": {
"type": "integer",
"minimum": 0,
"description": "Monotonic optimistic-concurrency version; copy this value into ifDeliveryStatusVersion for the next deliberate write."
},
"changedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "RFC 3339 time of the latest committed delivery change; null while delivery status remains unset at version zero."
},
"changedById": {
"type": [
"string",
"null"
],
"description": "Accountable user identifier for the latest committed delivery change; null while no change has been recorded."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"web",
"mcp"
]
},
{
"type": "null"
}
],
"description": "Trusted transport that committed the latest delivery change: web for a human request, MCP for an agent request, or null when unset."
}
},
"required": [
"deliveryStatus",
"deliveryStatusVersion",
"changedAt",
"changedById",
"source"
],
"additionalProperties": false,
"description": "Current explicit delivery-status projection; it is independent from brief review, approval, and contract-version state. Omit the field when it does not apply; omission is distinct from an empty value."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
}
},
"required": [
"id",
"workspaceId",
"name",
"reviewMode",
"createdAt"
],
"additionalProperties": false,
"description": "Canonical project record returned after authorization and, for project_rename, after the durable name update succeeds."
}
},
"required": [
"project"
],
"additionalProperties": false
}review_cancel
write · idempotent (needs idempotencyKey)Cancel a review the agent originated — directly for an inert pre-claim local-intent run, by requesting cancellation of an in-progress run (a live harness finishes it), or by finalizing a released local run now.
- Mode
- write · medium risk
- Scopes
- brief:read, review:run
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel cancel that review — I did not mean to start it”
- Errors
- RUN_ALREADY_TERMINALPROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- review_start, review_status, review_execution_release
Arguments
runIdstring · requiredReview-run identifier returned by a review start, status, or cascade handoff result. Minimum accepted length or value is 1.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"runId": "run_fixture_followup",
"idempotencyKey": "recipe-review-cancel-v1"
}{
"runId": "{{newRunId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"runId": {
"type": "string",
"minLength": 1,
"description": "Review-run identifier returned by a review start, status, or cascade handoff result. Minimum accepted length or value is 1."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"runId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
runIdstring · requiredReview-run identifier returned by a review start, status, or cascade handoff result.
outcome"cancelled" | "cancel_requested" · requiredTyped result of this operation; union branches define the follow-up action for each value. Allowed values: "cancelled", "cancel_requested".
status"queued" | "invoking" | "running" | "waiting_input" | "completed" | "failed" | "cancelled" | "needs_attention" | "suspended" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. Allowed values: "queued", "invoking", "running", "waiting_input", "completed", "failed", "cancelled", "needs_attention", "suspended".
claimedboolean · optionalWhether the external execution currently has an active claimed epoch. Omit the field when it does not apply; omission is distinct from an empty value.
finalizedboolean · optionalWhether this run has reached its terminal finalization step. Omit the field when it does not apply; omission is distinct from an empty value.
{
"runId": "run_fixture_followup",
"outcome": "cancel_requested",
"status": "queued"
}{
"content": [
{
"type": "text",
"text": "{\"runId\":\"run_fixture_followup\",\"outcome\":\"cancel_requested\",\"status\":\"queued\"}"
}
],
"structuredContent": {
"runId": "run_fixture_followup",
"outcome": "cancel_requested",
"status": "queued"
}
}- cancelOutcome ← structuredContent.outcome
Next permitted action: Stop local work and follow the authoritative returned status.
Complete raw result schema
{
"type": "object",
"properties": {
"runId": {
"type": "string",
"description": "Review-run identifier returned by a review start, status, or cascade handoff result."
},
"outcome": {
"type": "string",
"enum": [
"cancelled",
"cancel_requested"
],
"description": "Typed result of this operation; union branches define the follow-up action for each value. Allowed values: \"cancelled\", \"cancel_requested\"."
},
"status": {
"type": "string",
"enum": [
"queued",
"invoking",
"running",
"waiting_input",
"completed",
"failed",
"cancelled",
"needs_attention",
"suspended"
],
"description": "Current typed status; the schema enum or union branch lists every allowed value. Allowed values: \"queued\", \"invoking\", \"running\", \"waiting_input\", \"completed\", \"failed\", \"cancelled\", \"needs_attention\", \"suspended\"."
},
"claimed": {
"type": "boolean",
"description": "Whether the external execution currently has an active claimed epoch. Omit the field when it does not apply; omission is distinct from an empty value."
},
"finalized": {
"type": "boolean",
"description": "Whether this run has reached its terminal finalization step. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"runId",
"outcome",
"status"
],
"additionalProperties": false
}review_config_get
readInspect the configured reviewers before editing or starting a cascade.
- Mode
- read · low risk
- Scopes
- brief:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel show this project’s reviewers”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- review_config_get, review_start
Arguments
projectIdstring · requiredProject whose review cascade is being inspected or configured.
minimum length: 1
phase"pre_build" | "staging" | "post_deploy" · requiredCascade phase to inspect or configure: pre_build, staging, or post_deploy.
{
"projectId": "prj_fixture_checkout",
"phase": "pre_build"
}{
"projectId": "{{projectId}}",
"phase": "pre_build"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project whose review cascade is being inspected or configured."
},
"phase": {
"type": "string",
"enum": [
"pre_build",
"staging",
"post_deploy"
],
"description": "Cascade phase to inspect or configure: pre_build, staging, or post_deploy."
}
},
"required": [
"projectId",
"phase"
],
"additionalProperties": false
}Structured result
phase"pre_build" | "staging" | "post_deploy" · requiredCascade phase to inspect or configure: pre_build, staging, or post_deploy.
stepsarray · requiredAll configured steps in this phase, sorted by their execution position.
Array item · object
steps[].idstring · requiredStable identifier of this cascade step or human review assignment.
steps[].projectIdstring · requiredProject whose review cascade is being inspected or configured.
steps[].phase"pre_build" | "staging" | "post_deploy" · requiredCascade phase to inspect or configure: pre_build, staging, or post_deploy.
steps[].positioninteger · requiredZero-based position used to order the steps within this phase.
steps[].kind"ai" | "human" · requiredStep execution kind: an AI reviewer or a human approval gate.
steps[].configany of · optionalExecutable reviewer settings or identity-bound human approval settings for this step.
any of
Branch 1
Branch 2
steps[].status"pending" | "active" | "done" | "skipped" · requiredCurrent lifecycle status of the cascade step or human review assignment.
steps[].createdAtstring · requiredTimestamp when this cascade configuration step was created.
steps[].updatedAtstring · requiredTimestamp of the most recent change to this cascade step.
watchersarray · optionalProject-level document watchers; these people do not participate as cascade steps.
default: []
Array item · object
watchers[].idstring · requiredStable identifier of this cascade step or human review assignment.
watchers[].assigneeEmailstring · requiredEmail address of the human assigned to this review or approval.
format: email
watchers[].assigneeUserIdstring | null · requiredWorkspace user assigned to this human review, or null when an invitation is pending.
watchers[].status"pending" | "assigned" | "completed" | "revoked" · requiredCurrent lifecycle status of the cascade step or human review assignment.
watchers[].inviteIdstring | null · requiredActive invitation identifier for a pending human reviewer, when one exists.
watchers[].inviteSentAtstring | null · requiredTimestamp of the most recent send for the active invitation, or null if not sent.
anyRunActiveboolean · requiredWhether any phase of this project has a nonterminal review run; MCP writes refuse while true.
{
"phase": "pre_build",
"steps": [
{
"id": "cst_fixture_product",
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"position": 0,
"kind": "ai",
"status": "pending",
"createdAt": "example",
"updatedAt": "example",
"config": {
"reviewers": [
"product"
]
}
}
],
"anyRunActive": false
}{
"content": [
{
"type": "text",
"text": "{\"phase\":\"pre_build\",\"steps\":[{\"id\":\"cst_fixture_product\",\"projectId\":\"prj_fixture_checkout\",\"phase\":\"pre_build\",\"position\":0,\"kind\":\"ai\",\"status\":\"pending\",\"createdAt\":\"example\",\"updatedAt\":\"example\",\"config\":{\"reviewers\":[\"product\"]}}],\"anyRunActive\":false}"
}
],
"structuredContent": {
"phase": "pre_build",
"steps": [
{
"id": "cst_fixture_product",
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"position": 0,
"kind": "ai",
"status": "pending",
"createdAt": "example",
"updatedAt": "example",
"config": {
"reviewers": [
"product"
]
}
}
],
"anyRunActive": false
}
}- existingConfigStepId ← structuredContent.steps[0].id
Next permitted action: Use the returned step IDs. Preserve all returned IDs when reordering a larger cascade.
Complete raw result schema
{
"type": "object",
"properties": {
"phase": {
"type": "string",
"enum": [
"pre_build",
"staging",
"post_deploy"
],
"description": "Cascade phase to inspect or configure: pre_build, staging, or post_deploy."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier of this cascade step or human review assignment."
},
"projectId": {
"type": "string",
"description": "Project whose review cascade is being inspected or configured."
},
"phase": {
"type": "string",
"enum": [
"pre_build",
"staging",
"post_deploy"
],
"description": "Cascade phase to inspect or configure: pre_build, staging, or post_deploy."
},
"position": {
"type": "integer",
"description": "Zero-based position used to order the steps within this phase."
},
"kind": {
"type": "string",
"enum": [
"ai",
"human"
],
"description": "Step execution kind: an AI reviewer or a human approval gate."
},
"config": {
"anyOf": [
{},
{
"type": "null"
}
],
"description": "Executable reviewer settings or identity-bound human approval settings for this step."
},
"status": {
"type": "string",
"enum": [
"pending",
"active",
"done",
"skipped"
],
"description": "Current lifecycle status of the cascade step or human review assignment."
},
"createdAt": {
"type": "string",
"description": "Timestamp when this cascade configuration step was created."
},
"updatedAt": {
"type": "string",
"description": "Timestamp of the most recent change to this cascade step."
}
},
"required": [
"id",
"projectId",
"phase",
"position",
"kind",
"status",
"createdAt",
"updatedAt"
],
"additionalProperties": false
},
"description": "All configured steps in this phase, sorted by their execution position."
},
"watchers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier of this cascade step or human review assignment."
},
"assigneeEmail": {
"type": "string",
"format": "email",
"description": "Email address of the human assigned to this review or approval."
},
"assigneeUserId": {
"type": [
"string",
"null"
],
"description": "Workspace user assigned to this human review, or null when an invitation is pending."
},
"status": {
"type": "string",
"enum": [
"pending",
"assigned",
"completed",
"revoked"
],
"description": "Current lifecycle status of the cascade step or human review assignment."
},
"inviteId": {
"type": [
"string",
"null"
],
"description": "Active invitation identifier for a pending human reviewer, when one exists."
},
"inviteSentAt": {
"type": [
"string",
"null"
],
"description": "Timestamp of the most recent send for the active invitation, or null if not sent."
}
},
"required": [
"id",
"assigneeEmail",
"assigneeUserId",
"status",
"inviteId",
"inviteSentAt"
],
"additionalProperties": false
},
"default": [],
"description": "Project-level document watchers; these people do not participate as cascade steps."
},
"anyRunActive": {
"type": "boolean",
"description": "Whether any phase of this project has a nonterminal review run; MCP writes refuse while true."
}
},
"required": [
"phase",
"steps",
"anyRunActive"
],
"additionalProperties": false
}review_config_reorder
write · idempotent (needs idempotencyKey)Set the reviewer order while the project cascade is idle; include every step ID exactly once.
- Mode
- write · medium risk
- Scopes
- brief:read, review:configure
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel put Security before Engineering”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- review_config_get, review_start
Arguments
phase"pre_build" | "staging" | "post_deploy" · requiredCascade phase to inspect or configure: pre_build, staging, or post_deploy.
stepIdsarray · requiredEvery current step ID in the phase exactly once, in the desired execution order.
minimum items: 1
Array item · string
projectIdstring · requiredProject whose review cascade is being inspected or configured.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"stepIds": [
"cst_fixture_security",
"cst_fixture_product"
],
"idempotencyKey": "recipe-configuration-reorder-v1"
}{
"projectId": "{{projectId}}",
"phase": "pre_build",
"stepIds": [
"{{addedConfigStepId}}",
"{{existingConfigStepId}}"
],
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"phase": {
"type": "string",
"enum": [
"pre_build",
"staging",
"post_deploy"
],
"description": "Cascade phase to inspect or configure: pre_build, staging, or post_deploy."
},
"stepIds": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Every current step ID in the phase exactly once, in the desired execution order."
},
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project whose review cascade is being inspected or configured."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"phase",
"stepIds",
"projectId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
phase"pre_build" | "staging" | "post_deploy" · requiredCascade phase to inspect or configure: pre_build, staging, or post_deploy.
stepsarray · requiredAll configured steps in this phase, sorted by their execution position.
Array item · object
steps[].idstring · requiredStable identifier of this cascade step or human review assignment.
steps[].projectIdstring · requiredProject whose review cascade is being inspected or configured.
steps[].phase"pre_build" | "staging" | "post_deploy" · requiredCascade phase to inspect or configure: pre_build, staging, or post_deploy.
steps[].positioninteger · requiredZero-based position used to order the steps within this phase.
steps[].kind"ai" | "human" · requiredStep execution kind: an AI reviewer or a human approval gate.
steps[].configany of · optionalExecutable reviewer settings or identity-bound human approval settings for this step.
any of
Branch 1
Branch 2
steps[].status"pending" | "active" | "done" | "skipped" · requiredCurrent lifecycle status of the cascade step or human review assignment.
steps[].createdAtstring · requiredTimestamp when this cascade configuration step was created.
steps[].updatedAtstring · requiredTimestamp of the most recent change to this cascade step.
{
"phase": "pre_build",
"steps": [
{
"id": "cst_fixture_security",
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"position": 0,
"kind": "ai",
"status": "pending",
"createdAt": "example",
"updatedAt": "example",
"config": {
"reviewers": [
"security"
]
}
},
{
"id": "cst_fixture_product",
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"position": 1,
"kind": "ai",
"status": "pending",
"createdAt": "example",
"updatedAt": "example",
"config": {
"reviewers": [
"product"
]
}
}
]
}{
"content": [
{
"type": "text",
"text": "{\"phase\":\"pre_build\",\"steps\":[{\"id\":\"cst_fixture_security\",\"projectId\":\"prj_fixture_checkout\",\"phase\":\"pre_build\",\"position\":0,\"kind\":\"ai\",\"status\":\"pending\",\"createdAt\":\"example\",\"updatedAt\":\"example\",\"config\":{\"reviewers\":[\"security\"]}},{\"id\":\"cst_fixture_product\",\"projectId\":\"prj_fixture_checkout\",\"phase\":\"pre_build\",\"position\":1,\"kind\":\"ai\",\"status\":\"pending\",\"createdAt\":\"example\",\"updatedAt\":\"example\",\"config\":{\"reviewers\":[\"product\"]}}]}"
}
],
"structuredContent": {
"phase": "pre_build",
"steps": [
{
"id": "cst_fixture_security",
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"position": 0,
"kind": "ai",
"status": "pending",
"createdAt": "example",
"updatedAt": "example",
"config": {
"reviewers": [
"security"
]
}
},
{
"id": "cst_fixture_product",
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"position": 1,
"kind": "ai",
"status": "pending",
"createdAt": "example",
"updatedAt": "example",
"config": {
"reviewers": [
"product"
]
}
}
]
}
}- addedConfigStepId ← structuredContent.steps[0].id
Next permitted action: Verify the returned order. A later requested removal uses its exact returned step ID.
Complete raw result schema
{
"type": "object",
"properties": {
"phase": {
"type": "string",
"enum": [
"pre_build",
"staging",
"post_deploy"
],
"description": "Cascade phase to inspect or configure: pre_build, staging, or post_deploy."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier of this cascade step or human review assignment."
},
"projectId": {
"type": "string",
"description": "Project whose review cascade is being inspected or configured."
},
"phase": {
"type": "string",
"enum": [
"pre_build",
"staging",
"post_deploy"
],
"description": "Cascade phase to inspect or configure: pre_build, staging, or post_deploy."
},
"position": {
"type": "integer",
"description": "Zero-based position used to order the steps within this phase."
},
"kind": {
"type": "string",
"enum": [
"ai",
"human"
],
"description": "Step execution kind: an AI reviewer or a human approval gate."
},
"config": {
"anyOf": [
{},
{
"type": "null"
}
],
"description": "Executable reviewer settings or identity-bound human approval settings for this step."
},
"status": {
"type": "string",
"enum": [
"pending",
"active",
"done",
"skipped"
],
"description": "Current lifecycle status of the cascade step or human review assignment."
},
"createdAt": {
"type": "string",
"description": "Timestamp when this cascade configuration step was created."
},
"updatedAt": {
"type": "string",
"description": "Timestamp of the most recent change to this cascade step."
}
},
"required": [
"id",
"projectId",
"phase",
"position",
"kind",
"status",
"createdAt",
"updatedAt"
],
"additionalProperties": false
},
"description": "All configured steps in this phase, sorted by their execution position."
}
},
"required": [
"phase",
"steps"
],
"additionalProperties": false
}review_config_step_add
write · idempotent (needs idempotencyKey)Append a reviewer while the project cascade is idle, with the same owner or creator permission as the portal.
- Mode
- write · medium risk
- Scopes
- brief:read, review:configure
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel add an Engineering reviewer”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- review_config_get, review_start
Arguments
phase"pre_build" | "staging" | "post_deploy" · requiredCascade phase to inspect or configure: pre_build, staging, or post_deploy.
kind"ai" | "human" · requiredStep execution kind: an AI reviewer or a human approval gate.
configany of · requiredSettings for the selected step kind; AI steps require exactly one reviewer role.
any of
Branch 1
config.reviewersarray · requiredExactly one vendor reviewer role for this AI step, such as product or security.
minimum items: 1 · maximum items: 1
Array item · "product" | "engineering" | "design" | "security" | "test"
config.provider"anthropic" | "openai" · optionalOptional model provider; it must match the provider of the selected exact model.
config.modelstring · optionalOptional exact executable model ID from the reviewer model catalog.
config.reasoning"none" | "low" | "medium" | "high" | "xhigh" | "max" · optionalOptional reasoning level supported by the selected exact model.
Branch 2
any of
Branch 1
config.assignmentIdstring · optionalIdentity-bound human review assignment; the server binds newly added gates to the caller.
minimum length: 1
config.assigneeUserIdstring · optionalWorkspace user assigned to this human review, or null when an invitation is pending.
minimum length: 1
config.inviteIdstring · optionalActive invitation identifier for a pending human reviewer, when one exists.
minimum length: 1
config.assigneeEmailstring · optionalEmail address of the human assigned to this review or approval.
format: email
config.duty"reviewer" | "approver" · optionalHuman participation role: reviewer watches the document; approver owns an approval gate.
config.approverNamestring · optionalOptional legacy display name for the human approval gate.
minimum length: 1 · maximum length: 200
config.approverRolestring · optionalOptional legacy description of the human approver’s role.
minimum length: 1 · maximum length: 200
Branch 2
projectIdstring · requiredProject whose review cascade is being inspected or configured.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"kind": "ai",
"config": {
"reviewers": [
"security"
]
},
"idempotencyKey": "recipe-configuration-add-v1"
}{
"projectId": "{{projectId}}",
"phase": "pre_build",
"kind": "ai",
"config": {
"reviewers": [
"security"
]
},
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"phase": {
"type": "string",
"enum": [
"pre_build",
"staging",
"post_deploy"
],
"description": "Cascade phase to inspect or configure: pre_build, staging, or post_deploy."
},
"kind": {
"type": "string",
"enum": [
"ai",
"human"
],
"description": "Step execution kind: an AI reviewer or a human approval gate."
},
"config": {
"anyOf": [
{
"type": "object",
"properties": {
"reviewers": {
"type": "array",
"items": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
"minItems": 1,
"maxItems": 1,
"description": "Exactly one vendor reviewer role for this AI step, such as product or security."
},
"provider": {
"type": "string",
"enum": [
"anthropic",
"openai"
],
"description": "Optional model provider; it must match the provider of the selected exact model."
},
"model": {
"type": "string",
"description": "Optional exact executable model ID from the reviewer model catalog."
},
"reasoning": {
"type": "string",
"enum": [
"none",
"low",
"medium",
"high",
"xhigh",
"max"
],
"description": "Optional reasoning level supported by the selected exact model."
}
},
"required": [
"reviewers"
],
"additionalProperties": false
},
{
"anyOf": [
{
"type": "object",
"properties": {
"assignmentId": {
"type": "string",
"minLength": 1,
"description": "Identity-bound human review assignment; the server binds newly added gates to the caller."
},
"assigneeUserId": {
"type": "string",
"minLength": 1,
"description": "Workspace user assigned to this human review, or null when an invitation is pending."
},
"inviteId": {
"type": "string",
"minLength": 1,
"description": "Active invitation identifier for a pending human reviewer, when one exists."
},
"assigneeEmail": {
"type": "string",
"format": "email",
"description": "Email address of the human assigned to this review or approval."
},
"duty": {
"type": "string",
"enum": [
"reviewer",
"approver"
],
"description": "Human participation role: reviewer watches the document; approver owns an approval gate."
},
"approverName": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional legacy display name for the human approval gate."
},
"approverRole": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional legacy description of the human approver’s role."
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
],
"description": "Settings for the selected step kind; AI steps require exactly one reviewer role."
},
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project whose review cascade is being inspected or configured."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"phase",
"kind",
"config",
"projectId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
stepobject · requiredThe persisted cascade step after the requested configuration change.
step.idstring · requiredStable identifier of this cascade step or human review assignment.
step.projectIdstring · requiredProject whose review cascade is being inspected or configured.
step.phase"pre_build" | "staging" | "post_deploy" · requiredCascade phase to inspect or configure: pre_build, staging, or post_deploy.
step.positioninteger · requiredZero-based position used to order the steps within this phase.
step.kind"ai" | "human" · requiredStep execution kind: an AI reviewer or a human approval gate.
step.configany of · optionalExecutable reviewer settings or identity-bound human approval settings for this step.
any of
Branch 1
Branch 2
step.status"pending" | "active" | "done" | "skipped" · requiredCurrent lifecycle status of the cascade step or human review assignment.
step.createdAtstring · requiredTimestamp when this cascade configuration step was created.
step.updatedAtstring · requiredTimestamp of the most recent change to this cascade step.
{
"step": {
"id": "cst_fixture_security",
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"position": 1,
"kind": "ai",
"status": "pending",
"createdAt": "example",
"updatedAt": "example",
"config": {
"reviewers": [
"security"
]
}
}
}{
"content": [
{
"type": "text",
"text": "{\"step\":{\"id\":\"cst_fixture_security\",\"projectId\":\"prj_fixture_checkout\",\"phase\":\"pre_build\",\"position\":1,\"kind\":\"ai\",\"status\":\"pending\",\"createdAt\":\"example\",\"updatedAt\":\"example\",\"config\":{\"reviewers\":[\"security\"]}}}"
}
],
"structuredContent": {
"step": {
"id": "cst_fixture_security",
"projectId": "prj_fixture_checkout",
"phase": "pre_build",
"position": 1,
"kind": "ai",
"status": "pending",
"createdAt": "example",
"updatedAt": "example",
"config": {
"reviewers": [
"security"
]
}
}
}
}- addedConfigStepId ← structuredContent.step.id
Next permitted action: Carry the added step ID into the requested reorder.
Complete raw result schema
{
"type": "object",
"properties": {
"step": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier of this cascade step or human review assignment."
},
"projectId": {
"type": "string",
"description": "Project whose review cascade is being inspected or configured."
},
"phase": {
"type": "string",
"enum": [
"pre_build",
"staging",
"post_deploy"
],
"description": "Cascade phase to inspect or configure: pre_build, staging, or post_deploy."
},
"position": {
"type": "integer",
"description": "Zero-based position used to order the steps within this phase."
},
"kind": {
"type": "string",
"enum": [
"ai",
"human"
],
"description": "Step execution kind: an AI reviewer or a human approval gate."
},
"config": {
"anyOf": [
{},
{
"type": "null"
}
],
"description": "Executable reviewer settings or identity-bound human approval settings for this step."
},
"status": {
"type": "string",
"enum": [
"pending",
"active",
"done",
"skipped"
],
"description": "Current lifecycle status of the cascade step or human review assignment."
},
"createdAt": {
"type": "string",
"description": "Timestamp when this cascade configuration step was created."
},
"updatedAt": {
"type": "string",
"description": "Timestamp of the most recent change to this cascade step."
}
},
"required": [
"id",
"projectId",
"phase",
"position",
"kind",
"status",
"createdAt",
"updatedAt"
],
"additionalProperties": false,
"description": "The persisted cascade step after the requested configuration change."
}
},
"required": [
"step"
],
"additionalProperties": false
}review_config_step_remove
write · idempotent (needs idempotencyKey)Remove an untouched pending or skipped reviewer while the project cascade is idle. Steps with run history cannot be removed.
- Mode
- write · medium risk
- Scopes
- brief:read, review:configure
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel remove the Design and Test reviewers”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- review_config_get, review_start
Arguments
projectIdstring · requiredProject whose review cascade is being inspected or configured.
minimum length: 1
stepIdstring · requiredIdentifier of the cascade step to remove, obtained from review_config_get.
minimum length: 1
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"projectId": "prj_fixture_checkout",
"stepId": "cst_fixture_security",
"idempotencyKey": "recipe-configuration-remove-v1"
}{
"projectId": "{{projectId}}",
"stepId": "{{addedConfigStepId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"description": "Project whose review cascade is being inspected or configured."
},
"stepId": {
"type": "string",
"minLength": 1,
"description": "Identifier of the cascade step to remove, obtained from review_config_get."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"projectId",
"stepId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
deletedtrue · requiredTrue only after the untouched cascade step has been removed successfully.
stepIdstring · requiredIdentifier of the cascade step to remove, obtained from review_config_get.
{
"deleted": true,
"stepId": "cst_fixture_security"
}{
"content": [
{
"type": "text",
"text": "{\"deleted\":true,\"stepId\":\"cst_fixture_security\"}"
}
],
"structuredContent": {
"deleted": true,
"stepId": "cst_fixture_security"
}
}- addedConfigStepId ← structuredContent.stepId
Next permitted action: Read review_config_get again to confirm the final cascade before starting it.
Complete raw result schema
{
"type": "object",
"properties": {
"deleted": {
"type": "boolean",
"const": true,
"description": "True only after the untouched cascade step has been removed successfully."
},
"stepId": {
"type": "string",
"description": "Identifier of the cascade step to remove, obtained from review_config_get."
}
},
"required": [
"deleted",
"stepId"
],
"additionalProperties": false
}review_execution_checkpoint_append
write · idempotent (needs idempotencyKey)Append one bounded semantic checkpoint milestone to the current fenced epoch.
- Mode
- write · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “report skill_start progress for the active reviewer skill”
- Errors
- STALE_FENCESEQUENCE_GAPCONFLICTING_IDEMPOTENCY_REPLAYPAYLOAD_REJECTEDVALIDATION_FAILEDEVIDENCE_BINDING_UNKNOWN_REPOSITORYCANCELLED
- Related
- review_execution_sync, review_execution_status
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer.
seqinteger · requiredPositive checkpoint event sequence within the current fence generation. Minimum accepted length or value is 0. The value must be an integer.
activeSkillIdstring · optionalPinned active-skill identifier for this checkpoint; omit only before the first skill activation. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
milestoneNamestring · requiredShort caller-chosen name for the completed execution milestone represented by this checkpoint. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
safeSummarystring · optionalShort progress summary safe for durable storage and display; never include secrets, reasoning, or raw source. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 8192.
maximum length: 8192
receiptobject · optionalOptional structured progress receipt; forbidden reasoning, raw-tool-output, prompt, and source fields are rejected recursively. Omit the field when it does not apply; omission is distinct from an empty value.
Map values · any JSON value
clientObservedAtstring · optionalOptional RFC 3339 client timestamp for display only; server sequence controls ordering. Omit the field when it does not apply; omission is distinct from an empty value. Use an RFC 3339 date-time string.
format: date-time
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"seq": 7,
"activeSkillId": "engineering",
"milestoneName": "question_wait_exit",
"safeSummary": "The owner answer was accepted and dependent work may resume.",
"receipt": {
"questionId": "q_fixture_database",
"answerAccepted": true
},
"clientObservedAt": "2026-09-07T16:00:00.000Z",
"idempotencyKey": "recipe-question-checkpoint-wait-exit-v1"
}{
"executionId": "{{executionId}}",
"fenceGeneration": 1,
"seq": 7,
"activeSkillId": "engineering",
"milestoneName": "question_wait_exit",
"safeSummary": "The owner answer was accepted and dependent work may resume.",
"receipt": {
"questionId": "{{questionId}}",
"answerAccepted": true
},
"clientObservedAt": "2026-09-07T16:00:00.000Z",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer."
},
"seq": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Positive checkpoint event sequence within the current fence generation. Minimum accepted length or value is 0. The value must be an integer."
},
"activeSkillId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Pinned active-skill identifier for this checkpoint; omit only before the first skill activation. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"milestoneName": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Short caller-chosen name for the completed execution milestone represented by this checkpoint. Accepted length or value is 1 through 200, inclusive."
},
"safeSummary": {
"type": "string",
"maxLength": 8192,
"description": "Short progress summary safe for durable storage and display; never include secrets, reasoning, or raw source. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 8192."
},
"receipt": {
"type": "object",
"additionalProperties": {},
"description": "Optional structured progress receipt; forbidden reasoning, raw-tool-output, prompt, and source fields are rejected recursively. Omit the field when it does not apply; omission is distinct from an empty value."
},
"clientObservedAt": {
"type": "string",
"format": "date-time",
"description": "Optional RFC 3339 client timestamp for display only; server sequence controls ordering. Omit the field when it does not apply; omission is distinct from an empty value. Use an RFC 3339 date-time string."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"executionId",
"fenceGeneration",
"seq",
"milestoneName",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
acceptedtrue · requiredConfirms that the checkpoint or answer was durably accepted. This branch always uses true.
seqinteger · requiredPositive checkpoint event sequence within the current fence generation. The value must be an integer.
highWaterMarkinteger · requiredHighest checkpoint sequence durably accepted after this append. The value must be an integer.
suggestedNextPollAtstring · requiredRFC 3339 timestamp for the next recommended sync or status poll.
coalesceboolean · requiredWhether Semel recommends coalescing further nonterminal updates for the same stage.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"accepted": true,
"seq": 7,
"highWaterMark": 7,
"suggestedNextPollAt": "2026-09-07T16:05:00.000Z",
"coalesce": false,
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 7,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"accepted\":true,\"seq\":7,\"highWaterMark\":7,\"suggestedNextPollAt\":\"2026-09-07T16:05:00.000Z\",\"coalesce\":false,\"controlBlock\":{\"state\":{\"sessionState\":\"running\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_checkpoint_append\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_question_open\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_submit\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_sync\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":7,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"accepted": true,
"seq": 7,
"highWaterMark": 7,
"suggestedNextPollAt": "2026-09-07T16:05:00.000Z",
"coalesce": false,
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 7,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- checkpoint7HighWaterMark ← structuredContent.highWaterMark
Next permitted action: Resume work from the accepted answer or follow an operator correction.
Complete raw result schema
{
"type": "object",
"properties": {
"accepted": {
"type": "boolean",
"const": true,
"description": "Confirms that the checkpoint or answer was durably accepted. This branch always uses true."
},
"seq": {
"type": "integer",
"description": "Positive checkpoint event sequence within the current fence generation. The value must be an integer."
},
"highWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted after this append. The value must be an integer."
},
"suggestedNextPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended sync or status poll."
},
"coalesce": {
"type": "boolean",
"description": "Whether Semel recommends coalescing further nonterminal updates for the same stage."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"accepted",
"seq",
"highWaterMark",
"suggestedNextPollAt",
"coalesce",
"controlBlock"
],
"additionalProperties": false
}review_execution_claim
write · idempotent (needs idempotencyKey)Claim a review session for external execution, pinning the frozen canonical bundle.
- Mode
- write · medium risk
- Scopes
- brief:read, review:execute
- Confirmation
- implicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel continue the session I paused”
- Errors
- GRANT_EXPIREDPROTOCOL_VERSION_UNSUPPORTEDCAPABILITY_UNSUPPORTEDSTALE_FENCECANCELLEDPROJECT_ACCESS_DENIED
- Related
- review_execution_grant_request, review_execution_status
Arguments
grantIdstring · requiredExecution-grant identifier returned when the human approval boundary is satisfied. Minimum accepted length or value is 1.
minimum length: 1
reviewSessionIdstring · requiredReview-session identifier returned by review_start, review_new_pass, or execution status. Minimum accepted length or value is 1.
minimum length: 1
supportedProtocolVersionsarray · requiredProtocol versions the harness can execute, ordered by its preference. An empty array explicitly means no matching items.
minimum items: 1
Array item · string
minimum length: 1
harnessDescriptorobject · requiredSelf-declared harness, agent, model, and supported-protocol metadata recorded on the execution claim for compatibility and audit.
harnessDescriptor.harnessstring · requiredHarness product name declared by the caller; Semel does not independently verify it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
harnessDescriptor.harnessVersionstring · optionalOptional harness version declared by the caller. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
harnessDescriptor.agentstring · optionalOptional agent product name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
harnessDescriptor.agentVersionstring · optionalOptional agent version declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
harnessDescriptor.modelstring · optionalOptional model name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
harnessDescriptor.modelProviderstring · optionalOptional model provider declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"grantId": "xgr_fixture_engineering",
"reviewSessionId": "rs_fixture_engineering",
"supportedProtocolVersions": [
"1.1"
],
"harnessDescriptor": {
"harness": "codex",
"harnessVersion": "1",
"agent": "codex",
"model": "gpt-5"
},
"idempotencyKey": "recipe-execution-claim-v1"
}{
"grantId": "{{grantId}}",
"reviewSessionId": "{{reviewSessionId}}",
"supportedProtocolVersions": [
"{{protocolVersion}}"
],
"harnessDescriptor": {
"harness": "codex",
"harnessVersion": "1",
"agent": "codex",
"model": "gpt-5"
},
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"grantId": {
"type": "string",
"minLength": 1,
"description": "Execution-grant identifier returned when the human approval boundary is satisfied. Minimum accepted length or value is 1."
},
"reviewSessionId": {
"type": "string",
"minLength": 1,
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. Minimum accepted length or value is 1."
},
"supportedProtocolVersions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"description": "Protocol versions the harness can execute, ordered by its preference. An empty array explicitly means no matching items."
},
"harnessDescriptor": {
"type": "object",
"properties": {
"harness": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Harness product name declared by the caller; Semel does not independently verify it. Accepted length or value is 1 through 200, inclusive."
},
"harnessVersion": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional harness version declared by the caller. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
},
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional agent product name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"agentVersion": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional agent version declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"modelProvider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional model provider declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"harness"
],
"additionalProperties": false,
"description": "Self-declared harness, agent, model, and supported-protocol metadata recorded on the execution claim for compatibility and audit."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"grantId",
"reviewSessionId",
"supportedProtocolVersions",
"harnessDescriptor",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
any of
Branch 1
bundleobject · requiredFrozen canonical execution bundle returned at claim time.
bundle.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
bundle.instructionsstring · requiredPinned executable runbook instructions for this external execution.
bundle.schemaHashesobject · requiredMap from frozen schema name to its SHA-256 identity.
Map values · string
bundle.sessionobject · requiredFrozen review-session and run identity plus reviewer position for the claimed external execution.
bundle.session.reviewSessionIdstring · requiredReview-session identifier returned by review_start, review_new_pass, or execution status.
bundle.session.runIdstring · requiredReview-run identifier returned by a review start, status, or cascade handoff result.
bundle.session.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
bundle.session.briefIdstring · requiredBrief identifier returned by brief_create or brief_list; it determines the project authorization boundary.
bundle.session.reviewModestring · requiredProject review interaction mode configured in Semel.
bundle.session.reviewerSetarray · requiredOrdered reviewer roles configured for this cascade. An empty array explicitly means no matching items.
Array item · string
bundle.session.cascadeStepIdstring | null · requiredIdentifier of the configured reviewer-cascade step associated with this run. A null value explicitly means no current value is available.
bundle.briefBaseobject · requiredFrozen brief identity, version, and content snapshot against which this external execution must produce its result.
bundle.briefBase.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
bundle.briefBase.versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
bundle.briefBase.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
bundle.skillsarray · requiredOrdered pinned reviewer-skill manifests required for this execution; fetch each artifact by its returned identifiers before use. An empty array explicitly means no matching items.
Array item · object
bundle.skills[].rolestring · requiredPinned reviewer or artifact role used by the execution bundle. Minimum accepted length or value is 1.
minimum length: 1
bundle.skills[].versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 1.
minimum length: 1
bundle.skills[].sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes. Minimum accepted length or value is 1.
minimum length: 1
bundle.skills[].framingHashstring · optionalSHA-256 identity of the shared framing artifact; null or omission means none is pinned. Omit the field when it does not apply; omission is distinct from an empty value.
bundle.evidencePolicyobject · requiredFrozen evidence policy map for this execution bundle; keys are versioned by the bundle contract.
Map values · any JSON value
bundle.requiredCheckpointsarray · requiredMilestone names that must be checkpointed before final submission. An empty array explicitly means no matching items.
Array item · string
bundle.limitsobject · requiredServer-issued byte, count, timeout, and polling limits that the external harness must obey for this execution.
bundle.limits.checkpointMaxBytesinteger · requiredMaximum serialized checkpoint receipt size in bytes. The value must be an integer.
bundle.limits.summaryMaxBytesinteger · requiredMaximum safe progress-summary size in UTF-8 bytes. The value must be an integer.
bundle.limits.sessionEventBudgetBytesinteger · requiredMaximum total persisted external-event payload for one session, in bytes. The value must be an integer.
bundle.limits.evidenceItemsPerCallinteger · optionalMaximum local-evidence items accepted by one review_execution_evidence_register call. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
bundle.limits.evidenceItemsPerEpochinteger · optionalMaximum cumulative local-evidence items accepted for the current execution epoch. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
canonicalBundleSha256string · requiredLowercase hexadecimal SHA-256 digest of the frozen canonical execution bundle.
envelopeobject · requiredPer-claim execution identity, fence, lease, and harness-attestation fields excluded from the bundle hash.
envelope.executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup.
envelope.fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. The value must be an integer.
envelope.leaseExpiresAtstring · requiredRFC 3339 lease expiration timestamp; null means no active lease exists.
envelope.heartbeatRecommendedSecondsinteger · requiredRecommended maximum interval between heartbeats, in seconds. The value must be an integer.
envelope.harnessDescriptorobject · requiredSelf-declared harness, agent, model, and supported-protocol metadata recorded on the execution claim for compatibility and audit.
envelope.harnessDescriptor.harnessstring · requiredHarness product name declared by the caller; Semel does not independently verify it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
envelope.harnessDescriptor.harnessVersionstring · optionalOptional harness version declared by the caller. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
envelope.harnessDescriptor.agentstring · optionalOptional agent product name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
envelope.harnessDescriptor.agentVersionstring · optionalOptional agent version declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
envelope.harnessDescriptor.modelstring · optionalOptional model name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
envelope.harnessDescriptor.modelProviderstring · optionalOptional model provider declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
activeSkillany of · requiredCurrently active pinned skill role and cursor; null means activation has not begun. A null value explicitly means no current value is available.
any of
Branch 1
activeSkill.rolestring · requiredPinned reviewer or artifact role used by the execution bundle.
activeSkill.cursorstring · requiredOpaque pagination or synchronization cursor from the preceding response; omit to start from the beginning.
Branch 2
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
Branch 2
bundleobject · requiredFrozen canonical execution bundle returned at claim time.
bundle.protocolVersion"1.2" · requiredSemel external-execution protocol version used for this bundle or state. This branch always uses "1.2".
bundle.resultIdentitySchemaVersion2 · requiredVersion of the reviewer identity schema required for this execution result. This branch always uses 2.
bundle.instructionsstring · requiredPinned executable runbook instructions for this external execution.
bundle.schemaHashesobject · requiredMap from frozen schema name to its SHA-256 identity.
Map values · string
pattern: ^[a-f0-9]{64}$
bundle.sessionobject · requiredFrozen review-session and run identity plus reviewer position for the claimed external execution.
bundle.session.reviewSessionIdstring · requiredReview-session identifier returned by review_start, review_new_pass, or execution status.
bundle.session.runIdstring · requiredReview-run identifier returned by a review start, status, or cascade handoff result.
bundle.session.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
bundle.session.briefIdstring · requiredBrief identifier returned by brief_create or brief_list; it determines the project authorization boundary.
bundle.session.reviewModestring · requiredProject review interaction mode configured in Semel.
bundle.session.cascadeExecutionSnapshotIdstring · requiredIdentifier of the immutable cascade snapshot shared by every reviewer session in this pass. Minimum accepted length or value is 1.
minimum length: 1
bundle.session.activeReviewerOccurrenceIdstring · requiredEnabled reviewer occurrence assigned to this individual review session or execution.
minimum length: 1 · maximum length: 200
bundle.session.reviewerOccurrencesarray · requiredComplete ordered reviewer occurrence list preserved in the immutable cascade execution snapshot. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
bundle.session.reviewerOccurrences[].positioninteger · requiredStable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
bundle.session.reviewerOccurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
bundle.session.reviewerOccurrences[].identityobject · requiredFrozen reviewer occurrence identity used for display and exact historical attribution.
bundle.session.reviewerOccurrences[].identity.occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
bundle.session.reviewerOccurrences[].identity.reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
bundle.session.reviewerOccurrences[].identity.reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
bundle.session.reviewerOccurrences[].identity.reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
bundle.session.reviewerOccurrences[].identity.reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
bundle.session.reviewerOccurrences[].identity.reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
bundle.session.reviewerOccurrences[].identity.reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
bundle.session.reviewerOccurrences[].identity.labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
bundle.session.reviewerOccurrences[].identity.legacyRoleany of · requiredClosed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: "product", "engineering", "design", "security", "test".
any of
Branch 1
Branch 2
bundle.session.reviewerOccurrences[].pinobject · requiredExact skill, framing, capability, and model pins for this reviewer occurrence.
bundle.session.reviewerOccurrences[].pin.skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
bundle.session.reviewerOccurrences[].pin.skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
bundle.session.reviewerOccurrences[].pin.skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
bundle.session.reviewerOccurrences[].pin.framingobject · requiredExact shared reviewer framing artifact pin used for this occurrence.
bundle.session.reviewerOccurrences[].pin.framing.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
bundle.session.reviewerOccurrences[].pin.framing.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
bundle.session.reviewerOccurrences[].pin.capabilitiesarray · requiredOrdered exact capability artifact pins available to this reviewer occurrence. An empty array explicitly means no matching items.
maximum items: 32
Array item · object
bundle.session.reviewerOccurrences[].pin.capabilities[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
bundle.session.reviewerOccurrences[].pin.capabilities[].versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
bundle.session.reviewerOccurrences[].pin.capabilities[].sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
bundle.session.reviewerOccurrences[].pin.modelobject · requiredOptional model name declared by the harness.
bundle.session.reviewerOccurrences[].pin.model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
bundle.session.reviewerOccurrences[].pin.model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
bundle.session.reviewerOccurrences[].pin.model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
bundle.session.configurationobject · requiredImmutable cascade configuration revision and source captured when the execution snapshot was admitted.
bundle.session.configuration.revisionstring · requiredIndexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive.
minimum length: 1 · maximum length: 20 · pattern: ^(?:0|[1-9][0-9]*)$
bundle.session.configuration.originobject · requiredImmutable source from which this cascade configuration was adopted; it never consults a current default.
bundle.session.configuration.origin.kind"project" | "personal_default" | "team_default" | "builtin_fallback" | "explicit_override" · requiredDiscriminator identifying the typed variant represented by this object. Allowed values: "project", "personal_default", "team_default", "builtin_fallback", "explicit_override".
bundle.session.configuration.origin.presetVersionIdany of · requiredImmutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available. Accepted length or value is 1 through 200, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 200
Branch 2
bundle.session.cascadeStepIdstring | null · requiredIdentifier of the configured reviewer-cascade step associated with this run. A null value explicitly means no current value is available.
bundle.briefBaseobject · requiredFrozen brief identity, version, and content snapshot against which this external execution must produce its result.
bundle.briefBase.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
bundle.briefBase.versionNuminteger · requiredMonotonic brief contract version number assigned by Semel. The value must be an integer.
bundle.briefBase.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
bundle.skillsarray · requiredOrdered pinned reviewer-skill manifests required for this execution; fetch each artifact by its returned identifiers before use. An empty array explicitly means no matching items.
Array item · object
bundle.skills[].rolestring · requiredPinned reviewer or artifact role used by the execution bundle. Minimum accepted length or value is 1.
minimum length: 1
bundle.skills[].versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 1.
minimum length: 1
bundle.skills[].sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
bundle.skills[].framingHashstring · optionalSHA-256 identity of the shared framing artifact; null or omission means none is pinned. Omit the field when it does not apply; omission is distinct from an empty value.
pattern: ^[a-f0-9]{64}$
bundle.skills[].occurrenceIdany of · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values. A null value explicitly means no current value is available.
any of
Branch 1
minimum length: 1 · maximum length: 200
Branch 2
bundle.evidencePolicyobject · requiredFrozen evidence policy map for this execution bundle; keys are versioned by the bundle contract.
Map values · any JSON value
bundle.requiredCheckpointsarray · requiredMilestone names that must be checkpointed before final submission. An empty array explicitly means no matching items.
Array item · string
bundle.limitsobject · requiredServer-issued byte, count, timeout, and polling limits that the external harness must obey for this execution.
bundle.limits.checkpointMaxBytesinteger · requiredMaximum serialized checkpoint receipt size in bytes. The value must be an integer.
bundle.limits.summaryMaxBytesinteger · requiredMaximum safe progress-summary size in UTF-8 bytes. The value must be an integer.
bundle.limits.sessionEventBudgetBytesinteger · requiredMaximum total persisted external-event payload for one session, in bytes. The value must be an integer.
bundle.limits.evidenceItemsPerCallinteger · optionalMaximum local-evidence items accepted by one review_execution_evidence_register call. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
bundle.limits.evidenceItemsPerEpochinteger · optionalMaximum cumulative local-evidence items accepted for the current execution epoch. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
canonicalBundleSha256string · requiredLowercase hexadecimal SHA-256 digest of the frozen canonical execution bundle.
envelopeobject · requiredPer-claim execution identity, fence, lease, and harness-attestation fields excluded from the bundle hash.
envelope.executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup.
envelope.fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. The value must be an integer.
envelope.leaseExpiresAtstring · requiredRFC 3339 lease expiration timestamp; null means no active lease exists.
envelope.heartbeatRecommendedSecondsinteger · requiredRecommended maximum interval between heartbeats, in seconds. The value must be an integer.
envelope.harnessDescriptorobject · requiredSelf-declared harness, agent, model, and supported-protocol metadata recorded on the execution claim for compatibility and audit.
envelope.harnessDescriptor.harnessstring · requiredHarness product name declared by the caller; Semel does not independently verify it. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
envelope.harnessDescriptor.harnessVersionstring · optionalOptional harness version declared by the caller. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
envelope.harnessDescriptor.agentstring · optionalOptional agent product name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
envelope.harnessDescriptor.agentVersionstring · optionalOptional agent version declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
envelope.harnessDescriptor.modelstring · optionalOptional model name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
envelope.harnessDescriptor.modelProviderstring · optionalOptional model provider declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
activeSkillany of · requiredCurrently active pinned skill role and cursor; null means activation has not begun. A null value explicitly means no current value is available.
any of
Branch 1
activeSkill.occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
activeSkill.cursorstring · requiredOpaque pagination or synchronization cursor from the preceding response; omit to start from the beginning.
minimum length: 1 · maximum length: 200
Branch 2
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"bundle": {
"protocolVersion": "1.1",
"instructions": "Semel external-execution protocol v1: after review_execution_claim pins this bundle, the active skill is exactly one at a time (see the frozen skill order). Fetch the active reviewer lens and its matching shared framing with review_execution_skill_get. Use review_execution_checkpoint_append for bounded semantic milestones, review_question_open/review_question_answer for durable questions, review_execution_sync to discover recorded answers/cancellation/handoff without a persistent session, review_execution_heartbeat to renew the current fenced epoch, and review_execution_submit to finalize against this exact pinned brief base. review_execution_status is always callable and is the documented fail-safe whenever local context is lost. Raw chain-of-thought, source dumps, and hidden reasoning are never accepted fields.",
"schemaHashes": {
"review_execution_grant_request": "e52e7b64d1f1249e1e92c230fe31d7ac8aa504b9e00b154669269ee819d0ce08",
"review_execution_claim": "a124f54e50215258b0b669806e5278f5fcf4a9a1dd9c5501f2cff7ac99345ed7",
"review_execution_skill_get": "fbc91868b45920f159c6e65eccc70fe8d2a5bd107dbece3cceb4f8bf7edaf12c",
"review_execution_checkpoint_append": "023d0a5c99799ffd1734b9ff5c37da0391ab3a80beba895522ee824a171058ad",
"review_question_open": "2304a9fc9feed0e54f96202864f313485028d63f11d9c5bea41bbd8af6ceac2b",
"review_question_answer": "cd82c71b9090d96c9b972b89d22baac83167073503cf06d0efd0eada62e2ba8b",
"review_question_answer_supersede": "8ca9bcface0a212deb4c6595d162fffb06089c278177234ea995228e85277904",
"review_execution_sync": "e3228cdf437c31d501474f2d688e25968a40bce0f1a620000cb8bb0840003907",
"review_execution_wait": "e20acce29a5f9a5a03a0b351866e4df2129e888cabb08777c04ebce1474415a4",
"review_execution_heartbeat": "b9ed5d743c1a9f668eb4ba3a4cc57552fc625fe115175906b4999fb3afbab4f3",
"review_execution_release": "c22b0fc25aa734487b075da1d665b75c9b645dbfbaca7b673863d942fbb58fe5",
"review_execution_submit": "80e9035b5dd37421bbdb6535042b7c2501bdcfd17e42070beb7a83ff1af3235f",
"review_execution_status": "1b27dee7128f1cec0c9c3bab65ea2368b58427a60728a156a0260e84f0c5edc4",
"review_execution_evidence_register": "59caa97b76723e1755e8684647513e014719d39f03ec44b8ec2e04b1f5f6f309",
"project_context_sources_list": "662b917601c66ad54d599da31eba19a3bfa149f4b9ae36d0761a8e920206af35",
"project_context_search": "463c91ced23d7d9578b00661eed0e9bc14648f3c42fe70bee3a700ab4faeb0f3",
"project_context_evidence_get": "7c491de307d0624711916c3ba22c3a98635554e4b3654fba07700dce2d5965a0"
},
"session": {
"reviewSessionId": "rs_fixture_engineering",
"runId": "run_fixture_review",
"projectId": "prj_fixture_checkout",
"briefId": "brf_fixture_checkout",
"reviewMode": "direct",
"reviewerSet": [
"engineering"
],
"cascadeStepId": "step_fixture_engineering"
},
"briefBase": {
"versionId": "bv_fixture_checkout_v3",
"versionNum": 3,
"sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
},
"skills": [
{
"role": "engineering",
"version": "1",
"sha256": "182b9a93e2b09a21a9cd632254e97f9dcb7582f34a50c2619588f75edde15dc7",
"framingHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
},
{
"role": "reviewer-protocol-framing",
"version": "1",
"sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"framingHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
}
],
"evidencePolicy": {},
"requiredCheckpoints": [
"skill_start",
"evidence_readiness_change",
"question_wait_enter",
"question_wait_exit",
"validation_start",
"validation_result",
"submit"
],
"limits": {
"checkpointMaxBytes": 65536,
"summaryMaxBytes": 8192,
"sessionEventBudgetBytes": 10485760,
"evidenceItemsPerCall": 200,
"evidenceItemsPerEpoch": 10000
}
},
"canonicalBundleSha256": "fe4c3e639e846e481ebd4512b4c0a04d4ad1b3c80a6a132212ea632f0a1656e8",
"envelope": {
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"heartbeatRecommendedSeconds": 30,
"harnessDescriptor": {
"harness": "codex",
"harnessVersion": "1",
"agent": "codex",
"model": "gpt-5"
}
},
"activeSkill": {
"role": "engineering",
"cursor": "sync_fixture_next"
},
"controlBlock": {
"state": {
"sessionState": "claimed",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"Awaiting the first checkpoint, which advances the epoch into running."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"Awaiting the first checkpoint, which advances the epoch into running."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"Awaiting the first checkpoint, which advances the epoch into running."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"Awaiting the first checkpoint, which advances the epoch into running."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"bundle\":{\"protocolVersion\":\"1.1\",\"instructions\":\"Semel external-execution protocol v1: after review_execution_claim pins this bundle, the active skill is exactly one at a time (see the frozen skill order). Fetch the active reviewer lens and its matching shared framing with review_execution_skill_get. Use review_execution_checkpoint_append for bounded semantic milestones, review_question_open/review_question_answer for durable questions, review_execution_sync to discover recorded answers/cancellation/handoff without a persistent session, review_execution_heartbeat to renew the current fenced epoch, and review_execution_submit to finalize against this exact pinned brief base. review_execution_status is always callable and is the documented fail-safe whenever local context is lost. Raw chain-of-thought, source dumps, and hidden reasoning are never accepted fields.\",\"schemaHashes\":{\"review_execution_grant_request\":\"e52e7b64d1f1249e1e92c230fe31d7ac8aa504b9e00b154669269ee819d0ce08\",\"review_execution_claim\":\"a124f54e50215258b0b669806e5278f5fcf4a9a1dd9c5501f2cff7ac99345ed7\",\"review_execution_skill_get\":\"fbc91868b45920f159c6e65eccc70fe8d2a5bd107dbece3cceb4f8bf7edaf12c\",\"review_execution_checkpoint_append\":\"023d0a5c99799ffd1734b9ff5c37da0391ab3a80beba895522ee824a171058ad\",\"review_question_open\":\"2304a9fc9feed0e54f96202864f313485028d63f11d9c5bea41bbd8af6ceac2b\",\"review_question_answer\":\"cd82c71b9090d96c9b972b89d22baac83167073503cf06d0efd0eada62e2ba8b\",\"review_question_answer_supersede\":\"8ca9bcface0a212deb4c6595d162fffb06089c278177234ea995228e85277904\",\"review_execution_sync\":\"e3228cdf437c31d501474f2d688e25968a40bce0f1a620000cb8bb0840003907\",\"review_execution_wait\":\"e20acce29a5f9a5a03a0b351866e4df2129e888cabb08777c04ebce1474415a4\",\"review_execution_heartbeat\":\"b9ed5d743c1a9f668eb4ba3a4cc57552fc625fe115175906b4999fb3afbab4f3\",\"review_execution_release\":\"c22b0fc25aa734487b075da1d665b75c9b645dbfbaca7b673863d942fbb58fe5\",\"review_execution_submit\":\"80e9035b5dd37421bbdb6535042b7c2501bdcfd17e42070beb7a83ff1af3235f\",\"review_execution_status\":\"1b27dee7128f1cec0c9c3bab65ea2368b58427a60728a156a0260e84f0c5edc4\",\"review_execution_evidence_register\":\"59caa97b76723e1755e8684647513e014719d39f03ec44b8ec2e04b1f5f6f309\",\"project_context_sources_list\":\"662b917601c66ad54d599da31eba19a3bfa149f4b9ae36d0761a8e920206af35\",\"project_context_search\":\"463c91ced23d7d9578b00661eed0e9bc14648f3c42fe70bee3a700ab4faeb0f3\",\"project_context_evidence_get\":\"7c491de307d0624711916c3ba22c3a98635554e4b3654fba07700dce2d5965a0\"},\"session\":{\"reviewSessionId\":\"rs_fixture_engineering\",\"runId\":\"run_fixture_review\",\"projectId\":\"prj_fixture_checkout\",\"briefId\":\"brf_fixture_checkout\",\"reviewMode\":\"direct\",\"reviewerSet\":[\"engineering\"],\"cascadeStepId\":\"step_fixture_engineering\"},\"briefBase\":{\"versionId\":\"bv_fixture_checkout_v3\",\"versionNum\":3,\"sha256\":\"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\"},\"skills\":[{\"role\":\"engineering\",\"version\":\"1\",\"sha256\":\"182b9a93e2b09a21a9cd632254e97f9dcb7582f34a50c2619588f75edde15dc7\",\"framingHash\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"},{\"role\":\"reviewer-protocol-framing\",\"version\":\"1\",\"sha256\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\"framingHash\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"}],\"evidencePolicy\":{},\"requiredCheckpoints\":[\"skill_start\",\"evidence_readiness_change\",\"question_wait_enter\",\"question_wait_exit\",\"validation_start\",\"validation_result\",\"submit\"],\"limits\":{\"checkpointMaxBytes\":65536,\"summaryMaxBytes\":8192,\"sessionEventBudgetBytes\":10485760,\"evidenceItemsPerCall\":200,\"evidenceItemsPerEpoch\":10000}},\"canonicalBundleSha256\":\"fe4c3e639e846e481ebd4512b4c0a04d4ad1b3c80a6a132212ea632f0a1656e8\",\"envelope\":{\"executionId\":\"xex_fixture_engineering\",\"fenceGeneration\":1,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"heartbeatRecommendedSeconds\":30,\"harnessDescriptor\":{\"harness\":\"codex\",\"harnessVersion\":\"1\",\"agent\":\"codex\",\"model\":\"gpt-5\"}},\"activeSkill\":{\"role\":\"engineering\",\"cursor\":\"sync_fixture_next\"},\"controlBlock\":{\"state\":{\"sessionState\":\"claimed\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"Awaiting the first checkpoint, which advances the epoch into running.\"]},{\"operation\":\"review_execution_checkpoint_append\",\"preconditions\":[\"Awaiting the first checkpoint, which advances the epoch into running.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"Awaiting the first checkpoint, which advances the epoch into running.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"Awaiting the first checkpoint, which advances the epoch into running.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":0,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"bundle": {
"protocolVersion": "1.1",
"instructions": "Semel external-execution protocol v1: after review_execution_claim pins this bundle, the active skill is exactly one at a time (see the frozen skill order). Fetch the active reviewer lens and its matching shared framing with review_execution_skill_get. Use review_execution_checkpoint_append for bounded semantic milestones, review_question_open/review_question_answer for durable questions, review_execution_sync to discover recorded answers/cancellation/handoff without a persistent session, review_execution_heartbeat to renew the current fenced epoch, and review_execution_submit to finalize against this exact pinned brief base. review_execution_status is always callable and is the documented fail-safe whenever local context is lost. Raw chain-of-thought, source dumps, and hidden reasoning are never accepted fields.",
"schemaHashes": {
"review_execution_grant_request": "e52e7b64d1f1249e1e92c230fe31d7ac8aa504b9e00b154669269ee819d0ce08",
"review_execution_claim": "a124f54e50215258b0b669806e5278f5fcf4a9a1dd9c5501f2cff7ac99345ed7",
"review_execution_skill_get": "fbc91868b45920f159c6e65eccc70fe8d2a5bd107dbece3cceb4f8bf7edaf12c",
"review_execution_checkpoint_append": "023d0a5c99799ffd1734b9ff5c37da0391ab3a80beba895522ee824a171058ad",
"review_question_open": "2304a9fc9feed0e54f96202864f313485028d63f11d9c5bea41bbd8af6ceac2b",
"review_question_answer": "cd82c71b9090d96c9b972b89d22baac83167073503cf06d0efd0eada62e2ba8b",
"review_question_answer_supersede": "8ca9bcface0a212deb4c6595d162fffb06089c278177234ea995228e85277904",
"review_execution_sync": "e3228cdf437c31d501474f2d688e25968a40bce0f1a620000cb8bb0840003907",
"review_execution_wait": "e20acce29a5f9a5a03a0b351866e4df2129e888cabb08777c04ebce1474415a4",
"review_execution_heartbeat": "b9ed5d743c1a9f668eb4ba3a4cc57552fc625fe115175906b4999fb3afbab4f3",
"review_execution_release": "c22b0fc25aa734487b075da1d665b75c9b645dbfbaca7b673863d942fbb58fe5",
"review_execution_submit": "80e9035b5dd37421bbdb6535042b7c2501bdcfd17e42070beb7a83ff1af3235f",
"review_execution_status": "1b27dee7128f1cec0c9c3bab65ea2368b58427a60728a156a0260e84f0c5edc4",
"review_execution_evidence_register": "59caa97b76723e1755e8684647513e014719d39f03ec44b8ec2e04b1f5f6f309",
"project_context_sources_list": "662b917601c66ad54d599da31eba19a3bfa149f4b9ae36d0761a8e920206af35",
"project_context_search": "463c91ced23d7d9578b00661eed0e9bc14648f3c42fe70bee3a700ab4faeb0f3",
"project_context_evidence_get": "7c491de307d0624711916c3ba22c3a98635554e4b3654fba07700dce2d5965a0"
},
"session": {
"reviewSessionId": "rs_fixture_engineering",
"runId": "run_fixture_review",
"projectId": "prj_fixture_checkout",
"briefId": "brf_fixture_checkout",
"reviewMode": "direct",
"reviewerSet": [
"engineering"
],
"cascadeStepId": "step_fixture_engineering"
},
"briefBase": {
"versionId": "bv_fixture_checkout_v3",
"versionNum": 3,
"sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
},
"skills": [
{
"role": "engineering",
"version": "1",
"sha256": "182b9a93e2b09a21a9cd632254e97f9dcb7582f34a50c2619588f75edde15dc7",
"framingHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
},
{
"role": "reviewer-protocol-framing",
"version": "1",
"sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"framingHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
}
],
"evidencePolicy": {},
"requiredCheckpoints": [
"skill_start",
"evidence_readiness_change",
"question_wait_enter",
"question_wait_exit",
"validation_start",
"validation_result",
"submit"
],
"limits": {
"checkpointMaxBytes": 65536,
"summaryMaxBytes": 8192,
"sessionEventBudgetBytes": 10485760,
"evidenceItemsPerCall": 200,
"evidenceItemsPerEpoch": 10000
}
},
"canonicalBundleSha256": "fe4c3e639e846e481ebd4512b4c0a04d4ad1b3c80a6a132212ea632f0a1656e8",
"envelope": {
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"heartbeatRecommendedSeconds": 30,
"harnessDescriptor": {
"harness": "codex",
"harnessVersion": "1",
"agent": "codex",
"model": "gpt-5"
}
},
"activeSkill": {
"role": "engineering",
"cursor": "sync_fixture_next"
},
"controlBlock": {
"state": {
"sessionState": "claimed",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"Awaiting the first checkpoint, which advances the epoch into running."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"Awaiting the first checkpoint, which advances the epoch into running."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"Awaiting the first checkpoint, which advances the epoch into running."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"Awaiting the first checkpoint, which advances the epoch into running."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- executionId ← structuredContent.envelope.executionId
- canonicalBundleSha256 ← structuredContent.canonicalBundleSha256
Next permitted action: Persist executionId, fenceGeneration, bundle hash, lease guidance, and activeSkill from structuredContent.
Complete raw result schema
{
"anyOf": [
{
"type": "object",
"properties": {
"bundle": {
"type": "object",
"properties": {
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"instructions": {
"type": "string",
"description": "Pinned executable runbook instructions for this external execution."
},
"schemaHashes": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Map from frozen schema name to its SHA-256 identity."
},
"session": {
"type": "object",
"properties": {
"reviewSessionId": {
"type": "string",
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status."
},
"runId": {
"type": "string",
"description": "Review-run identifier returned by a review start, status, or cascade handoff result."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"briefId": {
"type": "string",
"description": "Brief identifier returned by brief_create or brief_list; it determines the project authorization boundary."
},
"reviewMode": {
"type": "string",
"description": "Project review interaction mode configured in Semel."
},
"reviewerSet": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ordered reviewer roles configured for this cascade. An empty array explicitly means no matching items."
},
"cascadeStepId": {
"type": [
"string",
"null"
],
"description": "Identifier of the configured reviewer-cascade step associated with this run. A null value explicitly means no current value is available."
}
},
"required": [
"reviewSessionId",
"runId",
"projectId",
"briefId",
"reviewMode",
"reviewerSet",
"cascadeStepId"
],
"additionalProperties": false,
"description": "Frozen review-session and run identity plus reviewer position for the claimed external execution."
},
"briefBase": {
"type": "object",
"properties": {
"versionId": {
"type": "string",
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"sha256": {
"type": "string",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"versionId",
"versionNum",
"sha256"
],
"additionalProperties": false,
"description": "Frozen brief identity, version, and content snapshot against which this external execution must produce its result."
},
"skills": {
"type": "array",
"items": {
"type": "object",
"properties": {
"role": {
"type": "string",
"minLength": 1,
"description": "Pinned reviewer or artifact role used by the execution bundle. Minimum accepted length or value is 1."
},
"version": {
"type": "string",
"minLength": 1,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 1."
},
"sha256": {
"type": "string",
"minLength": 1,
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes. Minimum accepted length or value is 1."
},
"framingHash": {
"type": "string",
"description": "SHA-256 identity of the shared framing artifact; null or omission means none is pinned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"role",
"version",
"sha256"
],
"additionalProperties": false
},
"description": "Ordered pinned reviewer-skill manifests required for this execution; fetch each artifact by its returned identifiers before use. An empty array explicitly means no matching items."
},
"evidencePolicy": {
"type": "object",
"additionalProperties": {},
"description": "Frozen evidence policy map for this execution bundle; keys are versioned by the bundle contract."
},
"requiredCheckpoints": {
"type": "array",
"items": {
"type": "string"
},
"description": "Milestone names that must be checkpointed before final submission. An empty array explicitly means no matching items."
},
"limits": {
"type": "object",
"properties": {
"checkpointMaxBytes": {
"type": "integer",
"description": "Maximum serialized checkpoint receipt size in bytes. The value must be an integer."
},
"summaryMaxBytes": {
"type": "integer",
"description": "Maximum safe progress-summary size in UTF-8 bytes. The value must be an integer."
},
"sessionEventBudgetBytes": {
"type": "integer",
"description": "Maximum total persisted external-event payload for one session, in bytes. The value must be an integer."
},
"evidenceItemsPerCall": {
"type": "integer",
"description": "Maximum local-evidence items accepted by one review_execution_evidence_register call. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"evidenceItemsPerEpoch": {
"type": "integer",
"description": "Maximum cumulative local-evidence items accepted for the current execution epoch. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
}
},
"required": [
"checkpointMaxBytes",
"summaryMaxBytes",
"sessionEventBudgetBytes"
],
"additionalProperties": false,
"description": "Server-issued byte, count, timeout, and polling limits that the external harness must obey for this execution."
}
},
"required": [
"protocolVersion",
"instructions",
"schemaHashes",
"session",
"briefBase",
"skills",
"evidencePolicy",
"requiredCheckpoints",
"limits"
],
"additionalProperties": false,
"description": "Frozen canonical execution bundle returned at claim time."
},
"canonicalBundleSha256": {
"type": "string",
"description": "Lowercase hexadecimal SHA-256 digest of the frozen canonical execution bundle."
},
"envelope": {
"type": "object",
"properties": {
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup."
},
"fenceGeneration": {
"type": "integer",
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. The value must be an integer."
},
"leaseExpiresAt": {
"type": "string",
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists."
},
"heartbeatRecommendedSeconds": {
"type": "integer",
"description": "Recommended maximum interval between heartbeats, in seconds. The value must be an integer."
},
"harnessDescriptor": {
"type": "object",
"properties": {
"harness": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Harness product name declared by the caller; Semel does not independently verify it. Accepted length or value is 1 through 200, inclusive."
},
"harnessVersion": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional harness version declared by the caller. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
},
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional agent product name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"agentVersion": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional agent version declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"modelProvider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional model provider declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"harness"
],
"additionalProperties": false,
"description": "Self-declared harness, agent, model, and supported-protocol metadata recorded on the execution claim for compatibility and audit."
}
},
"required": [
"executionId",
"fenceGeneration",
"leaseExpiresAt",
"heartbeatRecommendedSeconds",
"harnessDescriptor"
],
"additionalProperties": false,
"description": "Per-claim execution identity, fence, lease, and harness-attestation fields excluded from the bundle hash."
},
"activeSkill": {
"anyOf": [
{
"type": "object",
"properties": {
"role": {
"type": "string",
"description": "Pinned reviewer or artifact role used by the execution bundle."
},
"cursor": {
"type": "string",
"description": "Opaque pagination or synchronization cursor from the preceding response; omit to start from the beginning."
}
},
"required": [
"role",
"cursor"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Currently active pinned skill role and cursor; null means activation has not begun. A null value explicitly means no current value is available."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"bundle",
"canonicalBundleSha256",
"envelope",
"activeSkill",
"controlBlock"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"bundle": {
"type": "object",
"properties": {
"protocolVersion": {
"type": "string",
"const": "1.2",
"description": "Semel external-execution protocol version used for this bundle or state. This branch always uses \"1.2\"."
},
"resultIdentitySchemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the reviewer identity schema required for this execution result. This branch always uses 2."
},
"instructions": {
"type": "string",
"description": "Pinned executable runbook instructions for this external execution."
},
"schemaHashes": {
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"description": "Map from frozen schema name to its SHA-256 identity."
},
"session": {
"type": "object",
"properties": {
"reviewSessionId": {
"type": "string",
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status."
},
"runId": {
"type": "string",
"description": "Review-run identifier returned by a review start, status, or cascade handoff result."
},
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"briefId": {
"type": "string",
"description": "Brief identifier returned by brief_create or brief_list; it determines the project authorization boundary."
},
"reviewMode": {
"type": "string",
"description": "Project review interaction mode configured in Semel."
},
"cascadeExecutionSnapshotId": {
"type": "string",
"minLength": 1,
"description": "Identifier of the immutable cascade snapshot shared by every reviewer session in this pass. Minimum accepted length or value is 1."
},
"activeReviewerOccurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Enabled reviewer occurrence assigned to this individual review session or execution."
},
"reviewerOccurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"position": {
"type": "integer",
"minimum": 0,
"description": "Stable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"identity": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"legacyRole": {
"anyOf": [
{
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
]
},
{
"type": "null"
}
],
"description": "Closed built-in reviewer-role projection; custom reviewer identities always carry null. A null value explicitly means no current value is available. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"legacyRole"
],
"additionalProperties": false,
"description": "Frozen reviewer occurrence identity used for display and exact historical attribution."
},
"pin": {
"type": "object",
"properties": {
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"framing": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact shared reviewer framing artifact pin used for this occurrence."
},
"capabilities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 200, inclusive."
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"id",
"version",
"sha256"
],
"additionalProperties": false
},
"maxItems": 32,
"description": "Ordered exact capability artifact pins available to this reviewer occurrence. An empty array explicitly means no matching items."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"skill",
"framing",
"capabilities",
"model"
],
"additionalProperties": false,
"description": "Exact skill, framing, capability, and model pins for this reviewer occurrence."
}
},
"required": [
"position",
"enabled",
"identity",
"pin"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Complete ordered reviewer occurrence list preserved in the immutable cascade execution snapshot. An empty array explicitly means no matching items."
},
"configuration": {
"type": "object",
"properties": {
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^(?:0|[1-9][0-9]*)$",
"description": "Indexed repository revision used for this evidence result. Accepted length or value is 1 through 20, inclusive."
},
"origin": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"project",
"personal_default",
"team_default",
"builtin_fallback",
"explicit_override"
],
"description": "Discriminator identifying the typed variant represented by this object. Allowed values: \"project\", \"personal_default\", \"team_default\", \"builtin_fallback\", \"explicit_override\"."
},
"presetVersionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Immutable preset-version source when configuration was adopted from or explicitly based on a preset. A null value explicitly means no current value is available. Accepted length or value is 1 through 200, inclusive."
}
},
"required": [
"kind",
"presetVersionId"
],
"additionalProperties": false,
"description": "Immutable source from which this cascade configuration was adopted; it never consults a current default."
}
},
"required": [
"revision",
"origin"
],
"additionalProperties": false,
"description": "Immutable cascade configuration revision and source captured when the execution snapshot was admitted."
},
"cascadeStepId": {
"type": [
"string",
"null"
],
"description": "Identifier of the configured reviewer-cascade step associated with this run. A null value explicitly means no current value is available."
}
},
"required": [
"reviewSessionId",
"runId",
"projectId",
"briefId",
"reviewMode",
"cascadeExecutionSnapshotId",
"activeReviewerOccurrenceId",
"reviewerOccurrences",
"configuration",
"cascadeStepId"
],
"additionalProperties": false,
"description": "Frozen review-session and run identity plus reviewer position for the claimed external execution."
},
"briefBase": {
"type": "object",
"properties": {
"versionId": {
"type": "string",
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
},
"versionNum": {
"type": "integer",
"description": "Monotonic brief contract version number assigned by Semel. The value must be an integer."
},
"sha256": {
"type": "string",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"versionId",
"versionNum",
"sha256"
],
"additionalProperties": false,
"description": "Frozen brief identity, version, and content snapshot against which this external execution must produce its result."
},
"skills": {
"type": "array",
"items": {
"type": "object",
"properties": {
"role": {
"type": "string",
"minLength": 1,
"description": "Pinned reviewer or artifact role used by the execution bundle. Minimum accepted length or value is 1."
},
"version": {
"type": "string",
"minLength": 1,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 1."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
},
"framingHash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "SHA-256 identity of the shared framing artifact; null or omission means none is pinned. Omit the field when it does not apply; omission is distinct from an empty value."
},
"occurrenceId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values. A null value explicitly means no current value is available."
}
},
"required": [
"role",
"version",
"sha256",
"occurrenceId"
],
"additionalProperties": false
},
"description": "Ordered pinned reviewer-skill manifests required for this execution; fetch each artifact by its returned identifiers before use. An empty array explicitly means no matching items."
},
"evidencePolicy": {
"type": "object",
"additionalProperties": {},
"description": "Frozen evidence policy map for this execution bundle; keys are versioned by the bundle contract."
},
"requiredCheckpoints": {
"type": "array",
"items": {
"type": "string"
},
"description": "Milestone names that must be checkpointed before final submission. An empty array explicitly means no matching items."
},
"limits": {
"type": "object",
"properties": {
"checkpointMaxBytes": {
"type": "integer",
"description": "Maximum serialized checkpoint receipt size in bytes. The value must be an integer."
},
"summaryMaxBytes": {
"type": "integer",
"description": "Maximum safe progress-summary size in UTF-8 bytes. The value must be an integer."
},
"sessionEventBudgetBytes": {
"type": "integer",
"description": "Maximum total persisted external-event payload for one session, in bytes. The value must be an integer."
},
"evidenceItemsPerCall": {
"type": "integer",
"description": "Maximum local-evidence items accepted by one review_execution_evidence_register call. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"evidenceItemsPerEpoch": {
"type": "integer",
"description": "Maximum cumulative local-evidence items accepted for the current execution epoch. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
}
},
"required": [
"checkpointMaxBytes",
"summaryMaxBytes",
"sessionEventBudgetBytes"
],
"additionalProperties": false,
"description": "Server-issued byte, count, timeout, and polling limits that the external harness must obey for this execution."
}
},
"required": [
"protocolVersion",
"resultIdentitySchemaVersion",
"instructions",
"schemaHashes",
"session",
"briefBase",
"skills",
"evidencePolicy",
"requiredCheckpoints",
"limits"
],
"additionalProperties": false,
"description": "Frozen canonical execution bundle returned at claim time."
},
"canonicalBundleSha256": {
"type": "string",
"description": "Lowercase hexadecimal SHA-256 digest of the frozen canonical execution bundle."
},
"envelope": {
"type": "object",
"properties": {
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup."
},
"fenceGeneration": {
"type": "integer",
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. The value must be an integer."
},
"leaseExpiresAt": {
"type": "string",
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists."
},
"heartbeatRecommendedSeconds": {
"type": "integer",
"description": "Recommended maximum interval between heartbeats, in seconds. The value must be an integer."
},
"harnessDescriptor": {
"type": "object",
"properties": {
"harness": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Harness product name declared by the caller; Semel does not independently verify it. Accepted length or value is 1 through 200, inclusive."
},
"harnessVersion": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional harness version declared by the caller. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
},
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional agent product name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"agentVersion": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional agent version declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"modelProvider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Optional model provider declared by the harness. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"harness"
],
"additionalProperties": false,
"description": "Self-declared harness, agent, model, and supported-protocol metadata recorded on the execution claim for compatibility and audit."
}
},
"required": [
"executionId",
"fenceGeneration",
"leaseExpiresAt",
"heartbeatRecommendedSeconds",
"harnessDescriptor"
],
"additionalProperties": false,
"description": "Per-claim execution identity, fence, lease, and harness-attestation fields excluded from the bundle hash."
},
"activeSkill": {
"anyOf": [
{
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"cursor": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Opaque pagination or synchronization cursor from the preceding response; omit to start from the beginning."
}
},
"required": [
"occurrenceId",
"cursor"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Currently active pinned skill role and cursor; null means activation has not begun. A null value explicitly means no current value is available."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"bundle",
"canonicalBundleSha256",
"envelope",
"activeSkill",
"controlBlock"
],
"additionalProperties": false
}
]
}review_execution_evidence_register
write · idempotent (needs idempotencyKey)Register bounded worktree excerpts from a currently-bound local repository as durable, citable lev_ evidence handles. Call this after an evidence_readiness_change binding checkpoint and before citing repository-code facts in a local submission.
- Mode
- write · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel register this worktree excerpt as evidence for my finding”
- Errors
- STALE_FENCEVALIDATION_FAILEDEVIDENCE_BINDING_MISSINGEVIDENCE_BINDING_STALEEVIDENCE_BUDGET_EXCEEDEDPAYLOAD_REJECTEDPROJECT_ACCESS_DENIED
- Related
- review_execution_checkpoint_append, review_execution_submit, review_execution_status
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer.
itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 200
Array item · object
items[].repositoryIdstring · requiredRepository identifier from the connected-codebase inventory. Minimum accepted length or value is 1.
minimum length: 1
items[].headShastring · requiredGit commit SHA of the local worktree HEAD at binding or citation time.
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
items[].fileShaany of · optionalGit blob SHA of the local working file computed with git hash-object; null when unavailable. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available.
any of
Branch 1
pattern: ^(?:[a-f0-9]{40}|[a-f0-9]{64})$
Branch 2
items[].pathstring · requiredRepository-relative source path; it never denotes an arbitrary local filesystem path. Accepted length or value is 1 through 4096, inclusive.
minimum length: 1 · maximum length: 4096
items[].startLineinteger · requiredOne-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
items[].endLineinteger · requiredOne-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer.
items[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"items": [
{
"repositoryId": "repo_fixture_throughline",
"headSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"path": "services/api/src/checkout.ts",
"startLine": 42,
"endLine": 58,
"verbatim": "The checkout handler reuses the payment intent for a repeated idempotency key."
}
],
"idempotencyKey": "recipe-execution-evidence-register-v1"
}{
"executionId": "{{executionId}}",
"fenceGeneration": 1,
"items": [
{
"repositoryId": "repo_fixture_throughline",
"headSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"path": "services/api/src/checkout.ts",
"startLine": 42,
"endLine": 58,
"verbatim": "The checkout handler reuses the payment intent for a repeated idempotency key."
}
],
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"repositoryId": {
"type": "string",
"minLength": 1,
"description": "Repository identifier from the connected-codebase inventory. Minimum accepted length or value is 1."
},
"headSha": {
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
"description": "Git commit SHA of the local worktree HEAD at binding or citation time."
},
"fileSha": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"
},
{
"type": "null"
}
],
"description": "Git blob SHA of the local working file computed with git hash-object; null when unavailable. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available."
},
"path": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Repository-relative source path; it never denotes an arbitrary local filesystem path. Accepted length or value is 1 through 4096, inclusive."
},
"startLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive start line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"endLine": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "One-based inclusive end line of the cited repository excerpt. Minimum accepted length or value is 0. The value must be an integer."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"repositoryId",
"headSha",
"path",
"startLine",
"endLine",
"verbatim"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 200,
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"executionId",
"fenceGeneration",
"items",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
itemsarray · requiredRecords in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items.
Array item · object
items[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
items[].verification"unverified" · requiredCitation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. This branch always uses "unverified".
items[].provenance"local-worktree" · requiredImmutable repository revision and evidence-source provenance. This branch always uses "local-worktree".
items[].verbatimstring · requiredExact bounded evidence text supporting the citation. Maximum accepted length or value is 1200.
maximum length: 1200
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"items": [
{
"citationKey": "lev_fixture_checkout_excerpt",
"verification": "unverified",
"provenance": "local-worktree",
"verbatim": "The checkout handler reuses the payment intent for a repeated idempotency key."
}
],
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
},
{
"operation": "review_execution_evidence_register",
"preconditions": [
"A local-worktree binding receipt was recorded for this repository this epoch."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 2,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"items\":[{\"citationKey\":\"lev_fixture_checkout_excerpt\",\"verification\":\"unverified\",\"provenance\":\"local-worktree\",\"verbatim\":\"The checkout handler reuses the payment intent for a repeated idempotency key.\"}],\"controlBlock\":{\"state\":{\"sessionState\":\"running\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_checkpoint_append\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_question_open\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_submit\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_sync\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]},{\"operation\":\"review_execution_evidence_register\",\"preconditions\":[\"A local-worktree binding receipt was recorded for this repository this epoch.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":2,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"items": [
{
"citationKey": "lev_fixture_checkout_excerpt",
"verification": "unverified",
"provenance": "local-worktree",
"verbatim": "The checkout handler reuses the payment intent for a repeated idempotency key."
}
],
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
},
{
"operation": "review_execution_evidence_register",
"preconditions": [
"A local-worktree binding receipt was recorded for this repository this epoch."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 2,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- evidenceCitationKey ← structuredContent.items[0].citationKey
Next permitted action: Cite the returned lev_ keys as repository-code anchors in submit.
Complete raw result schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verification": {
"type": "string",
"const": "unverified",
"description": "Citation verification result: exact and canonical are publishable evidence matches, while unverified cannot support a durable code claim. This branch always uses \"unverified\"."
},
"provenance": {
"type": "string",
"const": "local-worktree",
"description": "Immutable repository revision and evidence-source provenance. This branch always uses \"local-worktree\"."
},
"verbatim": {
"type": "string",
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Maximum accepted length or value is 1200."
}
},
"required": [
"citationKey",
"verification",
"provenance",
"verbatim"
],
"additionalProperties": false
},
"description": "Records in this page or grouped result; an empty array means there are none. An empty array explicitly means no matching items."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"items",
"controlBlock"
],
"additionalProperties": false
}review_execution_grant_request
readDiscover or request the operator-issued execution grant that authorizes this harness to claim a review session.
- Mode
- read · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- operator_grant
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel run the checkout brief review locally”
- Errors
- GRANT_REQUIREDGRANT_EXPIREDPROJECT_ACCESS_DENIED
- Related
- review_execution_claim, review_execution_status
Arguments
reviewSessionIdstring · requiredReview-session identifier returned by review_start, review_new_pass, or execution status. Minimum accepted length or value is 1.
minimum length: 1
{
"reviewSessionId": "rs_fixture_engineering"
}{
"reviewSessionId": "{{reviewSessionId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"reviewSessionId": {
"type": "string",
"minLength": 1,
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. Minimum accepted length or value is 1."
}
},
"required": [
"reviewSessionId"
],
"additionalProperties": false
}Structured result
any of
Branch 1
status"ready" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "ready".
grantobject · requiredCurrent human-approved execution grant summary.
grant.grantIdstring · requiredExecution-grant identifier returned when the human approval boundary is satisfied.
grant.statestring · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
grant.intentstring · requiredHuman-approved execution intent bound to the grant.
grant.expiresAtstring · requiredRFC 3339 expiration timestamp.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
Branch 2
status"approval_required" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "approval_required".
approvalUristring · requiredSemel URI where a human can inspect and approve the execution grant.
pollHandlestring · requiredOpaque handle used to poll while human grant approval is pending.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"status": "approval_required",
"approvalUri": "https://mcp.semel.ai/review-execution/approve/xgr_fixture_engineering",
"pollHandle": "poll_fixture_engineering",
"controlBlock": {
"state": {
"sessionState": "awaiting_executor",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_claim",
"preconditions": [
"An operator-issued grant already exists; any authorized claimant may claim it."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": true,
"uri": "https://mcp.semel.ai/review-execution/approve/xgr_fixture_engineering"
}
}
}{
"content": [
{
"type": "text",
"text": "{\"status\":\"approval_required\",\"approvalUri\":\"https://mcp.semel.ai/review-execution/approve/xgr_fixture_engineering\",\"pollHandle\":\"poll_fixture_engineering\",\"controlBlock\":{\"state\":{\"sessionState\":\"awaiting_executor\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_claim\",\"preconditions\":[\"An operator-issued grant already exists; any authorized claimant may claim it.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":0,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":true,\"uri\":\"https://mcp.semel.ai/review-execution/approve/xgr_fixture_engineering\"}}}"
}
],
"structuredContent": {
"status": "approval_required",
"approvalUri": "https://mcp.semel.ai/review-execution/approve/xgr_fixture_engineering",
"pollHandle": "poll_fixture_engineering",
"controlBlock": {
"state": {
"sessionState": "awaiting_executor",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_claim",
"preconditions": [
"An operator-issued grant already exists; any authorized claimant may claim it."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": true,
"uri": "https://mcp.semel.ai/review-execution/approve/xgr_fixture_engineering"
}
}
}
}- approvalUri ← structuredContent.approvalUri
Next permitted action: Show approvalUri to the human and poll only as instructed.
Complete raw result schema
{
"anyOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "ready",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"ready\"."
},
"grant": {
"type": "object",
"properties": {
"grantId": {
"type": "string",
"description": "Execution-grant identifier returned when the human approval boundary is satisfied."
},
"state": {
"type": "string",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"intent": {
"type": "string",
"description": "Human-approved execution intent bound to the grant."
},
"expiresAt": {
"type": "string",
"description": "RFC 3339 expiration timestamp."
}
},
"required": [
"grantId",
"state",
"intent",
"expiresAt"
],
"additionalProperties": false,
"description": "Current human-approved execution grant summary."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"status",
"grant",
"controlBlock"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "approval_required",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"approval_required\"."
},
"approvalUri": {
"type": "string",
"description": "Semel URI where a human can inspect and approve the execution grant."
},
"pollHandle": {
"type": "string",
"description": "Opaque handle used to poll while human grant approval is pending."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"status",
"approvalUri",
"pollHandle",
"controlBlock"
],
"additionalProperties": false
}
]
}review_execution_heartbeat
write · idempotent (needs idempotencyKey)Renew the current fenced epoch lease.
- Mode
- write · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “keep my claim alive while the reviewer skill works”
- Errors
- STALE_FENCELEASE_EXPIREDCANCELLEDPROJECT_ACCESS_DENIED
- Related
- review_execution_sync, review_execution_release
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer.
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"idempotencyKey": "recipe-execution-heartbeat-v1"
}{
"executionId": "{{executionId}}",
"fenceGeneration": 1,
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"executionId",
"fenceGeneration",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
leaseExpiresAtstring · requiredRFC 3339 lease expiration timestamp; null means no active lease exists.
heartbeatRecommendedSecondsinteger · requiredRecommended maximum interval between heartbeats, in seconds. The value must be an integer.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"heartbeatRecommendedSeconds": 30,
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 5,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"heartbeatRecommendedSeconds\":30,\"controlBlock\":{\"state\":{\"sessionState\":\"running\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_checkpoint_append\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_question_open\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_submit\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_sync\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":5,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"heartbeatRecommendedSeconds": 30,
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 5,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- leaseExpiresAt ← structuredContent.leaseExpiresAt
Next permitted action: Schedule the next heartbeat from heartbeatRecommendedSeconds.
Complete raw result schema
{
"type": "object",
"properties": {
"leaseExpiresAt": {
"type": "string",
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists."
},
"heartbeatRecommendedSeconds": {
"type": "integer",
"description": "Recommended maximum interval between heartbeats, in seconds. The value must be an integer."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"leaseExpiresAt",
"heartbeatRecommendedSeconds",
"controlBlock"
],
"additionalProperties": false
}review_execution_release
write · idempotent (needs idempotencyKey)Yield the current fenced epoch for handoff or operator stop.
- Mode
- write · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “hand this session off to Codex”
- Errors
- STALE_FENCECANCELLEDPROJECT_ACCESS_DENIED
- Related
- review_execution_claim, review_execution_status
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer.
reason"handoff" | "stop" · requiredTyped or human-readable reason for the current outcome; omission means no reason is required. Allowed values: "handoff", "stop".
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"reason": "handoff",
"idempotencyKey": "recipe-execution-release-v1"
}{
"executionId": "{{executionId}}",
"fenceGeneration": 1,
"reason": "handoff",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer."
},
"reason": {
"type": "string",
"enum": [
"handoff",
"stop"
],
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Allowed values: \"handoff\", \"stop\"."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"executionId",
"fenceGeneration",
"reason",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
releasedtrue · requiredConfirms that the execution lease was released. This branch always uses true.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"released": true,
"controlBlock": {
"state": {
"sessionState": "handed_off",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_claim",
"preconditions": [
"Explicitly released for handoff — claimable by the next authorized harness."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 5,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"released\":true,\"controlBlock\":{\"state\":{\"sessionState\":\"handed_off\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_claim\",\"preconditions\":[\"Explicitly released for handoff — claimable by the next authorized harness.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":5,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"released": true,
"controlBlock": {
"state": {
"sessionState": "handed_off",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_claim",
"preconditions": [
"Explicitly released for handoff — claimable by the next authorized harness."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 5,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- released ← structuredContent.released
Next permitted action: Stop; the next harness must claim a fresh epoch and repeat local evidence confirmation.
Complete raw result schema
{
"type": "object",
"properties": {
"released": {
"type": "boolean",
"const": true,
"description": "Confirms that the execution lease was released. This branch always uses true."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"released",
"controlBlock"
],
"additionalProperties": false
}review_execution_skill_get
readLoad the byte-exact active reviewer rubric (its shared framing, and the shared local-execution QA addendum when pinned) from an execution's frozen content-addressed pins without exposing upcoming reviewer skills.
- Mode
- read · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel load the exact pinned rubric for this local review”“/semel fetch the shared framing for the active reviewer lens”“/semel fetch the local-execution addendum pinned in this bundle”
- Errors
- PROTOCOL_VERSION_UNSUPPORTEDLEASE_EXPIREDSTALE_FENCECANCELLEDPAYLOAD_REJECTEDPROJECT_ACCESS_DENIED
- Related
- review_execution_claim, review_execution_checkpoint_append, review_execution_status
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
rolestring · requiredPinned reviewer or artifact role used by the execution bundle. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
{
"executionId": "xex_fixture_engineering",
"role": "engineering"
}{
"executionId": "{{executionId}}",
"role": "engineering"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"role": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Pinned reviewer or artifact role used by the execution bundle. Accepted length or value is 1 through 200, inclusive."
}
},
"required": [
"executionId",
"role"
],
"additionalProperties": false
}Structured result
artifactobject · requiredExact content-addressed skill artifact selected from the frozen execution bundle.
artifact.rolestring · requiredPinned reviewer or artifact role used by the execution bundle. Minimum accepted length or value is 1.
minimum length: 1
artifact.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 1.
minimum length: 1
artifact.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
artifact.framingHashany of · requiredSHA-256 identity of the shared framing artifact; null or omission means none is pinned. A null value explicitly means no current value is available.
any of
Branch 1
pattern: ^[a-f0-9]{64}$
Branch 2
artifact.contentTypestring · requiredInternet media type of the exact skill artifact bytes, such as text/markdown; use it when loading the artifact. Minimum accepted length or value is 1.
minimum length: 1
artifact.bytesstring · requiredExact UTF-8 skill artifact body; verify its SHA-256 before activation.
{
"artifact": {
"role": "engineering",
"version": "1",
"sha256": "182b9a93e2b09a21a9cd632254e97f9dcb7582f34a50c2619588f75edde15dc7",
"framingHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"contentType": "text/markdown",
"bytes": "# Engineering review\n\nValidate the brief against the repository evidence."
}
}{
"content": [
{
"type": "text",
"text": "{\"artifact\":{\"role\":\"engineering\",\"version\":\"1\",\"sha256\":\"182b9a93e2b09a21a9cd632254e97f9dcb7582f34a50c2619588f75edde15dc7\",\"framingHash\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\"contentType\":\"text/markdown\",\"bytes\":\"# Engineering review\\n\\nValidate the brief against the repository evidence.\"}}"
}
],
"structuredContent": {
"artifact": {
"role": "engineering",
"version": "1",
"sha256": "182b9a93e2b09a21a9cd632254e97f9dcb7582f34a50c2619588f75edde15dc7",
"framingHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"contentType": "text/markdown",
"bytes": "# Engineering review\n\nValidate the brief against the repository evidence."
}
}
}- skillSha256 ← structuredContent.artifact.sha256
Next permitted action: Verify exact pinned hash/framing and execute only the active skill bytes.
Complete raw result schema
{
"type": "object",
"properties": {
"artifact": {
"type": "object",
"properties": {
"role": {
"type": "string",
"minLength": 1,
"description": "Pinned reviewer or artifact role used by the execution bundle. Minimum accepted length or value is 1."
},
"version": {
"type": "string",
"minLength": 1,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Minimum accepted length or value is 1."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
},
"framingHash": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
],
"description": "SHA-256 identity of the shared framing artifact; null or omission means none is pinned. A null value explicitly means no current value is available."
},
"contentType": {
"type": "string",
"minLength": 1,
"description": "Internet media type of the exact skill artifact bytes, such as text/markdown; use it when loading the artifact. Minimum accepted length or value is 1."
},
"bytes": {
"type": "string",
"description": "Exact UTF-8 skill artifact body; verify its SHA-256 before activation."
}
},
"required": [
"role",
"version",
"sha256",
"framingHash",
"contentType",
"bytes"
],
"additionalProperties": false,
"description": "Exact content-addressed skill artifact selected from the frozen execution bundle."
}
},
"required": [
"artifact"
],
"additionalProperties": false
}review_execution_status
readReturn the authoritative execution state — always callable, the documented fail-safe.
- Mode
- read · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “what is the current state of my claimed session”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- review_execution_sync
Arguments
reviewSessionIdstring · optionalReview-session identifier returned by review_start, review_new_pass, or execution status. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
{
"reviewSessionId": "rs_fixture_engineering"
}{
"reviewSessionId": "{{reviewSessionId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"reviewSessionId": {
"type": "string",
"minLength": 1,
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
},
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
}
},
"additionalProperties": false
}Structured result
executionany of · requiredRequested or observed execution lane: hosted Semel execution or local external execution. A null value explicitly means no current value is available.
any of
Branch 1
execution.executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup.
execution.reviewSessionIdstring · requiredReview-session identifier returned by review_start, review_new_pass, or execution status.
execution.statestring · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
execution.currentFenceGenerationinteger · requiredActive execution fence generation; refresh local state to this integer before attempting another fenced write. The value must be an integer.
execution.activeSkillCursorstring | null · requiredOpaque cursor naming the active pinned skill; null means no skill is currently active. A null value explicitly means no current value is available.
Branch 2
epochany of · requiredExecution fence generation associated with the current control-block state; omit before an epoch exists. A null value explicitly means no current value is available.
any of
Branch 1
epoch.fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. The value must be an integer.
epoch.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
epoch.heartbeatAtstring | null · requiredRFC 3339 timestamp of the most recent accepted heartbeat; null means none was recorded. A null value explicitly means no current value is available.
epoch.claimedByPrincipalstring · requiredAgent principal identifier that claimed this execution epoch.
epoch.startedAtstring · requiredRFC 3339 timestamp when the execution epoch started.
epoch.endedAtstring | null · requiredRFC 3339 timestamp when the execution epoch ended; null means it remains active. A null value explicitly means no current value is available.
Branch 2
checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
certificateReferenceany of · requiredReference to the terminal execution certificate when finalization has produced one; null means no certificate exists yet. A null value explicitly means no current value is available.
any of
Branch 1
certificateReference.certificateIdstring · requiredExecution-certificate identifier assigned after successful finalization.
certificateReference.statestring · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
Branch 2
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"execution": {
"executionId": "xex_fixture_engineering",
"reviewSessionId": "rs_fixture_engineering",
"state": "running",
"currentFenceGeneration": 1,
"activeSkillCursor": null
},
"epoch": {
"fenceGeneration": 1,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"heartbeatAt": "2026-09-07T16:00:30.000Z",
"claimedByPrincipal": "example",
"startedAt": "2026-09-07T16:00:00.000Z",
"endedAt": null
},
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"certificateReference": null,
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"execution\":{\"executionId\":\"xex_fixture_engineering\",\"reviewSessionId\":\"rs_fixture_engineering\",\"state\":\"running\",\"currentFenceGeneration\":1,\"activeSkillCursor\":null},\"epoch\":{\"fenceGeneration\":1,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"heartbeatAt\":\"2026-09-07T16:00:30.000Z\",\"claimedByPrincipal\":\"example\",\"startedAt\":\"2026-09-07T16:00:00.000Z\",\"endedAt\":null},\"checkpointHighWaterMark\":0,\"openQuestionCount\":0,\"certificateReference\":null,\"controlBlock\":{\"state\":{\"sessionState\":\"running\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_checkpoint_append\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_question_open\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_submit\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_sync\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":0,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"execution": {
"executionId": "xex_fixture_engineering",
"reviewSessionId": "rs_fixture_engineering",
"state": "running",
"currentFenceGeneration": 1,
"activeSkillCursor": null
},
"epoch": {
"fenceGeneration": 1,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"heartbeatAt": "2026-09-07T16:00:30.000Z",
"claimedByPrincipal": "example",
"startedAt": "2026-09-07T16:00:00.000Z",
"endedAt": null
},
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"certificateReference": null,
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- epoch ← structuredContent.epoch
- executionId ← structuredContent.execution.executionId
Next permitted action: Inspect controlBlock, current epoch/lease, pending questions, and allowedNextOperations.
Complete raw result schema
{
"type": "object",
"properties": {
"execution": {
"anyOf": [
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup."
},
"reviewSessionId": {
"type": "string",
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status."
},
"state": {
"type": "string",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"currentFenceGeneration": {
"type": "integer",
"description": "Active execution fence generation; refresh local state to this integer before attempting another fenced write. The value must be an integer."
},
"activeSkillCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor naming the active pinned skill; null means no skill is currently active. A null value explicitly means no current value is available."
}
},
"required": [
"executionId",
"reviewSessionId",
"state",
"currentFenceGeneration",
"activeSkillCursor"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Requested or observed execution lane: hosted Semel execution or local external execution. A null value explicitly means no current value is available."
},
"epoch": {
"anyOf": [
{
"type": "object",
"properties": {
"fenceGeneration": {
"type": "integer",
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"heartbeatAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp of the most recent accepted heartbeat; null means none was recorded. A null value explicitly means no current value is available."
},
"claimedByPrincipal": {
"type": "string",
"description": "Agent principal identifier that claimed this execution epoch."
},
"startedAt": {
"type": "string",
"description": "RFC 3339 timestamp when the execution epoch started."
},
"endedAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 timestamp when the execution epoch ended; null means it remains active. A null value explicitly means no current value is available."
}
},
"required": [
"fenceGeneration",
"leaseExpiresAt",
"heartbeatAt",
"claimedByPrincipal",
"startedAt",
"endedAt"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. A null value explicitly means no current value is available."
},
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"certificateReference": {
"anyOf": [
{
"type": "object",
"properties": {
"certificateId": {
"type": "string",
"description": "Execution-certificate identifier assigned after successful finalization."
},
"state": {
"type": "string",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
}
},
"required": [
"certificateId",
"state"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Reference to the terminal execution certificate when finalization has produced one; null means no certificate exists yet. A null value explicitly means no current value is available."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"execution",
"epoch",
"checkpointHighWaterMark",
"openQuestionCount",
"certificateReference",
"controlBlock"
],
"additionalProperties": false
}review_execution_submit
write · idempotent (needs idempotencyKey)Submit a revision of the final typed reviewer result for validation and idempotent finalization; the completed response returns the next cascade step handoff.
- Mode
- write · high risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “submit my completed review for this session”
- Errors
- CAPABILITY_UNSUPPORTEDVALIDATION_FAILEDBRIEF_VERSION_CONFLICTQUESTION_OPENSTALE_FENCECANCELLEDPAYLOAD_REJECTEDPROJECT_ACCESS_DENIED
- Related
- review_execution_status, review_execution_checkpoint_append, review_execution_grant_request, review_status
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer.
submissionRevisioninteger · requiredMonotonic final-submission attempt number for this execution, starting at 1. Minimum accepted length or value is 0. The value must be an integer.
canonicalBundleSha256string · requiredLowercase hexadecimal SHA-256 digest of the frozen canonical execution bundle. Minimum accepted length or value is 1.
minimum length: 1
protocolVersion"1.2" · optionalSemel external-execution protocol version used for this bundle or state. Omit the field when it does not apply; omission is distinct from an empty value. This branch always uses "1.2".
resultIdentitySchemaVersion2 · optionalVersion of the reviewer identity schema required for this execution result. Omit the field when it does not apply; omission is distinct from an empty value. This branch always uses 2.
resultany of · requiredComplete typed reviewer submission produced against the frozen execution bundle.
any of
Branch 1
result.reviewer"product" | "engineering" | "design" | "security" | "test" · requiredReviewer role responsible for this submitted result. Allowed values: "product", "engineering", "design", "security", "test".
result.findingsarray · optionalReviewer findings associated with the selected brief version. Omission uses the schema default []. An empty array explicitly means no matching items.
default: [] · maximum items: 50
Array item · object
result.findings[].section"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief section key associated with the question, finding, proposal, or decision entry. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.findings[].notestring · requiredReviewer-facing finding detail that explains the observed issue and the evidence-based change requested. Maximum accepted length or value is 4000.
maximum length: 4000
result.findings[].severity"info" | "warn" | "block" · requiredFinding impact level: info is advisory, warn requires attention, and block prevents approval or completion. Allowed values: "info", "warn", "block".
result.findings[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 5
Array item · any of
any of
Branch 1
result.findings[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.findings[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.findings[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.findings[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.findings[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.findings[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.findings[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.findings[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.findings[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.findings[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.questionsarray · optionalDurable decision questions raised by the reviewer; omission defaults to no questions and each supplied question must be actionable. Omission uses the schema default []. An empty array explicitly means no matching items.
default: [] · maximum items: 50
Array item · object
result.questions[].section"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief section key associated with the question, finding, proposal, or decision entry. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.questions[].decisionKeystring · requiredCaller-stable semantic key for one decision question; keep it unchanged across idempotent retries and review passes. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[a-z0-9]+(?:[._-][a-z0-9]+)*$
result.questions[].textstring · requiredHuman-authored or model-produced text for this typed record. Maximum accepted length or value is 4000.
maximum length: 4000
result.questions[].context_excerptstring · optionalOptional bounded context stored with the reviewer decision question. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 2000.
maximum length: 2000
result.questions[].recommendationstring · requiredReviewer-recommended answer to the decision question, supplied so the respondent can accept or override it. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.questions[].recommendationRationalestring · requiredEvidence-based explanation of why the reviewer recommends the proposed answer. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.questions[].consequenceOfDeferringstring · requiredConcrete product or engineering consequence of postponing the requested decision. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.questions[].optionsarray · optionalExplicit answer choices for a decision question; omission means the respondent may provide free-form text. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
minimum items: 2 · maximum items: 5
Array item · string
maximum length: 1000
result.questions[].suggestedRespondentIdstring · requiredOptional Semel user identifier suggested to answer the question. Accepted length or value is 1 through 160, inclusive.
minimum length: 1 · maximum length: 160
result.questions[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 5
Array item · any of
any of
Branch 1
result.questions[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.questions[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.questions[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.questions[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.questions[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.questions[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.questions[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.questions[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.questions[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.questions[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.codeClaimsarray · optionalRepository-behavior claims proposed by the reviewer; each claim requires bounded citations and is verified before durable publication. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.codeClaims[].claimstring · requiredConcise factual assertion about repository behavior that the evidence checker must verify before publication. Accepted length or value is 1 through 4000, inclusive.
minimum length: 1 · maximum length: 4000
result.codeClaims[].citationsarray · requiredBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 5
Array item · any of
any of
Branch 1
result.codeClaims[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.codeClaims[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.codeClaims[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.codeClaims[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.codeClaims[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.codeClaims[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.codeClaims[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.codeClaims[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.codeClaims[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.codeClaims[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.codeClaims[].consequencestring · optionalConcrete impact if the finding is left unresolved, used to explain its severity and required follow-up. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive.
minimum length: 1 · maximum length: 4000
result.codeClaims[].uncertaintystring · optionalBounded explanation of any residual uncertainty in a repository claim after examining the cited evidence. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive.
minimum length: 1 · maximum length: 4000
result.codeClaims[].recommendationstring · optionalReviewer-recommended answer to the decision question, supplied so the respondent can accept or override it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive.
minimum length: 1 · maximum length: 4000
result.sectionEditsobject · optionalComplete replacements for supplied brief sections; omitted sections remain unchanged and supplied empty values intentionally clear them, except customerFacingLaunchMessage, which is never cleared and is authored only by Product Review. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.goalstring · optionalConcise statement of the outcome this brief must achieve. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.userPersonaContextstring · optionalUser and situational context that explains who needs the outcome and why. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.customerFacingLaunchMessagestring · optionalCopy-ready end-user launch message stating the capability, value, and one concrete example, authored only by Product Review. Must be 1 to 120 whitespace-separated words; never send an empty value to clear it — omit the key and record a product-definition gap instead.
maximum length: 4000
result.sectionEdits.scopestring · optionalWork explicitly included in this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.outOfScopestring · optionalWork explicitly excluded from this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.requirementsarray · optionalOrdered product requirements; an empty array explicitly records none. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.edgeCasesarray · optionalKnown edge cases the implementation must handle. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.acceptanceCriteriaarray · optionalStable-ID acceptance criteria that define completion of the brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.acceptanceCriteria[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.acceptanceCriteria[].implementationboolean · optionalWhether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.acceptanceCriteria[].manualEvidenceobject · optionalStructured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.acceptanceCriteria[].manualEvidence.rationalestring · requiredDurable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.acceptanceCriteria[].manualEvidence.evidencePathstring · requiredDurable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.acceptanceCriteria[].idstring · optionalStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.acceptanceCriteria[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 5
Array item · any of
any of
Branch 1
result.sectionEdits.acceptanceCriteria[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.sectionEdits.acceptanceCriteria[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.sectionEdits.acceptanceCriteria[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.acceptanceCriteria[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.sectionEdits.acceptanceCriteria[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.sectionEdits.acceptanceCriteria[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.acceptanceCriteria[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.sectionEdits.acceptanceCriteria[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.sectionEdits.acceptanceCriteria[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.acceptanceCriteria[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.sectionEdits.rolesPermissionsarray · optionalRoles and permission boundaries relevant to the feature. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.statesarray · optionalUser-visible and system lifecycle states the feature must represent. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.productSolutionstring · optionalProduct behavior chosen to satisfy the goal and requirements. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.technicalSolutionstring · optionalImplementation approach and major technical constraints. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.dataModelImplicationsstring · optionalRequired data model changes, invariants, and migration implications. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.architectureAssumptionsstring · optionalArchitecture assumptions the implementation relies on. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.designstring · optionalInteraction and visual design requirements for the feature. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.testingQaChecklistarray · optionalMutable QA checklist; checked state and attribution are preserved by server reconciliation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.testingQaChecklist[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.testPlanUnitarray · optionalUnit-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.testPlanIntegrationarray · optionalIntegration-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.testPlanUiUxarray · optionalBrowser, accessibility, and visual verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.openQuestionsarray · optionalUnresolved questions that still require an explicit answer. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.generatedTicketsarray · optionalOrdered implementation work orders derived from this brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.generatedTickets[].idstring · optionalStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.generatedTickets[].titlestring · requiredHuman-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive.
minimum length: 1 · maximum length: 500
result.sectionEdits.generatedTickets[].descriptionany of · optionalHuman-readable explanatory text; null or omission means no description was supplied. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available. Maximum accepted length or value is 10000.
any of
Branch 1
maximum length: 10000
Branch 2
result.sectionEdits.generatedTickets[].boundCriteriaarray · optionalStable acceptance-criterion IDs implemented by this work order. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.generatedTickets[].boundRequirementsarray · optionalStable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.requiredEvidencearray · optionalStable-ID evidence requirements needed to prove completion. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.requiredEvidence[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.requiredEvidence[].implementationboolean · optionalWhether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.requiredEvidence[].manualEvidenceobject · optionalStructured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.requiredEvidence[].manualEvidence.rationalestring · requiredDurable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.requiredEvidence[].manualEvidence.evidencePathstring · requiredDurable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.requiredEvidence[].idstring · optionalStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.requiredEvidence[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 5
Array item · any of
any of
Branch 1
result.sectionEdits.requiredEvidence[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.sectionEdits.requiredEvidence[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.sectionEdits.requiredEvidence[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.requiredEvidence[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.sectionEdits.requiredEvidence[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.sectionEdits.requiredEvidence[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.requiredEvidence[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.sectionEdits.requiredEvidence[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.sectionEdits.requiredEvidence[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.requiredEvidence[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.sectionEdits.decisionsarray · optionalRecorded product or engineering decisions with optional source provenance. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.decisions[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.decisions[].sourcestring · optionalOptional human-readable provenance for the decision. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 1000.
maximum length: 1000
result.sectionEdits.sourceArtifactLinksarray · optionalArtifact labels referenced by the brief; an empty array means none are linked. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.sourceArtifactLinks[].labelstring · requiredHuman-readable label displayed for this record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.sourceArtifactLinks[].kindstring · optionalDiscriminator identifying the typed variant represented by this object. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
result.summaryOfChangesstring · optionalBounded reviewer summary of the submitted section changes for user review and durable history. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
Branch 2
result.findingsarray · optionalReviewer findings associated with the selected brief version. Omission uses the schema default []. An empty array explicitly means no matching items.
default: [] · maximum items: 50
Array item · object
result.findings[].section"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief section key associated with the question, finding, proposal, or decision entry. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.findings[].notestring · requiredReviewer-facing finding detail that explains the observed issue and the evidence-based change requested. Maximum accepted length or value is 4000.
maximum length: 4000
result.findings[].severity"info" | "warn" | "block" · requiredFinding impact level: info is advisory, warn requires attention, and block prevents approval or completion. Allowed values: "info", "warn", "block".
result.findings[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 5
Array item · any of
any of
Branch 1
result.findings[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.findings[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.findings[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.findings[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.findings[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.findings[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.findings[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.findings[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.findings[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.findings[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.questionsarray · optionalDurable decision questions raised by the reviewer; omission defaults to no questions and each supplied question must be actionable. Omission uses the schema default []. An empty array explicitly means no matching items.
default: [] · maximum items: 50
Array item · object
result.questions[].section"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief section key associated with the question, finding, proposal, or decision entry. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.questions[].decisionKeystring · requiredCaller-stable semantic key for one decision question; keep it unchanged across idempotent retries and review passes. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[a-z0-9]+(?:[._-][a-z0-9]+)*$
result.questions[].textstring · requiredHuman-authored or model-produced text for this typed record. Maximum accepted length or value is 4000.
maximum length: 4000
result.questions[].context_excerptstring · optionalOptional bounded context stored with the reviewer decision question. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 2000.
maximum length: 2000
result.questions[].recommendationstring · requiredReviewer-recommended answer to the decision question, supplied so the respondent can accept or override it. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.questions[].recommendationRationalestring · requiredEvidence-based explanation of why the reviewer recommends the proposed answer. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.questions[].consequenceOfDeferringstring · requiredConcrete product or engineering consequence of postponing the requested decision. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.questions[].optionsarray · optionalExplicit answer choices for a decision question; omission means the respondent may provide free-form text. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
minimum items: 2 · maximum items: 5
Array item · string
maximum length: 1000
result.questions[].suggestedRespondentIdstring · requiredOptional Semel user identifier suggested to answer the question. Accepted length or value is 1 through 160, inclusive.
minimum length: 1 · maximum length: 160
result.questions[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 5
Array item · any of
any of
Branch 1
result.questions[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.questions[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.questions[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.questions[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.questions[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.questions[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.questions[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.questions[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.questions[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.questions[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.codeClaimsarray · optionalRepository-behavior claims proposed by the reviewer; each claim requires bounded citations and is verified before durable publication. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.codeClaims[].claimstring · requiredConcise factual assertion about repository behavior that the evidence checker must verify before publication. Accepted length or value is 1 through 4000, inclusive.
minimum length: 1 · maximum length: 4000
result.codeClaims[].citationsarray · requiredBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 5
Array item · any of
any of
Branch 1
result.codeClaims[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.codeClaims[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.codeClaims[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.codeClaims[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.codeClaims[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.codeClaims[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.codeClaims[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.codeClaims[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.codeClaims[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.codeClaims[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.codeClaims[].consequencestring · optionalConcrete impact if the finding is left unresolved, used to explain its severity and required follow-up. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive.
minimum length: 1 · maximum length: 4000
result.codeClaims[].uncertaintystring · optionalBounded explanation of any residual uncertainty in a repository claim after examining the cited evidence. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive.
minimum length: 1 · maximum length: 4000
result.codeClaims[].recommendationstring · optionalReviewer-recommended answer to the decision question, supplied so the respondent can accept or override it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive.
minimum length: 1 · maximum length: 4000
result.sectionEditsobject · optionalComplete replacements for supplied brief sections; omitted sections remain unchanged and supplied empty values intentionally clear them, except customerFacingLaunchMessage, which is never cleared and is authored only by Product Review. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.goalstring · optionalConcise statement of the outcome this brief must achieve. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.userPersonaContextstring · optionalUser and situational context that explains who needs the outcome and why. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.customerFacingLaunchMessagestring · optionalCopy-ready end-user launch message stating the capability, value, and one concrete example, authored only by Product Review. Must be 1 to 120 whitespace-separated words; never send an empty value to clear it — omit the key and record a product-definition gap instead.
maximum length: 4000
result.sectionEdits.scopestring · optionalWork explicitly included in this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.outOfScopestring · optionalWork explicitly excluded from this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.requirementsarray · optionalOrdered product requirements; an empty array explicitly records none. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.edgeCasesarray · optionalKnown edge cases the implementation must handle. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.acceptanceCriteriaarray · optionalStable-ID acceptance criteria that define completion of the brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.acceptanceCriteria[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.acceptanceCriteria[].implementationboolean · optionalWhether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.acceptanceCriteria[].manualEvidenceobject · optionalStructured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.acceptanceCriteria[].manualEvidence.rationalestring · requiredDurable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.acceptanceCriteria[].manualEvidence.evidencePathstring · requiredDurable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.acceptanceCriteria[].idstring · optionalStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.acceptanceCriteria[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 5
Array item · any of
any of
Branch 1
result.sectionEdits.acceptanceCriteria[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.sectionEdits.acceptanceCriteria[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.sectionEdits.acceptanceCriteria[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.acceptanceCriteria[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.sectionEdits.acceptanceCriteria[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.sectionEdits.acceptanceCriteria[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.acceptanceCriteria[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.sectionEdits.acceptanceCriteria[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.sectionEdits.acceptanceCriteria[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.acceptanceCriteria[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.sectionEdits.rolesPermissionsarray · optionalRoles and permission boundaries relevant to the feature. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.statesarray · optionalUser-visible and system lifecycle states the feature must represent. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.productSolutionstring · optionalProduct behavior chosen to satisfy the goal and requirements. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.technicalSolutionstring · optionalImplementation approach and major technical constraints. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.dataModelImplicationsstring · optionalRequired data model changes, invariants, and migration implications. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.architectureAssumptionsstring · optionalArchitecture assumptions the implementation relies on. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.designstring · optionalInteraction and visual design requirements for the feature. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.sectionEdits.testingQaChecklistarray · optionalMutable QA checklist; checked state and attribution are preserved by server reconciliation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.testingQaChecklist[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.testPlanUnitarray · optionalUnit-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.testPlanIntegrationarray · optionalIntegration-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.testPlanUiUxarray · optionalBrowser, accessibility, and visual verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.openQuestionsarray · optionalUnresolved questions that still require an explicit answer. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 1000
result.sectionEdits.generatedTicketsarray · optionalOrdered implementation work orders derived from this brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.generatedTickets[].idstring · optionalStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.generatedTickets[].titlestring · requiredHuman-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive.
minimum length: 1 · maximum length: 500
result.sectionEdits.generatedTickets[].descriptionany of · optionalHuman-readable explanatory text; null or omission means no description was supplied. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available. Maximum accepted length or value is 10000.
any of
Branch 1
maximum length: 10000
Branch 2
result.sectionEdits.generatedTickets[].boundCriteriaarray · optionalStable acceptance-criterion IDs implemented by this work order. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.generatedTickets[].boundRequirementsarray · optionalStable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · string
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.requiredEvidencearray · optionalStable-ID evidence requirements needed to prove completion. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.requiredEvidence[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.requiredEvidence[].implementationboolean · optionalWhether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.requiredEvidence[].manualEvidenceobject · optionalStructured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value.
result.sectionEdits.requiredEvidence[].manualEvidence.rationalestring · requiredDurable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.requiredEvidence[].manualEvidence.evidencePathstring · requiredDurable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.requiredEvidence[].idstring · optionalStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200 · pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$
result.sectionEdits.requiredEvidence[].citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 5
Array item · any of
any of
Branch 1
result.sectionEdits.requiredEvidence[].citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
result.sectionEdits.requiredEvidence[].citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
result.sectionEdits.requiredEvidence[].citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.requiredEvidence[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
result.sectionEdits.requiredEvidence[].citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
result.sectionEdits.requiredEvidence[].citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.requiredEvidence[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
result.sectionEdits.requiredEvidence[].citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
result.sectionEdits.requiredEvidence[].citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
result.sectionEdits.requiredEvidence[].citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
result.sectionEdits.decisionsarray · optionalRecorded product or engineering decisions with optional source provenance. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.decisions[].textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.decisions[].sourcestring · optionalOptional human-readable provenance for the decision. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 1000.
maximum length: 1000
result.sectionEdits.sourceArtifactLinksarray · optionalArtifact labels referenced by the brief; an empty array means none are linked. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
result.sectionEdits.sourceArtifactLinks[].labelstring · requiredHuman-readable label displayed for this record. Accepted length or value is 1 through 1000, inclusive.
minimum length: 1 · maximum length: 1000
result.sectionEdits.sourceArtifactLinks[].kindstring · optionalDiscriminator identifying the typed variant represented by this object. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
result.summaryOfChangesstring · optionalBounded reviewer summary of the submitted section changes for user review and durable history. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000.
maximum length: 4000
result.reviewerIdentityobject · requiredServer-stamped reviewer occurrence identity, or the bounded occurrence echo accepted from a schema-2 result.
result.reviewerIdentity.schemaVersion2 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 2.
result.reviewerIdentity.occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"submissionRevision": 1,
"canonicalBundleSha256": "fe4c3e639e846e481ebd4512b4c0a04d4ad1b3c80a6a132212ea632f0a1656e8",
"result": {
"reviewer": "engineering",
"findings": [],
"questions": [],
"summaryOfChanges": "Validated retry-safe payment intent reuse."
},
"idempotencyKey": "recipe-execution-submit-v1"
}{
"executionId": "{{executionId}}",
"fenceGeneration": 1,
"submissionRevision": 1,
"canonicalBundleSha256": "{{canonicalBundleSha256}}",
"result": {
"reviewer": "engineering",
"findings": [],
"questions": [],
"summaryOfChanges": "Validated retry-safe payment intent reuse."
},
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer."
},
"submissionRevision": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Monotonic final-submission attempt number for this execution, starting at 1. Minimum accepted length or value is 0. The value must be an integer."
},
"canonicalBundleSha256": {
"type": "string",
"minLength": 1,
"description": "Lowercase hexadecimal SHA-256 digest of the frozen canonical execution bundle. Minimum accepted length or value is 1."
},
"protocolVersion": {
"type": "string",
"const": "1.2",
"description": "Semel external-execution protocol version used for this bundle or state. Omit the field when it does not apply; omission is distinct from an empty value. This branch always uses \"1.2\"."
},
"resultIdentitySchemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the reviewer identity schema required for this execution result. Omit the field when it does not apply; omission is distinct from an empty value. This branch always uses 2."
},
"result": {
"anyOf": [
{
"type": "object",
"properties": {
"reviewer": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Reviewer role responsible for this submitted result. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief section key associated with the question, finding, proposal, or decision entry. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"note": {
"type": "string",
"maxLength": 4000,
"description": "Reviewer-facing finding detail that explains the observed issue and the evidence-based change requested. Maximum accepted length or value is 4000."
},
"severity": {
"type": "string",
"enum": [
"info",
"warn",
"block"
],
"description": "Finding impact level: info is advisory, warn requires attention, and block prevents approval or completion. Allowed values: \"info\", \"warn\", \"block\"."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"section",
"note",
"severity"
],
"additionalProperties": false
},
"maxItems": 50,
"default": [],
"description": "Reviewer findings associated with the selected brief version. Omission uses the schema default []. An empty array explicitly means no matching items."
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief section key associated with the question, finding, proposal, or decision entry. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"decisionKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$",
"description": "Caller-stable semantic key for one decision question; keep it unchanged across idempotent retries and review passes. Accepted length or value is 1 through 200, inclusive."
},
"text": {
"type": "string",
"maxLength": 4000,
"description": "Human-authored or model-produced text for this typed record. Maximum accepted length or value is 4000."
},
"context_excerpt": {
"type": "string",
"maxLength": 2000,
"description": "Optional bounded context stored with the reviewer decision question. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 2000."
},
"recommendation": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Reviewer-recommended answer to the decision question, supplied so the respondent can accept or override it. Accepted length or value is 1 through 1200, inclusive."
},
"recommendationRationale": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Evidence-based explanation of why the reviewer recommends the proposed answer. Accepted length or value is 1 through 1200, inclusive."
},
"consequenceOfDeferring": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Concrete product or engineering consequence of postponing the requested decision. Accepted length or value is 1 through 1200, inclusive."
},
"options": {
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
},
"minItems": 2,
"maxItems": 5,
"description": "Explicit answer choices for a decision question; omission means the respondent may provide free-form text. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"suggestedRespondentId": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Optional Semel user identifier suggested to answer the question. Accepted length or value is 1 through 160, inclusive."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"section",
"decisionKey",
"text",
"recommendation",
"recommendationRationale",
"consequenceOfDeferring",
"suggestedRespondentId"
],
"additionalProperties": false
},
"maxItems": 50,
"default": [],
"description": "Durable decision questions raised by the reviewer; omission defaults to no questions and each supplied question must be actionable. Omission uses the schema default []. An empty array explicitly means no matching items."
},
"codeClaims": {
"type": "array",
"items": {
"type": "object",
"properties": {
"claim": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Concise factual assertion about repository behavior that the evidence checker must verify before publication. Accepted length or value is 1 through 4000, inclusive."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. An empty array explicitly means no matching items."
},
"consequence": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Concrete impact if the finding is left unresolved, used to explain its severity and required follow-up. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive."
},
"uncertainty": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Bounded explanation of any residual uncertainty in a repository claim after examining the cited evidence. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive."
},
"recommendation": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Reviewer-recommended answer to the decision question, supplied so the respondent can accept or override it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive."
}
},
"required": [
"claim",
"citations"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Repository-behavior claims proposed by the reviewer; each claim requires bounded citations and is verified before durable publication. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"sectionEdits": {
"type": "object",
"properties": {
"goal": {
"type": "string",
"maxLength": 4000,
"description": "Concise statement of the outcome this brief must achieve. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"userPersonaContext": {
"type": "string",
"maxLength": 4000,
"description": "User and situational context that explains who needs the outcome and why. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"customerFacingLaunchMessage": {
"type": "string",
"maxLength": 4000,
"description": "Copy-ready end-user launch message stating the capability, value, and one concrete example, authored only by Product Review. Must be 1 to 120 whitespace-separated words; never send an empty value to clear it — omit the key and record a product-definition gap instead."
},
"scope": {
"type": "string",
"maxLength": 4000,
"description": "Work explicitly included in this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"outOfScope": {
"type": "string",
"maxLength": 4000,
"description": "Work explicitly excluded from this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"requirements": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Ordered product requirements; an empty array explicitly records none. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"edgeCases": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Known edge cases the implementation must handle. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"acceptanceCriteria": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"implementation": {
"type": "boolean",
"description": "Whether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value."
},
"manualEvidence": {
"type": "object",
"properties": {
"rationale": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive."
},
"evidencePath": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"rationale",
"evidencePath"
],
"additionalProperties": false,
"description": "Structured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value."
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Stable-ID acceptance criteria that define completion of the brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"rolesPermissions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Roles and permission boundaries relevant to the feature. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"states": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "User-visible and system lifecycle states the feature must represent. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"productSolution": {
"type": "string",
"maxLength": 4000,
"description": "Product behavior chosen to satisfy the goal and requirements. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"technicalSolution": {
"type": "string",
"maxLength": 4000,
"description": "Implementation approach and major technical constraints. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"dataModelImplications": {
"type": "string",
"maxLength": 4000,
"description": "Required data model changes, invariants, and migration implications. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"architectureAssumptions": {
"type": "string",
"maxLength": 4000,
"description": "Architecture assumptions the implementation relies on. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"design": {
"type": "string",
"maxLength": 4000,
"description": "Interaction and visual design requirements for the feature. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"testingQaChecklist": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Mutable QA checklist; checked state and attribution are preserved by server reconciliation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanUnit": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Unit-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanIntegration": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Integration-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanUiUx": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Browser, accessibility, and visual verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"openQuestions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Unresolved questions that still require an explicit answer. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"generatedTickets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Human-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 10000
},
{
"type": "null"
}
],
"description": "Human-readable explanatory text; null or omission means no description was supplied. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available. Maximum accepted length or value is 10000."
},
"boundCriteria": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"maxItems": 50,
"description": "Stable acceptance-criterion IDs implemented by this work order. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"boundRequirements": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"maxItems": 50,
"description": "Stable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"title"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Ordered implementation work orders derived from this brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"requiredEvidence": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"implementation": {
"type": "boolean",
"description": "Whether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value."
},
"manualEvidence": {
"type": "object",
"properties": {
"rationale": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive."
},
"evidencePath": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"rationale",
"evidencePath"
],
"additionalProperties": false,
"description": "Structured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value."
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Stable-ID evidence requirements needed to prove completion. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"decisions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"source": {
"type": "string",
"maxLength": 1000,
"description": "Optional human-readable provenance for the decision. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 1000."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Recorded product or engineering decisions with optional source provenance. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"sourceArtifactLinks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-readable label displayed for this record. Accepted length or value is 1 through 1000, inclusive."
},
"kind": {
"type": "string",
"maxLength": 200,
"description": "Discriminator identifying the typed variant represented by this object. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
}
},
"required": [
"label"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Artifact labels referenced by the brief; an empty array means none are linked. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"additionalProperties": false,
"description": "Complete replacements for supplied brief sections; omitted sections remain unchanged and supplied empty values intentionally clear them, except customerFacingLaunchMessage, which is never cleared and is authored only by Product Review. Omit the field when it does not apply; omission is distinct from an empty value."
},
"summaryOfChanges": {
"type": "string",
"maxLength": 4000,
"description": "Bounded reviewer summary of the submitted section changes for user review and durable history. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
}
},
"required": [
"reviewer"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief section key associated with the question, finding, proposal, or decision entry. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"note": {
"type": "string",
"maxLength": 4000,
"description": "Reviewer-facing finding detail that explains the observed issue and the evidence-based change requested. Maximum accepted length or value is 4000."
},
"severity": {
"type": "string",
"enum": [
"info",
"warn",
"block"
],
"description": "Finding impact level: info is advisory, warn requires attention, and block prevents approval or completion. Allowed values: \"info\", \"warn\", \"block\"."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"section",
"note",
"severity"
],
"additionalProperties": false
},
"maxItems": 50,
"default": [],
"description": "Reviewer findings associated with the selected brief version. Omission uses the schema default []. An empty array explicitly means no matching items."
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief section key associated with the question, finding, proposal, or decision entry. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"decisionKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$",
"description": "Caller-stable semantic key for one decision question; keep it unchanged across idempotent retries and review passes. Accepted length or value is 1 through 200, inclusive."
},
"text": {
"type": "string",
"maxLength": 4000,
"description": "Human-authored or model-produced text for this typed record. Maximum accepted length or value is 4000."
},
"context_excerpt": {
"type": "string",
"maxLength": 2000,
"description": "Optional bounded context stored with the reviewer decision question. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 2000."
},
"recommendation": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Reviewer-recommended answer to the decision question, supplied so the respondent can accept or override it. Accepted length or value is 1 through 1200, inclusive."
},
"recommendationRationale": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Evidence-based explanation of why the reviewer recommends the proposed answer. Accepted length or value is 1 through 1200, inclusive."
},
"consequenceOfDeferring": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Concrete product or engineering consequence of postponing the requested decision. Accepted length or value is 1 through 1200, inclusive."
},
"options": {
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
},
"minItems": 2,
"maxItems": 5,
"description": "Explicit answer choices for a decision question; omission means the respondent may provide free-form text. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"suggestedRespondentId": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Optional Semel user identifier suggested to answer the question. Accepted length or value is 1 through 160, inclusive."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"section",
"decisionKey",
"text",
"recommendation",
"recommendationRationale",
"consequenceOfDeferring",
"suggestedRespondentId"
],
"additionalProperties": false
},
"maxItems": 50,
"default": [],
"description": "Durable decision questions raised by the reviewer; omission defaults to no questions and each supplied question must be actionable. Omission uses the schema default []. An empty array explicitly means no matching items."
},
"codeClaims": {
"type": "array",
"items": {
"type": "object",
"properties": {
"claim": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Concise factual assertion about repository behavior that the evidence checker must verify before publication. Accepted length or value is 1 through 4000, inclusive."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. An empty array explicitly means no matching items."
},
"consequence": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Concrete impact if the finding is left unresolved, used to explain its severity and required follow-up. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive."
},
"uncertainty": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Bounded explanation of any residual uncertainty in a repository claim after examining the cited evidence. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive."
},
"recommendation": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Reviewer-recommended answer to the decision question, supplied so the respondent can accept or override it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 4000, inclusive."
}
},
"required": [
"claim",
"citations"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Repository-behavior claims proposed by the reviewer; each claim requires bounded citations and is verified before durable publication. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"sectionEdits": {
"type": "object",
"properties": {
"goal": {
"type": "string",
"maxLength": 4000,
"description": "Concise statement of the outcome this brief must achieve. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"userPersonaContext": {
"type": "string",
"maxLength": 4000,
"description": "User and situational context that explains who needs the outcome and why. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"customerFacingLaunchMessage": {
"type": "string",
"maxLength": 4000,
"description": "Copy-ready end-user launch message stating the capability, value, and one concrete example, authored only by Product Review. Must be 1 to 120 whitespace-separated words; never send an empty value to clear it — omit the key and record a product-definition gap instead."
},
"scope": {
"type": "string",
"maxLength": 4000,
"description": "Work explicitly included in this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"outOfScope": {
"type": "string",
"maxLength": 4000,
"description": "Work explicitly excluded from this brief. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"requirements": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Ordered product requirements; an empty array explicitly records none. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"edgeCases": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Known edge cases the implementation must handle. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"acceptanceCriteria": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"implementation": {
"type": "boolean",
"description": "Whether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value."
},
"manualEvidence": {
"type": "object",
"properties": {
"rationale": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive."
},
"evidencePath": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"rationale",
"evidencePath"
],
"additionalProperties": false,
"description": "Structured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value."
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Stable-ID acceptance criteria that define completion of the brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"rolesPermissions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Roles and permission boundaries relevant to the feature. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"states": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "User-visible and system lifecycle states the feature must represent. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"productSolution": {
"type": "string",
"maxLength": 4000,
"description": "Product behavior chosen to satisfy the goal and requirements. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"technicalSolution": {
"type": "string",
"maxLength": 4000,
"description": "Implementation approach and major technical constraints. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"dataModelImplications": {
"type": "string",
"maxLength": 4000,
"description": "Required data model changes, invariants, and migration implications. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"architectureAssumptions": {
"type": "string",
"maxLength": 4000,
"description": "Architecture assumptions the implementation relies on. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"design": {
"type": "string",
"maxLength": 4000,
"description": "Interaction and visual design requirements for the feature. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"testingQaChecklist": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Mutable QA checklist; checked state and attribution are preserved by server reconciliation. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanUnit": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Unit-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanIntegration": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Integration-level verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"testPlanUiUx": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Browser, accessibility, and visual verification plan. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"openQuestions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"maxItems": 50,
"description": "Unresolved questions that still require an explicit answer. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"generatedTickets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Human-readable title displayed in Semel. Accepted length or value is 1 through 500, inclusive."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 10000
},
{
"type": "null"
}
],
"description": "Human-readable explanatory text; null or omission means no description was supplied. Omit the field when it does not apply; omission is distinct from an empty value. A null value explicitly means no current value is available. Maximum accepted length or value is 10000."
},
"boundCriteria": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"maxItems": 50,
"description": "Stable acceptance-criterion IDs implemented by this work order. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"boundRequirements": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"maxItems": 50,
"description": "Stable requirement IDs implemented by this work order; omission is tolerated only for legacy reads. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"title"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Ordered implementation work orders derived from this brief. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"requiredEvidence": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"implementation": {
"type": "boolean",
"description": "Whether this criterion requires implementation; omission defaults to implementation work. Omit the field when it does not apply; omission is distinct from an empty value."
},
"manualEvidence": {
"type": "object",
"properties": {
"rationale": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable explanation for why this item is exempted from implementation work. Accepted length or value is 1 through 1000, inclusive."
},
"evidencePath": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Durable location or procedure for collecting the manual evidence. Accepted length or value is 1 through 1000, inclusive."
}
},
"required": [
"rationale",
"evidencePath"
],
"additionalProperties": false,
"description": "Structured exemption required when implementation is explicitly false. Omit the field when it does not apply; omission is distinct from an empty value."
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"maxItems": 5,
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Stable-ID evidence requirements needed to prove completion. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"decisions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 1000, inclusive."
},
"source": {
"type": "string",
"maxLength": 1000,
"description": "Optional human-readable provenance for the decision. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 1000."
}
},
"required": [
"text"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Recorded product or engineering decisions with optional source provenance. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"sourceArtifactLinks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Human-readable label displayed for this record. Accepted length or value is 1 through 1000, inclusive."
},
"kind": {
"type": "string",
"maxLength": 200,
"description": "Discriminator identifying the typed variant represented by this object. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
}
},
"required": [
"label"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Artifact labels referenced by the brief; an empty array means none are linked. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
}
},
"additionalProperties": false,
"description": "Complete replacements for supplied brief sections; omitted sections remain unchanged and supplied empty values intentionally clear them, except customerFacingLaunchMessage, which is never cleared and is authored only by Product Review. Omit the field when it does not apply; omission is distinct from an empty value."
},
"summaryOfChanges": {
"type": "string",
"maxLength": 4000,
"description": "Bounded reviewer summary of the submitted section changes for user review and durable history. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 4000."
},
"reviewerIdentity": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 2,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 2."
},
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
}
},
"required": [
"schemaVersion",
"occurrenceId"
],
"additionalProperties": false,
"description": "Server-stamped reviewer occurrence identity, or the bounded occurrence echo accepted from a schema-2 result."
}
},
"required": [
"reviewerIdentity"
],
"additionalProperties": false
}
],
"description": "Complete typed reviewer submission produced against the frozen execution bundle."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"executionId",
"fenceGeneration",
"submissionRevision",
"canonicalBundleSha256",
"result",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
any of
Branch 1
status"completed" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "completed".
outcome"version_created" | "no_change" · requiredTyped result of this operation; union branches define the follow-up action for each value. Allowed values: "version_created", "no_change".
briefVersionIdstring | null · requiredImmutable brief-version identifier created or selected by finalization; null means no version was produced. A null value explicitly means no current value is available.
briefVersionNumany of · requiredMonotonic brief-version number created or selected by finalization; null means no version was produced. A null value explicitly means no current value is available. The value must be an integer.
any of
Branch 1
Branch 2
certificateReferenceany of · requiredReference to the terminal execution certificate when finalization has produced one; null means no certificate exists yet. A null value explicitly means no current value is available.
any of
Branch 1
certificateReference.certificateIdstring · requiredExecution-certificate identifier assigned after successful finalization.
certificateReference.statestring · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
Branch 2
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
cascadeany of · optionalObserved next-step cascade handoff after submission or review admission. Omit the field when it does not apply; omission is distinct from an empty value.
any of
Branch 1
cascade.status"awaiting_local_claim" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "awaiting_local_claim".
cascade.runIdstring · requiredReview-run identifier returned by a review start, status, or cascade handoff result.
cascade.reviewSessionIdstring | null · requiredReview-session identifier returned by review_start, review_new_pass, or execution status. A null value explicitly means no current value is available.
cascade.cascadeStepIdstring · requiredIdentifier of the configured reviewer-cascade step associated with this run.
cascade.grantApprovalUristring · optionalSemel URI for approving the next external execution grant; omit until available. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
cascade.controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
cascade.controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
cascade.controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
cascade.controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
cascade.controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
cascade.controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
cascade.controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
cascade.controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
cascade.controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
cascade.controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
cascade.controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
cascade.controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
cascade.controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
cascade.controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
cascade.controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
cascade.controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
cascade.controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
cascade.controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
cascade.controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
cascade.controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
cascade.controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
cascade.controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
cascade.controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
cascade.controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
cascade.controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
cascade.controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
Branch 2
cascade.status"in_progress" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "in_progress".
cascade.runIdstring · requiredReview-run identifier returned by a review start, status, or cascade handoff result.
cascade.reviewSessionIdstring | null · requiredReview-session identifier returned by review_start, review_new_pass, or execution status. A null value explicitly means no current value is available.
cascade.cascadeStepIdstring · requiredIdentifier of the configured reviewer-cascade step associated with this run.
cascade.executionany of · requiredRequested or observed execution lane: hosted Semel execution or local external execution. A null value explicitly means no current value is available. Allowed values: "hosted", "local".
any of
Branch 1
Branch 2
Branch 3
cascade.status"settled" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "settled".
cascade.runIdstring · requiredReview-run identifier returned by a review start, status, or cascade handoff result.
cascade.cascadeStepIdstring · requiredIdentifier of the configured reviewer-cascade step associated with this run.
cascade.runStatusstring · requiredTerminal or current review-run status returned by finalization when no additional cascade dispatch is required.
Branch 4
cascade.status"gate_wait" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "gate_wait".
cascade.cascadeStepIdstring · requiredIdentifier of the configured reviewer-cascade step associated with this run.
Branch 5
cascade.status"blocked" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "blocked".
cascade.cascadeStepIdstring · requiredIdentifier of the configured reviewer-cascade step associated with this run.
cascade.reason"cap_exceeded" · requiredTyped or human-readable reason for the current outcome; omission means no reason is required. This branch always uses "cap_exceeded".
cascade.hardCapCentsinteger · requiredWorkspace hard spending cap in integer US-dollar cents. The value must be an integer.
cascade.spentThisMonthCentsinteger · requiredWorkspace spend in integer US-dollar cents for the current billing month. The value must be an integer.
Branch 6
cascade.status"cascade_complete" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "cascade_complete".
Branch 7
cascade.status"none" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "none".
Branch 8
cascade.status"pending" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "pending".
cascade.reasonstring · requiredTyped or human-readable reason for the current outcome; omission means no reason is required.
Branch 2
status"repair_required" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "repair_required".
submissionRevisioninteger · requiredMonotonic final-submission attempt number for this execution, starting at 1. The value must be an integer.
payloadSha256string · requiredLowercase hexadecimal SHA-256 digest of the canonical submitted payload.
violationsarray · requiredSafe structured validation failures that must be repaired before resubmission. An empty array explicitly means no matching items.
minimum items: 1
Array item · object
violations[].pointerstring · requiredRFC 6901 JSON Pointer locating the invalid result property; an empty pointer refers to the result root.
violations[].ruleIdstring · requiredStable validation-rule identifier for this violation.
violations[].remediationCategorystring · requiredMachine-readable category describing the required correction.
violations[].messagestring · requiredUser-facing validation or remediation message that contains no secret material.
remainingRepairAttemptsinteger · requiredDistinct corrected submissions still allowed before operator attention is required. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
Branch 3
status"needs_attention" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "needs_attention".
reason"repair_budget_exhausted" | "non_repairable" · requiredTyped or human-readable reason for the current outcome; omission means no reason is required. Allowed values: "repair_budget_exhausted", "non_repairable".
submissionRevisioninteger · requiredMonotonic final-submission attempt number for this execution, starting at 1. The value must be an integer.
violationsarray · requiredSafe structured validation failures that must be repaired before resubmission. An empty array explicitly means no matching items.
Array item · object
violations[].pointerstring · requiredRFC 6901 JSON Pointer locating the invalid result property; an empty pointer refers to the result root.
violations[].ruleIdstring · requiredStable validation-rule identifier for this violation.
violations[].remediationCategorystring · requiredMachine-readable category describing the required correction.
violations[].messagestring · requiredUser-facing validation or remediation message that contains no secret material.
historyarray · requiredComplete safe submission-validation history, oldest attempt first. An empty array explicitly means no matching items.
Array item · object
history[].submissionRevisioninteger · requiredMonotonic final-submission attempt number for this execution, starting at 1. The value must be an integer.
history[].payloadSha256string · requiredLowercase hexadecimal SHA-256 digest of the canonical submitted payload.
history[].outcome"repair_required" | "needs_attention" | "version_conflict" | "completed" · requiredTyped result of this operation; union branches define the follow-up action for each value. Allowed values: "repair_required", "needs_attention", "version_conflict", "completed".
history[].violationsarray · requiredSafe structured validation failures that must be repaired before resubmission. An empty array explicitly means no matching items.
Array item · object
history[].violations[].pointerstring · requiredRFC 6901 JSON Pointer locating the invalid result property; an empty pointer refers to the result root.
history[].violations[].ruleIdstring · requiredStable validation-rule identifier for this violation.
history[].violations[].remediationCategorystring · requiredMachine-readable category describing the required correction.
history[].violations[].messagestring · requiredUser-facing validation or remediation message that contains no secret material.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
Branch 4
status"version_conflict" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "version_conflict".
pinnedBriefBaseVersionIdstring · requiredImmutable brief-version identifier frozen when the execution began and used for stale-base detection.
pinnedBriefBaseVersionNuminteger · requiredMonotonic brief-version number frozen when the execution began and used for stale-base detection. The value must be an integer.
currentBriefVersionIdstring · requiredImmutable identifier of the current canonical brief version reported after a stale-base rejection.
currentBriefVersionNuminteger · requiredMonotonic number of the current canonical brief version reported after a stale-base rejection. The value must be an integer.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"status": "completed",
"outcome": "no_change",
"briefVersionId": null,
"briefVersionNum": null,
"certificateReference": {
"certificateId": "example",
"state": "pending"
},
"controlBlock": {
"state": {
"sessionState": "completed",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": true,
"unmetRequirements": [],
"certificateState": "pending"
},
"progress": {
"checkpointHighWaterMark": 5,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
},
"cascade": {
"status": "awaiting_local_claim",
"runId": "run_fixture_review",
"reviewSessionId": "rs_fixture_engineering",
"cascadeStepId": "example",
"controlBlock": {
"state": {
"sessionState": "awaiting_local_claim",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_grant_request",
"preconditions": [
"A human must approve the execution grant before a harness can claim this run."
]
},
{
"operation": "review_execution_wait",
"preconditions": [
"A human must approve the execution grant before a harness can claim this run."
]
},
{
"operation": "review_execution_claim",
"preconditions": [
"A human must approve the execution grant before a harness can claim this run."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}{
"content": [
{
"type": "text",
"text": "{\"status\":\"completed\",\"outcome\":\"no_change\",\"briefVersionId\":null,\"briefVersionNum\":null,\"certificateReference\":{\"certificateId\":\"example\",\"state\":\"pending\"},\"controlBlock\":{\"state\":{\"sessionState\":\"completed\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":true,\"unmetRequirements\":[],\"certificateState\":\"pending\"},\"progress\":{\"checkpointHighWaterMark\":5,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}},\"cascade\":{\"status\":\"awaiting_local_claim\",\"runId\":\"run_fixture_review\",\"reviewSessionId\":\"rs_fixture_engineering\",\"cascadeStepId\":\"example\",\"controlBlock\":{\"state\":{\"sessionState\":\"awaiting_local_claim\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_grant_request\",\"preconditions\":[\"A human must approve the execution grant before a harness can claim this run.\"]},{\"operation\":\"review_execution_wait\",\"preconditions\":[\"A human must approve the execution grant before a harness can claim this run.\"]},{\"operation\":\"review_execution_claim\",\"preconditions\":[\"A human must approve the execution grant before a harness can claim this run.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":0,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}}"
}
],
"structuredContent": {
"status": "completed",
"outcome": "no_change",
"briefVersionId": null,
"briefVersionNum": null,
"certificateReference": {
"certificateId": "example",
"state": "pending"
},
"controlBlock": {
"state": {
"sessionState": "completed",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": true,
"unmetRequirements": [],
"certificateState": "pending"
},
"progress": {
"checkpointHighWaterMark": 5,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
},
"cascade": {
"status": "awaiting_local_claim",
"runId": "run_fixture_review",
"reviewSessionId": "rs_fixture_engineering",
"cascadeStepId": "example",
"controlBlock": {
"state": {
"sessionState": "awaiting_local_claim",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_grant_request",
"preconditions": [
"A human must approve the execution grant before a harness can claim this run."
]
},
{
"operation": "review_execution_wait",
"preconditions": [
"A human must approve the execution grant before a harness can claim this run."
]
},
{
"operation": "review_execution_claim",
"preconditions": [
"A human must approve the execution grant before a harness can claim this run."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}
}- cascade ← structuredContent.cascade
Next permitted action: Follow cascade.status; request the next grant only for awaiting_local_claim and never wait for certificate signing.
Complete raw result schema
{
"anyOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "completed",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"completed\"."
},
"outcome": {
"type": "string",
"enum": [
"version_created",
"no_change"
],
"description": "Typed result of this operation; union branches define the follow-up action for each value. Allowed values: \"version_created\", \"no_change\"."
},
"briefVersionId": {
"type": [
"string",
"null"
],
"description": "Immutable brief-version identifier created or selected by finalization; null means no version was produced. A null value explicitly means no current value is available."
},
"briefVersionNum": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Monotonic brief-version number created or selected by finalization; null means no version was produced. A null value explicitly means no current value is available. The value must be an integer."
},
"certificateReference": {
"anyOf": [
{
"type": "object",
"properties": {
"certificateId": {
"type": "string",
"description": "Execution-certificate identifier assigned after successful finalization."
},
"state": {
"type": "string",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
}
},
"required": [
"certificateId",
"state"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Reference to the terminal execution certificate when finalization has produced one; null means no certificate exists yet. A null value explicitly means no current value is available."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
},
"cascade": {
"anyOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "awaiting_local_claim",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"awaiting_local_claim\"."
},
"runId": {
"type": "string",
"description": "Review-run identifier returned by a review start, status, or cascade handoff result."
},
"reviewSessionId": {
"type": [
"string",
"null"
],
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. A null value explicitly means no current value is available."
},
"cascadeStepId": {
"type": "string",
"description": "Identifier of the configured reviewer-cascade step associated with this run."
},
"grantApprovalUri": {
"type": "string",
"description": "Semel URI for approving the next external execution grant; omit until available. Omit the field when it does not apply; omission is distinct from an empty value."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"status",
"runId",
"reviewSessionId",
"cascadeStepId",
"controlBlock"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "in_progress",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"in_progress\"."
},
"runId": {
"type": "string",
"description": "Review-run identifier returned by a review start, status, or cascade handoff result."
},
"reviewSessionId": {
"type": [
"string",
"null"
],
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. A null value explicitly means no current value is available."
},
"cascadeStepId": {
"type": "string",
"description": "Identifier of the configured reviewer-cascade step associated with this run."
},
"execution": {
"anyOf": [
{
"type": "string",
"enum": [
"hosted",
"local"
]
},
{
"type": "null"
}
],
"description": "Requested or observed execution lane: hosted Semel execution or local external execution. A null value explicitly means no current value is available. Allowed values: \"hosted\", \"local\"."
}
},
"required": [
"status",
"runId",
"reviewSessionId",
"cascadeStepId",
"execution"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "settled",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"settled\"."
},
"runId": {
"type": "string",
"description": "Review-run identifier returned by a review start, status, or cascade handoff result."
},
"cascadeStepId": {
"type": "string",
"description": "Identifier of the configured reviewer-cascade step associated with this run."
},
"runStatus": {
"type": "string",
"description": "Terminal or current review-run status returned by finalization when no additional cascade dispatch is required."
}
},
"required": [
"status",
"runId",
"cascadeStepId",
"runStatus"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "gate_wait",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"gate_wait\"."
},
"cascadeStepId": {
"type": "string",
"description": "Identifier of the configured reviewer-cascade step associated with this run."
}
},
"required": [
"status",
"cascadeStepId"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "blocked",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"blocked\"."
},
"cascadeStepId": {
"type": "string",
"description": "Identifier of the configured reviewer-cascade step associated with this run."
},
"reason": {
"type": "string",
"const": "cap_exceeded",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. This branch always uses \"cap_exceeded\"."
},
"hardCapCents": {
"type": "integer",
"description": "Workspace hard spending cap in integer US-dollar cents. The value must be an integer."
},
"spentThisMonthCents": {
"type": "integer",
"description": "Workspace spend in integer US-dollar cents for the current billing month. The value must be an integer."
}
},
"required": [
"status",
"cascadeStepId",
"reason",
"hardCapCents",
"spentThisMonthCents"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "cascade_complete",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"cascade_complete\"."
}
},
"required": [
"status"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "none",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"none\"."
}
},
"required": [
"status"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "pending",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"pending\"."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required."
}
},
"required": [
"status",
"reason"
],
"additionalProperties": false
}
],
"description": "Observed next-step cascade handoff after submission or review admission. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"status",
"outcome",
"briefVersionId",
"briefVersionNum",
"certificateReference",
"controlBlock"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "repair_required",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"repair_required\"."
},
"submissionRevision": {
"type": "integer",
"description": "Monotonic final-submission attempt number for this execution, starting at 1. The value must be an integer."
},
"payloadSha256": {
"type": "string",
"description": "Lowercase hexadecimal SHA-256 digest of the canonical submitted payload."
},
"violations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"pointer": {
"type": "string",
"description": "RFC 6901 JSON Pointer locating the invalid result property; an empty pointer refers to the result root."
},
"ruleId": {
"type": "string",
"description": "Stable validation-rule identifier for this violation."
},
"remediationCategory": {
"type": "string",
"description": "Machine-readable category describing the required correction."
},
"message": {
"type": "string",
"description": "User-facing validation or remediation message that contains no secret material."
}
},
"required": [
"pointer",
"ruleId",
"remediationCategory",
"message"
],
"additionalProperties": false
},
"minItems": 1,
"description": "Safe structured validation failures that must be repaired before resubmission. An empty array explicitly means no matching items."
},
"remainingRepairAttempts": {
"type": "integer",
"minimum": 0,
"description": "Distinct corrected submissions still allowed before operator attention is required. Minimum accepted length or value is 0. The value must be an integer."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"status",
"submissionRevision",
"payloadSha256",
"violations",
"remainingRepairAttempts",
"controlBlock"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "needs_attention",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"needs_attention\"."
},
"reason": {
"type": "string",
"enum": [
"repair_budget_exhausted",
"non_repairable"
],
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Allowed values: \"repair_budget_exhausted\", \"non_repairable\"."
},
"submissionRevision": {
"type": "integer",
"description": "Monotonic final-submission attempt number for this execution, starting at 1. The value must be an integer."
},
"violations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"pointer": {
"type": "string",
"description": "RFC 6901 JSON Pointer locating the invalid result property; an empty pointer refers to the result root."
},
"ruleId": {
"type": "string",
"description": "Stable validation-rule identifier for this violation."
},
"remediationCategory": {
"type": "string",
"description": "Machine-readable category describing the required correction."
},
"message": {
"type": "string",
"description": "User-facing validation or remediation message that contains no secret material."
}
},
"required": [
"pointer",
"ruleId",
"remediationCategory",
"message"
],
"additionalProperties": false
},
"description": "Safe structured validation failures that must be repaired before resubmission. An empty array explicitly means no matching items."
},
"history": {
"type": "array",
"items": {
"type": "object",
"properties": {
"submissionRevision": {
"type": "integer",
"description": "Monotonic final-submission attempt number for this execution, starting at 1. The value must be an integer."
},
"payloadSha256": {
"type": "string",
"description": "Lowercase hexadecimal SHA-256 digest of the canonical submitted payload."
},
"outcome": {
"type": "string",
"enum": [
"repair_required",
"needs_attention",
"version_conflict",
"completed"
],
"description": "Typed result of this operation; union branches define the follow-up action for each value. Allowed values: \"repair_required\", \"needs_attention\", \"version_conflict\", \"completed\"."
},
"violations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"pointer": {
"type": "string",
"description": "RFC 6901 JSON Pointer locating the invalid result property; an empty pointer refers to the result root."
},
"ruleId": {
"type": "string",
"description": "Stable validation-rule identifier for this violation."
},
"remediationCategory": {
"type": "string",
"description": "Machine-readable category describing the required correction."
},
"message": {
"type": "string",
"description": "User-facing validation or remediation message that contains no secret material."
}
},
"required": [
"pointer",
"ruleId",
"remediationCategory",
"message"
],
"additionalProperties": false
},
"description": "Safe structured validation failures that must be repaired before resubmission. An empty array explicitly means no matching items."
}
},
"required": [
"submissionRevision",
"payloadSha256",
"outcome",
"violations"
],
"additionalProperties": false
},
"description": "Complete safe submission-validation history, oldest attempt first. An empty array explicitly means no matching items."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"status",
"reason",
"submissionRevision",
"violations",
"history",
"controlBlock"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "version_conflict",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"version_conflict\"."
},
"pinnedBriefBaseVersionId": {
"type": "string",
"description": "Immutable brief-version identifier frozen when the execution began and used for stale-base detection."
},
"pinnedBriefBaseVersionNum": {
"type": "integer",
"description": "Monotonic brief-version number frozen when the execution began and used for stale-base detection. The value must be an integer."
},
"currentBriefVersionId": {
"type": "string",
"description": "Immutable identifier of the current canonical brief version reported after a stale-base rejection."
},
"currentBriefVersionNum": {
"type": "integer",
"description": "Monotonic number of the current canonical brief version reported after a stale-base rejection. The value must be an integer."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"status",
"pinnedBriefBaseVersionId",
"pinnedBriefBaseVersionNum",
"currentBriefVersionId",
"currentBriefVersionNum",
"controlBlock"
],
"additionalProperties": false
}
]
}review_execution_sync
readCursor-poll for recorded answers, cancellation, handoff, and lease state.
- Mode
- read · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “check whether the operator answered my open question yet”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- review_question_answer, review_execution_status
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
cursorstring · optionalOpaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · optionalCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 0. The value must be an integer.
{
"executionId": "xex_fixture_engineering"
}{
"executionId": "{{executionId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"cursor": {
"type": "string",
"minLength": 1,
"description": "Opaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"executionId"
],
"additionalProperties": false
}Structured result
answersarray · requiredAccepted durable answers emitted since the requested synchronization cursor, in causal order. An empty array explicitly means no matching items.
Array item · object
answers[].questionIdstring · requiredDurable question identifier returned by review_question_open or execution sync.
answers[].answerIdstring · requiredImmutable answer identifier assigned by Semel when an answer attempt is recorded.
answers[].channelstring · requiredTyped delivery or answer channel recorded as provenance.
answers[].answerTextstring · requiredAnswer text supplied for the durable question; the API also enforces the documented UTF-8 byte limit.
answers[].answeredAtstring · requiredRFC 3339 timestamp when the active answer was recorded.
cancellationRequestedboolean · requiredWhether a cancellation request is pending for this execution.
serverCommandsarray · requiredOrdered server commands issued since the supplied synchronization cursor. An empty array explicitly means no matching items.
Array item · object
serverCommands[].commandstring · requiredServer-issued synchronization command the harness must process in order.
serverCommands[].issuedAtstring · requiredRFC 3339 timestamp when the server command was issued.
handoffobject · requiredExecution handoff state relative to the caller’s remembered epoch.
handoff.occurredboolean · requiredWhether an execution handoff occurred since the supplied cursor or epoch.
handoff.currentFenceGenerationinteger · requiredActive execution fence generation; refresh local state to this integer before attempting another fenced write. The value must be an integer.
leaseobject · requiredCurrent lease identity and expiry as observed during synchronization.
lease.fenceGenerationany of · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. A null value explicitly means no current value is available. The value must be an integer.
any of
Branch 1
Branch 2
lease.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
lease.currentboolean · requiredWhether the caller-provided fence generation is still the active execution epoch.
nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
suggestedNextPollAtstring · requiredRFC 3339 timestamp for the next recommended sync or status poll.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"answers": [],
"cancellationRequested": false,
"serverCommands": [],
"handoff": {
"occurred": false,
"currentFenceGeneration": 1
},
"lease": {
"fenceGeneration": 1,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"current": true
},
"nextCursor": null,
"suggestedNextPollAt": "2026-09-07T16:05:00.000Z",
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"answers\":[],\"cancellationRequested\":false,\"serverCommands\":[],\"handoff\":{\"occurred\":false,\"currentFenceGeneration\":1},\"lease\":{\"fenceGeneration\":1,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"current\":true},\"nextCursor\":null,\"suggestedNextPollAt\":\"2026-09-07T16:05:00.000Z\",\"controlBlock\":{\"state\":{\"sessionState\":\"running\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_checkpoint_append\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_question_open\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_submit\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_sync\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":0,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"answers": [],
"cancellationRequested": false,
"serverCommands": [],
"handoff": {
"occurred": false,
"currentFenceGeneration": 1
},
"lease": {
"fenceGeneration": 1,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"current": true
},
"nextCursor": null,
"suggestedNextPollAt": "2026-09-07T16:05:00.000Z",
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 0,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- handoff ← structuredContent.handoff
Next permitted action: Accept cancellation/takeover, or follow the server-provided recovery/grant path.
Complete raw result schema
{
"type": "object",
"properties": {
"answers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"questionId": {
"type": "string",
"description": "Durable question identifier returned by review_question_open or execution sync."
},
"answerId": {
"type": "string",
"description": "Immutable answer identifier assigned by Semel when an answer attempt is recorded."
},
"channel": {
"type": "string",
"description": "Typed delivery or answer channel recorded as provenance."
},
"answerText": {
"type": "string",
"description": "Answer text supplied for the durable question; the API also enforces the documented UTF-8 byte limit."
},
"answeredAt": {
"type": "string",
"description": "RFC 3339 timestamp when the active answer was recorded."
}
},
"required": [
"questionId",
"answerId",
"channel",
"answerText",
"answeredAt"
],
"additionalProperties": false
},
"description": "Accepted durable answers emitted since the requested synchronization cursor, in causal order. An empty array explicitly means no matching items."
},
"cancellationRequested": {
"type": "boolean",
"description": "Whether a cancellation request is pending for this execution."
},
"serverCommands": {
"type": "array",
"items": {
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "Server-issued synchronization command the harness must process in order."
},
"issuedAt": {
"type": "string",
"description": "RFC 3339 timestamp when the server command was issued."
}
},
"required": [
"command",
"issuedAt"
],
"additionalProperties": false
},
"description": "Ordered server commands issued since the supplied synchronization cursor. An empty array explicitly means no matching items."
},
"handoff": {
"type": "object",
"properties": {
"occurred": {
"type": "boolean",
"description": "Whether an execution handoff occurred since the supplied cursor or epoch."
},
"currentFenceGeneration": {
"type": "integer",
"description": "Active execution fence generation; refresh local state to this integer before attempting another fenced write. The value must be an integer."
}
},
"required": [
"occurred",
"currentFenceGeneration"
],
"additionalProperties": false,
"description": "Execution handoff state relative to the caller’s remembered epoch."
},
"lease": {
"type": "object",
"properties": {
"fenceGeneration": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. A null value explicitly means no current value is available. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"current": {
"type": "boolean",
"description": "Whether the caller-provided fence generation is still the active execution epoch."
}
},
"required": [
"fenceGeneration",
"leaseExpiresAt",
"current"
],
"additionalProperties": false,
"description": "Current lease identity and expiry as observed during synchronization."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
},
"suggestedNextPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended sync or status poll."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"answers",
"cancellationRequested",
"serverCommands",
"handoff",
"lease",
"nextCursor",
"suggestedNextPollAt",
"controlBlock"
],
"additionalProperties": false
}review_execution_wait
writeOne cheap, immediate status check a local harness polls while it waits on a human: reports an accepted answer, an approved grant, a cancellation, an expired question, a 24-hour approval timeout, a handoff, or a lost lease, and never holds the call. Claimed mode { executionId, fenceGeneration } renews the caller-held lease; pre-claim mode { reviewSessionId } reports a claimable grant and never returns answer text. On event "none", print nothing and sleep retryAfterSeconds (15 s, then 30 s) before calling again with nextCursor.
- Mode
- write · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “wait for the operator to answer my open question”“wait until my local execution grant is approved”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- review_execution_sync, review_execution_heartbeat, review_execution_grant_request, review_execution_claim
Arguments
executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · optionalCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 0. The value must be an integer.
reviewSessionIdstring · optionalReview-session identifier returned by review_start, review_new_pass, or execution status. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1.
minimum length: 1
cursorstring · optionalOpaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 512, inclusive.
minimum length: 1 · maximum length: 512
{
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"cursor": "sync_fixture_next"
}{
"executionId": "{{executionId}}",
"fenceGeneration": 1,
"cursor": "{{syncCursor}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 0. The value must be an integer."
},
"reviewSessionId": {
"type": "string",
"minLength": 1,
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. Omit the field when it does not apply; omission is distinct from an empty value. Minimum accepted length or value is 1."
},
"cursor": {
"type": "string",
"minLength": 1,
"maxLength": 512,
"description": "Opaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 512, inclusive."
}
},
"additionalProperties": false
}Structured result
event"none" | "cancelled" | "answer" | "question_expired" | "grant_ready" | "approval_timeout" | "handoff" | "lease_lost" · requiredWhat this check found: none (nothing yet; sleep retryAfterSeconds and check again), answer, grant_ready, lease_lost (reclaim), or a stop event (cancelled, question_expired, approval_timeout, handoff).
leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
nextCursorstring · requiredOpaque cursor for the next page or sync; null means the current result is complete.
retryAfterSecondsinteger · requiredSeconds to sleep before the next check after an empty result (15, then 30), computed server-side.
minimum: 0
answersarray · optionalAccepted durable answers emitted since the requested synchronization cursor, in causal order. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
Array item · object
answers[].questionIdstring · requiredDurable question identifier returned by review_question_open or execution sync.
answers[].answerIdstring · requiredImmutable answer identifier assigned by Semel when an answer attempt is recorded.
answers[].channelstring · requiredTyped delivery or answer channel recorded as provenance.
answers[].answerTextstring · requiredAnswer text supplied for the durable question; the API also enforces the documented UTF-8 byte limit.
answers[].answeredAtstring · requiredRFC 3339 timestamp when the active answer was recorded.
grantobject · optionalCurrent human-approved execution grant summary. Omit the field when it does not apply; omission is distinct from an empty value.
grant.grantIdstring · requiredExecution-grant identifier returned when the human approval boundary is satisfied.
grant.statestring · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
grant.intentstring · requiredHuman-approved execution intent bound to the grant.
grant.expiresAtstring · requiredRFC 3339 expiration timestamp.
{
"event": "answer",
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"nextCursor": "example",
"retryAfterSeconds": 0,
"answers": []
}{
"content": [
{
"type": "text",
"text": "{\"event\":\"answer\",\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"nextCursor\":\"example\",\"retryAfterSeconds\":0,\"answers\":[]}"
}
],
"structuredContent": {
"event": "answer",
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"nextCursor": "example",
"retryAfterSeconds": 0,
"answers": []
}
}- answers ← structuredContent.answers
Next permitted action: On event none print nothing, sleep retryAfterSeconds without model turns, and wait again with nextCursor; on answer, resume the dependent work.
Complete raw result schema
{
"type": "object",
"properties": {
"event": {
"type": "string",
"enum": [
"none",
"cancelled",
"answer",
"question_expired",
"grant_ready",
"approval_timeout",
"handoff",
"lease_lost"
],
"description": "What this check found: none (nothing yet; sleep retryAfterSeconds and check again), answer, grant_ready, lease_lost (reclaim), or a stop event (cancelled, question_expired, approval_timeout, handoff)."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"nextCursor": {
"type": "string",
"description": "Opaque cursor for the next page or sync; null means the current result is complete."
},
"retryAfterSeconds": {
"type": "integer",
"minimum": 0,
"description": "Seconds to sleep before the next check after an empty result (15, then 30), computed server-side."
},
"answers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"questionId": {
"type": "string",
"description": "Durable question identifier returned by review_question_open or execution sync."
},
"answerId": {
"type": "string",
"description": "Immutable answer identifier assigned by Semel when an answer attempt is recorded."
},
"channel": {
"type": "string",
"description": "Typed delivery or answer channel recorded as provenance."
},
"answerText": {
"type": "string",
"description": "Answer text supplied for the durable question; the API also enforces the documented UTF-8 byte limit."
},
"answeredAt": {
"type": "string",
"description": "RFC 3339 timestamp when the active answer was recorded."
}
},
"required": [
"questionId",
"answerId",
"channel",
"answerText",
"answeredAt"
],
"additionalProperties": false
},
"description": "Accepted durable answers emitted since the requested synchronization cursor, in causal order. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"grant": {
"type": "object",
"properties": {
"grantId": {
"type": "string",
"description": "Execution-grant identifier returned when the human approval boundary is satisfied."
},
"state": {
"type": "string",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"intent": {
"type": "string",
"description": "Human-approved execution intent bound to the grant."
},
"expiresAt": {
"type": "string",
"description": "RFC 3339 expiration timestamp."
}
},
"required": [
"grantId",
"state",
"intent",
"expiresAt"
],
"additionalProperties": false,
"description": "Current human-approved execution grant summary. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"event",
"leaseExpiresAt",
"nextCursor",
"retryAfterSeconds"
],
"additionalProperties": false
}review_new_pass
write · idempotent (needs idempotencyKey)Start a repeat AI review pass for a brief, anchored on a prior run from review_status. Defaults to local when the caller has review:execute; a review:run-only caller defaults to hosted with a warning. Pass execution:'hosted' to opt into hosted execution.
- Mode
- write · high risk
- Scopes
- brief:read, review:run
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel re-run the review now that I updated the brief”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- review_start, review_status, review_execution_status
Arguments
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; it determines the project authorization boundary. Minimum accepted length or value is 1.
minimum length: 1
anchorRunIdstring · requiredCompleted review-run identifier used as the starting point for a new pass; obtain it from review_status or review_start. Minimum accepted length or value is 1.
minimum length: 1
execution"hosted" | "local" · optionalRequested or observed execution lane: hosted Semel execution or local external execution. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: "hosted", "local".
explicitOverrideobject · optionalExplicit bounded reviewer selection for this new pass; omission uses the saved project configuration. Omit the field when it does not apply; omission is distinct from an empty value.
explicitOverride.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
explicitOverride.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
explicitOverride.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
explicitOverride.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
explicitOverride.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
explicitOverride.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
explicitOverride.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
explicitOverride.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
explicitOverride.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
explicitOverride.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
explicitOverride.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
explicitOverride.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
explicitOverride.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
explicitOverride.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
explicitOverride.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
explicitOverride.occurrences[].modelobject · requiredOptional model name declared by the harness.
explicitOverride.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
explicitOverride.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
explicitOverride.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"briefId": "brf_fixture_checkout",
"anchorRunId": "run_fixture_review",
"execution": "local",
"idempotencyKey": "recipe-review-new-pass-v1"
}{
"briefId": "{{briefId}}",
"anchorRunId": "{{anchorRunId}}",
"execution": "local",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; it determines the project authorization boundary. Minimum accepted length or value is 1."
},
"anchorRunId": {
"type": "string",
"minLength": 1,
"description": "Completed review-run identifier used as the starting point for a new pass; obtain it from review_status or review_start. Minimum accepted length or value is 1."
},
"execution": {
"type": "string",
"enum": [
"hosted",
"local"
],
"description": "Requested or observed execution lane: hosted Semel execution or local external execution. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: \"hosted\", \"local\"."
},
"explicitOverride": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Explicit bounded reviewer selection for this new pass; omission uses the saved project configuration. Omit the field when it does not apply; omission is distinct from an empty value."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"briefId",
"anchorRunId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
warningsarray · optionalNon-fatal origination notices; present only when an omitted execution mode was resolved to hosted because the caller lacks review:execute.
Array item · object
warnings[].code"LOCAL_DEFAULT_DOWNGRADED_TO_HOSTED" · requiredStable machine-readable protocol error code used to choose a documented recovery action. This branch always uses "LOCAL_DEFAULT_DOWNGRADED_TO_HOSTED".
warnings[].messagestring · requiredUser-facing validation or remediation message that contains no secret material.
runobject · requiredNewly created review run and its queue position.
run.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
run.statusstring · requiredCurrent typed status; the schema enum or union branch lists every allowed value.
run.positioninteger · requiredStable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
cascadeobject · requiredObserved next-step cascade handoff after submission or review admission.
cascade.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
cascade.phasestring · requiredCurrent cascade phase reported by Semel.
dispatchobject · optionalPost-commit admission and dispatch result for the newly created review run. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.status"invoking" | "queued" | "evidence_wait" | "settled" | "awaiting_local_claim" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. Allowed values: "invoking", "queued", "evidence_wait", "settled", "awaiting_local_claim".
dispatch.admittedboolean · requiredWhether the review run was admitted for execution.
dispatch.softCapWarningboolean · requiredOptional nonblocking workspace spending warning attached to admission.
dispatch.evidenceWaitobject · optionalEvidence-preparation state and the documented status/decision recovery paths. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.evidenceWait.manifestIdstring · requiredEvidence manifest identifier whose readiness is being reported.
dispatch.evidenceWait.state"pending" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "pending".
dispatch.evidenceWait.deadlineAtstring · requiredRFC 3339 deadline for resolving the current evidence wait before the review requires a new status decision.
dispatch.evidenceWait.requiredRepositoryCountinteger · requiredNumber of repositories required before this evidence manifest can become ready. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
dispatch.evidenceWait.unavailableRepositoryCountinteger · requiredNumber of required repositories currently unavailable. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
dispatch.evidenceWait.statusPathstring · requiredRelative Semel API path for polling evidence readiness.
dispatch.evidenceWait.decisionPathstring · requiredRelative Semel API path for the human evidence-wait decision.
dispatch.evidenceWait.actionsarray · requiredUser-facing actions available while evidence preparation is unresolved. An empty array explicitly means no matching items.
Array item · string
dispatch.reviewSessionIdstring · optionalReview-session identifier returned by review_start, review_new_pass, or execution status. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.grantApprovalUristring · optionalSemel URI for approving the next external execution grant; omit until available. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlockobject · optionalAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
dispatch.controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
dispatch.controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
dispatch.controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
dispatch.controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
dispatch.controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
dispatch.controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
dispatch.controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
dispatch.controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
dispatch.controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
dispatch.controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
dispatch.controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
dispatch.controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
dispatch.controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
dispatch.controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
dispatch.controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
dispatch.controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
dispatch.controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
dispatch.controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
dispatch.controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
dispatch.controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
dispatch.controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
dispatch.controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
dispatch.controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
dispatch.controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"run": {
"id": "run_fixture_followup",
"status": "queued",
"position": 0
},
"cascade": {
"projectId": "prj_fixture_checkout",
"phase": "reviewing"
},
"dispatch": {
"status": "awaiting_local_claim",
"admitted": true,
"softCapWarning": false
}
}{
"content": [
{
"type": "text",
"text": "{\"run\":{\"id\":\"run_fixture_followup\",\"status\":\"queued\",\"position\":0},\"cascade\":{\"projectId\":\"prj_fixture_checkout\",\"phase\":\"reviewing\"},\"dispatch\":{\"status\":\"awaiting_local_claim\",\"admitted\":true,\"softCapWarning\":false}}"
}
],
"structuredContent": {
"run": {
"id": "run_fixture_followup",
"status": "queued",
"position": 0
},
"cascade": {
"projectId": "prj_fixture_checkout",
"phase": "reviewing"
},
"dispatch": {
"status": "awaiting_local_claim",
"admitted": true,
"softCapWarning": false
}
}
}- newRunId ← structuredContent.run.id
Next permitted action: Request the returned local session grant; do not claim without approval.
Complete raw result schema
{
"type": "object",
"properties": {
"warnings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string",
"const": "LOCAL_DEFAULT_DOWNGRADED_TO_HOSTED",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action. This branch always uses \"LOCAL_DEFAULT_DOWNGRADED_TO_HOSTED\"."
},
"message": {
"type": "string",
"description": "User-facing validation or remediation message that contains no secret material."
}
},
"required": [
"code",
"message"
],
"additionalProperties": false
},
"description": "Non-fatal origination notices; present only when an omitted execution mode was resolved to hosted because the caller lacks review:execute."
},
"run": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"status": {
"type": "string",
"description": "Current typed status; the schema enum or union branch lists every allowed value."
},
"position": {
"type": "integer",
"minimum": 0,
"description": "Stable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"id",
"status",
"position"
],
"additionalProperties": false,
"description": "Newly created review run and its queue position."
},
"cascade": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"phase": {
"type": "string",
"description": "Current cascade phase reported by Semel."
}
},
"required": [
"projectId",
"phase"
],
"additionalProperties": false,
"description": "Observed next-step cascade handoff after submission or review admission."
},
"dispatch": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"invoking",
"queued",
"evidence_wait",
"settled",
"awaiting_local_claim"
],
"description": "Current typed status; the schema enum or union branch lists every allowed value. Allowed values: \"invoking\", \"queued\", \"evidence_wait\", \"settled\", \"awaiting_local_claim\"."
},
"admitted": {
"type": "boolean",
"description": "Whether the review run was admitted for execution."
},
"softCapWarning": {
"type": "boolean",
"description": "Optional nonblocking workspace spending warning attached to admission."
},
"evidenceWait": {
"type": "object",
"properties": {
"manifestId": {
"type": "string",
"description": "Evidence manifest identifier whose readiness is being reported."
},
"state": {
"type": "string",
"const": "pending",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"pending\"."
},
"deadlineAt": {
"type": "string",
"description": "RFC 3339 deadline for resolving the current evidence wait before the review requires a new status decision."
},
"requiredRepositoryCount": {
"type": "integer",
"minimum": 0,
"description": "Number of repositories required before this evidence manifest can become ready. Minimum accepted length or value is 0. The value must be an integer."
},
"unavailableRepositoryCount": {
"type": "integer",
"minimum": 0,
"description": "Number of required repositories currently unavailable. Minimum accepted length or value is 0. The value must be an integer."
},
"statusPath": {
"type": "string",
"description": "Relative Semel API path for polling evidence readiness."
},
"decisionPath": {
"type": "string",
"description": "Relative Semel API path for the human evidence-wait decision."
},
"actions": {
"type": "array",
"items": {
"type": "string"
},
"description": "User-facing actions available while evidence preparation is unresolved. An empty array explicitly means no matching items."
}
},
"required": [
"manifestId",
"state",
"deadlineAt",
"requiredRepositoryCount",
"unavailableRepositoryCount",
"statusPath",
"decisionPath",
"actions"
],
"additionalProperties": false,
"description": "Evidence-preparation state and the documented status/decision recovery paths. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reviewSessionId": {
"type": "string",
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. Omit the field when it does not apply; omission is distinct from an empty value."
},
"grantApprovalUri": {
"type": "string",
"description": "Semel URI for approving the next external execution grant; omit until available. Omit the field when it does not apply; omission is distinct from an empty value."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"status",
"admitted",
"softCapWarning"
],
"additionalProperties": false,
"description": "Post-commit admission and dispatch result for the newly created review run. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"run",
"cascade"
],
"additionalProperties": false
}review_question_answer
write · idempotent (needs idempotencyKey)Record a local_harness answer; first valid terminal answer wins.
- Mode
- write · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “the operator just told me the answer locally”
- Errors
- STALE_FENCECANCELLEDVALIDATION_FAILEDPROJECT_ACCESS_DENIED
- Related
- review_question_open, review_execution_sync
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer.
questionIdstring · requiredDurable question identifier returned by review_question_open or execution sync. Minimum accepted length or value is 1.
minimum length: 1
answerTextstring · requiredAnswer text supplied for the durable question; the API also enforces the documented UTF-8 byte limit. Accepted length or value is 1 through 20000, inclusive.
minimum length: 1 · maximum length: 20000
transmittingAgentstring · optionalOptional harness-declared agent identity that transmitted the answer. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
humanAttributionobject · optionalOptional harness-attested human identity; it is not verified identity. Omit the field when it does not apply; omission is distinct from an empty value.
humanAttribution.claimedNamestring · optionalOptional human name claimed by the harness; it is not verified by Semel. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
humanAttribution.claimedEmailstring · optionalOptional human email claimed by the harness; it is not verified by Semel. Omit the field when it does not apply; omission is distinct from an empty value. Use a syntactically valid email address.
format: email
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"questionId": "q_fixture_database",
"answerText": "Use online expand/contract.",
"transmittingAgent": "codex",
"humanAttribution": {
"claimedName": "Repository owner"
},
"idempotencyKey": "recipe-question-answer-v1"
}{
"executionId": "{{executionId}}",
"fenceGeneration": 1,
"questionId": "{{questionId}}",
"answerText": "Use online expand/contract.",
"transmittingAgent": "codex",
"humanAttribution": {
"claimedName": "Repository owner"
},
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer."
},
"questionId": {
"type": "string",
"minLength": 1,
"description": "Durable question identifier returned by review_question_open or execution sync. Minimum accepted length or value is 1."
},
"answerText": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "Answer text supplied for the durable question; the API also enforces the documented UTF-8 byte limit. Accepted length or value is 1 through 20000, inclusive."
},
"transmittingAgent": {
"type": "string",
"maxLength": 200,
"description": "Optional harness-declared agent identity that transmitted the answer. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"humanAttribution": {
"type": "object",
"properties": {
"claimedName": {
"type": "string",
"maxLength": 200,
"description": "Optional human name claimed by the harness; it is not verified by Semel. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"claimedEmail": {
"type": "string",
"format": "email",
"description": "Optional human email claimed by the harness; it is not verified by Semel. Omit the field when it does not apply; omission is distinct from an empty value. Use a syntactically valid email address."
}
},
"additionalProperties": false,
"description": "Optional harness-attested human identity; it is not verified identity. Omit the field when it does not apply; omission is distinct from an empty value."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"executionId",
"fenceGeneration",
"questionId",
"answerText",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
outcome"accepted" | "conflict" · requiredTyped result of this operation; union branches define the follow-up action for each value. Allowed values: "accepted", "conflict".
answerIdstring · requiredImmutable answer identifier assigned by Semel when an answer attempt is recorded.
questionIdstring · requiredDurable question identifier returned by review_question_open or execution sync.
activeAnswerobject · requiredQuestion’s current winning immutable answer, including conflict responses.
activeAnswer.answerIdstring · requiredImmutable answer identifier assigned by Semel when an answer attempt is recorded.
activeAnswer.channelstring · requiredTyped delivery or answer channel recorded as provenance.
activeAnswer.answerTextstring · requiredAnswer text supplied for the durable question; the API also enforces the documented UTF-8 byte limit.
activeAnswer.answeredAtstring · requiredRFC 3339 timestamp when the active answer was recorded.
roundResumedboolean · requiredWhether this accepted answer closed the question round and resumed the run.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"outcome": "accepted",
"answerId": "example",
"questionId": "q_fixture_database",
"activeAnswer": {
"answerId": "example",
"channel": "local_harness",
"answerText": "Use online expand/contract.",
"answeredAt": "2026-09-07T16:03:00.000Z"
},
"roundResumed": true,
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 6,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"outcome\":\"accepted\",\"answerId\":\"example\",\"questionId\":\"q_fixture_database\",\"activeAnswer\":{\"answerId\":\"example\",\"channel\":\"local_harness\",\"answerText\":\"Use online expand/contract.\",\"answeredAt\":\"2026-09-07T16:03:00.000Z\"},\"roundResumed\":true,\"controlBlock\":{\"state\":{\"sessionState\":\"running\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_checkpoint_append\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_question_open\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_submit\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_sync\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":6,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"outcome": "accepted",
"answerId": "example",
"questionId": "q_fixture_database",
"activeAnswer": {
"answerId": "example",
"channel": "local_harness",
"answerText": "Use online expand/contract.",
"answeredAt": "2026-09-07T16:03:00.000Z"
},
"roundResumed": true,
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 6,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- activeAnswer ← structuredContent.activeAnswer
Next permitted action: Resume dependent work only when this answer is accepted or matches the existing winner.
Complete raw result schema
{
"type": "object",
"properties": {
"outcome": {
"type": "string",
"enum": [
"accepted",
"conflict"
],
"description": "Typed result of this operation; union branches define the follow-up action for each value. Allowed values: \"accepted\", \"conflict\"."
},
"answerId": {
"type": "string",
"description": "Immutable answer identifier assigned by Semel when an answer attempt is recorded."
},
"questionId": {
"type": "string",
"description": "Durable question identifier returned by review_question_open or execution sync."
},
"activeAnswer": {
"type": "object",
"properties": {
"answerId": {
"type": "string",
"description": "Immutable answer identifier assigned by Semel when an answer attempt is recorded."
},
"channel": {
"type": "string",
"description": "Typed delivery or answer channel recorded as provenance."
},
"answerText": {
"type": "string",
"description": "Answer text supplied for the durable question; the API also enforces the documented UTF-8 byte limit."
},
"answeredAt": {
"type": "string",
"description": "RFC 3339 timestamp when the active answer was recorded."
}
},
"required": [
"answerId",
"channel",
"answerText",
"answeredAt"
],
"additionalProperties": false,
"description": "Question’s current winning immutable answer, including conflict responses."
},
"roundResumed": {
"type": "boolean",
"description": "Whether this accepted answer closed the question round and resumed the run."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"outcome",
"answerId",
"questionId",
"activeAnswer",
"roundResumed",
"controlBlock"
],
"additionalProperties": false
}review_question_answer_supersede
write · idempotent (needs idempotencyKey)Verified-operator correction of an already-accepted answer.
- Mode
- write · medium risk
- Scopes
- brief:read, review:execute
- Confirmation
- operator_grant
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “the operator corrected an earlier answer”
- Errors
- VALIDATION_FAILEDPROJECT_ACCESS_DENIED
- Related
- review_question_answer, review_execution_status
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
questionIdstring · requiredDurable question identifier returned by review_question_open or execution sync. Minimum accepted length or value is 1.
minimum length: 1
correctedAnswerTextstring · requiredReplacement answer text supplied by a verified operator while preserving answer history. Accepted length or value is 1 through 20000, inclusive.
minimum length: 1 · maximum length: 20000
reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 2000.
maximum length: 2000
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"executionId": "xex_fixture_engineering",
"questionId": "q_fixture_database",
"correctedAnswerText": "Use an online expand/contract migration with a compatibility window.",
"reason": "Owner clarified rollback requirements.",
"idempotencyKey": "recipe-question-supersede-v1"
}{
"executionId": "{{executionId}}",
"questionId": "{{questionId}}",
"correctedAnswerText": "Use an online expand/contract migration with a compatibility window.",
"reason": "Owner clarified rollback requirements.",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"questionId": {
"type": "string",
"minLength": 1,
"description": "Durable question identifier returned by review_question_open or execution sync. Minimum accepted length or value is 1."
},
"correctedAnswerText": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "Replacement answer text supplied by a verified operator while preserving answer history. Accepted length or value is 1 through 20000, inclusive."
},
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 2000."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"executionId",
"questionId",
"correctedAnswerText",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
outcome"accepted" · requiredTyped result of this operation; union branches define the follow-up action for each value. This branch always uses "accepted".
newAnswerIdstring · requiredImmutable identifier of the corrected answer created by a successful supersede operation.
supersededAnswerIdstring · requiredImmutable identifier of the prior answer replaced by a successful supersede operation.
recoveryCursorobject · requiredCausal boundary the harness must use after an operator corrects an answer.
recoveryCursor.invalidatedFromSeqinteger · requiredFirst checkpoint sequence considered downstream of the corrected answer. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
recoveryCursor.activeSkillCursorstring | null · requiredOpaque cursor naming the active pinned skill; null means no skill is currently active. A null value explicitly means no current value is available.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"outcome": "accepted",
"newAnswerId": "ans_fixture_corrected",
"supersededAnswerId": "ans_fixture_original",
"recoveryCursor": {
"invalidatedFromSeq": 1,
"activeSkillCursor": null
},
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 7,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"outcome\":\"accepted\",\"newAnswerId\":\"ans_fixture_corrected\",\"supersededAnswerId\":\"ans_fixture_original\",\"recoveryCursor\":{\"invalidatedFromSeq\":1,\"activeSkillCursor\":null},\"controlBlock\":{\"state\":{\"sessionState\":\"running\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_checkpoint_append\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_question_open\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_submit\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_sync\",\"preconditions\":[\"The active epoch may progress, ask a question, submit, or release.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":7,\"openQuestionCount\":0,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"outcome": "accepted",
"newAnswerId": "ans_fixture_corrected",
"supersededAnswerId": "ans_fixture_original",
"recoveryCursor": {
"invalidatedFromSeq": 1,
"activeSkillCursor": null
},
"controlBlock": {
"state": {
"sessionState": "running",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_checkpoint_append",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_question_open",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_submit",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"The active epoch may progress, ask a question, submit, or release."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 7,
"openQuestionCount": 0,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- recoveryCursor ← structuredContent.recoveryCursor
Next permitted action: Rework from recoveryCursor before final submission.
Complete raw result schema
{
"type": "object",
"properties": {
"outcome": {
"type": "string",
"const": "accepted",
"description": "Typed result of this operation; union branches define the follow-up action for each value. This branch always uses \"accepted\"."
},
"newAnswerId": {
"type": "string",
"description": "Immutable identifier of the corrected answer created by a successful supersede operation."
},
"supersededAnswerId": {
"type": "string",
"description": "Immutable identifier of the prior answer replaced by a successful supersede operation."
},
"recoveryCursor": {
"type": "object",
"properties": {
"invalidatedFromSeq": {
"type": "integer",
"minimum": 0,
"description": "First checkpoint sequence considered downstream of the corrected answer. Minimum accepted length or value is 0. The value must be an integer."
},
"activeSkillCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor naming the active pinned skill; null means no skill is currently active. A null value explicitly means no current value is available."
}
},
"required": [
"invalidatedFromSeq",
"activeSkillCursor"
],
"additionalProperties": false,
"description": "Causal boundary the harness must use after an operator corrects an answer."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"outcome",
"newAnswerId",
"supersededAnswerId",
"recoveryCursor",
"controlBlock"
],
"additionalProperties": false
}review_question_open
write · idempotent (needs idempotencyKey)Durably create a question before displaying or delivering it anywhere.
- Mode
- write · low risk
- Scopes
- brief:read, review:execute
- Confirmation
- none
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “ask the operator whether this endpoint should require auth”
- Errors
- STALE_FENCECANCELLEDVALIDATION_FAILEDPROJECT_ACCESS_DENIED
- Related
- review_question_answer, review_execution_sync
Arguments
executionIdstring · requiredExternal-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1.
minimum length: 1
fenceGenerationinteger · requiredCurrent positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer.
clientQuestionIdstring · requiredCaller-stable logical question identifier; it must equal the MCP idempotency key for this call. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
textstring · requiredHuman-authored or model-produced text for this typed record. Accepted length or value is 1 through 20000, inclusive.
minimum length: 1 · maximum length: 20000
contextExcerptstring · optionalOptional bounded context shown with the question; omit when the question is self-contained. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 20000.
maximum length: 20000
sectionstring · optionalCanonical brief section key associated with the question, finding, proposal, or decision entry. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
optionsarray · optionalExplicit answer choices for a decision question; omission means the respondent may provide free-form text. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
minimum items: 2 · maximum items: 5
Array item · string
minimum length: 1 · maximum length: 500
citationsarray · optionalBounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items.
Array item · any of
any of
Branch 1
citations[].sourceType"brief-section" · requiredDiscriminator identifying the evidence source variant. This branch always uses "brief-section".
citations[].sectionKey"goal" | "userPersonaContext" | "customerFacingLaunchMessage" | "scope" | "outOfScope" | "requirements" | "edgeCases" | "acceptanceCriteria" | "rolesPermissions" | "states" | "productSolution" | "technicalSolution" | "dataModelImplications" | "architectureAssumptions" | "design" | "testingQaChecklist" | "testPlanUnit" | "testPlanIntegration" | "testPlanUiUx" | "openQuestions" | "generatedTickets" | "requiredEvidence" | "decisions" | "sourceArtifactLinks" · requiredCanonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: "goal", "userPersonaContext", "customerFacingLaunchMessage", "scope", "outOfScope", "requirements", "edgeCases", "acceptanceCriteria", "rolesPermissions", "states", "productSolution", "technicalSolution", "dataModelImplications", "architectureAssumptions", "design", "testingQaChecklist", "testPlanUnit", "testPlanIntegration", "testPlanUiUx", "openQuestions", "generatedTickets", "requiredEvidence", "decisions", "sourceArtifactLinks".
citations[].statementIdstring · optionalStable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 2
citations[].sourceType"artifact" · requiredDiscriminator identifying the evidence source variant. This branch always uses "artifact".
citations[].artifactIdstring · requiredArtifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
Branch 3
citations[].sourceType"repository-code" · requiredDiscriminator identifying the evidence source variant. This branch always uses "repository-code".
citations[].citationKeystring · requiredStable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
citations[].verbatimstring · requiredExact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive.
minimum length: 1 · maximum length: 1200
responseDeadlineHintstring · optionalOptional RFC 3339 requested deadline; Semel clamps it to the documented server bounds. Omit the field when it does not apply; omission is distinct from an empty value. Use an RFC 3339 date-time string.
format: date-time
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"executionId": "xex_fixture_engineering",
"fenceGeneration": 1,
"clientQuestionId": "recipe-question-open-v1",
"text": "Which migration strategy should implementation use?",
"section": "technicalSolution",
"options": [
"Online expand/contract",
"Scheduled maintenance"
],
"responseDeadlineHint": "2026-09-08T16:00:00.000Z",
"idempotencyKey": "recipe-question-open-v1"
}{
"executionId": "{{executionId}}",
"fenceGeneration": 1,
"clientQuestionId": "{{clientQuestionId}}",
"text": "Which migration strategy should implementation use?",
"section": "technicalSolution",
"options": [
"Online expand/contract",
"Scheduled maintenance"
],
"responseDeadlineHint": "2026-09-08T16:00:00.000Z",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"executionId": {
"type": "string",
"minLength": 1,
"description": "External-execution identifier returned by a successful execution claim or status lookup. Minimum accepted length or value is 1."
},
"fenceGeneration": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Current positive execution epoch used to reject writes from stale or handed-off harnesses. Minimum accepted length or value is 0. The value must be an integer."
},
"clientQuestionId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Caller-stable logical question identifier; it must equal the MCP idempotency key for this call. Accepted length or value is 1 through 200, inclusive."
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "Human-authored or model-produced text for this typed record. Accepted length or value is 1 through 20000, inclusive."
},
"contextExcerpt": {
"type": "string",
"maxLength": 20000,
"description": "Optional bounded context shown with the question; omit when the question is self-contained. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 20000."
},
"section": {
"type": "string",
"maxLength": 200,
"description": "Canonical brief section key associated with the question, finding, proposal, or decision entry. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"minItems": 2,
"maxItems": 5,
"description": "Explicit answer choices for a decision question; omission means the respondent may provide free-form text. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"citations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "brief-section",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"brief-section\"."
},
"sectionKey": {
"type": "string",
"enum": [
"goal",
"userPersonaContext",
"customerFacingLaunchMessage",
"scope",
"outOfScope",
"requirements",
"edgeCases",
"acceptanceCriteria",
"rolesPermissions",
"states",
"productSolution",
"technicalSolution",
"dataModelImplications",
"architectureAssumptions",
"design",
"testingQaChecklist",
"testPlanUnit",
"testPlanIntegration",
"testPlanUiUx",
"openQuestions",
"generatedTickets",
"requiredEvidence",
"decisions",
"sourceArtifactLinks"
],
"description": "Canonical brief or knowledge-section key that locates the cited statement; copy it from the source schema or search result. Allowed values: \"goal\", \"userPersonaContext\", \"customerFacingLaunchMessage\", \"scope\", \"outOfScope\", \"requirements\", \"edgeCases\", \"acceptanceCriteria\", \"rolesPermissions\", \"states\", \"productSolution\", \"technicalSolution\", \"dataModelImplications\", \"architectureAssumptions\", \"design\", \"testingQaChecklist\", \"testPlanUnit\", \"testPlanIntegration\", \"testPlanUiUx\", \"openQuestions\", \"generatedTickets\", \"requiredEvidence\", \"decisions\", \"sourceArtifactLinks\"."
},
"statementId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable identifier of the exact statement within a brief section; omit when the citation addresses the entire section. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"sectionKey",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "artifact",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"artifact\"."
},
"artifactId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Artifact identifier assigned by Semel when source material is uploaded. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"artifactId",
"verbatim"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"sourceType": {
"type": "string",
"const": "repository-code",
"description": "Discriminator identifying the evidence source variant. This branch always uses \"repository-code\"."
},
"citationKey": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Stable citation key assigned by Semel to repository evidence. Accepted length or value is 1 through 200, inclusive."
},
"verbatim": {
"type": "string",
"minLength": 1,
"maxLength": 1200,
"description": "Exact bounded evidence text supporting the citation. Accepted length or value is 1 through 1200, inclusive."
}
},
"required": [
"sourceType",
"citationKey",
"verbatim"
],
"additionalProperties": false
}
]
},
"description": "Bounded evidence anchors supporting this statement; omit when no citation is claimed and use an empty array only to clear a replaceable list. Omit the field when it does not apply; omission is distinct from an empty value. An empty array explicitly means no matching items."
},
"responseDeadlineHint": {
"type": "string",
"format": "date-time",
"description": "Optional RFC 3339 requested deadline; Semel clamps it to the documented server bounds. Omit the field when it does not apply; omission is distinct from an empty value. Use an RFC 3339 date-time string."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"executionId",
"fenceGeneration",
"clientQuestionId",
"text",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
questionIdstring · requiredDurable question identifier returned by review_question_open or execution sync.
dedupedboolean · requiredWhether the existing durable question was returned for an idempotent replay.
responseDeadlinestring · requiredRFC 3339 timestamp after which the unanswered question requires recovery.
deliveryStatearray · requiredPer-channel best-effort question notification outcomes. An empty array explicitly means no matching items.
Array item · object
deliveryState[].channel"in_app" | "slack" · requiredTyped delivery or answer channel recorded as provenance. Allowed values: "in_app", "slack".
deliveryState[].state"delivered" | "degraded" | "not_configured" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: "delivered", "degraded", "not_configured".
deliveryState[].providerRefstring · optionalOptional opaque delivery-provider receipt for the question notification; it is provenance, not a question identifier. Omit the field when it does not apply; omission is distinct from an empty value.
deliveryState[].safeErrorstring · optionalSanitized provider error category; omission means no safe delivery error was recorded. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlockobject · requiredAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance.
controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"questionId": "q_fixture_database",
"deduped": false,
"responseDeadline": "2026-09-08T16:00:00.000Z",
"deliveryState": [],
"controlBlock": {
"state": {
"sessionState": "waiting_input",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_question_answer",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_wait",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 6,
"openQuestionCount": 1,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}{
"content": [
{
"type": "text",
"text": "{\"questionId\":\"q_fixture_database\",\"deduped\":false,\"responseDeadline\":\"2026-09-08T16:00:00.000Z\",\"deliveryState\":[],\"controlBlock\":{\"state\":{\"sessionState\":\"waiting_input\",\"protocolVersion\":\"1.1\"},\"allowedNextOperations\":[{\"operation\":\"review_execution_skill_get\",\"preconditions\":[\"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease.\"]},{\"operation\":\"review_question_answer\",\"preconditions\":[\"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease.\"]},{\"operation\":\"review_execution_wait\",\"preconditions\":[\"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease.\"]},{\"operation\":\"review_execution_sync\",\"preconditions\":[\"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease.\"]},{\"operation\":\"review_execution_heartbeat\",\"preconditions\":[\"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease.\"]},{\"operation\":\"review_execution_release\",\"preconditions\":[\"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease.\"]},{\"operation\":\"review_execution_status\",\"preconditions\":[\"Always callable as the documented fail-safe.\"]}],\"completion\":{\"complete\":false,\"unmetRequirements\":[],\"certificateState\":\"not_applicable\"},\"progress\":{\"checkpointHighWaterMark\":6,\"openQuestionCount\":1,\"leaseExpiresAt\":\"2026-09-07T16:15:00.000Z\",\"suggestedPollAt\":\"2026-09-07T16:05:00.000Z\"},\"operatorAction\":{\"required\":false}}}"
}
],
"structuredContent": {
"questionId": "q_fixture_database",
"deduped": false,
"responseDeadline": "2026-09-08T16:00:00.000Z",
"deliveryState": [],
"controlBlock": {
"state": {
"sessionState": "waiting_input",
"protocolVersion": "1.1"
},
"allowedNextOperations": [
{
"operation": "review_execution_skill_get",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_question_answer",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_wait",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_sync",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_heartbeat",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_release",
"preconditions": [
"Consumes no hosted resource; a local answer resumes the epoch, or the polling harness may retain its bounded lease."
]
},
{
"operation": "review_execution_status",
"preconditions": [
"Always callable as the documented fail-safe."
]
}
],
"completion": {
"complete": false,
"unmetRequirements": [],
"certificateState": "not_applicable"
},
"progress": {
"checkpointHighWaterMark": 6,
"openQuestionCount": 1,
"leaseExpiresAt": "2026-09-07T16:15:00.000Z",
"suggestedPollAt": "2026-09-07T16:05:00.000Z"
},
"operatorAction": {
"required": false
}
}
}
}- questionId ← structuredContent.questionId
Next permitted action: Display the durable question and its options only after this call succeeds.
Complete raw result schema
{
"type": "object",
"properties": {
"questionId": {
"type": "string",
"description": "Durable question identifier returned by review_question_open or execution sync."
},
"deduped": {
"type": "boolean",
"description": "Whether the existing durable question was returned for an idempotent replay."
},
"responseDeadline": {
"type": "string",
"description": "RFC 3339 timestamp after which the unanswered question requires recovery."
},
"deliveryState": {
"type": "array",
"items": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"enum": [
"in_app",
"slack"
],
"description": "Typed delivery or answer channel recorded as provenance. Allowed values: \"in_app\", \"slack\"."
},
"state": {
"type": "string",
"enum": [
"delivered",
"degraded",
"not_configured"
],
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: \"delivered\", \"degraded\", \"not_configured\"."
},
"providerRef": {
"type": "string",
"description": "Optional opaque delivery-provider receipt for the question notification; it is provenance, not a question identifier. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeError": {
"type": "string",
"description": "Sanitized provider error category; omission means no safe delivery error was recorded. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"channel",
"state"
],
"additionalProperties": false
},
"description": "Per-channel best-effort question notification outcomes. An empty array explicitly means no matching items."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance."
}
},
"required": [
"questionId",
"deduped",
"responseDeadline",
"deliveryState",
"controlBlock"
],
"additionalProperties": false
}review_start
write · idempotent (needs idempotencyKey)Start the first AI review cascade for a brief's project. Defaults to local when the caller has review:execute; a review:run-only caller defaults to hosted with a warning. Pass execution:'hosted' to opt into hosted execution.
- Mode
- write · high risk
- Scopes
- brief:read, review:run
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel run the review for the checkout brief”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- review_new_pass, review_status, review_execution_status
Arguments
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; it determines the project authorization boundary. Minimum accepted length or value is 1.
minimum length: 1
execution"hosted" | "local" · optionalRequested or observed execution lane: hosted Semel execution or local external execution. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: "hosted", "local".
explicitOverrideobject · optionalExplicit bounded reviewer selection for this new pass; omission uses the saved project configuration. Omit the field when it does not apply; omission is distinct from an empty value.
explicitOverride.schemaVersion1 · requiredVersion of the strict schema used to encode this stored or transmitted record. This branch always uses 1.
explicitOverride.occurrencesarray · requiredOrdered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items.
minimum items: 1 · maximum items: 20
Array item · object
explicitOverride.occurrences[].occurrenceIdstring · requiredServer-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values.
minimum length: 1 · maximum length: 200
explicitOverride.occurrences[].reviewerRefany of · requiredTagged immutable reviewer reference identifying either a built-in role or an exact custom skill version.
any of
Branch 1
explicitOverride.occurrences[].reviewerRef.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
explicitOverride.occurrences[].reviewerRef.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
Branch 2
explicitOverride.occurrences[].reviewerRef.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
explicitOverride.occurrences[].reviewerRef.skillIdstring · requiredImmutable tenant skill identifier used by a custom reviewer reference.
minimum length: 1
explicitOverride.occurrences[].reviewerRef.versionIdstring · requiredImmutable version identifier returned by the owning brief, reviewer skill, or claim contract.
minimum length: 1
explicitOverride.occurrences[].labelstring · requiredHuman-readable label displayed for this record. Minimum accepted length or value is 1.
minimum length: 1
explicitOverride.occurrences[].enabledboolean · requiredWhether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable.
explicitOverride.occurrences[].skillobject · requiredExact immutable reviewer skill artifact pin used for this occurrence.
explicitOverride.occurrences[].skill.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
explicitOverride.occurrences[].skill.displayVersionstring · optionalServer-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
explicitOverride.occurrences[].skill.sha256string · requiredLowercase hexadecimal SHA-256 digest used to verify exact bytes.
pattern: ^[a-f0-9]{64}$
explicitOverride.occurrences[].modelobject · requiredOptional model name declared by the harness.
explicitOverride.occurrences[].model.providerstring · requiredResolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive.
minimum length: 1 · maximum length: 100
explicitOverride.occurrences[].model.modelstring · requiredOptional model name declared by the harness. Accepted length or value is 1 through 200, inclusive.
minimum length: 1 · maximum length: 200
explicitOverride.occurrences[].model.reasoningany of · requiredResolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive.
any of
Branch 1
minimum length: 1 · maximum length: 100
Branch 2
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"briefId": "brf_fixture_checkout",
"execution": "hosted",
"idempotencyKey": "recipe-review-start-v1"
}{
"briefId": "{{briefId}}",
"execution": "hosted",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; it determines the project authorization boundary. Minimum accepted length or value is 1."
},
"execution": {
"type": "string",
"enum": [
"hosted",
"local"
],
"description": "Requested or observed execution lane: hosted Semel execution or local external execution. Omit the field when it does not apply; omission is distinct from an empty value. Allowed values: \"hosted\", \"local\"."
},
"explicitOverride": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"const": 1,
"description": "Version of the strict schema used to encode this stored or transmitted record. This branch always uses 1."
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurrenceId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-issued identifier for one ordered reviewer occurrence; repeated reviewer skills have distinct values."
},
"reviewerRef": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
}
},
"required": [
"kind",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"skillId": {
"type": "string",
"minLength": 1,
"description": "Immutable tenant skill identifier used by a custom reviewer reference."
},
"versionId": {
"type": "string",
"minLength": 1,
"description": "Immutable version identifier returned by the owning brief, reviewer skill, or claim contract."
}
},
"required": [
"kind",
"skillId",
"versionId"
],
"additionalProperties": false
}
],
"description": "Tagged immutable reviewer reference identifying either a built-in role or an exact custom skill version."
},
"label": {
"type": "string",
"minLength": 1,
"description": "Human-readable label displayed for this record. Minimum accepted length or value is 1."
},
"enabled": {
"type": "boolean",
"description": "Whether this frozen reviewer occurrence participates in execution; disabled occurrences remain inspectable."
},
"skill": {
"type": "object",
"properties": {
"version": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 200, inclusive."
},
"displayVersion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Server-derived human-readable publication number for the exact reviewer skill version. Omit the field when it does not apply; omission is distinct from an empty value. Accepted length or value is 1 through 200, inclusive."
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase hexadecimal SHA-256 digest used to verify exact bytes."
}
},
"required": [
"version",
"sha256"
],
"additionalProperties": false,
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"model": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resolved inference provider preserved in the immutable reviewer execution pin. Accepted length or value is 1 through 100, inclusive."
},
"model": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Optional model name declared by the harness. Accepted length or value is 1 through 200, inclusive."
},
"reasoning": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Resolved reasoning setting preserved in the immutable model pin; null means the model accepts none. A null value explicitly means no current value is available. Accepted length or value is 1 through 100, inclusive."
}
},
"required": [
"provider",
"model",
"reasoning"
],
"additionalProperties": false,
"description": "Optional model name declared by the harness."
}
},
"required": [
"occurrenceId",
"reviewerRef",
"label",
"enabled",
"skill",
"model"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 20,
"description": "Ordered reviewer occurrences preserved by this preset, project configuration, or explicit review override. An empty array explicitly means no matching items."
}
},
"required": [
"schemaVersion",
"occurrences"
],
"additionalProperties": false,
"description": "Explicit bounded reviewer selection for this new pass; omission uses the saved project configuration. Omit the field when it does not apply; omission is distinct from an empty value."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"briefId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
warningsarray · optionalNon-fatal origination notices; present only when an omitted execution mode was resolved to hosted because the caller lacks review:execute.
Array item · object
warnings[].code"LOCAL_DEFAULT_DOWNGRADED_TO_HOSTED" · requiredStable machine-readable protocol error code used to choose a documented recovery action. This branch always uses "LOCAL_DEFAULT_DOWNGRADED_TO_HOSTED".
warnings[].messagestring · requiredUser-facing validation or remediation message that contains no secret material.
runobject · requiredNewly created review run and its queue position.
run.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
run.statusstring · requiredCurrent typed status; the schema enum or union branch lists every allowed value.
run.positioninteger · requiredStable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
cascadeobject · requiredObserved next-step cascade handoff after submission or review admission.
cascade.projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
cascade.phasestring · requiredCurrent cascade phase reported by Semel.
dispatchobject · optionalPost-commit admission and dispatch result for the newly created review run. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.status"invoking" | "queued" | "evidence_wait" | "settled" | "awaiting_local_claim" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. Allowed values: "invoking", "queued", "evidence_wait", "settled", "awaiting_local_claim".
dispatch.admittedboolean · requiredWhether the review run was admitted for execution.
dispatch.softCapWarningboolean · requiredOptional nonblocking workspace spending warning attached to admission.
dispatch.evidenceWaitobject · optionalEvidence-preparation state and the documented status/decision recovery paths. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.evidenceWait.manifestIdstring · requiredEvidence manifest identifier whose readiness is being reported.
dispatch.evidenceWait.state"pending" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "pending".
dispatch.evidenceWait.deadlineAtstring · requiredRFC 3339 deadline for resolving the current evidence wait before the review requires a new status decision.
dispatch.evidenceWait.requiredRepositoryCountinteger · requiredNumber of repositories required before this evidence manifest can become ready. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
dispatch.evidenceWait.unavailableRepositoryCountinteger · requiredNumber of required repositories currently unavailable. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
dispatch.evidenceWait.statusPathstring · requiredRelative Semel API path for polling evidence readiness.
dispatch.evidenceWait.decisionPathstring · requiredRelative Semel API path for the human evidence-wait decision.
dispatch.evidenceWait.actionsarray · requiredUser-facing actions available while evidence preparation is unresolved. An empty array explicitly means no matching items.
Array item · string
dispatch.reviewSessionIdstring · optionalReview-session identifier returned by review_start, review_new_pass, or execution status. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.grantApprovalUristring · optionalSemel URI for approving the next external execution grant; omit until available. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlockobject · optionalAuthoritative runbook state, allowed operations, completion, progress, and recovery guidance. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.stateobject · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values.
dispatch.controlBlock.state.sessionStatestring · requiredAuthoritative lifecycle state of the parent review session reported by the execution runbook.
dispatch.controlBlock.state.executionIdstring · optionalExternal-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.state.epochinteger · optionalExecution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer.
dispatch.controlBlock.state.protocolVersionstring · requiredSemel external-execution protocol version used for this bundle or state.
dispatch.controlBlock.state.bundleVersionstring · optionalPinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.allowedNextOperationsarray · requiredOperations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items.
Array item · object
dispatch.controlBlock.allowedNextOperations[].operationstring · requiredMCP operation name currently permitted by the runbook control block.
dispatch.controlBlock.allowedNextOperations[].preconditionsarray · requiredHuman-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items.
Array item · string
dispatch.controlBlock.completionobject · requiredAuthoritative completion assessment for the current execution state.
dispatch.controlBlock.completion.completeboolean · requiredWhether all protocol completion requirements are currently satisfied.
dispatch.controlBlock.completion.unmetRequirementsarray · requiredHuman-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items.
Array item · string
dispatch.controlBlock.completion.certificateState"not_applicable" | "pending" | "signed" | "failed" · requiredCurrent execution-certificate state. Allowed values: "not_applicable", "pending", "signed", "failed".
dispatch.controlBlock.progressobject · requiredCurrent durable checkpoint, question, lease, and polling progress.
dispatch.controlBlock.progress.checkpointHighWaterMarkinteger · requiredHighest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer.
dispatch.controlBlock.progress.openQuestionCountinteger · requiredNumber of durable questions still awaiting an accepted answer. The value must be an integer.
dispatch.controlBlock.progress.leaseExpiresAtstring | null · requiredRFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available.
dispatch.controlBlock.progress.suggestedPollAtstring · requiredRFC 3339 timestamp for the next recommended status poll.
dispatch.controlBlock.operatorActionobject · requiredHuman action required before the protocol may continue.
dispatch.controlBlock.operatorAction.requiredboolean · requiredWhether the operator action must occur before execution can continue.
dispatch.controlBlock.operatorAction.uristring · optionalAbsolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.operatorAction.reasonstring · optionalTyped or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.recoveryobject · optionalSafe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.recovery.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
dispatch.controlBlock.recovery.idempotentboolean · requiredWhether retrying the named recovery operation with identical arguments is safe.
dispatch.controlBlock.recovery.recoveryOperationstring · optionalOperation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.errorobject · optionalSafe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.error.codestring · requiredStable machine-readable protocol error code used to choose a documented recovery action.
dispatch.controlBlock.error.retryableboolean · requiredWhether repeating the documented recovery operation can succeed without changing permanent state.
dispatch.controlBlock.error.currentStatestring · requiredAuthoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery.
dispatch.controlBlock.error.permittedNextOperationsarray · requiredOperation names permitted after this protocol error. An empty array explicitly means no matching items.
Array item · string
dispatch.controlBlock.error.operatorApprovalUristring · optionalSemel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value.
dispatch.controlBlock.error.safeTextstring · requiredSanitized user-facing error text that excludes secrets and internal exception details.
{
"run": {
"id": "run_fixture_review",
"status": "queued",
"position": 0
},
"cascade": {
"projectId": "prj_fixture_checkout",
"phase": "reviewing"
},
"dispatch": {
"status": "invoking",
"admitted": true,
"softCapWarning": false
}
}{
"content": [
{
"type": "text",
"text": "{\"run\":{\"id\":\"run_fixture_review\",\"status\":\"queued\",\"position\":0},\"cascade\":{\"projectId\":\"prj_fixture_checkout\",\"phase\":\"reviewing\"},\"dispatch\":{\"status\":\"invoking\",\"admitted\":true,\"softCapWarning\":false}}"
}
],
"structuredContent": {
"run": {
"id": "run_fixture_review",
"status": "queued",
"position": 0
},
"cascade": {
"projectId": "prj_fixture_checkout",
"phase": "reviewing"
},
"dispatch": {
"status": "invoking",
"admitted": true,
"softCapWarning": false
}
}
}- runId ← structuredContent.run.id
Next permitted action: Poll review_status and respect configless, cap, evidence-wait, or in-flight outcomes.
Complete raw result schema
{
"type": "object",
"properties": {
"warnings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string",
"const": "LOCAL_DEFAULT_DOWNGRADED_TO_HOSTED",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action. This branch always uses \"LOCAL_DEFAULT_DOWNGRADED_TO_HOSTED\"."
},
"message": {
"type": "string",
"description": "User-facing validation or remediation message that contains no secret material."
}
},
"required": [
"code",
"message"
],
"additionalProperties": false
},
"description": "Non-fatal origination notices; present only when an omitted execution mode was resolved to hosted because the caller lacks review:execute."
},
"run": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"status": {
"type": "string",
"description": "Current typed status; the schema enum or union branch lists every allowed value."
},
"position": {
"type": "integer",
"minimum": 0,
"description": "Stable zero-based or configured ordering position returned by Semel. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"id",
"status",
"position"
],
"additionalProperties": false,
"description": "Newly created review run and its queue position."
},
"cascade": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"phase": {
"type": "string",
"description": "Current cascade phase reported by Semel."
}
},
"required": [
"projectId",
"phase"
],
"additionalProperties": false,
"description": "Observed next-step cascade handoff after submission or review admission."
},
"dispatch": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"invoking",
"queued",
"evidence_wait",
"settled",
"awaiting_local_claim"
],
"description": "Current typed status; the schema enum or union branch lists every allowed value. Allowed values: \"invoking\", \"queued\", \"evidence_wait\", \"settled\", \"awaiting_local_claim\"."
},
"admitted": {
"type": "boolean",
"description": "Whether the review run was admitted for execution."
},
"softCapWarning": {
"type": "boolean",
"description": "Optional nonblocking workspace spending warning attached to admission."
},
"evidenceWait": {
"type": "object",
"properties": {
"manifestId": {
"type": "string",
"description": "Evidence manifest identifier whose readiness is being reported."
},
"state": {
"type": "string",
"const": "pending",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"pending\"."
},
"deadlineAt": {
"type": "string",
"description": "RFC 3339 deadline for resolving the current evidence wait before the review requires a new status decision."
},
"requiredRepositoryCount": {
"type": "integer",
"minimum": 0,
"description": "Number of repositories required before this evidence manifest can become ready. Minimum accepted length or value is 0. The value must be an integer."
},
"unavailableRepositoryCount": {
"type": "integer",
"minimum": 0,
"description": "Number of required repositories currently unavailable. Minimum accepted length or value is 0. The value must be an integer."
},
"statusPath": {
"type": "string",
"description": "Relative Semel API path for polling evidence readiness."
},
"decisionPath": {
"type": "string",
"description": "Relative Semel API path for the human evidence-wait decision."
},
"actions": {
"type": "array",
"items": {
"type": "string"
},
"description": "User-facing actions available while evidence preparation is unresolved. An empty array explicitly means no matching items."
}
},
"required": [
"manifestId",
"state",
"deadlineAt",
"requiredRepositoryCount",
"unavailableRepositoryCount",
"statusPath",
"decisionPath",
"actions"
],
"additionalProperties": false,
"description": "Evidence-preparation state and the documented status/decision recovery paths. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reviewSessionId": {
"type": "string",
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. Omit the field when it does not apply; omission is distinct from an empty value."
},
"grantApprovalUri": {
"type": "string",
"description": "Semel URI for approving the next external execution grant; omit until available. Omit the field when it does not apply; omission is distinct from an empty value."
},
"controlBlock": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"sessionState": {
"type": "string",
"description": "Authoritative lifecycle state of the parent review session reported by the execution runbook."
},
"executionId": {
"type": "string",
"description": "External-execution identifier returned by a successful execution claim or status lookup. Omit the field when it does not apply; omission is distinct from an empty value."
},
"epoch": {
"type": "integer",
"description": "Execution fence generation associated with the current control-block state; omit before an epoch exists. Omit the field when it does not apply; omission is distinct from an empty value. The value must be an integer."
},
"protocolVersion": {
"type": "string",
"description": "Semel external-execution protocol version used for this bundle or state."
},
"bundleVersion": {
"type": "string",
"description": "Pinned executable bundle version; omit before a bundle is assigned. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"sessionState",
"protocolVersion"
],
"additionalProperties": false,
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values."
},
"allowedNextOperations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "MCP operation name currently permitted by the runbook control block."
},
"preconditions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable conditions that must hold before invoking the operation. An empty array explicitly means no matching items."
}
},
"required": [
"operation",
"preconditions"
],
"additionalProperties": false
},
"description": "Operations currently allowed by the authoritative runbook state. An empty array explicitly means no matching items."
},
"completion": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"description": "Whether all protocol completion requirements are currently satisfied."
},
"unmetRequirements": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable completion requirements that are not yet satisfied. An empty array explicitly means no matching items."
},
"certificateState": {
"type": "string",
"enum": [
"not_applicable",
"pending",
"signed",
"failed"
],
"description": "Current execution-certificate state. Allowed values: \"not_applicable\", \"pending\", \"signed\", \"failed\"."
}
},
"required": [
"complete",
"unmetRequirements",
"certificateState"
],
"additionalProperties": false,
"description": "Authoritative completion assessment for the current execution state."
},
"progress": {
"type": "object",
"properties": {
"checkpointHighWaterMark": {
"type": "integer",
"description": "Highest checkpoint sequence durably accepted for the current execution epoch. The value must be an integer."
},
"openQuestionCount": {
"type": "integer",
"description": "Number of durable questions still awaiting an accepted answer. The value must be an integer."
},
"leaseExpiresAt": {
"type": [
"string",
"null"
],
"description": "RFC 3339 lease expiration timestamp; null means no active lease exists. A null value explicitly means no current value is available."
},
"suggestedPollAt": {
"type": "string",
"description": "RFC 3339 timestamp for the next recommended status poll."
}
},
"required": [
"checkpointHighWaterMark",
"openQuestionCount",
"leaseExpiresAt",
"suggestedPollAt"
],
"additionalProperties": false,
"description": "Current durable checkpoint, question, lease, and polling progress."
},
"operatorAction": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"description": "Whether the operator action must occur before execution can continue."
},
"uri": {
"type": "string",
"description": "Absolute or same-origin URI for the referenced resource or required operator action. Omit the field when it does not apply; omission is distinct from an empty value."
},
"reason": {
"type": "string",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"required"
],
"additionalProperties": false,
"description": "Human action required before the protocol may continue."
},
"recovery": {
"type": "object",
"properties": {
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"idempotent": {
"type": "boolean",
"description": "Whether retrying the named recovery operation with identical arguments is safe."
},
"recoveryOperation": {
"type": "string",
"description": "Operation to call for safe recovery; omit when recovery requires no protocol call. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"retryable",
"idempotent"
],
"additionalProperties": false,
"description": "Safe retry and recovery guidance; omission means no recovery operation is required. Omit the field when it does not apply; omission is distinct from an empty value."
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Stable machine-readable protocol error code used to choose a documented recovery action."
},
"retryable": {
"type": "boolean",
"description": "Whether repeating the documented recovery operation can succeed without changing permanent state."
},
"currentState": {
"type": "string",
"description": "Authoritative protocol state at the time of an error; use it with allowedNextOperations to select recovery."
},
"permittedNextOperations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operation names permitted after this protocol error. An empty array explicitly means no matching items."
},
"operatorApprovalUri": {
"type": "string",
"description": "Semel URI for the required human recovery action; omit when no operator approval applies. Omit the field when it does not apply; omission is distinct from an empty value."
},
"safeText": {
"type": "string",
"description": "Sanitized user-facing error text that excludes secrets and internal exception details."
}
},
"required": [
"code",
"retryable",
"currentState",
"permittedNextOperations",
"safeText"
],
"additionalProperties": false,
"description": "Safe structured protocol error; omission means the operation succeeded without a protocol error. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"state",
"allowedNextOperations",
"completion",
"progress",
"operatorAction"
],
"additionalProperties": false,
"description": "Authoritative runbook state, allowed operations, completion, progress, and recovery guidance. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"status",
"admitted",
"softCapWarning"
],
"additionalProperties": false,
"description": "Post-commit admission and dispatch result for the newly created review run. Omit the field when it does not apply; omission is distinct from an empty value."
}
},
"required": [
"run",
"cascade"
],
"additionalProperties": false
}review_status
readReport the current review cascade state for a brief — steps, in-flight status, and the run id to anchor a new pass on.
- Mode
- read · low risk
- Scopes
- brief:read, review:run
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “what is the status of the review for this brief”
- Errors
- PROJECT_ACCESS_DENIED
- Related
- review_start, review_new_pass, review_execution_status
Arguments
briefIdstring · requiredBrief identifier returned by brief_create or brief_list; it determines the project authorization boundary. Minimum accepted length or value is 1.
minimum length: 1
{
"briefId": "brf_fixture_checkout"
}{
"briefId": "{{briefId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"briefId": {
"type": "string",
"minLength": 1,
"description": "Brief identifier returned by brief_create or brief_list; it determines the project authorization boundary. Minimum accepted length or value is 1."
}
},
"required": [
"briefId"
],
"additionalProperties": false
}Structured result
projectIdstring · requiredProject identifier returned by project_create or project_list; the caller must have access to that project.
phasestring · requiredCurrent cascade phase reported by Semel.
inFlightboolean · requiredWhether the cascade currently has an unsettled run.
executionany of · requiredRequested or observed execution lane: hosted Semel execution or local external execution. A null value explicitly means no current value is available. Allowed values: "hosted", "local".
any of
Branch 1
Branch 2
awaitingLocalClaimboolean · requiredWhether the next external run is waiting for a harness claim.
stepsarray · requiredConfigured cascade steps in execution order with their latest run state. An empty array explicitly means no matching items.
Array item · object
steps[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
steps[].positioninteger · requiredStable zero-based or configured ordering position returned by Semel. The value must be an integer.
steps[].kindstring · requiredDiscriminator identifying the typed variant represented by this object.
steps[].statusstring · requiredCurrent typed status; the schema enum or union branch lists every allowed value.
steps[].latestRunany of · requiredLatest run for this cascade step; null means the step has not run. A null value explicitly means no current value is available.
any of
Branch 1
steps[].latestRun.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it.
steps[].latestRun.statusstring · requiredCurrent typed status; the schema enum or union branch lists every allowed value.
steps[].latestRun.createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created.
steps[].latestRun.reviewSessionIdstring | null · requiredReview-session identifier returned by review_start, review_new_pass, or execution status. A null value explicitly means no current value is available.
Branch 2
latestRunIdstring | null · requiredMost recent run identifier in the cascade; null means no run exists. A null value explicitly means no current value is available.
latestTerminalRunIdstring | null · requiredMost recent terminal run identifier; null means none has settled. A null value explicitly means no current value is available.
evidenceWaitobject · optionalEvidence-preparation state and the documented status/decision recovery paths. Omit the field when it does not apply; omission is distinct from an empty value.
evidenceWait.manifestIdstring · requiredEvidence manifest identifier whose readiness is being reported.
evidenceWait.state"pending" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "pending".
evidenceWait.deadlineAtstring · requiredRFC 3339 deadline for resolving the current evidence wait before the review requires a new status decision.
evidenceWait.requiredRepositoryCountinteger · requiredNumber of repositories required before this evidence manifest can become ready. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
evidenceWait.unavailableRepositoryCountinteger · requiredNumber of required repositories currently unavailable. Minimum accepted length or value is 0. The value must be an integer.
minimum: 0
evidenceWait.statusPathstring · requiredRelative Semel API path for polling evidence readiness.
evidenceWait.decisionPathstring · requiredRelative Semel API path for the human evidence-wait decision.
evidenceWait.actionsarray · requiredUser-facing actions available while evidence preparation is unresolved. An empty array explicitly means no matching items.
Array item · string
blockedany of · requiredNon-null spending or configuration condition currently blocking review progress. A null value explicitly means no current value is available.
any of
Branch 1
blocked.reason"cap_exceeded" · requiredTyped or human-readable reason for the current outcome; omission means no reason is required. This branch always uses "cap_exceeded".
blocked.hardCapCentsinteger · requiredWorkspace hard spending cap in integer US-dollar cents. The value must be an integer.
blocked.spentThisMonthCentsinteger · requiredWorkspace spend in integer US-dollar cents for the current billing month. The value must be an integer.
Branch 2
{
"projectId": "prj_fixture_checkout",
"phase": "reviewing",
"inFlight": false,
"execution": "hosted",
"awaitingLocalClaim": false,
"steps": [],
"latestRunId": "example",
"latestTerminalRunId": "example",
"blocked": null
}{
"content": [
{
"type": "text",
"text": "{\"projectId\":\"prj_fixture_checkout\",\"phase\":\"reviewing\",\"inFlight\":false,\"execution\":\"hosted\",\"awaitingLocalClaim\":false,\"steps\":[],\"latestRunId\":\"example\",\"latestTerminalRunId\":\"example\",\"blocked\":null}"
}
],
"structuredContent": {
"projectId": "prj_fixture_checkout",
"phase": "reviewing",
"inFlight": false,
"execution": "hosted",
"awaitingLocalClaim": false,
"steps": [],
"latestRunId": "example",
"latestTerminalRunId": "example",
"blocked": null
}
}- phase ← structuredContent.phase
Next permitted action: Explain the current state and the exact human portal action.
Complete raw result schema
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "Project identifier returned by project_create or project_list; the caller must have access to that project."
},
"phase": {
"type": "string",
"description": "Current cascade phase reported by Semel."
},
"inFlight": {
"type": "boolean",
"description": "Whether the cascade currently has an unsettled run."
},
"execution": {
"anyOf": [
{
"type": "string",
"enum": [
"hosted",
"local"
]
},
{
"type": "null"
}
],
"description": "Requested or observed execution lane: hosted Semel execution or local external execution. A null value explicitly means no current value is available. Allowed values: \"hosted\", \"local\"."
},
"awaitingLocalClaim": {
"type": "boolean",
"description": "Whether the next external run is waiting for a harness claim."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"position": {
"type": "integer",
"description": "Stable zero-based or configured ordering position returned by Semel. The value must be an integer."
},
"kind": {
"type": "string",
"description": "Discriminator identifying the typed variant represented by this object."
},
"status": {
"type": "string",
"description": "Current typed status; the schema enum or union branch lists every allowed value."
},
"latestRun": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it."
},
"status": {
"type": "string",
"description": "Current typed status; the schema enum or union branch lists every allowed value."
},
"createdAt": {
"type": "string",
"description": "RFC 3339 timestamp assigned by Semel when this record was created."
},
"reviewSessionId": {
"type": [
"string",
"null"
],
"description": "Review-session identifier returned by review_start, review_new_pass, or execution status. A null value explicitly means no current value is available."
}
},
"required": [
"id",
"status",
"createdAt",
"reviewSessionId"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest run for this cascade step; null means the step has not run. A null value explicitly means no current value is available."
}
},
"required": [
"id",
"position",
"kind",
"status",
"latestRun"
],
"additionalProperties": false
},
"description": "Configured cascade steps in execution order with their latest run state. An empty array explicitly means no matching items."
},
"latestRunId": {
"type": [
"string",
"null"
],
"description": "Most recent run identifier in the cascade; null means no run exists. A null value explicitly means no current value is available."
},
"latestTerminalRunId": {
"type": [
"string",
"null"
],
"description": "Most recent terminal run identifier; null means none has settled. A null value explicitly means no current value is available."
},
"evidenceWait": {
"type": "object",
"properties": {
"manifestId": {
"type": "string",
"description": "Evidence manifest identifier whose readiness is being reported."
},
"state": {
"type": "string",
"const": "pending",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"pending\"."
},
"deadlineAt": {
"type": "string",
"description": "RFC 3339 deadline for resolving the current evidence wait before the review requires a new status decision."
},
"requiredRepositoryCount": {
"type": "integer",
"minimum": 0,
"description": "Number of repositories required before this evidence manifest can become ready. Minimum accepted length or value is 0. The value must be an integer."
},
"unavailableRepositoryCount": {
"type": "integer",
"minimum": 0,
"description": "Number of required repositories currently unavailable. Minimum accepted length or value is 0. The value must be an integer."
},
"statusPath": {
"type": "string",
"description": "Relative Semel API path for polling evidence readiness."
},
"decisionPath": {
"type": "string",
"description": "Relative Semel API path for the human evidence-wait decision."
},
"actions": {
"type": "array",
"items": {
"type": "string"
},
"description": "User-facing actions available while evidence preparation is unresolved. An empty array explicitly means no matching items."
}
},
"required": [
"manifestId",
"state",
"deadlineAt",
"requiredRepositoryCount",
"unavailableRepositoryCount",
"statusPath",
"decisionPath",
"actions"
],
"additionalProperties": false,
"description": "Evidence-preparation state and the documented status/decision recovery paths. Omit the field when it does not apply; omission is distinct from an empty value."
},
"blocked": {
"anyOf": [
{
"type": "object",
"properties": {
"reason": {
"type": "string",
"const": "cap_exceeded",
"description": "Typed or human-readable reason for the current outcome; omission means no reason is required. This branch always uses \"cap_exceeded\"."
},
"hardCapCents": {
"type": "integer",
"description": "Workspace hard spending cap in integer US-dollar cents. The value must be an integer."
},
"spentThisMonthCents": {
"type": "integer",
"description": "Workspace spend in integer US-dollar cents for the current billing month. The value must be an integer."
}
},
"required": [
"reason",
"hardCapCents",
"spentThisMonthCents"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Non-null spending or configuration condition currently blocking review progress. A null value explicitly means no current value is available."
}
},
"required": [
"projectId",
"phase",
"inFlight",
"execution",
"awaitingLocalClaim",
"steps",
"latestRunId",
"latestTerminalRunId",
"blocked"
],
"additionalProperties": false
}skill_archive
write · idempotent (needs idempotencyKey)Archive a skill for new authoring/configuration while retaining immutable history and existing execution pins.
- Mode
- write · medium risk
- Scopes
- brief:read, skills:read, skills:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel archive this reviewer skill after confirming its current revision”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- skill_get, skill_revision_list
Arguments
expectedRevisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredImmutable tenant reviewer-skill identifier returned by skill_list or skill_create.
minimum length: 1 · maximum length: 240
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"skillId": "skl_recipe_checkout_copy",
"expectedRevisionId": "skr_recipe_checkout_copy_2",
"idempotencyKey": "recipe-skill-archive-unused-copy-v1"
}{
"skillId": "{{copiedSkillId}}",
"expectedRevisionId": "{{restoredRevisionId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"expectedRevisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Immutable tenant reviewer-skill identifier returned by skill_list or skill_create."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"expectedRevisionId",
"skillId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
state"archived" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "archived".
{
"operationId": "example",
"skillId": "skl_recipe_checkout_copy",
"state": "archived"
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"skillId\":\"skl_recipe_checkout_copy\",\"state\":\"archived\"}"
}
],
"structuredContent": {
"operationId": "example",
"skillId": "skl_recipe_checkout_copy",
"state": "archived"
}
}- archivedSkillId ← structuredContent.skillId
Next permitted action: Continue with project configuration independently of the archived unused copy.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"state": {
"type": "string",
"const": "archived",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"archived\"."
}
},
"required": [
"operationId",
"skillId",
"state"
],
"additionalProperties": false
}skill_compare
readCompare the verified Markdown bytes of two explicitly selected immutable revisions of one authorized customer skill.
- Mode
- read · low risk
- Scopes
- brief:read, skills:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel compare these two reviewer-skill revisions”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- skill_revision_list, skill_restore
Arguments
skillIdstring · requiredImmutable tenant reviewer-skill identifier returned by skill_list or skill_create.
minimum length: 1 · maximum length: 240
beforestring · requiredExact earlier revision selected as the before comparison side.
minimum length: 1 · maximum length: 240
afterstring · requiredExact later revision selected as the after comparison side.
minimum length: 1 · maximum length: 240
{
"skillId": "skl_recipe_checkout",
"before": "skr_recipe_checkout_1",
"after": "skr_recipe_checkout_2"
}{
"skillId": "{{skillId}}",
"before": "{{draftRevisionId}}",
"after": "{{updatedRevisionId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Immutable tenant reviewer-skill identifier returned by skill_list or skill_create."
},
"before": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Exact earlier revision selected as the before comparison side."
},
"after": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Exact later revision selected as the after comparison side."
}
},
"required": [
"skillId",
"before",
"after"
],
"additionalProperties": false
}Structured result
beforeobject · requiredExact earlier reviewer-skill revision selected as the before side of this comparison.
before.revisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
before.markdownstring · requiredExact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters.
afterobject · requiredExact later reviewer-skill revision selected as the after side of this comparison.
after.revisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
after.markdownstring · requiredExact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters.
{
"before": {
"revisionId": "skr_recipe_checkout_1",
"markdown": "example"
},
"after": {
"revisionId": "skr_recipe_checkout_2",
"markdown": "example"
}
}{
"content": [
{
"type": "text",
"text": "{\"before\":{\"revisionId\":\"skr_recipe_checkout_1\",\"markdown\":\"example\"},\"after\":{\"revisionId\":\"skr_recipe_checkout_2\",\"markdown\":\"example\"}}"
}
],
"structuredContent": {
"before": {
"revisionId": "skr_recipe_checkout_1",
"markdown": "example"
},
"after": {
"revisionId": "skr_recipe_checkout_2",
"markdown": "example"
}
}
}- comparedAfterRevisionId ← structuredContent.after.revisionId
Next permitted action: Publish only the revision that was inspected and compared.
Complete raw result schema
{
"type": "object",
"properties": {
"before": {
"type": "object",
"properties": {
"revisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"markdown": {
"type": "string",
"description": "Exact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters."
}
},
"required": [
"revisionId",
"markdown"
],
"additionalProperties": false,
"description": "Exact earlier reviewer-skill revision selected as the before side of this comparison."
},
"after": {
"type": "object",
"properties": {
"revisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"markdown": {
"type": "string",
"description": "Exact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters."
}
},
"required": [
"revisionId",
"markdown"
],
"additionalProperties": false,
"description": "Exact later reviewer-skill revision selected as the after side of this comparison."
}
},
"required": [
"before",
"after"
],
"additionalProperties": false
}skill_copy
write · idempotent (needs idempotencyKey)Copy an explicitly selected immutable published version. Personal-to-team copies require a pre-existing exact human-owner consent receipt; an agent cannot create one.
- Mode
- write · medium risk
- Scopes
- brief:read, skills:read, skills:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel make a team draft copy of this exact published skill version”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- skill_get, skill_publish
Arguments
sourceVersionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1.
minimum length: 1
skillIdstring · requiredImmutable tenant reviewer-skill identifier returned by skill_list or skill_create.
minimum length: 1 · maximum length: 240
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"skillId": "skl_recipe_checkout",
"sourceVersionId": "skv_recipe_checkout_1",
"audience": "personal",
"name": "Checkout reliability reviewer copy",
"description": "Editable copy of the exact published reviewer.",
"idempotencyKey": "recipe-skill-copy-v1"
}{
"skillId": "{{skillId}}",
"sourceVersionId": "{{publishedSkillVersionId}}",
"audience": "personal",
"name": "Checkout reliability reviewer copy",
"description": "Editable copy of the exact published reviewer.",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"sourceVersionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Immutable tenant reviewer-skill identifier returned by skill_list or skill_create."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"sourceVersionId",
"audience",
"name",
"description",
"skillId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
draftRevisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
state"draft" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "draft".
{
"operationId": "example",
"skillId": "skl_recipe_checkout_copy",
"draftRevisionId": "skr_recipe_checkout_copy_1",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "draft"
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"skillId\":\"skl_recipe_checkout_copy\",\"draftRevisionId\":\"skr_recipe_checkout_copy_1\",\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"state\":\"draft\"}"
}
],
"structuredContent": {
"operationId": "example",
"skillId": "skl_recipe_checkout_copy",
"draftRevisionId": "skr_recipe_checkout_copy_1",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "draft"
}
}- copiedSkillId ← structuredContent.skillId
- copiedRevisionId ← structuredContent.draftRevisionId
Next permitted action: Restore only through a new immutable draft revision.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"draftRevisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"state": {
"type": "string",
"const": "draft",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"draft\"."
}
},
"required": [
"operationId",
"skillId",
"draftRevisionId",
"contentSha256",
"state"
],
"additionalProperties": false
}skill_create
write · idempotent (needs idempotencyKey)Create one bounded customer-authored skill draft. This does not publish, select, or run it.
- Mode
- write · medium risk
- Scopes
- brief:read, skills:read, skills:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel create a personal reviewer skill draft from this Markdown”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- skill_update, skill_publish
Arguments
namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1.
minimum length: 1
markdownstring · requiredExact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters. Minimum accepted length or value is 1.
minimum length: 1
audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"name": "Checkout reliability reviewer",
"description": "Checks retry-safe checkout behavior.",
"markdown": "# Checkout reliability\n\nVerify idempotent payment behavior.",
"audience": "personal",
"idempotencyKey": "recipe-skill-create-v1"
}{
"name": "Checkout reliability reviewer",
"description": "Checks retry-safe checkout behavior.",
"markdown": "# Checkout reliability\n\nVerify idempotent payment behavior.",
"audience": "personal",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1."
},
"markdown": {
"type": "string",
"minLength": 1,
"description": "Exact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters. Minimum accepted length or value is 1."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"name",
"description",
"markdown",
"audience",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
draftRevisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
state"draft" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "draft".
{
"operationId": "example",
"skillId": "skl_recipe_checkout",
"draftRevisionId": "skr_recipe_checkout_1",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "draft"
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"skillId\":\"skl_recipe_checkout\",\"draftRevisionId\":\"skr_recipe_checkout_1\",\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"state\":\"draft\"}"
}
],
"structuredContent": {
"operationId": "example",
"skillId": "skl_recipe_checkout",
"draftRevisionId": "skr_recipe_checkout_1",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "draft"
}
}- skillId ← structuredContent.skillId
- draftRevisionId ← structuredContent.draftRevisionId
Next permitted action: Inspect the exact returned draft before editing or publishing it.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"draftRevisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"state": {
"type": "string",
"const": "draft",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"draft\"."
}
},
"required": [
"operationId",
"skillId",
"draftRevisionId",
"contentSha256",
"state"
],
"additionalProperties": false
}skill_get
readInspect one authorized skill and exact immutable version, including its verified Markdown source and current platform-framing preview.
- Mode
- read · low risk
- Scopes
- brief:read, skills:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel inspect the exact version of the security reviewer skill”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- skill_list, skill_revision_list, skill_copy
Arguments
skillIdstring · requiredImmutable tenant reviewer-skill identifier returned by skill_list or skill_create.
minimum length: 1 · maximum length: 240
versionIdstring · optionalExact immutable reviewer-skill version to inspect; omit to inspect the authorized current head.
minimum length: 1 · maximum length: 240
{
"skillId": "skl_recipe_checkout"
}{
"skillId": "{{skillId}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Immutable tenant reviewer-skill identifier returned by skill_list or skill_create."
},
"versionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Exact immutable reviewer-skill version to inspect; omit to inspect the authorized current head."
}
},
"required": [
"skillId"
],
"additionalProperties": false
}Structured result
skillany of · requiredExact immutable reviewer skill artifact pin used for this occurrence.
any of
Branch 1
skill.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
skill.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skill.role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
skill.namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
skill.descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1.
minimum length: 1
skill.status"published" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "published".
skill.versionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
skill.versionLabelstring | null · requiredDisplay label for the immutable built-in reviewer-skill publication; null means no publication is available. A null value explicitly means no current value is available.
skill.contentSha256any of · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
any of
Branch 1
Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
Branch 2
skill.updatedAtnull · requiredRFC 3339 timestamp when this record was last updated.
skill.canEditfalse · requiredWhether the current authenticated principal may edit this reviewer skill. This branch always uses false.
skill.canCopyboolean · requiredWhether the current authenticated principal may create a customer-owned copy of this reviewer skill version.
Branch 2
skill.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
skill.idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skill.namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
skill.descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1.
minimum length: 1
skill.audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
skill.ownerUserIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
skill.status"draft" | "published" | "archived" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. Allowed values: "draft", "published", "archived".
skill.draftHeadRevisionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
skill.publishedHeadVersionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
skill.publishedVersionNumberany of · requiredPositive monotonic number of the current published reviewer-skill version; null means it has never been published. A null value explicitly means no current value is available. Minimum accepted length or value is 0. The value must be an integer.
any of
Branch 1
Branch 2
skill.updatedAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created. Use an RFC 3339 date-time string.
format: date-time
skill.canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
skill.canCopyboolean · requiredWhether the current authenticated principal may create a customer-owned copy of this reviewer skill version.
sourceobject · requiredOptional human-readable provenance for the decision.
source.markdownstring · requiredExact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters.
source.byteLengthinteger · requiredExact UTF-8 byte length of the immutable reviewer-skill or framing source. Minimum accepted length or value is 0. The value must be an integer.
source.contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
source.revisionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
source.versionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
source.versionNumberany of · requiredPositive monotonic publication number assigned to this immutable reviewer-skill version. A null value explicitly means no current value is available. Minimum accepted length or value is 0. The value must be an integer.
any of
Branch 1
Branch 2
copyProvenanceany of · optionalServer-recorded immutable lineage for a copied reviewer skill; null means no copy lineage is recorded, and source identifiers do not grant access to the source skill. Omission uses the schema default null. A null value explicitly means no current value is available.
default: null
any of
Branch 1
any of
Branch 1
copyProvenance.kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
copyProvenance.rolestring · requiredPinned reviewer or artifact role used by the execution bundle. Accepted length or value is 1 through 120, inclusive.
minimum length: 1 · maximum length: 120
copyProvenance.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 120, inclusive.
minimum length: 1 · maximum length: 120
copyProvenance.contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
Branch 2
copyProvenance.kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
copyProvenance.sourceSkillIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
copyProvenance.sourceVersionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
copyProvenance.contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
Branch 2
platformFramingobject · requiredAuthenticated shared platform framing composed with the selected reviewer skill at execution admission.
platformFraming.title"Platform framing" · requiredHuman-readable title displayed in Semel. This branch always uses "Platform framing".
platformFraming.descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Accepted length or value is 1 through 2000, inclusive.
minimum length: 1 · maximum length: 2000
platformFraming.includedAtRuntimetrue · requiredWhether this platform framing is included when the reviewer skill is composed for execution. This branch always uses true.
platformFraming.compositionStatus"current_preview" · requiredDescribes whether the returned framing is a current preview or an immutable admitted execution snapshot. This branch always uses "current_preview".
platformFraming.executionUsesAdmittedSnapshottrue · requiredWhether executions use a separately admitted immutable snapshot instead of trusting this current preview. This branch always uses true.
platformFraming.sourceany of · requiredOptional human-readable provenance for the decision. A null value explicitly means no current value is available.
any of
Branch 1
platformFraming.source.role"reviewer-protocol-framing" · requiredPinned reviewer or artifact role used by the execution bundle. This branch always uses "reviewer-protocol-framing".
platformFraming.source.versionstring · requiredPositive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 120, inclusive.
minimum length: 1 · maximum length: 120
platformFraming.source.markdownstring · requiredExact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters.
platformFraming.source.byteLengthinteger · requiredExact UTF-8 byte length of the immutable reviewer-skill or framing source. Minimum accepted length or value is 0. The value must be an integer.
platformFraming.source.contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
platformFraming.source.framingHashany of · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
any of
Branch 1
Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
Branch 2
Branch 2
newVersionAvailableboolean · requiredWhether a newer immutable reviewer-skill version exists than the exact version currently being inspected.
{
"skill": {
"kind": "builtin",
"id": "record_fixture_01",
"role": "product",
"name": "Checkout reliability",
"description": "example",
"status": "published",
"versionId": "example",
"versionLabel": "example",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"updatedAt": null,
"canEdit": false,
"canCopy": false
},
"source": {
"markdown": "example",
"byteLength": 1,
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"revisionId": "skr_recipe_checkout_1",
"versionId": "example",
"versionNumber": 1
},
"platformFraming": {
"title": "Platform framing",
"description": "example",
"includedAtRuntime": true,
"compositionStatus": "current_preview",
"executionUsesAdmittedSnapshot": true,
"source": {
"role": "reviewer-protocol-framing",
"version": "example",
"markdown": "example",
"byteLength": 1,
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"framingHash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
},
"newVersionAvailable": false
}{
"content": [
{
"type": "text",
"text": "{\"skill\":{\"kind\":\"builtin\",\"id\":\"record_fixture_01\",\"role\":\"product\",\"name\":\"Checkout reliability\",\"description\":\"example\",\"status\":\"published\",\"versionId\":\"example\",\"versionLabel\":\"example\",\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"updatedAt\":null,\"canEdit\":false,\"canCopy\":false},\"source\":{\"markdown\":\"example\",\"byteLength\":1,\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"revisionId\":\"skr_recipe_checkout_1\",\"versionId\":\"example\",\"versionNumber\":1},\"platformFraming\":{\"title\":\"Platform framing\",\"description\":\"example\",\"includedAtRuntime\":true,\"compositionStatus\":\"current_preview\",\"executionUsesAdmittedSnapshot\":true,\"source\":{\"role\":\"reviewer-protocol-framing\",\"version\":\"example\",\"markdown\":\"example\",\"byteLength\":1,\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"framingHash\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"}},\"newVersionAvailable\":false}"
}
],
"structuredContent": {
"skill": {
"kind": "builtin",
"id": "record_fixture_01",
"role": "product",
"name": "Checkout reliability",
"description": "example",
"status": "published",
"versionId": "example",
"versionLabel": "example",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"updatedAt": null,
"canEdit": false,
"canCopy": false
},
"source": {
"markdown": "example",
"byteLength": 1,
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"revisionId": "skr_recipe_checkout_1",
"versionId": "example",
"versionNumber": 1
},
"platformFraming": {
"title": "Platform framing",
"description": "example",
"includedAtRuntime": true,
"compositionStatus": "current_preview",
"executionUsesAdmittedSnapshot": true,
"source": {
"role": "reviewer-protocol-framing",
"version": "example",
"markdown": "example",
"byteLength": 1,
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"framingHash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
},
"newVersionAvailable": false
}
}- inspectedRevisionId ← structuredContent.source.revisionId
Next permitted action: Use the returned revision as the optimistic edit base.
Complete raw result schema
{
"type": "object",
"properties": {
"skill": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1."
},
"status": {
"type": "string",
"const": "published",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"published\"."
},
"versionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"versionLabel": {
"type": [
"string",
"null"
],
"description": "Display label for the immutable built-in reviewer-skill publication; null means no publication is available. A null value explicitly means no current value is available."
},
"contentSha256": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
{
"type": "null"
}
],
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"updatedAt": {
"type": "null",
"description": "RFC 3339 timestamp when this record was last updated."
},
"canEdit": {
"type": "boolean",
"const": false,
"description": "Whether the current authenticated principal may edit this reviewer skill. This branch always uses false."
},
"canCopy": {
"type": "boolean",
"description": "Whether the current authenticated principal may create a customer-owned copy of this reviewer skill version."
}
},
"required": [
"kind",
"id",
"role",
"name",
"description",
"status",
"versionId",
"versionLabel",
"contentSha256",
"updatedAt",
"canEdit",
"canCopy"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"ownerUserId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"status": {
"type": "string",
"enum": [
"draft",
"published",
"archived"
],
"description": "Current typed status; the schema enum or union branch lists every allowed value. Allowed values: \"draft\", \"published\", \"archived\"."
},
"draftHeadRevisionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"publishedHeadVersionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"publishedVersionNumber": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0
},
{
"type": "null"
}
],
"description": "Positive monotonic number of the current published reviewer-skill version; null means it has never been published. A null value explicitly means no current value is available. Minimum accepted length or value is 0. The value must be an integer."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp assigned by Semel when this record was created. Use an RFC 3339 date-time string."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
},
"canCopy": {
"type": "boolean",
"description": "Whether the current authenticated principal may create a customer-owned copy of this reviewer skill version."
}
},
"required": [
"kind",
"id",
"name",
"description",
"audience",
"ownerUserId",
"status",
"draftHeadRevisionId",
"publishedHeadVersionId",
"publishedVersionNumber",
"updatedAt",
"canEdit",
"canCopy"
],
"additionalProperties": false
}
],
"description": "Exact immutable reviewer skill artifact pin used for this occurrence."
},
"source": {
"type": "object",
"properties": {
"markdown": {
"type": "string",
"description": "Exact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters."
},
"byteLength": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Exact UTF-8 byte length of the immutable reviewer-skill or framing source. Minimum accepted length or value is 0. The value must be an integer."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"revisionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"versionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"versionNumber": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0
},
{
"type": "null"
}
],
"description": "Positive monotonic publication number assigned to this immutable reviewer-skill version. A null value explicitly means no current value is available. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"markdown",
"byteLength",
"contentSha256",
"revisionId",
"versionId",
"versionNumber"
],
"additionalProperties": false,
"description": "Optional human-readable provenance for the decision."
},
"copyProvenance": {
"anyOf": [
{
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"role": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Pinned reviewer or artifact role used by the execution bundle. Accepted length or value is 1 through 120, inclusive."
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 120, inclusive."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
}
},
"required": [
"kind",
"role",
"version",
"contentSha256"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"sourceSkillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"sourceVersionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
}
},
"required": [
"kind",
"sourceSkillId",
"sourceVersionId",
"contentSha256"
],
"additionalProperties": false
}
]
},
{
"type": "null"
}
],
"default": null,
"description": "Server-recorded immutable lineage for a copied reviewer skill; null means no copy lineage is recorded, and source identifiers do not grant access to the source skill. Omission uses the schema default null. A null value explicitly means no current value is available."
},
"platformFraming": {
"type": "object",
"properties": {
"title": {
"type": "string",
"const": "Platform framing",
"description": "Human-readable title displayed in Semel. This branch always uses \"Platform framing\"."
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 2000,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Accepted length or value is 1 through 2000, inclusive."
},
"includedAtRuntime": {
"type": "boolean",
"const": true,
"description": "Whether this platform framing is included when the reviewer skill is composed for execution. This branch always uses true."
},
"compositionStatus": {
"type": "string",
"const": "current_preview",
"description": "Describes whether the returned framing is a current preview or an immutable admitted execution snapshot. This branch always uses \"current_preview\"."
},
"executionUsesAdmittedSnapshot": {
"type": "boolean",
"const": true,
"description": "Whether executions use a separately admitted immutable snapshot instead of trusting this current preview. This branch always uses true."
},
"source": {
"anyOf": [
{
"type": "object",
"properties": {
"role": {
"type": "string",
"const": "reviewer-protocol-framing",
"description": "Pinned reviewer or artifact role used by the execution bundle. This branch always uses \"reviewer-protocol-framing\"."
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Positive version number of a skill artifact or nonnegative snapshot version of a knowledge collection. Accepted length or value is 1 through 120, inclusive."
},
"markdown": {
"type": "string",
"description": "Exact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters."
},
"byteLength": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Exact UTF-8 byte length of the immutable reviewer-skill or framing source. Minimum accepted length or value is 0. The value must be an integer."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"framingHash": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
{
"type": "null"
}
],
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
}
},
"required": [
"role",
"version",
"markdown",
"byteLength",
"contentSha256",
"framingHash"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Optional human-readable provenance for the decision. A null value explicitly means no current value is available."
}
},
"required": [
"title",
"description",
"includedAtRuntime",
"compositionStatus",
"executionUsesAdmittedSnapshot",
"source"
],
"additionalProperties": false,
"description": "Authenticated shared platform framing composed with the selected reviewer skill at execution admission."
},
"newVersionAvailable": {
"type": "boolean",
"description": "Whether a newer immutable reviewer-skill version exists than the exact version currently being inspected."
}
},
"required": [
"skill",
"source",
"platformFraming",
"newVersionAvailable"
],
"additionalProperties": false
}skill_list
readList the complete workspace reviewer-skill library as bounded metadata; source bytes are returned only by skill_get or skill_compare.
- Mode
- read · low risk
- Scopes
- brief:read, skills:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel list the team reviewer skills”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- skill_get, skill_revision_list
Arguments
qstring · optionalOptional case-insensitive search text used to filter reviewer skills by name or description. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200.
maximum length: 200
source"all" | "builtin" | "team" | "mine" · optionalOptional human-readable provenance for the decision. Omission uses the schema default "all". Allowed values: "all", "builtin", "team", "mine".
default: "all"
status"all" | "draft" | "published" | "archived" · optionalCurrent typed status; the schema enum or union branch lists every allowed value. Omission uses the schema default "all". Allowed values: "all", "draft", "published", "archived".
default: "all"
cursorstring · optionalOpaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 2000.
maximum length: 2000
limitinteger · optionalMaximum records requested for this page; omission uses the server default and the schema enforces the ceiling. Omission uses the schema default 25. Accepted length or value is 1 through 50, inclusive. The value must be an integer.
default: 25 · minimum: 1 · maximum: 50
{
"source": "all",
"status": "all",
"limit": 25
}{
"source": "all",
"status": "all",
"limit": 25
}Complete raw parameter schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional case-insensitive search text used to filter reviewer skills by name or description. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 200."
},
"source": {
"type": "string",
"enum": [
"all",
"builtin",
"team",
"mine"
],
"default": "all",
"description": "Optional human-readable provenance for the decision. Omission uses the schema default \"all\". Allowed values: \"all\", \"builtin\", \"team\", \"mine\"."
},
"status": {
"type": "string",
"enum": [
"all",
"draft",
"published",
"archived"
],
"default": "all",
"description": "Current typed status; the schema enum or union branch lists every allowed value. Omission uses the schema default \"all\". Allowed values: \"all\", \"draft\", \"published\", \"archived\"."
},
"cursor": {
"type": "string",
"maxLength": 2000,
"description": "Opaque pagination or synchronization cursor from the preceding response; omit to start from the beginning. Omit the field when it does not apply; omission is distinct from an empty value. Maximum accepted length or value is 2000."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 25,
"description": "Maximum records requested for this page; omission uses the server default and the schema enforces the ceiling. Omission uses the schema default 25. Accepted length or value is 1 through 50, inclusive. The value must be an integer."
}
},
"additionalProperties": false
}Structured result
skillsarray · requiredOrdered pinned reviewer-skill manifests required for this execution; fetch each artifact by its returned identifiers before use. An empty array explicitly means no matching items.
maximum items: 50
Array item · any of
any of
Branch 1
skills[].kind"builtin" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "builtin".
skills[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skills[].role"product" | "engineering" | "design" | "security" | "test" · requiredPinned reviewer or artifact role used by the execution bundle. Allowed values: "product", "engineering", "design", "security", "test".
skills[].namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
skills[].descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1.
minimum length: 1
skills[].status"published" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. This branch always uses "published".
skills[].versionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
skills[].versionLabelstring | null · requiredDisplay label for the immutable built-in reviewer-skill publication; null means no publication is available. A null value explicitly means no current value is available.
skills[].contentSha256any of · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
any of
Branch 1
Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
Branch 2
skills[].updatedAtnull · requiredRFC 3339 timestamp when this record was last updated.
skills[].canEditfalse · requiredWhether the current authenticated principal may edit this reviewer skill. This branch always uses false.
skills[].canCopyboolean · requiredWhether the current authenticated principal may create a customer-owned copy of this reviewer skill version.
Branch 2
skills[].kind"custom" · requiredDiscriminator identifying the typed variant represented by this object. This branch always uses "custom".
skills[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skills[].namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
skills[].descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1.
minimum length: 1
skills[].audience"personal" | "team" · requiredVisibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: "personal", "team".
skills[].ownerUserIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
skills[].status"draft" | "published" | "archived" · requiredCurrent typed status; the schema enum or union branch lists every allowed value. Allowed values: "draft", "published", "archived".
skills[].draftHeadRevisionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
skills[].publishedHeadVersionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
skills[].publishedVersionNumberany of · requiredPositive monotonic number of the current published reviewer-skill version; null means it has never been published. A null value explicitly means no current value is available. Minimum accepted length or value is 0. The value must be an integer.
any of
Branch 1
Branch 2
skills[].updatedAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created. Use an RFC 3339 date-time string.
format: date-time
skills[].canEditboolean · requiredWhether the current authenticated principal may edit this reviewer skill.
skills[].canCopyboolean · requiredWhether the current authenticated principal may create a customer-owned copy of this reviewer skill version.
nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
authoringEnabledboolean · requiredWhether customer reviewer-skill authoring is enabled for this workspace deployment.
{
"skills": [
{
"kind": "builtin",
"id": "skl_recipe_catalog",
"role": "product",
"name": "Checkout reliability",
"description": "example",
"status": "published",
"versionId": "example",
"versionLabel": "example",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"updatedAt": null,
"canEdit": false,
"canCopy": false
}
],
"nextCursor": null,
"authoringEnabled": false
}{
"content": [
{
"type": "text",
"text": "{\"skills\":[{\"kind\":\"builtin\",\"id\":\"skl_recipe_catalog\",\"role\":\"product\",\"name\":\"Checkout reliability\",\"description\":\"example\",\"status\":\"published\",\"versionId\":\"example\",\"versionLabel\":\"example\",\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"updatedAt\":null,\"canEdit\":false,\"canCopy\":false}],\"nextCursor\":null,\"authoringEnabled\":false}"
}
],
"structuredContent": {
"skills": [
{
"kind": "builtin",
"id": "skl_recipe_catalog",
"role": "product",
"name": "Checkout reliability",
"description": "example",
"status": "published",
"versionId": "example",
"versionLabel": "example",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"updatedAt": null,
"canEdit": false,
"canCopy": false
}
],
"nextCursor": null,
"authoringEnabled": false
}
}- catalogSkillId ← structuredContent.skills[0].id
Next permitted action: Create a new draft only when no existing skill is the intended editable source.
Complete raw result schema
{
"type": "object",
"properties": {
"skills": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "builtin",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"builtin\"."
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"role": {
"type": "string",
"enum": [
"product",
"engineering",
"design",
"security",
"test"
],
"description": "Pinned reviewer or artifact role used by the execution bundle. Allowed values: \"product\", \"engineering\", \"design\", \"security\", \"test\"."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1."
},
"status": {
"type": "string",
"const": "published",
"description": "Current typed status; the schema enum or union branch lists every allowed value. This branch always uses \"published\"."
},
"versionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"versionLabel": {
"type": [
"string",
"null"
],
"description": "Display label for the immutable built-in reviewer-skill publication; null means no publication is available. A null value explicitly means no current value is available."
},
"contentSha256": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
{
"type": "null"
}
],
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"updatedAt": {
"type": "null",
"description": "RFC 3339 timestamp when this record was last updated."
},
"canEdit": {
"type": "boolean",
"const": false,
"description": "Whether the current authenticated principal may edit this reviewer skill. This branch always uses false."
},
"canCopy": {
"type": "boolean",
"description": "Whether the current authenticated principal may create a customer-owned copy of this reviewer skill version."
}
},
"required": [
"kind",
"id",
"role",
"name",
"description",
"status",
"versionId",
"versionLabel",
"contentSha256",
"updatedAt",
"canEdit",
"canCopy"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "custom",
"description": "Discriminator identifying the typed variant represented by this object. This branch always uses \"custom\"."
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1."
},
"audience": {
"type": "string",
"enum": [
"personal",
"team"
],
"description": "Visibility of the customer reviewer skill: personal to its accountable owner or shared with workspace members. Allowed values: \"personal\", \"team\"."
},
"ownerUserId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"status": {
"type": "string",
"enum": [
"draft",
"published",
"archived"
],
"description": "Current typed status; the schema enum or union branch lists every allowed value. Allowed values: \"draft\", \"published\", \"archived\"."
},
"draftHeadRevisionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"publishedHeadVersionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"publishedVersionNumber": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0
},
{
"type": "null"
}
],
"description": "Positive monotonic number of the current published reviewer-skill version; null means it has never been published. A null value explicitly means no current value is available. Minimum accepted length or value is 0. The value must be an integer."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp assigned by Semel when this record was created. Use an RFC 3339 date-time string."
},
"canEdit": {
"type": "boolean",
"description": "Whether the current authenticated principal may edit this reviewer skill."
},
"canCopy": {
"type": "boolean",
"description": "Whether the current authenticated principal may create a customer-owned copy of this reviewer skill version."
}
},
"required": [
"kind",
"id",
"name",
"description",
"audience",
"ownerUserId",
"status",
"draftHeadRevisionId",
"publishedHeadVersionId",
"publishedVersionNumber",
"updatedAt",
"canEdit",
"canCopy"
],
"additionalProperties": false
}
]
},
"maxItems": 50,
"description": "Ordered pinned reviewer-skill manifests required for this execution; fetch each artifact by its returned identifiers before use. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
},
"authoringEnabled": {
"type": "boolean",
"description": "Whether customer reviewer-skill authoring is enabled for this workspace deployment."
}
},
"required": [
"skills",
"nextCursor",
"authoringEnabled"
],
"additionalProperties": false
}skill_publish
write · idempotent (needs idempotencyKey)Publish exactly expectedRevisionId as a new immutable version. Publishing does not run a review or select the version anywhere.
- Mode
- write · medium risk
- Scopes
- brief:read, skills:read, skills:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel publish the reviewer-skill revision I just inspected”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- skill_get, skill_revision_list
Arguments
expectedRevisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredImmutable tenant reviewer-skill identifier returned by skill_list or skill_create.
minimum length: 1 · maximum length: 240
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"skillId": "skl_recipe_checkout",
"expectedRevisionId": "skr_recipe_checkout_2",
"idempotencyKey": "recipe-skill-publish-v1"
}{
"skillId": "{{skillId}}",
"expectedRevisionId": "{{updatedRevisionId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"expectedRevisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Immutable tenant reviewer-skill identifier returned by skill_list or skill_create."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"expectedRevisionId",
"skillId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
versionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
revisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
versionNumberinteger · requiredPositive monotonic publication number assigned to this immutable reviewer-skill version. Minimum accepted length or value is 0. The value must be an integer.
contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
state"published" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "published".
{
"operationId": "example",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1",
"revisionId": "skr_recipe_checkout_2",
"versionNumber": 1,
"contentSha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"state": "published"
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"skillId\":\"skl_recipe_checkout\",\"versionId\":\"skv_recipe_checkout_1\",\"revisionId\":\"skr_recipe_checkout_2\",\"versionNumber\":1,\"contentSha256\":\"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\",\"state\":\"published\"}"
}
],
"structuredContent": {
"operationId": "example",
"skillId": "skl_recipe_checkout",
"versionId": "skv_recipe_checkout_1",
"revisionId": "skr_recipe_checkout_2",
"versionNumber": 1,
"contentSha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"state": "published"
}
}- publishedSkillVersionId ← structuredContent.versionId
- publishedSkillHash ← structuredContent.contentSha256
Next permitted action: Use the exact immutable publication in copies and cascade configuration.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"versionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"revisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"versionNumber": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Positive monotonic publication number assigned to this immutable reviewer-skill version. Minimum accepted length or value is 0. The value must be an integer."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"state": {
"type": "string",
"const": "published",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"published\"."
}
},
"required": [
"operationId",
"skillId",
"versionId",
"revisionId",
"versionNumber",
"contentSha256",
"state"
],
"additionalProperties": false
}skill_restore
write · idempotent (needs idempotencyKey)Create a new draft from an exact historical revision while preserving all existing revisions, publications, and reviews.
- Mode
- write · medium risk
- Scopes
- brief:read, skills:read, skills:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel restore this old skill revision as a new draft”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- skill_revision_list, skill_compare, skill_publish
Arguments
revisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
expectedRevisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredImmutable tenant reviewer-skill identifier returned by skill_list or skill_create.
minimum length: 1 · maximum length: 240
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"skillId": "skl_recipe_checkout_copy",
"revisionId": "skr_recipe_checkout_copy_1",
"expectedRevisionId": "skr_recipe_checkout_copy_1",
"idempotencyKey": "recipe-skill-restore-v1"
}{
"skillId": "{{copiedSkillId}}",
"revisionId": "{{copiedRevisionId}}",
"expectedRevisionId": "{{copiedRevisionId}}",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"revisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"expectedRevisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Immutable tenant reviewer-skill identifier returned by skill_list or skill_create."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"revisionId",
"expectedRevisionId",
"skillId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
draftRevisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
state"draft" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "draft".
{
"operationId": "example",
"skillId": "skl_recipe_checkout_copy",
"draftRevisionId": "skr_recipe_checkout_copy_2",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "draft"
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"skillId\":\"skl_recipe_checkout_copy\",\"draftRevisionId\":\"skr_recipe_checkout_copy_2\",\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"state\":\"draft\"}"
}
],
"structuredContent": {
"operationId": "example",
"skillId": "skl_recipe_checkout_copy",
"draftRevisionId": "skr_recipe_checkout_copy_2",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "draft"
}
}- restoredRevisionId ← structuredContent.draftRevisionId
Next permitted action: Save the exact published original as a cascade preset.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"draftRevisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"state": {
"type": "string",
"const": "draft",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"draft\"."
}
},
"required": [
"operationId",
"skillId",
"draftRevisionId",
"contentSha256",
"state"
],
"additionalProperties": false
}skill_revision_list
readList bounded immutable revision metadata for one customer skill without returning Markdown bodies.
- Mode
- read · low risk
- Scopes
- brief:read, skills:read
- Confirmation
- none
- Idempotency
- No idempotency key. This is a read operation.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel show the revision history for this reviewer skill”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSING
- Related
- skill_get, skill_compare, skill_restore
Arguments
skillIdstring · requiredImmutable tenant reviewer-skill identifier returned by skill_list or skill_create.
minimum length: 1 · maximum length: 240
cursorstring · optionalOpaque cursor returned by the preceding skill_revision_list page.
maximum length: 2000
limitinteger · optionalMaximum revision metadata records to return; omission uses 25.
default: 25 · minimum: 1 · maximum: 50
{
"skillId": "skl_recipe_checkout",
"limit": 25
}{
"skillId": "{{skillId}}",
"limit": 25
}Complete raw parameter schema
{
"type": "object",
"properties": {
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Immutable tenant reviewer-skill identifier returned by skill_list or skill_create."
},
"cursor": {
"type": "string",
"maxLength": 2000,
"description": "Opaque cursor returned by the preceding skill_revision_list page."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 25,
"description": "Maximum revision metadata records to return; omission uses 25."
}
},
"required": [
"skillId"
],
"additionalProperties": false
}Structured result
revisionsarray · requiredImmutable reviewer-skill revision metadata in this page; an empty array means no authorized revisions matched. An empty array explicitly means no matching items.
maximum items: 50
Array item · object
revisions[].idstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
revisions[].sequenceinteger · requiredPositive monotonic position of this immutable reviewer-skill revision in its history. Minimum accepted length or value is 0. The value must be an integer.
revisions[].parentRevisionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
revisions[].restoredFromRevisionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
revisions[].contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
revisions[].byteLengthinteger · requiredExact UTF-8 byte length of the immutable reviewer-skill or framing source. Accepted length or value is 1 through 262144, inclusive. The value must be an integer.
minimum: 1 · maximum: 262144
revisions[].namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
revisions[].descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1.
minimum length: 1
revisions[].actorKind"human" | "agent" · requiredWhether the immutable reviewer-skill revision was authored by an authenticated human or an authorized agent. Allowed values: "human", "agent".
revisions[].actorIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
revisions[].createdAtstring · requiredRFC 3339 timestamp assigned by Semel when this record was created. Use an RFC 3339 date-time string.
format: date-time
revisions[].state"draft" | "published" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: "draft", "published".
revisions[].publishedVersionIdany of · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
any of
Branch 1
Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
Branch 2
revisions[].publishedVersionNumberany of · requiredPositive monotonic number of the current published reviewer-skill version; null means it has never been published. A null value explicitly means no current value is available. Minimum accepted length or value is 0. The value must be an integer.
any of
Branch 1
Branch 2
nextCursorstring | null · requiredOpaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available.
{
"revisions": [
{
"id": "skr_recipe_checkout_2",
"sequence": 1,
"parentRevisionId": "example",
"restoredFromRevisionId": "example",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"byteLength": 1,
"name": "Checkout reliability",
"description": "example",
"actorKind": "human",
"actorId": "example",
"createdAt": "2026-09-07T16:00:00.000Z",
"state": "draft",
"publishedVersionId": "example",
"publishedVersionNumber": 1
}
],
"nextCursor": null
}{
"content": [
{
"type": "text",
"text": "{\"revisions\":[{\"id\":\"skr_recipe_checkout_2\",\"sequence\":1,\"parentRevisionId\":\"example\",\"restoredFromRevisionId\":\"example\",\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"byteLength\":1,\"name\":\"Checkout reliability\",\"description\":\"example\",\"actorKind\":\"human\",\"actorId\":\"example\",\"createdAt\":\"2026-09-07T16:00:00.000Z\",\"state\":\"draft\",\"publishedVersionId\":\"example\",\"publishedVersionNumber\":1}],\"nextCursor\":null}"
}
],
"structuredContent": {
"revisions": [
{
"id": "skr_recipe_checkout_2",
"sequence": 1,
"parentRevisionId": "example",
"restoredFromRevisionId": "example",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"byteLength": 1,
"name": "Checkout reliability",
"description": "example",
"actorKind": "human",
"actorId": "example",
"createdAt": "2026-09-07T16:00:00.000Z",
"state": "draft",
"publishedVersionId": "example",
"publishedVersionNumber": 1
}
],
"nextCursor": null
}
}- listedRevisionId ← structuredContent.revisions[0].id
Next permitted action: Compare the exact before and after revisions.
Complete raw result schema
{
"type": "object",
"properties": {
"revisions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"sequence": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Positive monotonic position of this immutable reviewer-skill revision in its history. Minimum accepted length or value is 0. The value must be an integer."
},
"parentRevisionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"restoredFromRevisionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"byteLength": {
"type": "integer",
"minimum": 1,
"maximum": 262144,
"description": "Exact UTF-8 byte length of the immutable reviewer-skill or framing source. Accepted length or value is 1 through 262144, inclusive. The value must be an integer."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1."
},
"actorKind": {
"type": "string",
"enum": [
"human",
"agent"
],
"description": "Whether the immutable reviewer-skill revision was authored by an authenticated human or an authorized agent. Allowed values: \"human\", \"agent\"."
},
"actorId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp assigned by Semel when this record was created. Use an RFC 3339 date-time string."
},
"state": {
"type": "string",
"enum": [
"draft",
"published"
],
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. Allowed values: \"draft\", \"published\"."
},
"publishedVersionId": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
{
"type": "null"
}
],
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"publishedVersionNumber": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0
},
{
"type": "null"
}
],
"description": "Positive monotonic number of the current published reviewer-skill version; null means it has never been published. A null value explicitly means no current value is available. Minimum accepted length or value is 0. The value must be an integer."
}
},
"required": [
"id",
"sequence",
"parentRevisionId",
"restoredFromRevisionId",
"contentSha256",
"byteLength",
"name",
"description",
"actorKind",
"actorId",
"createdAt",
"state",
"publishedVersionId",
"publishedVersionNumber"
],
"additionalProperties": false
},
"maxItems": 50,
"description": "Immutable reviewer-skill revision metadata in this page; an empty array means no authorized revisions matched. An empty array explicitly means no matching items."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page or sync; null means the current result is complete. A null value explicitly means no current value is available."
}
},
"required": [
"revisions",
"nextCursor"
],
"additionalProperties": false
}skill_update
write · idempotent (needs idempotencyKey)Save a new immutable draft revision only when expectedRevisionId is still the current head.
- Mode
- write · medium risk
- Scopes
- brief:read, skills:read, skills:write
- Confirmation
- explicit
- Idempotency
- Required. Reuse the key only for the same logical mutation with unchanged arguments.
- Prerequisites
- Authenticated connection, the listed scopes, and a server state that permits this operation.
- Try
- “/semel save this reviewer-skill edit against the revision I inspected”
- Errors
- PROJECT_ACCESS_DENIEDAUTHORIZATION_SCOPE_MISSINGCONFLICTING_IDEMPOTENCY_REPLAYVALIDATION_FAILED
- Related
- skill_get, skill_compare, skill_publish
Arguments
namestring · requiredHuman-readable name displayed in Semel. Minimum accepted length or value is 1.
minimum length: 1
descriptionstring · requiredHuman-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1.
minimum length: 1
markdownstring · requiredExact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters. Minimum accepted length or value is 1.
minimum length: 1
expectedRevisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredImmutable tenant reviewer-skill identifier returned by skill_list or skill_create.
minimum length: 1 · maximum length: 240
idempotencyKeystring · requiredCaller-unique key making this mutation exactly-once (see the receipt contract).
minimum length: 1
{
"skillId": "skl_recipe_checkout",
"expectedRevisionId": "skr_recipe_checkout_1",
"name": "Checkout reliability reviewer",
"description": "Checks retry-safe checkout behavior and evidence.",
"markdown": "# Checkout reliability\n\nVerify idempotent payment behavior with evidence.",
"idempotencyKey": "recipe-skill-update-v1"
}{
"skillId": "{{skillId}}",
"expectedRevisionId": "{{draftRevisionId}}",
"name": "Checkout reliability reviewer",
"description": "Checks retry-safe checkout behavior and evidence.",
"markdown": "# Checkout reliability\n\nVerify idempotent payment behavior with evidence.",
"idempotencyKey": "{{idempotencyKey}}"
}Complete raw parameter schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable name displayed in Semel. Minimum accepted length or value is 1."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Human-readable explanatory text; null or omission means no description was supplied. Minimum accepted length or value is 1."
},
"markdown": {
"type": "string",
"minLength": 1,
"description": "Exact UTF-8 Markdown document returned by or submitted to the operation; preserve its text bytes when exact identity matters. Minimum accepted length or value is 1."
},
"expectedRevisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Immutable tenant reviewer-skill identifier returned by skill_list or skill_create."
},
"idempotencyKey": {
"type": "string",
"minLength": 1,
"description": "Caller-unique key making this mutation exactly-once (see the receipt contract)."
}
},
"required": [
"name",
"description",
"markdown",
"expectedRevisionId",
"skillId",
"idempotencyKey"
],
"additionalProperties": false
}Structured result
operationIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
skillIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
draftRevisionIdstring · requiredStable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive.
minimum length: 1 · maximum length: 240
contentSha256string · requiredLowercase SHA-256 digest of the exact immutable UTF-8 source bytes.
pattern: ^[a-f0-9]{64}$
state"draft" · requiredCurrent typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses "draft".
{
"operationId": "example",
"skillId": "skl_recipe_checkout",
"draftRevisionId": "skr_recipe_checkout_2",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "draft"
}{
"content": [
{
"type": "text",
"text": "{\"operationId\":\"example\",\"skillId\":\"skl_recipe_checkout\",\"draftRevisionId\":\"skr_recipe_checkout_2\",\"contentSha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"state\":\"draft\"}"
}
],
"structuredContent": {
"operationId": "example",
"skillId": "skl_recipe_checkout",
"draftRevisionId": "skr_recipe_checkout_2",
"contentSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "draft"
}
}- updatedRevisionId ← structuredContent.draftRevisionId
Next permitted action: List immutable revisions and compare the intended edit.
Complete raw result schema
{
"type": "object",
"properties": {
"operationId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"skillId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"draftRevisionId": {
"type": "string",
"minLength": 1,
"maxLength": 240,
"description": "Stable identifier for this record; copy it from the corresponding create, list, or read result rather than inventing it. Accepted length or value is 1 through 240, inclusive."
},
"contentSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Lowercase SHA-256 digest of the exact immutable UTF-8 source bytes."
},
"state": {
"type": "string",
"const": "draft",
"description": "Current typed lifecycle state; the schema enum or union branch defines allowed values. This branch always uses \"draft\"."
}
},
"required": [
"operationId",
"skillId",
"draftRevisionId",
"contentSha256",
"state"
],
"additionalProperties": false
}Calling a tool correctly
Validate the whole advertised input shape, including nested objects and enums, before calling. All tools require brief:read; writes add the scopes shown below and an idempotencyKey. Bind IDs, hashes, fence tokens, sequence values, and cursors from the previous response’s structuredContent. Do not parse display text. Responses may also include an MCP resource_link; fetch only a link returned for the active operation and principal.
An unchanged retry is safe only when the response says it is retryable or when you reuse the same idempotency key with identical arguments. After a timeout with no authoritative response, read status before deciding whether to replay.
What is deliberately not here
Human-only actions do not appear as MCP tools: gate approval/rejection; proposal decision, commit, rebase, or revert; grant mint/approval; destructive review clear/restart; billing/spend; workspace or credential administration; connecting Slack/GitHub/a tracker; provider/BYOK consent; public share links; Brain writes; Done Check; and /runs/:id/continue. The codebase exception is project_codebase_link, which only links a repository already connected by a person. REST-only web reads and controls also stay outside MCP. If a tool expected by a recipe is missing, request only the needed capability or scope; see Troubleshooting.