SynthWorld 0.13.0
Added
- A deterministic enterprise identity and access surface, with authorization
evaluated against standards-shaped projections (#7, #27). SynthWorld now
generates a fixed enterprise identity/access universe — organisations, units,
populations, principals, accounts, groups, roles, permissions, entitlements,
and opaque authorization targets — and evaluates access against it through
three bounded oracles: a directory RBAC oracle with role and group closure,
a bounded ABAC oracle over declared attributes, and a bounded ReBAC
oracle over relationship tuples. Access derivation is an implementation detail
of the oracle rather than a published topology, so no artifact describes the
model as an identity topology.
New modules:enterprise,enterprise/rbac,enterprise/abac,
enterprise/rebac,enterprise/authorization,enterprise/conformance,
enterprise/identity_fabric,agentic/enterprise. - Vendor-neutral projections so a real authorization engine can consume the
world without a bespoke adapter.enterprise/projections/emits an RFC
7643-style SCIM user/group projection, an OpenFGA authorization model
and relationship tuples for the bounded ReBAC subset, and an AuthZEN 1.0
request projection with per-field provenance. Each projection carries an
explicit mapping profile recording what it can and cannot represent, so a
projection gap is declared rather than silently lossy. A Shared Signals/CAEP
mapping profile is declared, but temporal event emission is deliberately
deferred and no SET envelope is constructed yet. - Two smoke benchmarks and a graded assurance ladder. An enterprise identity
fabric smoke benchmark and an enterprise agentic smoke benchmark publish public
inputs and evaluator truth underenterprise-identity-access-contract/; a
contextual access benchmark profile publishes under
contextual-access-contract/.continuous_assuranceaddssmoke,
standard,longitudinal, andheld_outtiers governing assurance cadence.
Note these are assurance tiers, not generated-world scale tiers — the
enterprise_agenticscale ladder #27 asks for remains open atsmokeonly. - An executable agent-authority run protocol.
agent_authorityand
assuranceadd a staged run protocol with signed execution receipts, component
provenance, and evidence claims, so an evaluation run is reconstructible from
its receipt rather than trusted on assertion. - The ambiguity v2 pack gets its difficulty from a computed error floor, not a
codebook (#80). The v1-style surfaces encoded each identity index in cleartext, so a
~30-line normaliser recovered every relation and scored 1.0000; two successor designs
fell to pool inversion. The fix follows the reviewed plan: each kind draws a base from
a pool of confusable clusters (Sorensen/Sorenson/Soerensen, a transposed
phone, a swapped day/month),EQUAL/NEARshare the base whileFARredraws from a
stationary mixture, and every value passes through one structured-noise operator
applied identically under every relation. Identity recovery stays free and expected;
the relation is carried by overlapping distance distributions. The pack publishes its
genie floor — the Bayes error of the generator, estimated with a stated N and
Wilson interval and keyed to a digest of every decision-relevant constant — plus the
enumerated channel invariants (kernel stationarity, an identical one-value marginal
under every relation, a per-base sibling-landing mass gate, form bijectivity and
constant cross-form distance, and an artifact-factorization check) and a gated
technique premium, so real resolution technique is rewarded rather than anti-taught.
New modules:ambiguity_evidence,ambiguity_surfaces,ambiguity_channel,
ambiguity_floor, with v2 serialization/metrics/baselines support and
examples/compute_ambiguity_floor.py. - Agent-authority and contextual-access receipt builders now seal honest
failed-run receipts: a failed product execution produces a manifest with
execution_status=failedandevaluation_status=not_evaluatedthat binds
only the product-stage artifacts and never loads evaluator truth, so an
assurance corpus can no longer be structurally biased toward successful runs.
Receipt validation enforces the paired statuses and the product-only artifact
inventory, and run manifests whose evidence claim is not supported by the
systems under test (live-lab claims with reference-only components) are
rejected. Managed-service provenance innot_exposedobservability states
additionally forbids evidence references, and the contextual execution
receipt leavesstimulus_digestunset because that lineage executes the
public input directly. - Contextual-access receipts now expose the same explicit two-phase live-run
boundary as agent-authority receipts. External runners may finish and attribute
the product stage before constructing completion metadata; the finalizer then
replays the plan, public input, adapter, component inventory, provenance, and
artifact digests before evaluator truth is loaded. Existing deterministic
contextual receipt bytes remain unchanged. - An opt-in disposable agent-authority reference deployment now executes the
public enterprise-agentic smoke world across isolated Docker networks. It
produces live observation-v2 receipts covering L01-L06, the exact declared
L07 baseline/SUT inventory, and measured/unsupported L08 targets, while
keeping runtime credentials in a destroyed named volume and scanning canary
and token markers out of receipts, logs, and container metadata. A new
two-phase receipt finalizer lets live runners record completion metadata only
after external execution without exposing evaluator truth before product
output is durably staged. - Agent-authority observation schema
2.0.0corrects L06 clock semantics without
changing the frozen observation-v1 schema. It records one explicit monotonic
revocation epoch, non-negative acknowledgement offsets, and signed send/completion
offsets so pre-revocation in-flight requests are representable. Receipt validation
dispatches v1/v2 observations and binds them to scoring formulas1.0.0/2.0.0;
migration guidance forbids guessing offsets from ambiguous v1 rows. - The 12-case authority-change governance conformance fixture from #73 is now an
additive frozen benchmark. Its public and evaluator payloads remain physically
separate; their visibility manifests and exact raw bytes are path-bound by a
packagedSHA256SUMS, verified by the packaged loader API, regeneration tests,
and isolated-wheel checks. No existing golden bytes changed. - The broker-removal pack is scored through the unified evaluator:
evaluate_broker_removal
projects each family's headline ratio into the standardEvaluationReport, the CLI gains
synthworld evaluate broker, andexamples/evaluate_broker_adapter.pyis the worked
Idcognito-style adapter #5 asked for - public timeline in, versioned assessment out,
scored against regenerated truth. Closes the last acceptance criteria of #5. - Propagation lag is representable and scored (#65). Downstream copies carry their own
removal tick (Nonenever goes), a newslow_propagationcase has copies that catch up
late rather than never, a submission can predict the completion tick, and
propagation_lagreports mean absolute error with support. The credulous baseline now
predicts completion at confirmation - "done means done everywhere" - and eats a 14-tick
error on exactly the case built to price that claim; the example adapter's modest grace
period cuts it to 4.
Changed
- Ambiguity grammar
2.0.0, v2 schema2.1.0.render_relation/render_value
delegate to the structured-noise channel; the old_SPACE/_surfacecodebook is gone.
Relation.EQUALno longer means "byte-identical" — it is one value transcribed once
per record, rendered identically only with probabilitysigma— and the charter
docstrings that claimed otherwise are rewritten. The v1 pack and its frozen artifacts
are untouched and stay byte-identical. display_namerendersfamily, given(#86). The two name kinds are scored as
separate evidence, so the boundary between them must be readable off the value; the
oldgiven familylost it whenever a pool entry carried a space. No rendered name
contains", ", so the split is unambiguous.- Temporal schema
1.2.0.ListingTruth.downstream_refs(bare strings) becomes
downstream_copieswith per-copy removal ticks, and a recorded reappearance must now
coincide with a publishedLISTING_REAPPEAREDevent - truth that disagrees with the
public timeline is refused as corrupt input. Deliberately asymmetric with removal, which
stays unpinned because a confirmation is the broker's claim and the phantom case exists
to show the claim can be false.BrokerAssessmentmoves to1.1.0for the new
prediction field; propagation state is now read as of the assessed tick, so a slowly
propagating deletion no longer scores identically to one that never propagates. DenominatedMetricmoved tosynthworld.models, below the evaluation/partition import
cycle it was about to create;ambiguity_partitionre-exports it unchanged.
What's Changed
- Close the broker pack: lag scored, evaluator unified, adapter worked (#5, #65) by @bluntmachetti in #95
- Give the ambiguity v2 pack a computed error floor, not a codebook (#80) by @bluntmachetti in #96
- Add the enterprise authorization testbed: identity fabric, contextual access, and governance benchmarks (PR1-PR13) by @bluntmachetti in #97
- Prepare SynthWorld 0.13.0: document the enterprise authorization surface by @bluntmachetti in #99
Full Changelog: v0.12.0...v0.13.0