Skip to main content

Deterministic synthetic identity graphs for privacy-system evaluation

Project description

SynthWorld

CI PyPI Python versions License: Apache-2.0 Coverage: 100% enforced

Faker generates rows. SynthWorld generates connected identity worlds with adversarial evidence and an answer key.

SynthWorld creates deterministic, safely fictional populations for evaluating privacy, PII-extraction, entity-resolution, relationship-inference, and exposure-analysis systems. Selected benchmark families expose separately serialized product-safe observations; other artifacts are evaluator bundles that retain answer keys for scoring.

SynthWorld began as the ground-truth harness for Idcognito and is deliberately usable as an independent Apache-2.0 Python package. It is not an anonymisation tool and does not transform sensitive real-world data into a safe dataset.

Why SynthWorld

Requirement SynthWorld approach
Repeatable evaluation Seeded generation, canonical ordering, frozen fixtures, and checksums
Connected identities Personas share planted family, colleague, classmate, neighbour, and social evidence
Measurable ambiguity Adversarial identity records include common names, Unicode, twins, maiden names, aliases, and misspellings
Controlled oracle exposure Extraction, connection, and risk each provide a separately serialized product-safe corpus and physically separate evaluator truth
Safe fixtures Reserved domains, fictional phones, example addresses, invalid identifiers, and recursive synthetic: true markers
Honest scoring Versioned formulas and benchmark integrity metrics make every published claim reproducible

A generated row can test whether a field accepts an email address. A SynthWorld benchmark can measure whether a system extracts that address from a document, links several conflicting records to the correct entity, infers only supported relationships, and assigns the expected exposure score.

Current benchmark families

  • Core identity world: seeded personas, identity attributes, and evidence-backed relationships.
  • Exposure corpus: breach, broker, search, and social observations, including zero-exposure controls, search collisions, and broker reappearance.
  • Exact-span extraction: a product-safe public page corpus and a physically separate exact-span answer key, plus an annotated evaluator bundle that pairs the two for offline scoring.
  • Entity resolution: opaque records and adversarial cases with separate entity-membership truth.
  • Relationship inference: public association evidence, reciprocal positive cases, and unilateral negative controls.
  • Risk calibration: provider-neutral breach observations with separately checksummed score, band, and factor truth.

The core-world, exposure-corpus, extraction-corpus, connection-benchmark, and risk-benchmark schemas are independently versioned 1.0.0 contracts. See DATA_DICTIONARY.md for field definitions and the strict public/oracle boundary. See GOLDEN_REVIEW.md for the frozen benchmark review record.

Public input and evaluator truth

Extraction, connection, and risk each provide a separately serialized product-safe corpus (PublicExtractionCorpus, PublicConnectionCorpus, PublicRiskCorpus) and physically separate evaluator truth. Extraction also ships an ExtractionCorpus annotated bundle, in which every AnnotatedExtractionPage embeds both the safe page and its answer_key, for offline evaluators; that bundle is convenient but is not a product-safe input.

The separated evaluation flow is:

product or model                    evaluator
       |                                |
       v                                v
public observations  ---------->  system predictions
                                          |
                                          v
                               separate answer key
                                          |
                                          v
                                  scored results

Only corpus types and CLI commands explicitly described as public should be passed to product adapters. Do not pass the annotated extraction corpus into a product or model without first projecting only its page fields.

Install

The distribution is published as idcognito-synthworld; the import package and the CLI are both named synthworld, and the package ships typed (py.typed). Release notes live in CHANGELOG.md.

pip install idcognito-synthworld
synthworld generate --seed 20260719 --persona-count 10 --output world.json

The frozen golden benchmarks are also browsable as tables on Hugging Face, byte-identical to the artifacts shipped in this package.

Develop from source

Install uv, clone the repository, and run:

uv sync --locked --all-groups
uv run synthworld generate --seed 20260719 --persona-count 10 --output world.json
uv run synthworld metrics --seed 20260719 --persona-count 10

Useful corpus commands include:

uv run synthworld generate-corpus --seed 20260719 --persona-count 10 --output exposures.json
uv run synthworld generate-public-extraction --seed 20260719 --persona-count 10 --output extraction.json
uv run synthworld generate-public-connections --seed 20260719 --persona-count 10 --output connections.json
uv run synthworld generate-risk-public --seed 20260719 --persona-count 10 --output risk.json

See examples/ for a worked exact-span extraction evaluation and annotated sample output, and BENCHMARKS.md for reference baseline results and visual demonstrations.

The generate-extraction, generate-extraction-answers, generate-connection-benchmark, and generate-risk-answer commands include or emit evaluator-only truth. Keep those artifacts outside product and demo data paths. The generate-public-extraction, generate-public-connections, and generate-risk-public commands emit the separately serialized product-safe observations.

Evaluate a system

SynthWorld provides a unified command line tool to score predictions against separately serialized ground-truth answer keys:

synthworld evaluate <task> --predictions PATH [--seed S] [--persona-count N] [--summary]

Where task is one of extraction, entity-resolution, relationship, or risk.

  • --predictions: Path to the system predictions JSON file (conforming to task-specific prediction schemas).
  • --seed: The benchmark seed used to load/generate matching ground-truth.
  • --persona-count: The benchmark persona count (ignored for entity-resolution).
  • --summary: If provided, outputs a clean, compact terminal table summarizing the metrics instead of the raw JSON report.

Example:

synthworld evaluate extraction --predictions predictions.json --seed 20260719 --summary

See DATA_DICTIONARY.md for full prediction and report schemas, and examples/ for worked code examples.

Roadmap and integrations

SynthWorld is intended to remain a focused ground-truth identity layer rather than become a second general-purpose simulator. Planned work is organised as packs and adapters:

  • data-broker deletion and reappearance for Idcognito;
  • AI-agent and non-human identity graphs for ZeroID, Arena, and EADS;
  • enterprise IAM and identity-governance scenarios;
  • LLM, RAG, and agent-memory privacy evaluation;
  • digital-wallet and verifiable-credential testing;
  • disaster identity continuity for Aftershock.

The phased plan, architecture boundaries, and tracking issues are documented in ROADMAP.md.

Verify every claim

make ci runs formatting, linting, strict type checking, all tests with 100% branch coverage, benchmark metrics at 10- and 100-persona scales, package inspection, and an isolated-wheel smoke test. The same gates run on Python 3.12 and 3.14 in GitHub Actions; a separate workflow job scans the repository's full history for secrets.

make ci

Generated JSON is safely fictional for fixtures, demos, tutorials, and evaluation when its synthetic markers remain intact. That safety property does not make every artifact oracle-free product input; use only explicitly public corpora for product adapters. SynthWorld is not a source of real identity data and must never be used to impersonate, target, or investigate a person. Do not replace the safeguards with plausible real-world identifiers.

License

Copyright 2026 Redoubt Labs ltd. Licensed under the Apache License 2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

idcognito_synthworld-0.8.0.tar.gz (145.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

idcognito_synthworld-0.8.0-py3-none-any.whl (82.7 kB view details)

Uploaded Python 3

File details

Details for the file idcognito_synthworld-0.8.0.tar.gz.

File metadata

  • Download URL: idcognito_synthworld-0.8.0.tar.gz
  • Upload date:
  • Size: 145.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for idcognito_synthworld-0.8.0.tar.gz
Algorithm Hash digest
SHA256 6abdd50cd52d58af197f45bbee49ba22545fb9eb2504c66d688f90db4bbeaf25
MD5 c58210329a9e2564e533b8dcbc9e91ec
BLAKE2b-256 639a9b73c8afad4b209a28e62c32d0e9408e9f216a52c1be21f516526597c0c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for idcognito_synthworld-0.8.0.tar.gz:

Publisher: release.yml on bluntmachetti/synthworld

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file idcognito_synthworld-0.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for idcognito_synthworld-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 17340b1f0a4793cc6529ee70cdba955b8330eaea634f7bfa631013c2423be136
MD5 b3f3b92a6e6bb90998fdf6d18666f1e0
BLAKE2b-256 18eb42c2e980f946912f472f90bc7b158f40c012d7a45bd18f12d486b47c9b89

See more details on using hashes here.

Provenance

The following attestation bundles were made for idcognito_synthworld-0.8.0-py3-none-any.whl:

Publisher: release.yml on bluntmachetti/synthworld

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page