Enterprise authorization with Topaz
This experiment series asks whether an external authorization system can consume released SynthWorld enterprise artifacts and reproduce the relevant authorization behaviour. Topaz is the first system under test. It is not part of SynthWorld’s oracle, and the results are not a vendor comparison or general authorization correctness claim.
The concrete Phase 2 question was:
Can an authorization system consume only released SynthWorld public artifacts, project them into its own policy model, and reproduce the scoreable authorization behaviour without using evaluator truth?
Phase 1 answered the narrower question of whether released relationship data could be transported into and queried from a Topaz directory. Phase 2 exercised a live authorization policy and the released mechanism scorers. Phase 3 used the 0.16.0 contracts to enforce the evaluator mount boundary, score composed decisions and exercise discriminating adversarial cases. None of the phases establishes general Topaz or authorization correctness.
Experiment boundary
The experiment kept generation and scoring on the SynthWorld side of the boundary and treated the Topaz adapter and projected policy as experiment-owned code:
fictional organization topology
-> SynthWorld compilation
-> public benchmark artifacts
-> experiment-owned Topaz projection and policy
-> Topaz authorization requests
-> sealed predictions
-> separate SynthWorld evaluator scoring
- SynthWorld owns deterministic generation, public benchmark contracts, evaluator truth and mechanism scorers.
- The experiment owns the organization-topology mapping, Topaz data projection, Topaz configuration and Rego policy.
- Topaz is the system under test. Evaluator artifacts are not Topaz inputs.
- The organization topology is an experiment input, not a SynthWorld schema.
Evidence status
| Phase | Evidence level | Package | What was exercised |
|---|---|---|---|
| Phase 1 | Historical exploratory run; not frozen or independently reproducible | idcognito-synthworld==0.15.0 |
Public enterprise-access tuples loaded into a Topaz directory and queried through the directory check API |
| Phase 2 | Locally frozen and clean-clone verified; evidence archives published with SynthWorld 0.16.0; no independent reproduction recorded yet | idcognito-synthworld==0.15.0 |
A generated enterprise identity/access world, projected policy, live authorization decisions, blinded submissions and released scorers |
| Phase 3 | Frozen, clean-room reproduced and published in an immutable attested release | idcognito-synthworld==0.16.0 |
Enforced evaluator isolation, sealed scoring, composed authorization and discriminating adversarial cases |
The Phase 2 source-only baseline is locally tagged
phase2-baseline-0.15.0. A clean local clone completed all 32 validation checks
and reproduced submission digest
89099e3b55226cd6bd378f6dc7a2153aed3ee8d0e6e7fe3f9781d5be25a69f05.
The experiment Git tag is not hosted as a separately fetchable remote. The release
archives below preserve the source and retained evidence, making the record
independently downloadable but not yet independently reproduced.
Phase 1: directory feasibility
Phase 1 mapped a fictional enterprise topology into the released enterprise identity/access authoring schema, compiled it, loaded the public relationship data into Topaz, and ran 6,880 directory checks. It established that the public artifact could drive a real relationship directory and that evaluator bindings could remain outside the runner container.
It did not exercise Topaz’s authorization decision API or a composed policy. Its
permissions were one-to-one aliases of relations written by the same build, so the
perfect result was a directory round-trip rather than an independent authorization
test. The source Compose file selected ghcr.io/aserto-dev/topaz:latest; the cached
image was later identified as Topaz 0.33.16 with digest
sha256:835868c04bdd7129127ea43642ffff7363d0bd26d5e1a37631fa881431054360,
but that recovery does not make the original source fully pinned. The directory was
not source-controlled, and its HTML pages were experiment-owned viewers rather than
a released SynthWorld renderer.
Treat Phase 1 as historical feasibility evidence only. Its publication package must preserve the original prompt, Compose file, scripts, inputs and reports alongside these qualifications.
Phase 2: frozen local run
Run identity
| Field | Recorded value |
|---|---|
| Experiment baseline | phase2-baseline-0.15.0 |
| Source commit | c1c81df2c2290868ef741368324df5e46f6936b8 |
| SynthWorld package | idcognito-synthworld==0.15.0 |
| SynthWorld wheel SHA-256 | f1b17f8254521d307e38cfc3a44d00844308dd36c7972da00b816b92e257ee60 |
| Experiment seed | 20260816 |
| Topology SHA-256 | 29ea8dd155ceed277eedf3f7261f0ba6844ff5a3e6c5a9c70164ae78b80871d1 |
| Topaz runtime | 0.33.16, commit 81b8405, linux/amd64 |
| Topaz image digest | sha256:835868c04bdd7129127ea43642ffff7363d0bd26d5e1a37631fa881431054360 |
| Sealed submission SHA-256 | 89099e3b55226cd6bd378f6dc7a2153aed3ee8d0e6e7fe3f9781d5be25a69f05 |
| Validation | 32 of 32 checks passed |
The known working host was Fedora 44 on x86_64, kernel 7.0.10, with Docker
29.5.2, Docker Compose 5.1.4, uv 0.11.17 and Python 3.13. These host details are
observational provenance, not inputs to deterministic SynthWorld generation. A
published reproduction must capture them in a machine-readable run receipt rather
than treating this host as the only supported environment.
Inputs and provenance
Both phases used the byte-identical
britannia_global_bank_topology.yaml. The source is the
redoubtlabs/redoubtia-agents repository at commit
5e59e7d9b311e55c321d105a80a034c23dd704bf. The original Phase 1 prompt shortened
the name to britannia_global_topology.yaml; the filename used by both runs and the
SHA-256 above are authoritative.
The topology describes a fictional bank but contains references to real technology vendors and a real-bank comparison. A published copy must carry a fictional and non-endorsement notice. Editing those names would create a different input and must produce a new experiment version and digest rather than silently replacing the recorded file.
The reproducibility inputs are more than the topology alone:
- the original Phase 1 prompt and its rendering amendment;
- the original Phase 2 build prompt and the later correction/review prompt;
- the topology, experiment configuration and namespace salt digest;
- Compose files, Topaz model manifest and Rego policy;
- mapping, projection, execution, sealing, scoring and validation scripts; and
- the hash-locked Python dependency set.
Prompts are process provenance: they explain how the experiment implementation was created, but they are not runtime inputs or normative benchmark contracts. The full agent transcripts are not required for reproduction and should not be published in place of curated prompt and review records.
Method
The Phase 2 runner performed seven stages:
- It staged, hashed, mapped and classified every organization-topology field.
- It generated the deterministic SynthWorld world and physically separate public and evaluator projections.
- It projected only public artifacts into Topaz objects, relations, requests, a model manifest and Rego policy.
- It loaded Topaz, read the directory data back and issued one authorization request for every public evaluation cell.
- It normalized Topaz responses into three mechanism submissions and sealed their combined digest before scoring.
- It opened the evaluator tree, verified the seal and ran the released scorers.
- It checked input and output digests, counts, public/evaluator inventories, required files, submission coverage and presentation leakage.
The runner was repository-independent: it installed the released distribution and did not use a local SynthWorld checkout or editable installation. It was not documentation-only because implementation work still required inspection of the released package’s public Python surface.
Results and evidence
Every result below states its denominator. The evidence paths are the locations to retain inside the Phase 2 reference-run archive.
| Measurement | Result | Denominator meaning | Evidence |
|---|---|---|---|
| Objects loaded and read back | 1,699 / 1,699 | Objects projected for Topaz | 04-topaz-results/run-report.json |
| Relations loaded and read back | 5,879 / 5,879 | Relations projected for Topaz | 04-topaz-results/run-report.json |
| Authorization requests normalized | 3,209 / 3,209 | Public evaluation cells | 04-topaz-results/run-report.json |
| HTTP errors | 0 / 3,209 | Topaz authorization requests | 04-topaz-results/run-report.json |
| Predictions defaulted to deny | 0 / 3,209 | Public evaluation cells | 05-submission/SUBMISSION-DIGEST.json |
| Directory/RBAC effective decisions reproduced | 3,209 / 3,209 | Frozen directory/RBAC cells | 06-evaluator/scoring/scoring-report.json |
| RBAC decisions reproduced | 3,209 / 3,209 | Frozen directory/RBAC cells | 06-evaluator/scoring/scoring-report.json |
| Authorized-role sets reproduced | 895 / 895 | Subjects with authorized-role truth | 06-evaluator/scoring/scoring-report.json |
| ABAC component decisions reproduced | 3,209 / 3,209 | Frozen ABAC component cells | 06-evaluator/scoring/scoring-report.json |
| Birthright decisions reproduced | 3,209 / 3,209 | Frozen directory/RBAC cells | 06-evaluator/scoring/scoring-report.json |
| Validation checks passed | 32 / 32 | Declared validation checks | reports/validation-report.json |
Topaz’s unscored composed output contained 2,762 allows and 447 denies. It downgraded 245 effective allows: 18 at the RBAC binding/lifecycle gate and 227 at the public ABAC guard. These are observed decision counts, not composed-decision accuracy. The released scorers deliberately emitted no aggregate score because the mechanism families have different denominators.
What the run supports
- The released package could generate the input and evaluator artifacts without a SynthWorld repository checkout.
- An experiment-owned adapter could project the public artifacts into a live Topaz directory and policy.
- Topaz returned a normalized answer for every public request without a transport error or fallback.
- The sealed predictions reproduced the scoreable mechanism decisions listed above.
What the run does not support
- Independent reproduction on another machine or from a published remote.
- A general claim about Topaz, policy-engine or authorization correctness.
- Accuracy of the composed Topaz decision.
- A discriminating test of principal binding.
- Enforced isolation of evaluator truth from the system under test.
- Portability of the Britannia-specific topology mapper to arbitrary organization YAML files.
Phase 3: frozen isolated reference experiment
Phase 3 is published as the immutable, GitHub-attested release
enterprise-authorization-topaz-0.16.0-1.
It is a frozen and unsupported evidence record, not a maintained adapter repository.
Its release metadata binds the archive digests to the exact experiment source
commit and tree.
Run identity
| Field | Recorded value |
|---|---|
| Experiment identifier | enterprise-authorization-topaz-0.16.0-1 |
| Experiment source commit | e7f3952f07ddc0545b6db1e680fbd64bfb4278be |
| Experiment source tree | 8f0046779909be3cb12e0e1149a241adc0845cbd |
| SynthWorld package | idcognito-synthworld==0.16.0 |
| Experiment seed | 20260816 |
| Topology SHA-256 | 29ea8dd155ceed277eedf3f7261f0ba6844ff5a3e6c5a9c70164ae78b80871d1 |
| Topaz runtime | 0.33.16, commit 81b8405, linux/amd64 |
| Topaz image digest | sha256:835868c04bdd7129127ea43642ffff7363d0bd26d5e1a37631fa881431054360 |
| Combined normalized submission SHA-256 | 7a605095fbb44b36abd575ded120026f67d5af4f73650f45f9b288fd3d6b79e4 |
| Validation | 40 of 40 checks passed |
Enforced capability boundary
The benchmark-owner container generated separately typed public and evaluator artifacts. Projector and runner capabilities received public paths but no evaluator mount or evaluator credential. The runner recorded raw Topaz responses, normalized them into typed submissions and sealed the complete public, policy, adapter, package, product and result evidence. Only the offline scorer received the evaluator tree, and it verified every seal binding before loading truth.
A deliberate regression mounted the evaluator tree into a runner capability. The isolation probe rejected that process. This protects against accidental leakage through the supported Compose workflow; it is not an anti-cheating claim against a host administrator or Docker-daemon operator.
Results and controls
| Measurement | Result | Denominator meaning |
|---|---|---|
| Objects loaded and read back | 1,699 / 1,699 | Complete Topaz object projection |
| Relations loaded and read back | 5,879 / 5,879 | Complete Topaz relation projection |
| Britannia decisions normalized | 3,209 / 3,209 | Public Britannia evaluation cells |
| Adversarial decisions normalized | 14 / 14 | Released adversarial action attempts |
| Validation checks | 40 / 40 | Declared structural, integrity, isolation and presentation checks |
| Authorization negative controls | 9 / 9 | Deliberately faulty policies or prediction dimensions |
| Seal-refusal controls | 4 / 4 | Unsealed, mutated, cross-artifact and version-mismatched submissions |
The exercised composed effective/final, RBAC, ABAC, conflict, lifecycle, runtime-gate and adversarial dimensions each scored 1.0 at their stated denominators. The report computes no aggregate. It separately reports empty or unexercised ReBAC dimensions, evaluator-keyed fields that a public consumer cannot submit and world properties that are not system scores.
The reproduction ZIP was executed from a fresh extraction before publication and passed all 40 checks. The deterministic archives were also built twice and compared byte-for-byte. Operational timing is recorded but excluded from deterministic submission identity.
Reproduction materials
Historical Phase 1 and Phase 2 assets
The SynthWorld 0.16.0 GitHub release publishes the following retained experiment assets. The ZIPs were built from the Phase 1 and Phase 2 work conducted against SynthWorld 0.15.0; they are historical evidence, not regenerated 0.16.0 results.
| Release asset | Bytes | SHA-256 | Intended use | Evaluator truth included |
|---|---|---|---|---|
phase1-historical-kit.zip |
244,962 | 443b708cf95c4de41149ea8753d9e41fe3505217fcc4826fb15890410fb93f92 |
Audit the exploratory directory prototype and its original context | Yes, in a physically separate tree |
phase2-reproduction-kit.zip |
213,386 | 4d870eeeae18527bd604359a5592844b9abe98bcbab01c29b084b539a0ff8921 |
Conduct a clean run from the frozen source and explicit inputs | No pre-generated evaluator artifacts |
phase2-reference-run.zip |
18,124,673 | f973b7dc0829c79cd2a6d6bce02eef97064119872bea6652423c89f3520c8fae |
Audit the retained known-good inputs, outputs, sealed submissions and scores | Yes, in a physically separate tree |
SHA256SUMS |
277 | bfdc21794eaadd9e1e8183994282922c834429c498dafe3caaa8d0eaebf5c9a6 |
Verify the three ZIP files | No |
ASSET-METADATA.json |
766 | ad91ef11105e2ecb47fc208cfc71e316778bfe03f4d9a231fea9e2a6426c6cb8 |
Machine-readable release-asset sizes and digests | No |
The v0.16.0 release predates repository release immutability and is not retroactively protected by that setting. Verify its downloads against the recorded checksums. A GitHub-generated source archive is not sufficient because the Phase 2 repository intentionally ignored generated evidence, so those files would be absent.
Phase 3 immutable assets
The Phase 3 release is immutable. GitHub locks its tag and assets and publishes a
release attestation. gh release verify enterprise-authorization-topaz-0.16.0-1
verifies that attestation; gh release verify-asset verifies an individual local
download.
| Release asset | Bytes | SHA-256 | Intended use | Evaluator truth included |
|---|---|---|---|---|
enterprise-authorization-topaz-reproduction-kit-0.16.0-1.zip |
180,762 | 16071b56892d39542817b72401991adde38f878184c7dbb7b274662b24aa4b5f |
Reproduce the experiment from source, explicit inputs and pinned dependencies | No pre-generated evaluator artifacts |
enterprise-authorization-topaz-reference-run-0.16.0-1.zip |
19,145,023 | 202d1377f1f07bed57b82fc829f56082f23ffe2af626f5a8aeb39093ed0bddbe |
Audit the retained public inputs, separate evaluator truth, Topaz responses, sealed submissions, reports, controls and HTML projection | Yes, in a physically separate tree |
ASSET-METADATA.json |
1,140 | 39b775d8ab57b0ea1b37123b3aab27b88a7dac1b993c532a68fcf84b11aa2606 |
Bind experiment identity, source revision, versions, asset digests and result counts | No |
SHA256SUMS |
337 | d1a1728eca3304cd64e3f5e2cdccbd0fe23f28307e072e3e4fc0e4a09878db73 |
Verify every custom Phase 3 asset | No |
Each Phase 3 archive remains understandable after it is detached from this page. Its root contains:
README.md
EXPERIMENT-METADATA.json
FILE-MANIFEST.json
SHA256SUMS
LICENSE
docs/
01-source/
02-synthworld-public/ # reference-run archive only
03-topaz-input/ # reference-run archive only
04-topaz-results/ # reference-run archive only
05-submission/ # reference-run archive only
06-evaluator/ # reference-run archive only; physically separate
07-reports/ # reference-run archive only
viz/ # reference-run archive only
The embedded README repeats the evidence status, exact versions, prerequisites,
commands, directory map, supported claims and limitations. FILE-MANIFEST.json
classifies each payload file as experiment source, public input, system input,
system output, sealed submission, evaluator evidence, evaluation report or public
presentation.
The shortest verified reproduction path is:
sha256sum -c SHA256SUMS
unzip enterprise-authorization-topaz-reproduction-kit-0.16.0-1.zip
cd enterprise-authorization-topaz-reproduction-kit-0.16.0-1
bin/run_lab.sh
The embedded README records the dependency and isolation boundaries. Topaz has no published host port. First execution needs network access to fetch digest-pinned images and hash-pinned packages; reruns can operate from the retained local cache.
Reproducing versus adapting
An exact reproduction keeps the topology bytes, seed, configuration, policy, dependency lock and container digest unchanged. Its result is comparable only after the input, public-artifact, submission and report digests have been checked.
A related experiment must receive a new identifier and must not overwrite a frozen baseline. Its report should describe every changed input, mapping decision and policy assumption; regenerate all checksums; construct discriminating positive and negative cases; keep public inputs and evaluator truth separately typed and serialized; and report every metric with its denominator.
The Britannia mapper is organization-specific. A new organization can either extend
that mapping explicitly or begin from the released synthworld scaffold-enterprise-access workflow. The adaptation guide in the reproduction kit
should identify which files are SynthWorld-generated and which are experiment-owned,
then explain how to build public requests, run the system under test, seal a blinded
submission and score it separately.
An admission-only versus continued-runtime-authorization study inspired by changing providers, credentials, destinations, delegated authority or capabilities should be a new experiment series. It should define the protected execution transitions and mutations explicitly rather than retrofitting or silently redefining a frozen run.
Material limitations found by Phase 2
The composed decision was not scored
Topaz produced a composed decision that combined RBAC-family results with the ABAC
guard. SynthWorld 0.15.0 had separate directory/RBAC, ABAC and ReBAC scorers but no
submission or evaluator for the composed CompiledEnterpriseAccessStateV1
decision. Cross-tenant and scope-exceeded actions were denied by the experiment’s
composition while their released directory/RBAC truth remained allow.
Later contract work does not retroactively change what the frozen Phase 2 run scored. A successor experiment must use a released composed-decision contract and record that new package version.
The binding cohort did not test binding
The public input exposed the observed account binding but not enough evidence to resolve its canonical subject. The reference policy therefore treated the binding gate as passing. All 15 wrong-binding cases were already denied because the RBAC derivation found no path, so ignoring the binding mechanism did not change the outcome.
Some submitted metrics were not publicly solvable
Several released prediction fields depended on evaluator-only identifiers or unpublished policy intent, including ABAC truth identifiers, RBAC derivation-path identifiers and separation-of-duty constraints. Phase 2 reported these metrics as not publicly winnable rather than folding them into a headline result.
Public policy could reveal the negative cohort
The ABAC vocabulary did not provide the tenant inequality needed by the experiment. The projected rule therefore enumerated the public cell identifiers in its cross-tenant scope. A separately derived tenant comparison agreed with all 63 cases, but it was a cross-check rather than the decision path.
Isolation was auditable, not enforced
Public and evaluator artifacts were physically separate and submissions were sealed before scoring, but evaluator truth existed on the same host while the system under test ran. The supported process did not read it; the filesystem did not make such a read impossible. Phase 3 corrected that limitation by running the system under test without an evaluator mount and giving evaluator access only to a separate scorer.
Phase 3 contract delivery
The earlier experiment produced four focused requirements. SynthWorld 0.16.0 and the frozen Phase 3 experiment completed them without adding Topaz runtime behaviour to the core package:
- #137 added a publicly constructible composed-decision submission and independent scoring after the frozen Phase 2 run.
- #138 added discriminating tenant, scope, binding, temporal, clearance and composed authority counterfactuals with hidden pair labels and explicit discriminating denominators.
- #139 added the released consumer API, digest helpers and supported end-to-end workflow after the frozen Phase 2 run.
- #140 delivered the isolated experiment as immutable release evidence rather than creating an ongoing adapter-lab maintenance commitment.
The experiment implementation is frozen. Future adapters and experiments remain owned by their authors and consume SynthWorld through its public contracts.
Community result submissions
The
Experiment results
Discussion category indexes community-authored experiments. It is not a public
leaderboard or an evidence store. Each entry is labelled experiment:self-reported
by default and must identify exact versions, inputs, denominators, durable artifact
links, SHA-256 digests, the public/evaluator boundary and limitations.
Discussion posts, links and attachments are mutable and therefore non-authoritative.
Authors own and support their experiments. SynthWorld maintainers do not promise to
inspect, reproduce, repair, host, rank or endorse submissions. A maintainer may
voluntarily apply experiment:schema-checked after structural validation or
experiment:maintainer-reproduced after reproducing the exact sealed artifact;
neither status is a product certification.