Skip to content

spec: ReversibilityDistance contract + Appendix-A reference estimator (E13/WS-D) - #283

Open
mdheller wants to merge 1 commit into
mainfrom
feat/e13-wsd-reversibility-distance
Open

spec: ReversibilityDistance contract + Appendix-A reference estimator (E13/WS-D)#283
mdheller wants to merge 1 commit into
mainfrom
feat/e13-wsd-reversibility-distance

Conversation

@mdheller

@mdheller mdheller commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Epoch E13 / workstream WS-D — reversibility distance as a civic primitive

Lands ReversibilityDistance, the published civic meter of the reidentification economy
(reidentification-economy Appendix A), plus a self-proving reference estimator.

To single one subject out of a population N costs log2 N bits (the singling-out budget).
The reversibility distance D = E[log2 k] is the residual identity entropy — the bits an
adversary must still acquire to reidentify. D == 0 means fully reversible. D is the same
number as a MultiversealTwin's ε-unlinkability budget (ADR-0014): privacy, capacity and
reidentifiability are one ledger, with two orthogonal controls — a DP rate-limit on ΔD, and a
capture receipt gating whether the identifying query Q is produced at all.

Files added

  • schemas/ReversibilityDistance.json — JSON Schema 2020-12, $id .../v2/ReversibilityDistance.json, additionalProperties:false, URN prefix urn:srcos:reversibility-distance:.
  • examples/reversibility_distance.json — canonical example.
  • tools/validate_reversibility_distance_examples.py — schema + invariants (dBits>=0; reidentified == (dBits==0); unicity-curve well-formed; budgetBits ≈ log2 N).
  • tools/reversibility_distance.py — numpy-only Appendix-A estimator (unicity_closed_form, reversibility_distance, fit_unicity_exponent). Its __main__ self-test reproduces the appendix's worked examples (Sweeney N=2.48e8 → ε≈0.921; de Montjoye N=1.5e6 → r≈73.5, coarsened p=4→ε≈0.44, p=5→ε≈0.978) with asserts.
  • docs/adr/0020-reversibility-distance-meter.md — ADR (relates to ADR-0014).
  • Makefile — wired validate-reversibility-distance-examples into the validate: aggregate.

Verification (all pass)

  • Estimator self-test: all asserts OK, reproduces Appendix A, exit 0.
  • validate_reversibility_distance_examples.py: OK (schema + invariants).
  • scripts/check_duplicate_schema_ids.py: OK: 353 unique schema $id values.
  • tools/validate_schema_references.py: all $refs resolve.

🤖 Generated with Claude Code

… (E13/WS-D)

Add the reversibility-distance civic meter of the reidentification economy:
a per-release/twin reading of D = E[log2 k] (residual identity entropy in bits)
against the singling-out budget log2 N. D is the same ledger as a
MultiversealTwin's epsilon-unlinkability budget, with two orthogonal controls
(DP rate-limit on dD, capture receipt gating query Q).

- schemas/ReversibilityDistance.json (JSON Schema 2020-12)
- examples/reversibility_distance.json
- tools/validate_reversibility_distance_examples.py (schema + invariants)
- tools/reversibility_distance.py (numpy-only estimator; __main__ self-test
  reproduces the appendix's Sweeney and de Montjoye worked examples)
- docs/adr/0020-reversibility-distance-meter.md
- Makefile: wired into the validate: aggregate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant