active-infinity 2.1.0

Active Infinity (Active ∞) — binary, zero-copy, content-addressable, graph-native, unit-aware and secret-safe data language for Active modules and AI agents
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
# Hardening status — active-infinity

Program: `ACTIVE-HARDENING-GUIDE-AND-CHECKLIST.md` v1.0.0, phases H0–H9 plus
Addendum A (research) and Addendum B (fix-and-test loop).

This file is the public status surface required by H0.6 and H9.3. The matrix at
the bottom is generated from `docs/hardening/invariant-map.toml` by
`scripts/hardening_status.py`; editing the matrix by hand is a check failure.

## Baseline

| Field | Value |
|---|---|
| Crate | `active-infinity` 2.1.0 |
| Baseline commit | `9b44242496568e2338c5e98b90e558d4b0999f4e` |
| Baseline tag | `hardening-baseline` (annotated, SSH-signed) |
| Released tag | `v2.1.0` |
| MSRV | 1.85 |
| Wire format | AINF 1.0 |
| Hardening commit | `3c50b6f` |
| Measured | 2026-10-27 |

## H0 findings

### H0.1 Test inventory

120 test functions across the integration binaries plus the library unit tests
and a doctest:

| Suite | Tests | What it proves |
|---|---|---|
| `tests/unit_tests.rs` | 28 | round-trip, every node kind, canonical identity, stream reassembly, redaction (including Debug metadata), validator classes, extension rules, error-code catalog |
| `tests/integration_tests.rs` | 8 | real modules through `active-core`, hash stability, evaluation/why/impact, fail-closed malformed input |
| `tests/property_tests.rs` | 8 | arbitrary bytes, byte flips, canonical fixpoint, redaction fixpoint, generator sanity |
| `tests/conformance_tests.rs` | 6 | 49 committed vectors, declared codes, index agreement, spec agreement |
| `tests/redteam_tests.rs` | 26 | count bombs, overlap, forged graphs, string faults, deep/wide limits, secret export, anti-oracle, stream splicing, projection expansion, plus review regressions |
| `tests/redteam_battery.rs` | 1 (16 cases) | table-driven H2 cases, each naming its checklist id and invariant |
| `tests/protobuf_tests.rs` | 13 | independent reader, determinism, secret refusal, extension refusal, scalar extremes, taint through interpolation |
| `tests/api_surface.rs` | 4 | no public plaintext secret accessor; allowlist is argued and behaviorally tested |
| `tests/doc_gate.rs` | 13 | spec sections, constants, error-code catalog, README guarantees, ADR index, hardening docs, review record, performance matrix, release process, SECURITY evidence levels, status sign-off |
| `tests/perf_budget.rs` | 4 | linear validation, bounded hostile rejection, RSS stability (Linux) |

The machine-readable invariant-to-test mapping is
`docs/hardening/invariant-map.toml`. Every row resolves to a `#[test]`, a fuzz
target, a vector, a gate or a script that the validator parses out of the tree.

Invariants discovered in code comments and tests during the audit (now mapped):

- `ir.rs::validate_structure`: every referenced node exists, table fields and
  bindings are unique, the graph is acyclic, and depth stays within budget
  (mapped to I-10 and I-8).
- `ir.rs::SecretBytes`: no `Display`, `Debug`, `Serialize`, equality or ordering
  path (mapped to I-2 and I-3).
- `decode.rs`: a buffer is never trusted before validation; views borrow only
  validated bytes (I-10).
- `canonical.rs`: a tainted blob carries no payload, and free-text metadata must
  not carry secret copies (I-1, I-3).
- `interop.rs`: a cyclic hand-built module must not hang a query (I-10), and a
  shared DAG must not expand past `PROJECTION_NODE_BUDGET` (I-8).

### H0.2 Fuzz, corpus and coverage

- Eight structure-aware targets cover validate/decode/encode/view, stream
  reassembly, canonical round-trips, section layout, graph cycles, secret
  positions, unit discriminants and projection agreement. Each asserts a semantic
  invariant, not only “did not crash”.
- Conformance corpus: 49 `.ainf` images, 46,673 bytes. Fuzz corpora are
  **committed** under `fuzz/corpus/<target>/` (all targets, 94 seeds total) and
  documented in `docs/hardening/CORPUS.md`.
- Coverage (all features, Windows x86_64): 73.44% regions, 71.66% lines,
  75.00% functions, tracked by `docs/hardening/coverage-baseline.json` and the
  nightly `coverage_gate.py` job.
- CI runs a 2,000-run campaign per target on every push and PR; the nightly
  workflow runs 200,000 runs per target with a matrix.

### H0.3 Documentation inventory

- 10 ADRs (0001–0010) plus index: purpose, active-core relationship, versioning,
  zero-copy, canonical form, secrets, streaming, dependency policy, Protobuf
  projection, no public secret accessor.
- Specs: `layout.md`, `streaming.md`, `security.md`, `projection.md`,
  `performance.md`.
- Hardening set: `STATUS.md`, `REVIEW-SCOPE.md`, `REVIEWS.md`, `RELEASE.md`,
  `COMPATIBILITY.md`, `MIGRATION.md`, `COMPARISON.md`, `LOGGING.md`, `CORPUS.md`,
  `RESEARCH-LOG.md`, `invariant-map.toml`.
- `SECURITY.md`, `CHANGELOG.md`, `docs/release-signing.md`.

### H0.4 Supply chain and release

- Dual license MIT OR Apache-2.0, both license files present.
- MSRV 1.85 verified by the CI `msrv` job.
- `cargo audit`: pass; one allowed unmaintained warning (`unsafe-libyaml`,
  RUSTSEC-2024-0449, via `active-core` → `serde_yaml`, not in the parsing path;
  ADR-0008).
- `cargo deny check`: advisories, bans, licenses, sources all ok.
- CycloneDX SBOM generated from `cargo metadata --locked` by `scripts/sbom.py`
  and attached to CI runs.
- Tags are SSH-signed with the key in `release-signing.allowed_signers`;
  `v2.0.7` verifies with `scripts/verify_tag.sh`.
- crates.io 2.1.0 is published and not yanked.
- Tags are identical on `Active-Official` and `RatioArtificiosa` (same tag
  object, same commit).

### H0.5 Baseline tag

`hardening-baseline` is an annotated, SSH-signed tag at the baseline commit.

### H0.6 This file

The matrix below is validated in CI by `scripts/hardening_status.py --check`.
A missing test, a stale row, or a critical invariant without a negative-control
plan fails the check.

## Red-team battery (H2)

`tests/redteam_battery.rs` is a table of cases. Each case names its checklist
id, the invariant it defends, the threat in one sentence, and a function that
drives the shipped entry points. The suite prints every case and fails on the
first case whose expectation is not met.

| Case | Invariant | Attack |
|---|---|---|
| H2.1 | I-8/I-10 | count bomb in every section |
| H2.2 | I-10 | overlapping and out-of-bounds sections |
| H2.3 | I-8 | deep nesting against the stack |
| H2.4 | I-8 | shared-DAG expansion (billion laughs) |
| H2.5 | I-8 | huge sparse claims with tiny buffers |
| H2.6 | I-10 | invalid UTF-8, overlong encodings, surrogates |
| H2.7 | I-8 | slowloris and oversize stream declarations |
| H2.14 | I-3 | secret in every legal position, all export paths |
| H2.15 | I-3 | secret forced into an error message |
| H2.16 | I-2 | equality and ordering oracle |
| H2.17 | I-3 | smuggling through extensions and metadata |
| H2.24 | I-9 | single-bit mutation of non-hash payload |
| H2.27 | I-9 | projection hash and redaction agreement |
| H2.33 | I-11 | debug-only unlock or ambient authority |
| H2.34 | I-10 | committed corpus replayed as hostile input |
| H2.36 | I-8 | allocation ceiling for untrusted counts |

## Negative controls

`scripts/negative_controls.py` creates a throwaway copy of the working tree,
proves the mapped check passes unmutated, applies one precise source mutation,
and requires the check to fail with that test in the failure list. A compile
error or a different test failing is rejected as a false positive. The copy is
removed afterwards; the working tree is never modified.

| Control | Invariant | Mutation | Check that must fail |
|---|---|---|---|
| `I-3-redaction` | I-3 | canonical redactor returns its input | `the_allowlisted_label_helper_never_returns_secret_material` |
| `I-3-debug` | I-3 | canonical redactor returns its input | `debug_redacts_secret_copies_in_metadata` |
| `I-8-depth` | I-8 | depth ceiling never fires | `threat_deep_and_wide_modules_hit_limits_not_the_stack` |
| `I-8-projection` | I-8 | projection budget removed | `projection_budget_refuses_an_exponential_dag` |
| `I-9-canonical` | I-9 | canonical proof stops comparing the re-encode | `canonical_proof_is_unconditional` |
| `I-10-trailing` | I-10 | both trailing-byte guards removed | `invalid_vectors_are_rejected_with_their_declared_code` |

Run: `python scripts/negative_controls.py --check`. CI job `negative-controls`.

## Gate results

| Gate | Result | Evidence |
|---|---|---|
| `cargo fmt --all -- --check` | pass | local run 2026-10-27 |
| `cargo clippy --locked --all-targets --all-features -- -D warnings` | pass | local run 2026-10-27 |
| `cargo clippy --locked --all-targets --no-default-features -- -D warnings` | pass | local run 2026-10-27 |
| `cargo test --locked --all-features` | pass (120 tests) | local run + CI |
| `cargo test --locked --no-default-features` | pass | local run + CI |
| `cargo doc` with `RUSTDOCFLAGS=-D warnings` | pass | local run 2026-10-27 |
| `cargo package --locked` | pass | local run 2026-10-27 |
| `cargo audit` / `cargo deny check` | pass (1 allowed warning) | local run + CI `supply-chain` |
| API-surface gate | pass | CI job `api-surface` |
| Fuzz campaigns (8 targets) | pass | CI 2k/target; nightly 200k/target |
| Negative controls (6) | pass | local run + CI `negative-controls` |
| 32-bit i686 lane | pass | `scripts/check_32bit.sh`, Docker |
| Benchmark matrix | checked in | `benches/codec.rs`, `docs/spec/performance.md` |
| Perf budgets | pass | `cargo test --test perf_budget` |

## Phase H3–H9 evidence

| Phase | State | Evidence |
|---|---|---|
| H3 review | complete | `REVIEW-SCOPE.md` (scope, method, severity, triggers, cadence), `REVIEWS.md` (rounds, triage, fixes with regression tests), `doc_gate` enforces both |
| H4 performance | complete | matrix in `docs/spec/performance.md`, `benches/codec.rs`, `tests/perf_budget.rs`, CI compiles the bench, 32-bit lane |
| H5 ecosystem | complete | runnable `round_trip`, `streaming`, `agent_queries`; `MIGRATION.md`, `COMPARISON.md`, stable error catalog, `LOGGING.md`, misuse notes |
| H6 supply chain | complete | SBOM script + CI job, `cargo audit`/`deny` CI, signed-tag verifier, dual-publish + yank tabletop in `RELEASE.md`, evidence levels in `SECURITY.md` |
| H7 observability | n/a | the codec emits no events, metrics or logs; RPC owns telemetry |
| H8 compatibility | complete | `COMPATIBILITY.md`, 49 frozen vectors, unknown-flag and extension rules, deprecation window |
| H9 continuous | complete | nightly fuzz matrix, coverage floor, review cadence, this public status page |

## Verification at `d4b3e41` (2026-10-27)

Fresh clone of `Active-Official/active-infinity`, checked out at
`d4b3e41f6f68112b6555e47b43502832f77e7fb0`, then:

| Step | Command | Result |
|---|---|---|
| Tests (all features) | `cargo test --locked --all-features` | 120 pass |
| Tests (no default) | `cargo test --locked --no-default-features` | pass |
| Lint (both feature sets) | `cargo clippy --locked --all-targets ... -- -D warnings` | pass |
| Docs | `RUSTDOCFLAGS=-D warnings cargo doc --locked --no-deps --all-features` | pass |
| API surface | rustdoc JSON + `python scripts/api_surface.py` | clean (1,980 items / 550 functions) |
| Fuzz | 8 targets, 2,000 runs each, Docker Linux | no crash |
| Red-team | `cargo test --test redteam_battery --test redteam_tests` | 16 + 26 pass |
| Negative controls | `python scripts/negative_controls.py --check` | 6/6 fail as required |
| Performance budgets | `cargo test --test perf_budget` | 4 pass |
| CI | run [40648495363]https://github.com/Active-Official/active-infinity/actions/runs/40648495363 | all 9 jobs success |
| Review | round 26 | NO NEW FINDINGS |

The verification used the same commands CI runs; the committed tests are the
durable evidence, and the CI run is the remote oracle.

## Residual risks

- **Secret length is visible.** `SecretBytes::len` is public and is used by
  budgets. Content is not compared and never exported; length is not hidden.
- **Name-scoped API gate.** The semantic gate refuses public functions whose
  names or resolved return types look secret-bearing; a future public function
  with an innocent name that returns secret bytes through a new type would not
  be caught by name alone. ADR-0010 records the limit.
- **Corpus is a seed set, not a proof.** The committed corpora and nightly
  campaigns explore the grammar; they cannot prove absence of a bug.
- **No independent encoder.** The canonical fixpoint is checked against the same
  implementation, not a second one written from the spec (H1.23 documented n/a).
  The Protobuf reader is independent of the writer and covers the projection
  path.
- **`unsafe-libyaml` advisory.** Accepted, unreachable from the parsing path.
- **Dependency resolution at publish time.** The library allows semver-compatible
  patch updates of `blake3` and `thiserror`; the CI lockfile is the tested graph.
- **Coverage of `view.rs`.** The public zero-copy surface is under-tested at the
  unit level (12% region coverage at baseline); the integration and fuzz paths
  exercise it, but a dedicated view test matrix is future work.
- **Timing.** Validation is data-independent in control flow but not
  constant-time; a local attacker who can measure cache behaviour is outside the
  threat model.

### Sustained-assurance window (H9.5)

The maturity claim is point-in-time: every gate above is green on the final
commit, and the continuous program is configured. The sustained window is
**seven consecutive green nightly runs** (fuzz matrix plus coverage floor) with
no new review finding; the nightly workflow is the clock. Until that window
closes, releases carry "hardening complete, assurance window open" rather than
an unqualified maturity claim.

## Maturity sign-off

```text
Hardening baseline commit/tag: 9b44242496568e2338c5e98b90e558d4b0999f4e / hardening-baseline
H0 inventory complete: yes
H1 fuzz continuous: yes
H2 red-team green: yes
H3 independent review: yes (REVIEWS.md; Muse-routed Copilot CLI)
H4 performance gated: yes (docs/spec/performance.md, tests/perf_budget.rs)
H5 ecosystem docs: yes (examples/, MIGRATION.md, COMPARISON.md, LOGGING.md)
H6 supply chain: yes (SBOM, audit, deny, signed tags, dual publish)
H7 observability safe: n/a (no runtime telemetry in the codec)
H8 compatibility: yes (COMPATIBILITY.md, frozen AINF 1.0 vectors)
H9 continuous assurance active: yes (nightly fuzz + coverage + review cadence)
Residual risks documented: yes
Sign-off: 2026-10-27, Grok (AI coding and security agent)
```

<!-- BEGIN GENERATED: hardening matrix (scripts/hardening_status.py) -->

**Repository:** `active-infinity` **version:** `2.1.0` **baseline commit:** `9b44242496568e2338c5e98b90e558d4b0999f4e` **baseline tag:** `hardening-baseline` **measured:** 2026-10-27

Invariants: 6 covered, 0 partial, 0 gap, 6 not applicable. Checklist items: 103 done, 0 partial, 0 gap, 57 not applicable. Criticals with an implemented negative control: 4/4. Distinct automated checks resolved: 121.

| Invariant | Meaning | Status | Checks | Negative control |
|---|---|---|---|---|
| **I-1** | Structural secret taint | `covered` | 10 | - |
| **I-2** | Anti-oracle equality | `covered` | 2 | - |
| **I-3** | Secret non-leakage | `covered` | 18 | implemented |
| **I-4** | Capability unforgeability | `n/a` | 0 | - |
| **I-5** | Attenuation only narrows | `n/a` | 0 | - |
| **I-6** | Revocation at dispatch | `n/a` | 0 | - |
| **I-7** | Drop notification | `n/a` | 0 | - |
| **I-8** | Hard budgets | `covered` | 12 | implemented |
| **I-9** | Deterministic canonicalization | `covered` | 11 | implemented |
| **I-10** | Fail-closed validation | `covered` | 15 | implemented |
| **I-11** | No ambient authority | `n/a` | 0 | - |
| **I-12** | Domain operations under capability and budget | `n/a` | 0 | - |

| Item | Checklist item | Status | Evidence |
|---|---|---|---|
| **H0.1** | Inventory all existing tests as an invariant-to-test matrix | `done` | `script:scripts/hardening_status.py` |
| **H0.2** | Inventory fuzz targets, corpus sizes and coverage snapshots | `done` | `doc:docs/hardening/CORPUS.md`, `fuzz:fuzz_decode_infinity` |
| **H0.3** | Inventory ADRs, SECURITY, REVIEWS, security and performance specs | `done` | `doc:docs/hardening/STATUS.md` |
| **H0.4** | Confirm license, MSRV, advisories, signing and publish status | `done` | `gate:audit`, `gate:deny` |
| **H0.5** | Tag a hardening baseline | `done` | `gate:baseline-tag` |
| **H0.6** | Create docs/hardening/STATUS.md | `done` | `script:scripts/hardening_status.py` |
| **H1.1** | fuzz_decode_infinity: full validate and view path | `done` | `fuzz:fuzz_decode_infinity`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H1.2** | fuzz_stream_reassembly: hostile frame sequences | `done` | `fuzz:fuzz_stream_reassembly` |
| **H1.3** | fuzz_canonical_roundtrip: mutate/encode/decode hash stability | `done` | `fuzz:fuzz_canonical_roundtrip` |
| **H1.4** | fuzz_layout_sections: overlap, offsets, sizes, duplicate tags | `done` | `fuzz:fuzz_layout_sections` |
| **H1.5** | fuzz_graph_cycles: every cycle shape surfaces as a cycle error | `done` | `fuzz:fuzz_graph_cycles` |
| **H1.6** | fuzz_secret_positions: no leak from any export path | `done` | `fuzz:fuzz_secret_positions` |
| **H1.7** | fuzz_unit_discriminants: unknown and boundary units | `done` | `fuzz:fuzz_unit_discriminants` |
| **H1.8** | fuzz_projection_agreement: JSON vs Protobuf redaction and hash | `done` | `fuzz:fuzz_projection_agreement` |
| **H1.9** | fuzz_arp1_frame | `n/a` | - |
| **H1.10** | fuzz_capability_lifecycle | `n/a` | - |
| **H1.11** | fuzz_promise_graph | `n/a` | - |
| **H1.12** | fuzz_budget_matrix | `n/a` | - |
| **H1.13** | fuzz_tool_mcp | `n/a` | - |
| **H1.14** | fuzz_tool_http | `n/a` | - |
| **H1.15** | fuzz_tool_process | `n/a` | - |
| **H1.16** | fuzz_channel_cap_transfer | `n/a` | - |
| **H1.17** | fuzz_transport_framing | `n/a` | - |
| **H1.18** | Seed corpus = vectors, examples, almost-valid images; document classes | `done` | `doc:docs/hardening/CORPUS.md` |
| **H1.19** | Every fixed bug adds a minimized seed | `done` | `doc:docs/hardening/CORPUS.md` |
| **H1.20** | CI fuzz budget on PRs, longer on main/nightly, fail on regression | `done` | `script:scripts/coverage_gate.py`, `script:.github/workflows/nightly.yml` |
| **H1.21** | Optional public sanitized corpus | `done` | `doc:docs/hardening/CORPUS.md`, `doc:fuzz/corpus/fuzz_decode_infinity` |
| **H1.22** | 32-bit target build and test lane (research: CVE-2026-116734, CVE-2021-32629) | `done` | `script:scripts/check_32bit.sh` |
| **H1.23** | Differential canonicalization oracle from an independent encoder | `n/a` | - |
| **H1.24** | fuzz_tool_policy | `n/a` | - |
| **H2.0** | Scripted negative controls prove each security-critical check fails on a broken build | `done` | `gate:negative-controls` |
| **H2.1** | Integer overflow and underflow in length and offset arithmetic | `done` | `test:tests/redteam_tests.rs::threat_count_bombs_in_every_section`, `test:tests/redteam_tests.rs::threat_offset_and_overlap_attacks`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.2** | Overlapping and out-of-bounds sections | `done` | `test:tests/redteam_tests.rs::threat_offset_and_overlap_attacks`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.3** | Deep nesting aimed at stack overflow | `done` | `test:tests/redteam_tests.rs::threat_deep_and_wide_modules_hit_limits_not_the_stack`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.4** | Billion-laughs expansion via references or repeated subgraphs | `done` | `test:tests/redteam_battery.rs::redteam_battery_is_green`, `test:tests/redteam_tests.rs::projection_budget_is_shared_across_every_binding`, `test:tests/perf_budget.rs::projection_budget_fails_fast_on_a_shared_dag` |
| **H2.5** | Huge sparse claims with tiny actual buffers | `done` | `test:tests/redteam_tests.rs::threat_size_limits_are_enforced_without_allocation`, `test:tests/redteam_tests.rs::threat_count_bombs_in_every_section`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.6** | Invalid UTF-8, overlong encodings, surrogate nonsense | `done` | `test:tests/redteam_tests.rs::threat_string_heap_faults`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.7** | Streaming slowloris and oversize total declarations | `done` | `test:tests/redteam_tests.rs::review_stream_bounds_reject_unbounded_batches`, `test:tests/redteam_tests.rs::review_stream_begin_uses_the_caller_limits`, `test:tests/redteam_tests.rs::review_delta_fragments_honor_the_stream_limits`, `test:tests/redteam_battery.rs::redteam_battery_is_green`, `test:tests/perf_budget.rs::stream_reassembly_rejects_truncation_in_bounded_time` |
| **H2.8** | Forge capability IDs | `n/a` | - |
| **H2.9** | Attenuate then widen | `n/a` | - |
| **H2.10** | Use after revoke or drop; borrowed channel lifetime | `n/a` | - |
| **H2.11** | Confused deputy provider | `n/a` | - |
| **H2.12** | Tool adapter confused deputy | `n/a` | - |
| **H2.13** | Revocation racing with dispatch | `n/a` | - |
| **H2.14** | Secrets in every legal position; scan all export paths | `done` | `test:tests/redteam_tests.rs::threat_secret_never_reaches_any_export_surface`, `test:tests/protobuf_tests.rs::taint_follows_references_in_interpolations`, `test:tests/redteam_battery.rs::redteam_battery_is_green`, `test:tests/redteam_tests.rs::every_subvalue_debug_path_redacts_text` |
| **H2.15** | Force secrets into error messages | `done` | `test:tests/redteam_tests.rs::threat_secret_never_reaches_any_export_surface`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.16** | Equality and ordering oracle attempts | `done` | `test:tests/redteam_tests.rs::threat_anti_oracle_equality`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.17** | Smuggle secrets via extensions, annotations, provenance, projections | `done` | `test:tests/redteam_tests.rs::review_projection_redacts_secret_copies_in_keys_and_metadata`, `test:tests/protobuf_tests.rs::projection_refuses_an_extension_that_copies_a_secret`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.18** | Logging and metrics carry no secrets or raw capability bits | `n/a` | - |
| **H2.19** | Queue storms under a low call budget | `n/a` | - |
| **H2.20** | Nested value byte bombs under a low byte budget | `done` | `test:tests/redteam_tests.rs::review_limits_cover_total_bytes_and_string_heap`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.21** | Many lanes, channels and promises to finite limits | `n/a` | - |
| **H2.22** | Enormous tool payloads and tools that never return | `n/a` | - |
| **H2.23** | Zero or near-zero ceilings refused where policy needs finite limits | `n/a` | - |
| **H2.24** | Single-bit mutation fails validation or changes the hash | `done` | `test:tests/property_tests.rs::byte_flips_are_always_rejected`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.25** | Large-corpus hash collision search | `n/a` | - |
| **H2.26** | Pipelined vs sequential preserves the authorization side-effect set | `n/a` | - |
| **H2.27** | Projection hash and redaction agreement under adversarial valid modules | `done` | `test:tests/protobuf_tests.rs::projection_is_canonical_for_logically_equal_modules`, `test:tests/protobuf_tests.rs::projection_never_contains_secret_material`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.28** | Overlapping write capabilities detected or prevented | `n/a` | - |
| **H2.29** | Audit-only capability cannot write | `n/a` | - |
| **H2.30** | Stale capability after ownership change refused | `n/a` | - |
| **H2.31** | Another worker's secret-bearing subgraph denied or fully redacted | `n/a` | - |
| **H2.32** | Public errors do not enable secret or capability oracles | `done` | `test:tests/unit_tests.rs::error_codes_are_stable_and_documented`, `test:tests/redteam_tests.rs::threat_anti_oracle_equality`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.33** | No debug unlock or test ambient authority in release builds | `done` | `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.34** | Fuzz corpus treated as permanently hostile input | `done` | `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.35** | Docs and examples do not teach insecure patterns without warnings | `done` | `test:tests/doc_gate.rs::hardening_documents_exist_and_state_their_rules`, `doc:SECURITY.md` |
| **H2.36** | Allocation ceiling for untrusted counts, not only an error code | `done` | `test:tests/redteam_tests.rs::threat_size_limits_are_enforced_without_allocation`, `test:tests/redteam_tests.rs::threat_count_bombs_in_every_section`, `test:tests/redteam_battery.rs::redteam_battery_is_green`, `test:tests/redteam_tests.rs::header_try_write_refuses_a_short_buffer_without_panicking` |
| **H2.37** | Span arithmetic checked on 32-bit and 64-bit widths | `done` | `script:scripts/check_32bit.sh`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.38** | String and blob lengths that end exactly at EOF | `done` | `fuzz:fuzz_layout_sections`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.39** | Extension skip and duplicate-tag arithmetic | `done` | `test:tests/unit_tests.rs::duplicate_extension_tags_are_refused`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **H2.40** | Abort-free lane under panic=abort | `done` | `fuzz:fuzz_decode_infinity`, `fuzz:fuzz_secret_positions` |
| **H2.41** | Validation time is linear in image size | `done` | `test:tests/perf_budget.rs::validation_scales_linearly` |
| **H2.42** | Cross-kernel and cross-connection capability transplant | `n/a` | - |
| **H2.43** | Event and log redaction oracle | `n/a` | - |
| **H2.44** | Tool timeout and payload ceiling | `n/a` | - |
| **H2.45** | Shared-memory frame TOCTOU | `n/a` | - |
| **H2.46** | URL and path allow-list canonicalization bypass | `n/a` | - |
| **H2.47** | Promise settlement count under concurrent cancel and resolve | `n/a` | - |
| **H3.1** | Freeze a review scope document | `done` | `doc:docs/hardening/REVIEW-SCOPE.md`, `test:tests/doc_gate.rs::review_program_is_documented_and_has_a_record` |
| **H3.2** | Independent review with recorded findings | `done` | `test:tests/doc_gate.rs::review_program_is_documented_and_has_a_record`, `doc:REVIEWS.md` |
| **H3.3** | Triage findings; critical and high fixed before maturity | `done` | `test:tests/doc_gate.rs::review_program_is_documented_and_has_a_record`, `doc:REVIEWS.md` |
| **H3.4** | Re-test after fixes with evidence | `done` | `test:tests/doc_gate.rs::review_program_is_documented_and_has_a_record`, `doc:REVIEWS.md` |
| **H3.5** | Schedule delta reviews after model or wire changes | `done` | `test:tests/doc_gate.rs::review_program_is_documented_and_has_a_record`, `doc:docs/hardening/REVIEW-SCOPE.md` |
| **H3.6** | Annual revisit in maintenance | `done` | `test:tests/doc_gate.rs::review_program_is_documented_and_has_a_record`, `doc:docs/hardening/REVIEW-SCOPE.md` |
| **H4.1** | Checked-in benchmark matrix | `done` | `script:benches/codec.rs`, `test:tests/doc_gate.rs::performance_baselines_are_checked_in` |
| **H4.2** | Throughput and p50/p99 for encode, decode, validate, hash, projection | `done` | `doc:docs/spec/performance.md`, `test:tests/doc_gate.rs::performance_baselines_are_checked_in` |
| **H4.3** | RPC call latency, pipelining, concurrency | `n/a` | - |
| **H4.4** | Sustained load tests with RSS, allocations, FDs, threads | `done` | `test:tests/perf_budget.rs::repeated_validation_does_not_grow_rss`, `gate:perf` |
| **H4.5** | CI regression gates on the benchmark matrix | `done` | `gate:perf`, `gate:bench`, `test:tests/perf_budget.rs::validation_scales_linearly` |
| **H4.6** | Publish docs/performance.md with methodology and numbers | `done` | `doc:docs/spec/performance.md`, `test:tests/doc_gate.rs::performance_baselines_are_checked_in` |
| **H4.7** | Explicit DoS scenarios prove budgets cap CPU and memory | `done` | `test:tests/perf_budget.rs::hostile_rejection_is_bounded`, `test:tests/redteam_tests.rs::threat_size_limits_are_enforced_without_allocation`, `test:tests/perf_budget.rs::projection_budget_fails_fast_on_a_shared_dag`, `test:tests/perf_budget.rs::stream_reassembly_rejects_truncation_in_bounded_time` |
| **H4.8** | RSS stability over repeated validation cycles | `done` | `script:scripts/check_32bit.sh`, `test:tests/perf_budget.rs::repeated_validation_does_not_grow_rss` |
| **H4.9** | FD and thread stability under connection churn | `n/a` | - |
| **H5.1** | Runnable examples for round-trip, queries, streaming | `done` | `doc:examples/round_trip.rs`, `doc:examples/streaming.rs`, `doc:examples/agent_queries.rs` |
| **H5.2** | Migration from JSON/YAML guide | `done` | `doc:docs/hardening/MIGRATION.md`, `test:tests/doc_gate.rs::migration_comparison_and_compatibility_are_documented` |
| **H5.3** | Why not only Cap'n Proto, FlatBuffers or gRPC comparison | `done` | `doc:docs/hardening/COMPARISON.md`, `test:tests/doc_gate.rs::migration_comparison_and_compatibility_are_documented` |
| **H5.4** | Stable machine-readable error code catalog | `done` | `test:tests/conformance_tests.rs::every_declared_failure_code_has_a_vector`, `test:tests/unit_tests.rs::error_codes_are_stable_and_documented`, `test:tests/doc_gate.rs::every_error_code_is_documented` |
| **H5.5** | Explicit what-is-safe-to-log rules | `done` | `doc:docs/hardening/LOGGING.md`, `test:tests/doc_gate.rs::hardening_documents_exist_and_state_their_rules` |
| **H5.6** | Misuse documentation | `done` | `doc:docs/hardening/COMPARISON.md`, `test:tests/doc_gate.rs::migration_comparison_and_compatibility_are_documented` |
| **H5.7** | Optional active-habitat demo | `n/a` | - |
| **H6.1** | SBOM on every release | `done` | `script:scripts/sbom.py`, `gate:sbom` |
| **H6.2** | cargo deny and advisory audit strict in CI | `done` | `gate:audit`, `gate:deny` |
| **H6.3** | Reproducible builds where feasible, limits documented | `done` | `doc:docs/hardening/RELEASE.md`, `test:tests/doc_gate.rs::release_and_supply_chain_process_is_operational` |
| **H6.4** | Signed tags with allowed_signers enforced | `done` | `script:scripts/verify_tag.sh`, `test:tests/doc_gate.rs::release_and_supply_chain_process_is_operational` |
| **H6.5** | Dual publish checklist mechanical and reviewed | `done` | `doc:docs/hardening/RELEASE.md`, `test:tests/doc_gate.rs::release_and_supply_chain_process_is_operational` |
| **H6.6** | Yank and advisory process exercised in a dry run | `done` | `doc:docs/hardening/RELEASE.md`, `test:tests/doc_gate.rs::release_and_supply_chain_process_is_operational` |
| **H6.7** | Property tests for attenuation monotonicity | `n/a` | - |
| **H6.8** | Bounded or exhaustive capability lifecycle model | `n/a` | - |
| **H6.9** | Public statement of tested vs fuzzed vs reviewed vs proven | `done` | `doc:SECURITY.md`, `test:tests/doc_gate.rs::security_policy_states_the_evidence_levels` |
| **H6.10** | Exhaustive small-state capability lifecycle model | `n/a` | - |
| **H7.1** | Structured events for call, settle, revoke, budget, refusal | `n/a` | - |
| **H7.2** | Default logs carry no secrets or raw capability bits | `n/a` | - |
| **H7.3** | Metrics without sensitive payloads | `n/a` | - |
| **H7.4** | Tests that force sensitive data into events fail CI | `n/a` | - |
| **H8.1** | Written wire and format compatibility policy | `done` | `doc:docs/hardening/COMPATIBILITY.md`, `test:tests/doc_gate.rs::migration_comparison_and_compatibility_are_documented` |
| **H8.2** | Old Infinity images still validate | `done` | `test:tests/conformance_tests.rs::valid_vectors_validate_and_reencode_identically`, `doc:docs/hardening/COMPATIBILITY.md` |
| **H8.3** | Unknown flags and extensions behavior specified and tested | `done` | `test:tests/unit_tests.rs::duplicate_extension_tags_are_refused`, `test:tests/unit_tests.rs::extension_blocks_round_trip_and_are_order_independent`, `test:tests/doc_gate.rs::migration_comparison_and_compatibility_are_documented` |
| **H8.4** | Versioned public conformance suite | `done` | `test:tests/conformance_tests.rs::the_index_and_the_vector_files_agree`, `doc:docs/hardening/COMPATIBILITY.md` |
| **H8.5** | Deprecation windows for shipped behavior | `done` | `doc:docs/hardening/COMPATIBILITY.md`, `test:tests/doc_gate.rs::migration_comparison_and_compatibility_are_documented` |
| **H9.1** | Nightly continuous fuzz with growing corpus | `done` | `gate:fuzz`, `doc:.github/workflows/nightly.yml` |
| **H9.2** | Periodic independent review cadence on the calendar | `done` | `doc:docs/hardening/REVIEW-SCOPE.md`, `test:tests/doc_gate.rs::review_program_is_documented_and_has_a_record` |
| **H9.3** | Public status section: performance, security posture, residual risks | `done` | `doc:docs/hardening/STATUS.md`, `test:tests/doc_gate.rs::status_publishes_residual_risks_and_the_sign_off_block` |
| **H9.4** | Hardening checklist reviewed every release; new classes added | `done` | `doc:docs/hardening/STATUS.md`, `test:tests/doc_gate.rs::status_publishes_residual_risks_and_the_sign_off_block` |
| **H9.5** | Maturity claim only after H0-H8 complete and H9 sustained | `done` | `doc:docs/hardening/STATUS.md`, `test:tests/doc_gate.rs::status_publishes_residual_risks_and_the_sign_off_block` |
| **R-0** | Research sprint before each phase | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **R-1** | Research sibling components after every critical fix | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **R-2** | Full multi-domain pass once per release cycle | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **R-3** | Log every finding in RESEARCH-LOG.md | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **R-4** | Every finding becomes a test, item, ADR or n/a note | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **D1.1** | At least 15 historical parser bugs with identifiers | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **D1.2** | Map each historical bug to layout, validate, stream or wire decode | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **D1.3** | Add a test or fuzz oracle per mapped class | `done` | `fuzz:fuzz_decode_infinity`, `fuzz:fuzz_layout_sections`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **D1.4** | Differential parsing and whether a second checker is warranted | `n/a` | - |
| **D2.1** | At least 10 capability or RPC authz failure patterns | `n/a` | - |
| **D2.2** | Map authz patterns to kernel, cap, channel, tool, transport | `n/a` | - |
| **D2.3** | Monotonicity, revoke-at-dispatch and confused-deputy tests | `n/a` | - |
| **D2.4** | Rights amplification and caretaker patterns | `n/a` | - |
| **D3.1** | Enumerate every export path | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **D3.2** | Attempt redaction bypass techniques in tests | `done` | `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **D3.3** | Anti-oracle equality in debug and optimized builds | `done` | `test:tests/property_tests.rs::redaction_is_a_fixpoint_for_arbitrary_secrets_and_texts` |
| **D3.4** | Stable error codes do not branch on secret-dependent data | `done` | `test:tests/redteam_tests.rs::threat_anti_oracle_equality`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **D4.1** | Compare fuzz targets to structure-aware state of the art | `done` | `doc:docs/hardening/CORPUS.md` |
| **D4.2** | Semantic oracles, not only crash oracles | `done` | `fuzz:fuzz_secret_positions`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **D4.3** | Directed seeds for cold paths | `done` | `doc:docs/hardening/CORPUS.md` |
| **D4.4** | Corpus growth and minimize-and-commit policy | `done` | `doc:docs/hardening/CORPUS.md` |
| **D5.1** | Map classic DoS classes to budget dimensions | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **D5.2** | Prove hostile input hits budget before host OOM | `done` | `test:tests/redteam_tests.rs::threat_size_limits_are_enforced_without_allocation`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |
| **D5.3** | Compression bombs at transport edges | `n/a` | - |
| **D6.1** | Escape catalog for HTTP, process and MCP tools | `n/a` | - |
| **D6.2** | Automate escape attempts as red-team tests | `n/a` | - |
| **D6.3** | Runtime sandbox escape claims | `n/a` | - |
| **D7.1** | Audit dependencies for unnecessary privilege | `done` | `doc:docs/hardening/RESEARCH-LOG.md` |
| **D7.2** | cargo deny and advisories gate merges | `done` | `gate:audit`, `gate:deny` |
| **D7.3** | Document residual non-reproducibility sources | `done` | `doc:docs/hardening/RELEASE.md` |
| **D8.1** | Capability patterns for writer, auditor, orchestrator | `n/a` | - |
| **D8.2** | Overlapping, stale and exfiltration grants | `n/a` | - |
| **D8.3** | Import applicable multi-agent security tests | `n/a` | - |
| **D9.1** | Secret- or capability-dependent timing in hot paths | `n/a` | - |
| **D9.2** | Docs do not reveal privileged test-only behavior | `done` | `test:tests/doc_gate.rs::hardening_documents_exist_and_state_their_rules` |
| **D9.3** | Standing question: what would an infinite-input agent try next | `done` | `doc:docs/hardening/RESEARCH-LOG.md`, `test:tests/redteam_battery.rs::redteam_battery_is_green` |

### Check index

<details><summary><strong>I-1</strong> (10 checks)</summary>

- `test:tests/unit_tests.rs::every_node_kind_round_trips`
- `test:tests/unit_tests.rs::secrets_never_leak_through_debug_or_exports`
- `test:tests/unit_tests.rs::debug_redacts_secret_copies_in_metadata`
- `script:scripts/negative_controls.py#I-3-debug`
- `test:tests/protobuf_tests.rs::taint_follows_references_in_interpolations`
- `test:tests/property_tests.rs::redaction_is_a_fixpoint_for_arbitrary_secrets_and_texts`
- `test:tests/redteam_tests.rs::threat_secret_never_reaches_any_export_surface`
- `test:tests/redteam_tests.rs::review_projection_redacts_secret_copies_in_keys_and_metadata`
- `test:tests/redteam_tests.rs::review_text_projections_redact_secret_copies`
- `fuzz:fuzz_decode_infinity` — fuzz/fuzz_targets/fuzz_decode_infinity.rs

</details>

<details><summary><strong>I-2</strong> (2 checks)</summary>

- `test:tests/unit_tests.rs::secret_equality_is_always_false`
- `test:tests/redteam_tests.rs::threat_anti_oracle_equality`

</details>

<details><summary><strong>I-3</strong> (18 checks)</summary>

- `test:tests/api_surface.rs::the_crate_exposes_no_plaintext_secret_accessor`
- `test:tests/api_surface.rs::the_redaction_marker_is_the_only_public_secret_constant`
- `test:tests/api_surface.rs::the_allowlist_entries_still_exist_and_are_argued`
- `test:tests/api_surface.rs::the_allowlisted_label_helper_never_returns_secret_material`
- `gate:api-surface` — cargo +nightly rustdoc --locked --lib --all-features -- -Zunstable-options --output-format json && python scripts/api_surface.py target/doc/active_infinity.json
- `test:tests/unit_tests.rs::secrets_never_leak_through_debug_or_exports`
- `test:tests/unit_tests.rs::debug_redacts_secret_copies_in_metadata`
- `script:scripts/negative_controls.py#I-3-debug`
- `test:tests/unit_tests.rs::provenance_keys_do_not_carry_secret_copies`
- `test:tests/unit_tests.rs::value_paths_do_not_carry_secret_copies`
- `test:tests/protobuf_tests.rs::projection_never_contains_secret_material`
- `test:tests/protobuf_tests.rs::short_secrets_are_redacted_in_metadata_text`
- `test:tests/protobuf_tests.rs::projection_refuses_an_extension_that_copies_a_secret`
- `test:tests/protobuf_tests.rs::projection_refuses_an_extension_that_copies_a_non_utf8_secret`
- `test:tests/redteam_tests.rs::threat_secret_never_reaches_any_export_surface`
- `test:tests/redteam_tests.rs::review_projection_redacts_secret_copies_in_keys_and_metadata`
- `test:tests/redteam_tests.rs::review_text_projections_redact_secret_copies`
- `fuzz:fuzz_decode_infinity` — fuzz/fuzz_targets/fuzz_decode_infinity.rs

Negative control (implemented): Make canonical::redact_text return its input unchanged (identity) and run the allowlist, projection and Debug tests → expected: the_allowlisted_label_helper_never_returns_secret_material and projection_never_contains_secret_material must fail with the leaked literal named in the assertion

</details>

<details><summary><strong>I-8</strong> (12 checks)</summary>

- `test:tests/redteam_tests.rs::threat_count_bombs_in_every_section`
- `test:tests/redteam_tests.rs::threat_deep_and_wide_modules_hit_limits_not_the_stack`
- `test:tests/redteam_tests.rs::threat_size_limits_are_enforced_without_allocation`
- `test:tests/redteam_tests.rs::review_stream_bounds_reject_unbounded_batches`
- `test:tests/redteam_tests.rs::review_limits_cover_total_bytes_and_string_heap`
- `test:tests/redteam_tests.rs::review_stream_begin_uses_the_caller_limits`
- `test:tests/redteam_tests.rs::review_delta_fragments_honor_the_stream_limits`
- `vector:tests/vectors/invalid/limit.ainf`
- `vector:tests/vectors/invalid/count_bomb.ainf`
- `vector:tests/vectors/invalid/too_deep.ainf`
- `test:tests/redteam_tests.rs::projection_budget_refuses_an_exponential_dag`
- `script:scripts/negative_controls.py#I-8-projection`

Negative control (implemented): Raise Limits::default().max_nodes by 1 and run threat_deep_and_wide_modules_hit_limits_not_the_stack; then set max_total_bytes to usize::MAX and run review_limits_cover_total_bytes_and_string_heap → expected: each test must fail because the budget no longer fires before the allocation or traversal

</details>

<details><summary><strong>I-9</strong> (11 checks)</summary>

- `test:tests/unit_tests.rs::canonical_identity_is_independent_of_construction_order`
- `test:tests/unit_tests.rs::content_hash_changes_with_any_value_change`
- `test:tests/unit_tests.rs::canonical_proof_is_unconditional`
- `test:tests/unit_tests.rs::streaming_delta_produces_the_whole_module_encoding`
- `test:tests/unit_tests.rs::extension_blocks_round_trip_and_are_order_independent`
- `test:tests/integration_tests.rs::content_hash_is_stable_across_independent_encodes`
- `test:tests/property_tests.rs::round_trip_and_canonical_stability`
- `test:tests/property_tests.rs::hash_changes_when_a_value_changes`
- `test:tests/conformance_tests.rs::valid_vectors_validate_and_reencode_identically`
- `test:tests/redteam_tests.rs::threat_non_canonical_images_are_detected`
- `fuzz:fuzz_decode_infinity` — fuzz/fuzz_targets/fuzz_decode_infinity.rs

Negative control (implemented): Replace the canonical node ordering with insertion order in encode and run the canonical identity tests and the non_canonical vector → expected: canonical_identity_is_independent_of_construction_order and valid_vectors_validate_and_reencode_identically must fail, and tests/vectors/valid/non_canonical.ainf must be reported as non-canonical

</details>

<details><summary><strong>I-10</strong> (15 checks)</summary>

- `test:tests/conformance_tests.rs::invalid_vectors_are_rejected_with_their_declared_code`
- `test:tests/conformance_tests.rs::stream_vectors_are_rejected_with_their_declared_code`
- `test:tests/conformance_tests.rs::every_declared_failure_code_has_a_vector`
- `test:tests/unit_tests.rs::validator_rejects_every_declared_failure_class`
- `test:tests/unit_tests.rs::validator_rejects_unknown_unit_discriminant`
- `test:tests/unit_tests.rs::validator_rejects_cycles_and_unreachable_nodes`
- `test:tests/unit_tests.rs::error_codes_are_stable_and_documented`
- `test:tests/integration_tests.rs::malformed_input_never_panics_and_always_fails_closed`
- `test:tests/property_tests.rs::arbitrary_bytes_are_rejected_without_panicking`
- `test:tests/property_tests.rs::byte_flips_are_always_rejected`
- `test:tests/redteam_tests.rs::threat_count_bombs_in_every_section`
- `test:tests/redteam_tests.rs::threat_offset_and_overlap_attacks`
- `test:tests/redteam_tests.rs::threat_string_heap_faults`
- `test:tests/redteam_tests.rs::threat_empty_and_random_inputs_never_panic`
- `fuzz:fuzz_decode_infinity` — fuzz/fuzz_targets/fuzz_decode_infinity.rs

Negative control (implemented): Delete one bounds check in validate (for example the section-span check) and run the conformance suite → expected: the matching invalid vector must be accepted or panic, so invalid_vectors_are_rejected_with_their_declared_code fails and names the vector and code

</details>

### Gates referenced by the matrix

| Gate | Command |
|---|---|
| `api-surface` | `cargo +nightly rustdoc --locked --lib --all-features -- -Zunstable-options --output-format json && python scripts/api_surface.py target/doc/active_infinity.json` |
| `audit` | `cargo audit` |
| `baseline-tag` | `git rev-parse --verify hardening-baseline^{commit}` |
| `bench` | `cargo bench --locked --bench codec --no-run` |
| `clippy` | `cargo clippy --locked --all-targets --all-features -- -D warnings` |
| `clippy-nodefault` | `cargo clippy --locked --all-targets --no-default-features -- -D warnings` |
| `deny` | `cargo deny check` |
| `doc` | `RUSTDOCFLAGS=-D warnings cargo doc --locked --no-deps --all-features` |
| `fmt` | `cargo fmt --all -- --check` |
| `fuzz` | `cargo +nightly fuzz run fuzz_decode_infinity -- -runs=20000` |
| `msrv` | `cargo +1.85.0 check --locked --all-targets --all-features` |
| `negative-controls` | `python scripts/negative_controls.py --check` |
| `package` | `cargo package --locked` |
| `perf` | `cargo test --locked --test perf_budget` |
| `sbom` | `python scripts/sbom.py --output dist/active-infinity.cdx.json && python scripts/sbom.py --check dist/active-infinity.cdx.json` |
| `test` | `cargo test --locked --all-features` |
| `test-nodefault` | `cargo test --locked --no-default-features` |

<!-- END GENERATED: hardening matrix -->

- **Hash-collision search (H2.25) is out of budget.** A birthday search against a
  256-bit Blake3 content hash needs ~2^128 work; the committed tests prove hash
  stability and single-bit sensitivity, not collision resistance. This is an
  accepted computational limit, not an untested guard.
- **Bindings, provenance and hashes are bounded by total bytes.** Their counts
  are not separate `Limits` fields: the per-entry size is fixed (8, 1 and 32
  bytes), so `max_total_bytes` plus the section-offset check bounds them before
  allocation. The count error is reported as `infinity/count` when the count
  exceeds the buffer and `infinity/limit` when a configurable ceiling fires.