Skip to content

Commit abea4d3

Browse files
authored
feat(decide): surface cycles_evidence on the decide response (#108)
Completes the lifecycle binding loop (decide/reserve/commit/release): adds the optional cycles_evidence field (CyclesEvidenceRef) to DecisionResponse. The decide artifact attests a pre-execution decision (ALLOW/ALLOW_WITH_CAPS/DENY); it's already modelled in drafts/cycles-evidence-v0.1.yaml (DecidePayload = {request, response}, no reservation created) with golden fixtures 01-decide-allow / 09-decide-risk-points-allow. Forbidden/validation failures on /v1/decide remain error-artifact territory. Added the DecisionResponseMirror non-attestation note (consistent with the other mirrors). v0.1.25.3 -> v0.1.25.4; changelog prepended; merged regenerated; spec-index runtime_base editorial -> 0.1.25.4 (semantic_base stays 0.1.25); changelogs valid; spectral 0 errors.
1 parent ac67595 commit abea4d3

5 files changed

Lines changed: 36 additions & 4 deletions

File tree

changelogs/cycles-protocol-v0.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,22 @@ New entries are added directly to this file. See `scripts/validate_changelogs.py
66

77
---
88

9+
## v0.1.25.4 — 2026-06-13
10+
11+
_(revision 2026-06-13 — surface `cycles_evidence` on the decide response)_
12+
13+
- Adds the optional `cycles_evidence` field (`CyclesEvidenceRef`) to
14+
`DecisionResponse`, completing the lifecycle binding loop (decide / reserve /
15+
commit / release). The `decide` artifact attests a pre-execution decision
16+
(ALLOW / ALLOW_WITH_CAPS / DENY); it is already modelled in
17+
`drafts/cycles-evidence-v0.1.yaml` (`DecidePayload` = `{request, response}`, no
18+
reservation created) with golden fixtures `01-decide-allow` /
19+
`09-decide-risk-points-allow`. Forbidden/validation failures on `/v1/decide`
20+
remain `error`-artifact territory (e.g. fixture `12-decide-live-forbidden`).
21+
Present unless emission is disabled; additive + non-breaking.
22+
23+
---
24+
925
## v0.1.25.3 — 2026-06-13
1026

1127
_(revision 2026-06-13 — surface `cycles_evidence` on commit + release responses)_

cycles-protocol-v0.yaml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
openapi: 3.1.0
22
info:
33
title: Cycles Budget Authority API
4-
version: 0.1.25.3
4+
version: 0.1.25.4
55
license:
66
name: Apache 2.0
77
url: https://www.apache.org/licenses/LICENSE-2.0
@@ -879,6 +879,12 @@ components:
879879
items:
880880
type: string
881881
description: Canonical scope identifiers impacted by this decision, in canonical order.
882+
cycles_evidence:
883+
$ref: '#/components/schemas/CyclesEvidenceRef'
884+
description: >-
885+
Reference to the CyclesEvidence envelope emitted for this decision
886+
(artifact_type `decide`, present on ALLOW / ALLOW_WITH_CAPS / DENY).
887+
Absent only when evidence emission is disabled on the server.
882888
883889
# ---- Reservations (core) ----
884890
CommitOveragePolicy:

cycles-spec-index.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ spec_family:
6363
isolation; SDK generators and validator pipelines need a merged artifact.
6464
The merge_recipes section below defines how to produce those artifacts.
6565
current_versions:
66-
base_runtime: "0.1.25.3" # + cycles_evidence ref on reserve/commit/release responses (additive)
66+
base_runtime: "0.1.25.4" # + cycles_evidence ref on reserve/commit/release responses (additive)
6767
base_runtime_semantic_base: "0.1.25" # frozen wire baseline — evidence revisions are additive, 0.1.25 clients stay compatible
6868
base_governance: "0.1.25.33" # + webhook lifecycle EventTypes and per-row Event emission on webhook operations
6969
base_governance_semantic_base: "0.1.25.9" # frozen wire baseline
7070
extension_runtime: "0.1.26" # untouched — no Event/ErrorResponse redeclaration
7171
extension_governance: "0.1.27" # trace_id on redeclared ErrorResponse
7272
action_kinds: "0.1.27" # trace_id on redeclared ErrorResponse
73-
spec_index: "0.1.28" # runtime_base editorial → 0.1.25.3 + semantic_base 0.1.25
73+
spec_index: "0.1.29" # runtime_base editorial → 0.1.25.4 (+ decide cycles_evidence)
7474

7575
# ---------------------------------------------------------------------------
7676
# CANONICAL DOCUMENTS
@@ -85,7 +85,7 @@ documents:
8585

8686
- id: runtime_base
8787
file: cycles-protocol-v0.yaml
88-
version: "0.1.25.3" # editorial: + cycles_evidence on reserve/commit/release responses
88+
version: "0.1.25.4" # editorial: + cycles_evidence on reserve/commit/release/decide responses
8989
semantic_base: "0.1.25" # frozen wire baseline — evidence fields are additive/optional
9090
role: base
9191
conformance: normative

drafts/cycles-evidence-v0.1.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,11 @@ components:
804804
— the body of `POST /v1/decide`. The `allOf` below
805805
encodes the canonical L752 rule: caps is present only when
806806
decision=ALLOW_WITH_CAPS and MUST be absent otherwise.
807+
808+
DELIBERATE OMISSION — `cycles_evidence`: as with the reserve/commit/release
809+
mirrors, the canonical response's optional `cycles_evidence` ref is TRANSPORT
810+
METADATA, NOT attested; `additionalProperties: false` forbids it here. The
811+
`evidence_id` is computed over this pre-evidence-ref response.
807812
required: [decision]
808813
additionalProperties: false
809814
properties:

merged/cycles-openapi-protocol-merged.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,11 @@ components:
463463
items:
464464
type: string
465465
description: Canonical scope identifiers impacted by this decision, in canonical order.
466+
cycles_evidence:
467+
$ref: '#/components/schemas/CyclesEvidenceRef'
468+
description: Reference to the CyclesEvidence envelope emitted for this decision (artifact_type
469+
`decide`, present on ALLOW / ALLOW_WITH_CAPS / DENY). Absent only when evidence emission is
470+
disabled on the server.
466471
CommitOveragePolicy:
467472
type: string
468473
description: "How server handles commits where actual > reserved.\nREJECT: reject commit (client\

0 commit comments

Comments
 (0)