zynactradocs

10. Deviations from the architecture spec

What was built differently from the zynactra/access architecture spec, and why.

What was built differently from the zynactra/access architecture spec, and why:

SpecBuiltWhy
Go SDK talks gRPC to CerbosHTTP JSON in both SDKs (ADR 8)One wire format, no protobuf dependencies, identical fixtures.
@cerbos/orm-drizzle for list filtersOwn translator (planToSql, drizzleFilter) (ADR 5)The adapter does not escape LIKE wildcards.
TS transport via @cerbos/httpBuilt-in fetch client (CerbosHTTP)No dependency; the API surface used is two endpoints.
Break-glass: reason + max durationAlso: cannot be mapped to IdP groups; granting it is high severityA group mapping would make break-glass permanent for a whole group.
Roles deleted when unusedSoft-deleted (deleted_at), key reusableRevoked assignments and the change log keep pointing at the role.
access_admin manages accessPlus access.delegation:any (ADR 7) and a ban on self-assignmentWithout it the first admin could not hand out product roles; without the ban delegation:any would be self-service.
/check takes resources from the client/check takes IDs; the server loads records with registered loadersThe UI must never supply the attributes a decision depends on.
Role list readable with access.role:readAlso with access.assignment:manage or access.group_mapping:managePeople who assign roles need to see them.
Change log append-only by conventionEnforced by triggers (no UPDATE, DELETE, TRUNCATE)A bug or a stray script cannot rewrite history.
Strict mode fails unchecked routesOnly successful responses countA handler that rejects input before touching a record did nothing that needed the check.
Edit on GitHub