Skip to content

SynthWorld 0.13.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 07:37
· 191 commits to main since this release
v0.13.0
84a449c

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 under enterprise-identity-access-contract/; a
    contextual access benchmark profile publishes under
    contextual-access-contract/. continuous_assurance adds smoke,
    standard, longitudinal, and held_out tiers governing assurance cadence.
    Note these are assurance tiers, not generated-world scale tiers — the
    enterprise_agentic scale ladder #27 asks for remains open at smoke only.
  • An executable agent-authority run protocol. agent_authority and
    assurance add 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/NEAR share the base while FAR redraws 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=failed and evaluation_status=not_evaluated that 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 in not_exposed observability states
    additionally forbids evidence references, and the contextual execution
    receipt leaves stimulus_digest unset 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.0 corrects 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 formulas 1.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
    packaged SHA256SUMS, 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 standard EvaluationReport, the CLI gains
    synthworld evaluate broker, and examples/evaluate_broker_adapter.py is 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 (None never goes), a new slow_propagation case has copies that catch up
    late rather than never, a submission can predict the completion tick, and
    propagation_lag reports 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 schema 2.1.0. render_relation/render_value
    delegate to the structured-noise channel; the old _SPACE/_surface codebook is gone.
    Relation.EQUAL no longer means "byte-identical" — it is one value transcribed once
    per record, rendered identically only with probability sigma — and the charter
    docstrings that claimed otherwise are rewritten. The v1 pack and its frozen artifacts
    are untouched and stay byte-identical.
  • display_name renders family, given (#86). The two name kinds are scored as
    separate evidence, so the boundary between them must be readable off the value; the
    old given family lost 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_copies with per-copy removal ticks, and a recorded reappearance must now
    coincide with a published LISTING_REAPPEARED event - 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. BrokerAssessment moves to 1.1.0 for 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.
  • DenominatedMetric moved to synthworld.models, below the evaluation/partition import
    cycle it was about to create; ambiguity_partition re-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