Skip to content

docs: RestoManager handoff batch — sys.Label filters, x-actors ref identity, x-emits: [], unread hints, enum reuse (2026-10-09) - #147

Merged
clabonte merged 4 commits into
mainfrom
docs/restomanager-handoffs-2026-10-09
Oct 9, 2026
Merged

clabonte merged 4 commits into
mainfrom
docs/restomanager-handoffs-2026-10-09

Conversation

@clabonte

@clabonte clabonte commented Oct 9, 2026

Copy link
Copy Markdown
Collaborator

Processes nine RestoManager specs handoffs, each checked against kit main and the released generator 0.14.0 jar rather than the SNAPSHOT the handoff named. Five of them rested on stale generator behaviour. compatibility.md §45 has the full record.

Corrected (the kit was wrong at the pin)

  • Subscription filters use sys.Label. A bare Label is read as user.Label and matches nothing. The generator has emitted sys.Label since at least 0.11.0. Changed in 25 places across the handbooks, the samples and two skills. A new Spectral rule, specfuse-subscription-filter-sys-label (warn), comes with a fixture and a CI step that checks both directions.
  • x-actors.<name>.ref is the principal identity, i.e. the claims.userId claim, not a domain entity. Covers the failure mode and the recipe pattern, and renames the example outputs to *UserId.
  • x-emits: [] is a deliberately silent write. §6.1 no longer forbids it. The docs now describe how the kit rule and the generator rule really behave. The :search question is recorded as open.
  • Role grants: delegable is published but not enforced (#2180). API_Handbook.md §14 is refreshed. ARAZZO_ACTOR_LACKS_SCOPE is documented, along with the fact that it does not fire at 0.14.0 (generator#2418).
  • Unread vocabulary marked: all codeGenHints keys and x-ai.capabilities. The phantom CacheLayer/CacheAside claims and the three removed categories are gone from §5.1.
  • Value-object protection: the second declaration site is the embed's x-protection, not x-value-object.protection. VALUE_OBJECT_PROTECTION_DECLARED_TWICE is now named. The audit gap is noted (generator#2417).
  • Enum reuse guidance added, including how to read ENUM_VALUE_SET_DUPLICATE, which is a SUGGESTION.
  • x-domain: the projection exemption is documented, and the project-init template now says OpenAPI schemas are enforced.

Forwarded to the generator

clabonte/generator#2414, #2415, #2416, #2417, #2418.

Deferred

Caching (#2173–#2177), streaming and webhooks (#2163/#2164/#2167/#2169/#2170), client grants (#2180), and durable runs (waiting on #2164).

Not changed

examples/hello-orders still binds ref to a domain id. Fixing that is a modelling change, recorded in §45.

🤖 Generated with Claude Code

clabonte and others added 4 commits October 9, 2026 16:39
…r handoff)

In a Service Bus SQL filter a bare identifier is user. scope, so a bare
`Label = 'X'` silently matches nothing. The generator has always emitted
sys.Label; the kit docs said otherwise.

- handbooks, samples, create-job/create-worker skills: every filter-expression
  Label -> sys.Label (26 lines), incl. the entity-cap clause wording
- AsyncAPI_Handbook §0.8: state the scope rule once (sys.Label / user.<name>,
  bare identifier defaults to user. and matches nothing); pointer from the
  Vendor_Extensions x-subscription filterOverride section
- specfuse-asyncapi.yaml: new warn rule specfuse-subscription-filter-sys-label
  on x-subscription.filterOverride
- fixtures/subscription-filter-sys-label.yaml + ci.yml step asserting it fires
  on four bare forms and stays silent on two sys.Label forms

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…silent write; role-grant corrections (RestoManager handoffs)

Arazzo x-actors.<name>.ref (arazzo-actor-ref-identity handoff):
- Arazzo_Handbook §4.6: .ref is the principal identity, the id the tokens
  carry as authorization.claims.userId (Project_File §16), never a domain
  row's id. Note on the failure mode (self-scoped steps run as an
  unresolvable principal), the recipe pattern (identity linked to the
  domain row, separate *UserId and *Id outputs), device actors, and the
  generator asks (clabonte/generator#2414, #2352).
- Examples renamed to customerUserId / agentUserId / managerUserId; the
  foundational-recipe table exposes them; §4.6 recipe prose, §13 Do and
  §15.2 aligned.

x-emits: [] (x-emits-empty-silent-writes handoff):
- AsyncAPI_Handbook §6.3 and Vendor_Extensions §6.1: [] declares a
  deliberately silent write, distinct from an absent x-emits; a justifying
  YAML comment is mandatory, as for x-self-scoped. Documents the kit rule
  (error, truthy, [] passes, no x-manual skip) and generator 0.14.0
  WRITE_OPERATION_MISSING_X_EMITS (WARNING, presence-only, skips
  x-manual; census asked in clabonte/generator#2415). The :search POST
  question is recorded as open.
- schemas/README: optional project rule confining [] to an allowlist.
  Ruleset behaviour unchanged.

Role grants (role-grants-and-scope-mode handoff):
- Vendor_Extensions §3.1: delegable is published in role-grants.json and
  enforced by nothing at 0.14.0 (FEAT-2026-0203, clabonte/generator#2180).
- API_Handbook §14: replaces "enforcement occurs in implementation" with
  what 0.14.0 enforces (mapping form, coherence, authorization.mode).
- Arazzo_Handbook §4.6 and §9.2: ARAZZO_ACTOR_LACKS_SCOPE, scopes mode
  only; measured not firing on a mapping-form hello-orders copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in and value-object encryption touch-ups (RestoManager handoffs)

- Vendor_Extensions §5.1: "read by nothing" banner for x-operation.codeGenHints
  (cacheable, auditRequired, eventEmission, transactional, plus async) — parsed
  into OperationDefinition, read by no code or template. Caching design tracked
  in clabonte/generator#2173. Phantom CacheLayer/CacheAside/ReadThrough/
  CacheableService claims removed. reference/admin/discovery marked removed
  (generator 0.5.4, hard error); category enum, defaults and example corrected;
  Code Generation/Patterns lists qualified as intent.
- x-ai.capabilities (Vendor_Extensions, AsyncAPI_Handbook): informational, read
  by nothing; streaming and multiTurn generate nothing.
- API_Handbook: webhook placeholder replaced with a not-yet-specified note
  (clabonte/generator#2169 inbound, #2170 outbound).
- API_Handbook enums: reuse-before-define guidance and how to read
  ENUM_VALUE_SET_DUPLICATE (SUGGESTION, Jaccard >= 0.5); cross-ref AsyncAPI §6.5.
- Vendor_Extensions x-domain: SCHEMA_DOMAIN_CROSS_REFERENCED exempts entity
  projections; bundle-is-the-contract sentence.
- project-init CLAUDE.md template: domain registry is also enforced on OpenAPI
  schemas (SCHEMA_DOMAIN_REQUIRED/UNREGISTERED, ERROR since 0.13.0).
- Vendor_Extensions value-object protection: second declaration site is the
  entity's embed property (x-value-object.protection is not read); stale
  "nothing warns / #1995 filed" replaced with VALUE_OBJECT_PROTECTION_DECLARED_TWICE
  (WARNING, 0.13.0); embed-only form is encrypted but absent from the audit
  (clabonte/generator#2417), so prefer the usage site.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rator#2418

compatibility.md §45 records what this batch corrected in the kit, what it
forwarded (clabonte/generator#2414-#2418), what is deferred and what is
still open. Arazzo_Handbook.md §4.6 and §9.2 cite #2418:
ARAZZO_ACTOR_LACKS_SCOPE does not fire at 0.14.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@clabonte
clabonte merged commit e087ca9 into main Oct 9, 2026
9 checks passed
@clabonte
clabonte deleted the docs/restomanager-handoffs-2026-10-09 branch October 9, 2026 20:41
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