aetheridentity 2.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. aetheridentity-2.0.0/AUTHORS.md +33 -0
  2. aetheridentity-2.0.0/CHANGELOG.md +66 -0
  3. aetheridentity-2.0.0/CITATION.cff +62 -0
  4. aetheridentity-2.0.0/INVARIANTS.md +396 -0
  5. aetheridentity-2.0.0/LICENSE +29 -0
  6. aetheridentity-2.0.0/MANIFEST.in +10 -0
  7. aetheridentity-2.0.0/PKG-INFO +432 -0
  8. aetheridentity-2.0.0/README.md +400 -0
  9. aetheridentity-2.0.0/ROADMAP_v2.md +296 -0
  10. aetheridentity-2.0.0/SPECIFICATION.md +436 -0
  11. aetheridentity-2.0.0/TESTS.md +463 -0
  12. aetheridentity-2.0.0/docs/figures/Fig1_Eight_Dimensions.png +0 -0
  13. aetheridentity-2.0.0/docs/figures/Fig2_Identity_vs_Governance.png +0 -0
  14. aetheridentity-2.0.0/docs/figures/Fig6_Identity_Layers.png +0 -0
  15. aetheridentity-2.0.0/docs/figures/Fig7_Sybil_Claims.png +0 -0
  16. aetheridentity-2.0.0/docs/figures/Fig8_Delegation_Chain.png +0 -0
  17. aetheridentity-2.0.0/docs/figures/Fig9_Identity_Lifecycle.png +0 -0
  18. aetheridentity-2.0.0/paper/AetherIdentity_Research_Paper.pdf +1015 -0
  19. aetheridentity-2.0.0/pyproject.toml +63 -0
  20. aetheridentity-2.0.0/setup.cfg +4 -0
  21. aetheridentity-2.0.0/src/aetheridentity/__init__.py +42 -0
  22. aetheridentity-2.0.0/src/aetheridentity/continuity.py +119 -0
  23. aetheridentity-2.0.0/src/aetheridentity/delegation.py +251 -0
  24. aetheridentity-2.0.0/src/aetheridentity/identity.py +53 -0
  25. aetheridentity-2.0.0/src/aetheridentity/records.py +138 -0
  26. aetheridentity-2.0.0/src/aetheridentity/reputation.py +178 -0
  27. aetheridentity-2.0.0/src/aetheridentity/signer.py +78 -0
  28. aetheridentity-2.0.0/src/aetheridentity/simulator.py +49 -0
  29. aetheridentity-2.0.0/src/aetheridentity/sybil.py +119 -0
  30. aetheridentity-2.0.0/src/aetheridentity.egg-info/PKG-INFO +432 -0
  31. aetheridentity-2.0.0/src/aetheridentity.egg-info/SOURCES.txt +37 -0
  32. aetheridentity-2.0.0/src/aetheridentity.egg-info/dependency_links.txt +1 -0
  33. aetheridentity-2.0.0/src/aetheridentity.egg-info/requires.txt +8 -0
  34. aetheridentity-2.0.0/src/aetheridentity.egg-info/top_level.txt +1 -0
  35. aetheridentity-2.0.0/tests/test_continuity.py +86 -0
  36. aetheridentity-2.0.0/tests/test_delegation.py +122 -0
  37. aetheridentity-2.0.0/tests/test_reputation.py +97 -0
  38. aetheridentity-2.0.0/tests/test_smoke.py +88 -0
  39. aetheridentity-2.0.0/tests/test_sybil.py +71 -0
@@ -0,0 +1,33 @@
1
+ # Authors
2
+
3
+ ## Samir Baladi
4
+
5
+ **Role:** Author, researcher
6
+ **Affiliation:** Ronin Institute / Rite of Renaissance
7
+ **Research area:** Interdisciplinary AI Research
8
+ **ORCID:** [0009-0003-8903-0029](https://orcid.org/0009-0003-8903-0029)
9
+ **Email:** [gitdeeper@gmail.com](mailto:gitdeeper@gmail.com)
10
+
11
+ Samir Baladi is the author of the Aether family of preprints, including
12
+ AetherGit, AetherFlow, AetherProof, AetherMesh, AetherGovern, AetherRuntime,
13
+ AetherOrchestrate, and the present candidate, AetherIdentity.
14
+
15
+ The Aether family investigates functional dimensions of coordinated agentic
16
+ software engineering. Each preprint adopts a falsification-first methodology:
17
+ failure conditions are stated before the candidate is described.
18
+
19
+ ## Versions
20
+
21
+ - **v0.1.0** — Architectural Hypothesis (original draft)
22
+ - **v1.0.0** — Formal Architecture Proposal (33-page paper)
23
+ - **v2.0.0** — Experimental Reference Implementation (this release)
24
+
25
+ ## How to contribute
26
+
27
+ **For the paper (v1.0.0):** independent review of F1–F4, literature pointers,
28
+ bibliographic corrections.
29
+
30
+ **For the implementation (v2.0.0):** bug reports, coverage improvements,
31
+ new tests for the deferred scenarios (S2–S5).
32
+
33
+ See `CONTRIBUTING.md` for details.
@@ -0,0 +1,66 @@
1
+ # Changelog
2
+
3
+ All notable changes to AetherIdentity are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [2.0.0] — 2026-11-11
9
+
10
+ **Experimental Reference Implementation.**
11
+
12
+ ### Added
13
+
14
+ - Python package `aetheridentity` (8 modules under `src/aetheridentity/`).
15
+ - L1 — Identity (`identity.py`).
16
+ - L2 — Continuity (`continuity.py`).
17
+ - L3 — Reputation (`reputation.py`).
18
+ - L4 — Sybil resistance (`sybil.py`).
19
+ - L5 — Delegation (`delegation.py`).
20
+ - Simulator (`simulator.py`).
21
+ - Abstract Signer with `FakeSigner` and `Ed25519Signer` (`signer.py`).
22
+ - Record types and canonical JSON serialization (`records.py`).
23
+ - 35 tests (93% coverage).
24
+ - S1 — Bootstrap (P2) executed.
25
+ - S6 — Governance overlap (F3) executed.
26
+ - `SPECIFICATION.md`, `INVARIANTS.md`, `TESTS.md`, `ROADMAP_v2.md`.
27
+ - `REPORTS/v2.0.0/` (test report, evaluation report, amendments, phase log, stop log).
28
+ - `RELEASE/RELEASE.md`.
29
+
30
+ ### Changed
31
+
32
+ - README updated to reflect v2.0.0 (was v0.1.0).
33
+ - Version series fixed: v0.1.0 (hypothesis), v1.0.0 (paper), v2.0.0 (implementation).
34
+
35
+ ### Not implemented
36
+
37
+ - Network transport, consensus.
38
+ - AetherMesh integration.
39
+ - Fork resolution.
40
+ - Recovery after total key loss.
41
+ - Single-instance enforcement.
42
+ - Byzantine behavior.
43
+
44
+ ### Deferred
45
+
46
+ - S2, S3, S4, S5 (out of scope for v2.0.0).
47
+ - F1, F2, F4, F5 (not evaluated in v2.0.0).
48
+ - Machine-checked proofs of P1 and P2.
49
+
50
+ ## [1.0.0] — 2026-11-10
51
+
52
+ **Formal Architecture Proposal.**
53
+
54
+ - 33-page paper published on Zenodo and Figshare.
55
+ - OSF Preregistration for v2.0.0 evaluation plan.
56
+ - 5 failure conditions (F1–F5), 6 requirements (R1–R6).
57
+ - 4 formal definitions, 2 propositions (proof sketches).
58
+ - 5 identity layers (L1–L5).
59
+ - 9 metrics, 5 baselines, 6 scenarios, 7 threats, 20 open questions.
60
+
61
+ ## [0.1.0] — 2026-11-09
62
+
63
+ **Architectural Hypothesis (original draft).**
64
+
65
+ - Initial falsification-first methodology.
66
+ - Draft P1 and P2.
@@ -0,0 +1,62 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this work, please cite it as below."
3
+ type: software
4
+ title: "AetherIdentity: A Falsification-First Investigation of Decentralized Agent Identity in the Aether Family"
5
+ version: 2.0.0
6
+ identifiers:
7
+ - type: doi
8
+ value: 10.5281/zenodo.24102739
9
+ description: "Zenodo DOI (paper v1.0.0, software v2.0.0)"
10
+ - type: doi
11
+ value: 10.6084/m9.figshare.34981891
12
+ description: "Figshare preprint DOI"
13
+ - type: doi
14
+ value: 10.17605/OSF.IO/B6AEN
15
+ description: "OSF Preregistration DOI"
16
+ doi: 10.5281/zenodo.24102739
17
+ date-released: 2026-11-11
18
+ license: MIT
19
+ license-url: https://opensource.org/licenses/MIT
20
+ url: https://doi.org/10.5281/zenodo.24102739
21
+ repository-code: https://github.com/gitdeeper15/aetheridentity
22
+ abstract: >
23
+ AetherIdentity is a candidate eighth functional dimension of the Aether
24
+ family. It investigates whether identity proof, continuity, reputation,
25
+ Sybil resistance, and delegation in multi-agent software ecosystems
26
+ constitute a genuine gap not already covered by the seven existing
27
+ dimensions. v2.0.0 is an experimental reference implementation of the
28
+ v1.0.0 paper. It implements L1–L5 and a minimal independent simulator.
29
+ It does not implement network transport, consensus, or AetherMesh
30
+ integration. No real-world deployment has been evaluated.
31
+ keywords:
32
+ - AetherIdentity
33
+ - decentralized identity
34
+ - self-certifying identifiers
35
+ - key rotation
36
+ - reputation
37
+ - Sybil resistance
38
+ - delegation
39
+ - falsification
40
+ - reference implementation
41
+ - aether family
42
+ authors:
43
+ - family-names: Baladi
44
+ given-names: Samir
45
+ orcid: https://orcid.org/0009-0003-8903-0029
46
+ email: gitdeeper@gmail.com
47
+ affiliation: "Ronin Institute / Rite of Renaissance"
48
+ references:
49
+ - type: software
50
+ title: "AetherIdentity v2.0.0: Reference Implementation"
51
+ authors:
52
+ - family-names: Baladi
53
+ given-names: Samir
54
+ doi: 10.5281/zenodo.24102739
55
+ year: 2026
56
+ - type: generic
57
+ title: "AetherIdentity: A Falsification-First Investigation (Paper v1.0.0)"
58
+ authors:
59
+ - family-names: Baladi
60
+ given-names: Samir
61
+ doi: 10.5281/zenodo.24102739
62
+ year: 2026
@@ -0,0 +1,396 @@
1
+ # AetherIdentity v2.0.0 — Invariants
2
+
3
+ **Version:** 2.0.0 (Phase 2)
4
+ **Parent paper:** v1.0.0 (Zenodo 10.5281/zenodo.24102739)
5
+ **Input:** SPECIFICATION.md (Phase 1)
6
+ **Status:** Invariants. No code.
7
+ **Decision record:** ROADMAP_v2.md
8
+
9
+ ---
10
+
11
+ ## 0. Purpose
12
+
13
+ This document defines the invariants that every run of the reference implementation must satisfy. Each invariant is:
14
+
15
+ 1. Stated in a form that can be checked mechanically.
16
+ 2. Mapped to a failure condition (F1–F5) or a proposition (P1–P2).
17
+ 3. Accompanied by its failure mode (what a violation would mean).
18
+
19
+ An invariant that cannot be checked mechanically is either weakened to a checkable form or reported as **not checkable** with a documented reason.
20
+
21
+ ---
22
+
23
+ ## 1. Invariant format
24
+
25
+ Each invariant has the following fields:
26
+
27
+ | Field | Meaning |
28
+ |---|---|
29
+ | **ID** | `I1`, `I2`, … |
30
+ | **Statement** | What must hold. |
31
+ | **Check** | How it is checked (function, test, or property). |
32
+ | **Bears on** | F1–F5 or P1–P2. |
33
+ | **Failure mode** | What a violation means. |
34
+ | **Status** | `checkable` / `not checkable` / `deferred`. |
35
+
36
+ ---
37
+
38
+ ## 2. Core invariants (I1–I12)
39
+
40
+ ### I1 — Determinism of queries
41
+
42
+ **Statement.** For any `S`, any permutation `S'` of `S`, and any query function `q`, `q(S) == q(S')`.
43
+
44
+ **Check.** Property-based test: generate random `S`, permute, compare outputs bit-for-bit.
45
+
46
+ **Bears on.** P1.
47
+
48
+ **Failure mode.** A query function depends on the order of `S`. This would mean the specification's claim that `S` is a set (not a sequence) is false, and P1 cannot hold.
49
+
50
+ **Status.** `checkable`.
51
+
52
+ ---
53
+
54
+ ### I2 — Identifier determinism
55
+
56
+ **Statement.** For any two inception records `r1`, `r2` with the same `(alg, pk, λ)`, `id(r1) == id(r2)`.
57
+
58
+ **Check.** Construct two records with identical inputs; compare identifiers.
59
+
60
+ **Bears on.** P1.
61
+
62
+ **Failure mode.** Identifier derivation is not a deterministic function of its inputs. This would contradict Definition 1 and make P1's condition (a) false.
63
+
64
+ **Status.** `checkable`.
65
+
66
+ ---
67
+
68
+ ### I3 — Continuity chain validity
69
+
70
+ **Statement.** For any `id` with a continuity chain `C` in `S`, `C` is valid: `r₀` is self-signed, and for each `k ≥ 1`, `H(pk_k) == c_{k-1}`, `h_{k-1}` is correct, and `o_k` verifies under `pk_k`.
71
+
72
+ **Check.** Recompute the chain from `S`; verify each link.
73
+
74
+ **Bears on.** P1, F4.
75
+
76
+ **Failure mode.** A rotation record is accepted without a valid pre-commitment. This would mean the continuity chain does not enforce the offline-key rule.
77
+
78
+ **Status.** `checkable`.
79
+
80
+ ---
81
+
82
+ ### I4 — Fork visibility
83
+
84
+ **Statement.** If two valid rotation records share a predecessor and differ in content, `status_of(S, id) == "contested"`.
85
+
86
+ **Check.** Construct a fork; assert status.
87
+
88
+ **Bears on.** F4.
89
+
90
+ **Failure mode.** A fork is silently resolved. This would mean the specification hides the fork-resolution residual.
91
+
92
+ **Status.** `checkable`.
93
+
94
+ ---
95
+
96
+ ### I5 — Reputation determinism
97
+
98
+ **Statement.** For any `S`, `reputation_of(S, id)` is computed in exact arithmetic with a fixed iteration count `K` and a canonical ordering, and returns the same vector for every node holding the same `S`.
99
+
100
+ **Check.** Two independent computations on the same `S`; compare vectors bit-for-bit.
101
+
102
+ **Bears on.** P1.
103
+
104
+ **Failure mode.** The reputation vector depends on floating-point arithmetic, iteration count, or ordering. This would contradict P1's condition (c).
105
+
106
+ **Status.** `checkable`.
107
+
108
+ ---
109
+
110
+ ### I6 — Reputation fixed point
111
+
112
+ **Statement.** The reputation iteration `t ← (1 − a) · Cᵀ t + a · p` converges to a fixed point within `K` iterations, with error below a stated tolerance.
113
+
114
+ **Check.** Compute the residual `‖T(t_K) − t_K‖₁`; assert below tolerance.
115
+
116
+ **Bears on.** P1.
117
+
118
+ **Failure mode.** The iteration does not converge within `K`. This would mean the exact-arithmetic claim is not satisfied.
119
+
120
+ **Status.** `checkable`.
121
+
122
+ ---
123
+
124
+ ### I7 — Delegation monotonicity
125
+
126
+ **Statement.** For any valid delegation chain `d₁ → d₂ → … → dₙ`, `S_n ⊆ S_{n-1} ⊆ … ⊆ S₁` and `e_n ≤ e_{n-1} ≤ … ≤ e₁`.
127
+
128
+ **Check.** Construct chains with random scopes and expiries; assert monotonicity.
129
+
130
+ **Bears on.** F4.
131
+
132
+ **Failure mode.** Scope or expiry can widen along the chain. This would contradict Definition 4.
133
+
134
+ **Status.** `checkable`.
135
+
136
+ ---
137
+
138
+ ### I8 — Revocation propagation
139
+
140
+ **Statement.** If a delegation `d_k` in a chain is revoked, then for any action whose causal closure contains the revocation, the action is invalid.
141
+
142
+ **Check.** Construct a chain, revoke a link, assert invalidity.
143
+
144
+ **Bears on.** F4.
145
+
146
+ **Failure mode.** Revocation does not invalidate downstream links. This would contradict Definition 4.
147
+
148
+ **Status.** `checkable`.
149
+
150
+ ---
151
+
152
+ ### I9 — Sybil cluster weight
153
+
154
+ **Statement.** For any identity `id` in a Sybil cluster of size `m`, `cluster_weight_of(S, id) == 1.0 / m`.
155
+
156
+ **Check.** Construct a cluster; assert weight.
157
+
158
+ **Bears on.** F4.
159
+
160
+ **Failure mode.** Cluster weight is not deterministic or not `1/m`. This would mean L4 does not down-weight clusters.
161
+
162
+ **Status.** `checkable`.
163
+
164
+ ---
165
+
166
+ ### I10 — Sybil detection rates reported
167
+
168
+ **Statement.** For any Sybil scenario, both false-positive rate (on honest operators) and false-negative rate (on injected clusters) are reported.
169
+
170
+ **Check.** Assert both fields exist and are numeric in `results.json`.
171
+
172
+ **Bears on.** F4, F5.
173
+
174
+ **Failure mode.** Only one rate is reported. This would allow a detector that flags everything to score perfectly on detection.
175
+
176
+ **Status.** `checkable`.
177
+
178
+ ---
179
+
180
+ ### I11 — Signature separation
181
+
182
+ **Statement.** A signature produced by `FakeSigner` is not accepted by `Ed25519Signer`, and vice versa.
183
+
184
+ **Check.** Sign with one, verify with the other; assert `False`.
185
+
186
+ **Bears on.** P1, F2.
187
+
188
+ **Failure mode.** The two signers are interchangeable. This would mean the cryptographic verification path is not separated from the test path.
189
+
190
+ **Status.** `checkable`.
191
+
192
+ ---
193
+
194
+ ### I12 — Structural vs. cryptographic verification
195
+
196
+ **Statement.** For every record, structural validation and signature verification are checked separately, and both results are reported.
197
+
198
+ **Check.** Assert both fields exist in the test report.
199
+
200
+ **Bears on.** P1, F2.
201
+
202
+ **Failure mode.** The two checks are merged. This would allow a structurally valid but cryptographically invalid record to pass.
203
+
204
+ **Status.** `checkable`.
205
+
206
+ ---
207
+
208
+ ## 3. Failure-condition invariants (F1–F5)
209
+
210
+ ### 3.1 F1 — Non-redundancy
211
+
212
+ **Claim.** At least one requirement R1–R6 is not met by L1–L5 plus a bounded extension of one existing dimension.
213
+
214
+ **How it can be falsified.** A test that expresses all R1–R6 as a bounded extension of exactly one Aether dimension.
215
+
216
+ **Invariant.** If such a test exists and passes, F1 is falsified.
217
+
218
+ **Status.** `deferred` (requires AetherGovern/AetherMesh simulator; see S6).
219
+
220
+ ---
221
+
222
+ ### 3.2 F2 — Orthogonality to verification
223
+
224
+ **Claim.** Some identity decisions cannot be encoded as verified claims.
225
+
226
+ **How it can be falsified.** A test that encodes every identity decision as a verified claim.
227
+
228
+ **Invariant.** If such a test exists and passes, F2 is falsified.
229
+
230
+ **Status.** `deferred` (requires AetherProof simulator).
231
+
232
+ ---
233
+
234
+ ### 3.3 F3 — Boundary with governance
235
+
236
+ **Claim.** Identity is not reducible to governance plus conventional verification.
237
+
238
+ **How it can be falsified.** In S6, the fraction of L5 decisions re-expressible as AetherGovern decisions is high (threshold fixed in Phase 3).
239
+
240
+ **Invariant.** If the fraction exceeds the threshold, F3 is falsified.
241
+
242
+ **Status.** `checkable` (in S6).
243
+
244
+ ---
245
+
246
+ ### 3.4 F4 — Decentralizability
247
+
248
+ **Claim.** Most identity functions are monotone or deterministic functions of monotone state; four residuals require something outside the replicated state.
249
+
250
+ **How it can be falsified.** A test that shows a central authority or strong consistency is required for a function that the specification classifies as agreement-free.
251
+
252
+ **Invariant.** Every function classified as agreement-free must be computable by two nodes holding the same `S` without communication.
253
+
254
+ **Status.** `checkable`.
255
+
256
+ ---
257
+
258
+ ### 3.5 F5 — Observable benefit
259
+
260
+ **Claim.** There exists a scenario class in which the best baseline fails and AetherIdentity succeeds.
261
+
262
+ **How it can be falsified.** For every scenario, some baseline is non-inferior on the primary metrics, or M9 is ever non-zero.
263
+
264
+ **Invariant.** If F5's decision rule (from OSF preregistration) is satisfied, F5 is falsified.
265
+
266
+ **Status.** `deferred` (requires all scenarios S1–S6 and all baselines B1–B5).
267
+
268
+ ---
269
+
270
+ ## 4. Proposition invariants (P1–P2)
271
+
272
+ ### 4.1 P1 — Determinism of local identity issuance
273
+
274
+ **Claim.** Under conditions (a)–(d), admission satisfies A6, and all honest nodes derive the same views once delivery is complete.
275
+
276
+ **Invariant.** Two nodes with the same `S` derive identical `status_of`, `reputation_of`, `cluster_weight_of`, `continuity_chain_of`, `delegation_chain_of`.
277
+
278
+ **Status.** `checkable`.
279
+
280
+ **Failure mode.** A view differs between nodes with the same `S`. This falsifies P1.
281
+
282
+ ---
283
+
284
+ ### 4.2 P2 — Irreducible trust anchor
285
+
286
+ **Claim.** Any identity protocol that admits on evidence leaves an irreducible trust anchor.
287
+
288
+ **How it can be falsified.** A simulated network bootstraps without any externally trusted identity.
289
+
290
+ **Invariant.** If such a bootstrap succeeds, P2 is falsified.
291
+
292
+ **Status.** `checkable` (in S1, with a documented bootstrap procedure).
293
+
294
+ ---
295
+
296
+ ## 5. Open decisions resolved here
297
+
298
+ Phase 1 listed seven open decisions (O1–O7). Phase 2 resolves them as follows:
299
+
300
+ | # | Decision | Resolution |
301
+ |---|---|---|
302
+ | O1 | Fixed iteration count `K` | `K = 100` for exact arithmetic; convergence checked in I6. |
303
+ | O2 | Canonical ordering of identities | Lexicographic by identifier hash. |
304
+ | O3 | Exact arithmetic for reputation | `fractions.Fraction` for the iteration; final vector rounded to 6 decimal places for reporting only. |
305
+ | O4 | Threshold `τ` for Sybil clusters | `τ = 2` for v2.0.0; tested for sensitivity in S5. |
306
+ | O5 | Epoch length for sponsor quotas | `1` logical epoch = `100` admissions; tested for sensitivity in S5. |
307
+ | O6 | Whether recovery is implemented | **No.** Out of scope for v2.0.0; documented as a residual. |
308
+ | O7 | Whether L5 is separable from AetherGovern | Tested in S6; result reported in Phase 6. |
309
+
310
+ These resolutions are **binding** for Phase 4. Changing them requires an amendment in `REPORTS/v2.0.0/phase_log.md`.
311
+
312
+ ---
313
+
314
+ ## 6. Invariants that are not checkable in v2.0.0
315
+
316
+ The following are **not checkable** in v2.0.0, and are reported as such in Phase 5:
317
+
318
+ | Invariant | Reason | Where it would be checkable |
319
+ |---|---|---|
320
+ | Concurrent admission | Out of scope (§2.4 of SPECIFICATION.md) | Future version with concurrency |
321
+ | Causal delivery | Out of scope | Future version with AetherMesh integration |
322
+ | Fork resolution | Out of scope | Future version with an authority model |
323
+ | Recovery after total key loss | Out of scope | Future version with a guardian protocol |
324
+ | Single-instance enforcement | Requires bounded agreement | Future version with consensus |
325
+ | Byzantine behavior | Out of scope | Future version with adversarial model |
326
+
327
+ These are **not** reported as passing. They are reported as **not testable under v2.0.0**.
328
+
329
+ ---
330
+
331
+ ## 7. Invariant coverage
332
+
333
+ | Invariant | Bears on | Phase 3 test | Phase 5 status |
334
+ |---|---|---|---|
335
+ | I1 | P1 | `test_permutation_invariance` | — |
336
+ | I2 | P1 | `test_identifier_determinism` | — |
337
+ | I3 | P1, F4 | `test_chain_validity` | — |
338
+ | I4 | F4 | `test_fork_visibility` | — |
339
+ | I5 | P1 | `test_reputation_determinism` | — |
340
+ | I6 | P1 | `test_fixed_point_convergence` | — |
341
+ | I7 | F4 | `test_delegation_monotonicity` | — |
342
+ | I8 | F4 | `test_revocation_propagation` | — |
343
+ | I9 | F4 | `test_cluster_weight` | — |
344
+ | I10 | F4, F5 | `test_detection_rates` | — |
345
+ | I11 | P1, F2 | `test_signer_separation` | — |
346
+ | I12 | P1, F2 | `test_structural_vs_crypto` | — |
347
+ | F1 | F1 | `test_f1_bounded_extension` | deferred |
348
+ | F2 | F2 | `test_f2_verified_claims` | deferred |
349
+ | F3 | F3 | `test_f3_governance_overlap` | checkable (S6) |
350
+ | F4 | F4 | `test_f4_agreement_free` | — |
351
+ | F5 | F5 | `test_f5_decision_rule` | deferred |
352
+ | P1 | P1 | `test_p1_same_s` | — |
353
+ | P2 | P2 | `test_p2_bootstrap` | checkable (S1) |
354
+
355
+ ---
356
+
357
+ ## 8. Next phase
358
+
359
+ Phase 3 — `TESTS.md`. Each invariant in §7 becomes at least one test with preconditions, postconditions, and expected outcome. The test count is **determined by the invariants**, not assumed in advance.
360
+
361
+ ---
362
+
363
+ ## Appendix A — Invariant summary
364
+
365
+ | ID | Short name | Status |
366
+ |---|---|---|
367
+ | I1 | Permutation invariance | checkable |
368
+ | I2 | Identifier determinism | checkable |
369
+ | I3 | Chain validity | checkable |
370
+ | I4 | Fork visibility | checkable |
371
+ | I5 | Reputation determinism | checkable |
372
+ | I6 | Fixed-point convergence | checkable |
373
+ | I7 | Delegation monotonicity | checkable |
374
+ | I8 | Revocation propagation | checkable |
375
+ | I9 | Cluster weight | checkable |
376
+ | I10 | Detection rates reported | checkable |
377
+ | I11 | Signer separation | checkable |
378
+ | I12 | Structural vs. crypto | checkable |
379
+ | F1 | Non-redundancy | deferred |
380
+ | F2 | Orthogonality | deferred |
381
+ | F3 | Governance overlap | checkable (S6) |
382
+ | F4 | Agreement-free | checkable |
383
+ | F5 | Decision rule | deferred |
384
+ | P1 | Same-S determinism | checkable |
385
+ | P2 | Bootstrap | checkable (S1) |
386
+
387
+ ## Appendix B — Relationship to v1.0.0 paper
388
+
389
+ | Paper section | This document |
390
+ |---|---|
391
+ | §3 Definitions | §2 (I2, I3, I5) |
392
+ | §4 Failure conditions | §3 |
393
+ | §5 Requirements | §7 |
394
+ | §6 Architecture | §2, §4 |
395
+ | §8 Evaluation design | §6, §7 |
396
+ | §10 Open questions | §5 (resolves O1–O7) |
@@ -0,0 +1,29 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Samir Baladi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ Note on scope:
26
+
27
+ The MIT license above applies to code (v2.0.0, src/aetheridentity/).
28
+ The documentation, manuscript, and figures are released under CC-BY-4.0:
29
+ https://creativecommons.org/licenses/by/4.0/legalcode
@@ -0,0 +1,10 @@
1
+ include README.md
2
+ include LICENSE
3
+ include CHANGELOG.md
4
+ include CITATION.cff
5
+ include SPECIFICATION.md
6
+ include INVARIANTS.md
7
+ include TESTS.md
8
+ include ROADMAP_v2.md
9
+ recursive-include docs/figures *.png
10
+ recursive-include paper *.pdf