docs: correct spec-alignment declaration to governance v0.1.25.37#207
Merged
Conversation
Declaration correction only — no code, wire, or config change, no version bump, no release. The README declared "Aligned with Cycles Protocol v0.1.25.34" and AUDIT.md's header pinned info.version 0.1.25.35, but the declarations were stale in both directions: admin v0.1.25.48's own CHANGELOG records implementing the EventDataTenantCascade schema FROM governance v0.1.25.35 while the README still said .34, and the governance document has since advanced to revision 0.1.25.37. cycles-docs mirrors the declared alignment, so the stale claim kept propagating to the docs site. Per-revision verification (details in the new AUDIT.md entry): - .35 (cascade EventTypes + EventDataTenantCascade schema): implemented. Model class mirrors the spec schema field-for-field (all ten properties, exactly-one identity via NON_NULL, int64 released_amount, strict ignoreUnknown=false per admin-owned-schema convention); the four cascade kinds emitted since admin v0.1.25.35. - .36 (admin_on_behalf_of on Event.actor.type): implemented — admin was ahead of the spec; ActorType.ADMIN_ON_BEHALF_OF has existed since admin v0.1.25.14 and flows into Actor.builder().type(...) at exactly the dual-auth emit sites the spec names (createBudget, createPolicy/updatePolicy, tenant-webhook mutations). - .37 (TENANT_CLOSED in EventDataReservationDenied.reason_code known values): documentation-only on an OPEN string; nothing to implement and nothing contradicts it — reasonCode is a plain String with no closed validation, and the Rule 2 guard has returned 409 TENANT_CLOSED since v0.1.25.35/.36. Changes: README alignment line -> v0.1.25.37 with a one-line parenthetical of what .35-.37 added; AUDIT.md header spec paragraph extended to cover .36/.37; rolling AUDIT.md entry added (declaration correction, per-revision verification record).
…ration class) Second commit on the declaration-correction PR: the AUDIT.md title line still read "v0.1.25.48" while the latest release is 0.1.25.49 — the same stale-self-declaration class this PR exists to fix. Reading taken: per git history the title line is bumped to the release version on each release-prep commit, so it means "audited as of release X" (the release whose changes the audit chronicle covers), not merely "current release". Bumping to 0.1.25.49 is therefore correct only because the audit content actually covers .49 — verified: the 0.1.25.49 release consists of the webhook scope_filter matcher conformance change and the replay scope_filter fix (PR #206), both covered by the 2026-07-09 AUDIT entry (including its codex-review round), plus release-prep pin bumps. Also updates that entry's now-stale "; unreleased)" heading marker to "; released in 0.1.25.49)" — same class, the change shipped 2026-07-10. Docs only; no code, wire, or config change.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Declaration correction only — no code, wire, or config change; no version bump; no release. Updates the spec-alignment declaration from governance v0.1.25.34 (README) / v0.1.25.35 (AUDIT.md header) to v0.1.25.37, the current governance document revision and the highest revision this server fully implements.
Staleness evidence
EventDataTenantCascademodel class "mirrors the spec schema of the same name (governance spec v0.1.25.35)" — i.e., the server implemented a .35 schema while still declaring .34.cycles-governance-admin-v0.1.25.yaml) is now at revision 0.1.25.37.Per-revision verification (against admin source, not just changelogs)
*_via_tenant_cascadeEventType values +EventDataTenantCascadepayload schemaEventDataTenantCascade(admin v0.1.25.48,cycles-admin-service-model/.../event/EventDataTenantCascade.java) mirrors the spec schema field-for-field — all ten properties (ledger_id/subscription_id/key_idexactly-one identity viaNON_NULL,name,scope,unit,prior_status,new_status,released_amountint64,cascade_reason), strictignoreUnknown = falseper the admin-owned-schema convention.admin_on_behalf_ofadded to theEvent.actor.typeenumActorType.ADMIN_ON_BEHALF_OF("admin_on_behalf_of" on the wire) has existed since admin v0.1.25.14 and flows intoActor.builder().type(...)on Event emission at exactly the dual-auth sites the spec names: createBudget (BudgetController), createPolicy/updatePolicy (PolicyController), tenant-webhook mutations (WebhookTenantController). Spec .36 admitted the already-emitted value into the closed enum.TENANT_CLOSEDadded toEventDataReservationDenied.reason_codedocumented known valuesEventDataReservationDenied.reasonCodeis a plainStringwith no closed validation, and this server's Rule 2 guard has returned 409TENANT_CLOSEDsince v0.1.25.35/.36, consistent with the reason string.Changes
README.md— alignment line → v0.1.25.37, with a one-line parenthetical of what .35–.37 added.AUDIT.md— header spec paragraph updated toinfo.version 0.1.25.37and extended to cover .36/.37; new rolling entry (2026-07-10) records the correction and the per-revision verification, explicitly noting this is a declaration correction and not a behavior change.Second commit (bbeb7f4) — AUDIT.md title line, same class
The AUDIT.md title line still read "v0.1.25.48" while the latest release is 0.1.25.49 — the same stale-self-declaration class this PR fixes, so it is folded in rather than left as a follow-up. Reading taken: per git history the title is bumped on each release-prep commit, so it means "audited as of release X" — bumping to 0.1.25.49 is correct because the audit content covers .49 in full (the release consists of the scope_filter matcher conformance change + replay scope_filter fix from #206, both covered by the 2026-07-09 AUDIT entry, plus release-prep pins). Also updates that entry's now-stale "; unreleased)" heading marker to "; released in 0.1.25.49)".