Skip to content

Commit f6e0018

Browse files
authored
Merge pull request #26 from runcycles/claude/analyze-codebase-metrics-9Uqs6
Claude/analyze codebase metrics 9 uqs6
2 parents c1b69b1 + 6252b5f commit f6e0018

6 files changed

Lines changed: 1875 additions & 0 deletions

File tree

AUDIT.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,18 @@ All spec constraints are validated both via Pydantic Field validators (on typed
167167
## Verdict
168168

169169
The client is **fully protocol-conformant** with the Cycles Protocol v0.1.23 OpenAPI spec. All 9 endpoints, 6 request schemas, 10 response schemas, 5 enum types, and all nested object serializations match the spec exactly. JSON field names use correct snake_case throughout. Auth headers, idempotency handling, subject validation, response header capture, and spec constraint validation all follow spec normative rules. No open issues.
170+
171+
---
172+
173+
## OpenAPI Contract Tests (added 2026-03-28)
174+
175+
**Spec version:** v0.1.24
176+
**Test file:** `tests/test_contract.py` (34 tests, all passing)
177+
178+
Automated contract tests validate sample request/response payloads against the OpenAPI spec schemas using `jsonschema.Draft202012Validator` with recursive `$ref` resolution:
179+
180+
- **Request schemas validated:** DecisionRequest, ReservationCreateRequest, CommitRequest, ReleaseRequest, EventCreateRequest
181+
- **Response schemas validated:** DecisionResponse, ReservationCreateResponse, CommitResponse, ReleaseResponse, EventCreateResponse, ErrorResponse
182+
- **Negative tests:** missing required fields, extra fields (additionalProperties), invalid enum values
183+
- **Enum value tests:** UnitEnum, ErrorCode, DecisionEnum, ReservationStatus, CommitOveragePolicy
184+
- **Spec fixture:** `tests/fixtures/cycles-protocol-v0.yaml` (copy of canonical spec)

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ dev = [
2323
"mypy>=1.0",
2424
"ruff>=0.1",
2525
"respx>=0.21",
26+
"jsonschema>=4.20",
27+
"pyyaml>=6.0",
2628
]
2729

2830
[tool.ruff]

0 commit comments

Comments
 (0)