Skip to content
SynthWorldDeterministic identity benchmarks
Esc
navigateopen⌘Jpreview
On this page

Standards profiles

Standards mappings are pinned to reviewed editions, never an implicit latest version. Mapping status, source maturity, and implementation support are separate claims.

The enterprise ledger is enterprise-identity-access-contract/standards-profile-ledger.json. Contract READMEs explain the limits of SCIM, OpenFGA, AuthZEN, Shared Signals/CAEP, and other projections. A mapping declaration is not evidence of protocol transport, signing, interoperability, or vendor conformance.

Run the Python projection APIs

The SCIM, OpenFGA, and AuthZEN surfaces are pure, offline data conversions for testing an adapter, mapping layer, or fixture loader. They do not contact a service, exchange a credential, or make a policy decision. Their outputs are standards-shaped models rather than wire-format documents, so a real endpoint still requires an adapter. There is no CLI for these projections; import them from synthworld.enterprise.projections.

SCIM

from synthworld.enterprise.projections import project_scim, scim_projection_profile_v1

projection = project_scim(
    universe=universe,                        # EnterpriseIdentityAccessUniverseV1
    directory_rbac_kernel=kernel,             # EnterpriseDirectoryRbacKernelV1
    profile=scim_projection_profile_v1(snapshot_tick=0),
)

Both inputs are public artifacts. The kernel must bind the exact universe passed to project_scim; otherwise the call fails with scim_kernel_universe_digest_mismatch instead of silently mixing worlds.

The projection deliberately imports no authorization meaning: roles and entitlements are empty and authorization_semantics is "none". User names use the reserved .invalid TLD, an account without a directory observation fails closed to active: false, and only accounts—not principals or nested groups—become group members.

OpenFGA

from synthworld.enterprise.authorization_common import AuthorizationSourceLayer
from synthworld.enterprise.projections import openfga_mapping_profile_v1, project_openfga

projection = project_openfga(
    universe=universe,                        # EnterpriseIdentityAccessUniverseV1
    rebac_truth=rebac_truth,                  # CompiledEnterpriseRebacTruthV1
    mapping_profile=openfga_mapping_profile_v1(
        source_layer=AuthorizationSourceLayer.ACTUAL,
    ),
)

One projection covers one source layer. CompiledEnterpriseRebacTruthV1 is an evaluator-side input, so treat the derived output as evaluator-side unless the selected layer’s exposure has been reviewed. The native snapshot, revision, and validity fields on emitted tuples are inert metadata; an OpenFGA runtime does not enforce them.

AuthZEN

from synthworld.enterprise.projections import authzen_mapping_profile_v1, project_authzen

projection = project_authzen(
    universe=universe,                        # EnterpriseIdentityAccessUniverseV1
    corpus=corpus,                            # EnterpriseEvaluationCorpusV1
    request=corpus.access_requests[0],
    mapping_profile=authzen_mapping_profile_v1(),
)

The API projects one request per call. Its output contains no expected decision, so it can be handed to a system under test while the corpus’s expected decision stays evaluator-side. Record the returned outcome separately. Only allow and deny normalize to a Boolean decision; indeterminate, transport_error, timeout, and unavailable normalize to None. A transport failure is not a deny.

Inspect projection loss

Each projection compiles a support matrix with one row per exercised native feature. Rows are exact, approximated, or unsupported; every non-exact row must state its semantic delta.

from synthworld.enterprise.projections import evaluate_projection_fidelity

for metric in evaluate_projection_fidelity(projection.support_matrix).metrics:
    print(metric.family, metric.name, metric.numerator, metric.denominator, metric.value)

Exact, approximated, and unsupported rates remain independent. SynthWorld does not combine them into a single fidelity score that could conceal unsupported authorization semantics.

Shared Signals/CAEP is different: the package exposes a mapping profile and support matrix, but no project_* function, event model, or SET emitter.

Was this page helpful?