Skip to content

docs: correct spec-alignment declaration to governance v0.1.25.37#207

Merged
amavashev merged 2 commits into
mainfrom
docs/spec-alignment-declaration
Jul 10, 2026
Merged

docs: correct spec-alignment declaration to governance v0.1.25.37#207
amavashev merged 2 commits into
mainfrom
docs/spec-alignment-declaration

Conversation

@amavashev

@amavashev amavashev commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

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

  • The README declared "Aligned with Cycles Protocol v0.1.25.34".
  • Admin v0.1.25.48's own CHANGELOG records adding the EventDataTenantCascade model 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.
  • The governance document (cycles-governance-admin-v0.1.25.yaml) is now at revision 0.1.25.37.
  • cycles-docs mirrors the declared alignment, so the stale claim kept propagating to the docs site (repeatedly flagged in docs review).

Per-revision verification (against admin source, not just changelogs)

Governance revision What it changed Verification
v0.1.25.35 Four *_via_tenant_cascade EventType values + EventDataTenantCascade payload schema Implemented. The four kinds have been emitted since admin v0.1.25.35; EventDataTenantCascade (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_id exactly-one identity via NON_NULL, name, scope, unit, prior_status, new_status, released_amount int64, cascade_reason), strict ignoreUnknown = false per the admin-owned-schema convention.
v0.1.25.36 admin_on_behalf_of added to the Event.actor.type enum Implemented — admin was ahead of the spec. ActorType.ADMIN_ON_BEHALF_OF ("admin_on_behalf_of" on the wire) has existed since admin v0.1.25.14 and flows into Actor.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.
v0.1.25.37 TENANT_CLOSED added to EventDataReservationDenied.reason_code documented known values Documentation-only revision on an OPEN string field — nothing to implement. Verified nothing contradicts it: EventDataReservationDenied.reasonCode is a plain String with no closed validation, and this server's Rule 2 guard has returned 409 TENANT_CLOSED since 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 to info.version 0.1.25.37 and 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)".

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.
@amavashev amavashev merged commit abda6a9 into main Jul 10, 2026
6 checks passed
@amavashev amavashev deleted the docs/spec-alignment-declaration branch July 10, 2026 20:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant