ciris-server 0.2.2__tar.gz → 0.2.6__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.
- {ciris_server-0.2.2 → ciris_server-0.2.6}/.github/workflows/bench.yml +5 -2
- ciris_server-0.2.6/CHANGELOG.md +297 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/Cargo.lock +547 -13
- {ciris_server-0.2.2 → ciris_server-0.2.6}/Cargo.toml +22 -24
- {ciris_server-0.2.2 → ciris_server-0.2.6}/FSD/LENS_TO_SERVER_MIGRATION.md +1 -1
- ciris_server-0.2.6/FSD/PQC_AV_STREAMING_BENCH.md +131 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/PKG-INFO +16 -10
- {ciris_server-0.2.2 → ciris_server-0.2.6}/README.md +15 -9
- ciris_server-0.2.6/bench-site/data.json +167 -0
- ciris_server-0.2.6/bench-site/index.html +125 -0
- ciris_server-0.2.6/benches/alm_chain.rs +122 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/benches/pqc_av_streaming.rs +146 -58
- {ciris_server-0.2.2 → ciris_server-0.2.6}/benches/replication_ingest.rs +38 -10
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/Cargo.toml +3 -3
- {ciris_server-0.2.2 → ciris_server-0.2.6}/pyproject.toml +5 -2
- ciris_server-0.2.6/scripts/bench_report.py +662 -0
- ciris_server-0.2.6/src/benchmarks/mod.rs +31 -0
- ciris_server-0.2.6/src/benchmarks/scoreboard.rs +374 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/src/compose.rs +38 -51
- {ciris_server-0.2.2 → ciris_server-0.2.6}/src/import.rs +12 -4
- {ciris_server-0.2.2 → ciris_server-0.2.6}/src/lib.rs +10 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/src/main.rs +6 -0
- ciris_server-0.2.6/tests/alm_chain.rs +78 -0
- ciris_server-0.2.6/tests/chaos_mesh.rs +111 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/tests/replication.rs +17 -2
- ciris_server-0.2.2/CHANGELOG.md +0 -147
- ciris_server-0.2.2/FSD/PQC_AV_STREAMING_BENCH.md +0 -95
- ciris_server-0.2.2/scripts/bench_report.py +0 -234
- {ciris_server-0.2.2 → ciris_server-0.2.6}/.cargo/config.toml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/.github/workflows/ci.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/.github/workflows/conformance.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/.github/workflows/publish-pypi.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/.github/workflows/release.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/.gitignore +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/FSD/REGISTRY_FOLD_DERISK.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/FSD/SERVER_1.0_PLAN.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/LICENSE +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/MISSION.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/.github/workflows/bench.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/.github/workflows/ci.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/.gitignore +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/.pre-commit-config.yaml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/LICENSE +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/MISSION.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/README.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/benches/aggregate.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/benches/canonicalize.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/benches/project.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/deny.toml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/docs/BENCHMARKS.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/docs/COHABITATION.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/docs/PRE_COMMIT.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/docs/RELEASE_NOTES.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/docs/THREAT_MODEL.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/pyproject.toml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/audit/api.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/audit/delegate.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/audit/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/audit/pyo3.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/canonical/ceg_egress.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/canonical/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capacity/attestation.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capacity/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capacity/score.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/batch.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/client.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/consent.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/correlation.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/event.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/partial.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/py_engine.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/capture/seal.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/cohort/declared.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/cohort/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/cohort/resourcing.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/config/egress.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/config/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/config/node.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/config/retention.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/config/upstream.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/detector/axis_metrics.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/detector/correlated_action.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/detector/distributive_access.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/detector/manifold.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/detector/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/extract/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/extract/projection.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/ffi/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/ffi/pyo3.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/lib.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/observability/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/pipeline/lifecycle.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/pipeline/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/retention/eviction.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/retention/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/retention/summary.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/role/handler.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/role/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/role/node.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/role/relay.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/role/ret_relay.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scores/aggregate.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scores/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scores/oracle.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scoring/assembly.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scoring/axis_calibration.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scoring/calibration.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scoring/capacity.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scoring/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scoring/n_eff.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/scoring/result.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/signing/event.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/signing/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/wire/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/src/wire/signer.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/tests/parity/README.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/crates/ciris-lens-core/tests/sovereign_rlib.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/rust-toolchain.toml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/src/config.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.2.6}/src/quorum.rs +0 -0
|
@@ -52,11 +52,14 @@ jobs:
|
|
|
52
52
|
with:
|
|
53
53
|
python-version: "3.12"
|
|
54
54
|
- name: Run benches (criterion)
|
|
55
|
-
run: cargo bench --bench pqc_av_streaming --bench replication_ingest
|
|
55
|
+
run: cargo bench --bench pqc_av_streaming --bench replication_ingest --bench alm_chain
|
|
56
|
+
- name: Generate holonomic scoreboard (CIRISServer#12/#13)
|
|
57
|
+
run: cargo run --release --quiet -- scoreboard > scoreboard.json
|
|
56
58
|
- name: Generate interpreted page
|
|
57
59
|
run: |
|
|
58
60
|
BENCH_DATE="$(date -u +%Y-%m-%d)" \
|
|
59
|
-
python3 scripts/bench_report.py --out bench-site --commit "$GITHUB_SHA"
|
|
61
|
+
python3 scripts/bench_report.py --out bench-site --commit "$GITHUB_SHA" \
|
|
62
|
+
--scoreboard scoreboard.json
|
|
60
63
|
- uses: actions/configure-pages@v5
|
|
61
64
|
with:
|
|
62
65
|
enablement: true
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to CIRISServer. Format follows [Keep a Changelog](https://keepachangelog.com/);
|
|
4
|
+
this project uses [Semantic Versioning](https://semver.org/). The minor line tracks
|
|
5
|
+
the fabric-node scope (0.1 lens · 0.5 +registry · 1.0 +node), paced by the CIRISAgent train.
|
|
6
|
+
|
|
7
|
+
## [0.2.6] — 2026-06-16
|
|
8
|
+
|
|
9
|
+
Substrate floor → **v4.2.0 family** + the **multi-tier ALM relay chain** test
|
|
10
|
+
(CIRISEdge#149 shipped).
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- **Floor → persist v8.2.0 / edge v4.2.0 / verify-family v5.9.0** (CEG 1.0-RC12),
|
|
14
|
+
root + in-tree lens-core. Additive minor bumps; no composition-root change.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **`benches/alm_chain.rs` + `tests/alm_chain.rs`** — the multi-tier ALM relay
|
|
18
|
+
chain, now buildable because edge v4.2.0 ships the relay outer-open primitive
|
|
19
|
+
`open_av_outer` (CIRISEdge#149). Each interior hop opens the inbound per-link
|
|
20
|
+
outer AEAD and re-seals downstream **without touching the epoch DEK**, so the
|
|
21
|
+
inner E2E ciphertext survives arbitrary relay→relay hops.
|
|
22
|
+
- **Correctness (gated)**: `inner_e2e_survives_relay_chain` — viewer recovers the
|
|
23
|
+
publisher's plaintext byte-identical after 1–5 relay hops; `wrong_outer_key_at_a_hop_fails_closed`.
|
|
24
|
+
- **Cost (measured)**: ~**437 ns per relay hop** (blob) / 3.18 µs (full 720p);
|
|
25
|
+
end-to-end through 4 tiers ~2.7 µs (≈0.44 µs/added tier). So 2,000 blob streams
|
|
26
|
+
× 4 tiers @30 fps ≈ ~10% of one core of relay forwarding — confirming the limit
|
|
27
|
+
is donated bandwidth, not CPU (FSD §3–§4).
|
|
28
|
+
- **`tests/chaos_mesh.rs` — resilience proofs.** Stream **path-redundancy**: a
|
|
29
|
+
chunk reaches a viewer over disjoint relay paths (ALM primary + 2 backups); any
|
|
30
|
+
*surviving* path yields the identical plaintext — kill all but one and the stream
|
|
31
|
+
continues, no re-publish. And the **survival floor**: any 20 of 30 fountain
|
|
32
|
+
holders reconstruct → 33% holder-loss tolerance.
|
|
33
|
+
- **Bench page → "Guaranteed mesh characteristics" (the UX spec).** Each guarantee
|
|
34
|
+
— presence-blob (50 kbps) / focus-stream (2.5 Mbps) bandwidth, per-relay-hop +
|
|
35
|
+
tree-depth latency, join/rekey cost, path-redundancy, content survival, E2E-PQC
|
|
36
|
+
(~0/frame) — with a provenance badge (MEASURED / MODEL / PROJECTED) and a UX
|
|
37
|
+
implication, so the UX is built against guaranteed envelopes. `alm_chain` wired
|
|
38
|
+
into `bench.yml`; the ALM pillar now carries the measured per-hop/per-tier cost.
|
|
39
|
+
|
|
40
|
+
## [0.2.5] — 2026-06-16
|
|
41
|
+
|
|
42
|
+
First cut of the **holonomic federation scoreboard** (CIRISServer#12/#13) — the
|
|
43
|
+
operator-facing measured-vs-modeled surface, replacing per-cut SOTA-comparison toy
|
|
44
|
+
numbers with grounded metrics.
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
- **`server::benchmarks` module + `ciris-server scoreboard`** — emits a JSON
|
|
48
|
+
scoreboard of the federation's capacity/survival posture.
|
|
49
|
+
- **Storage tier — fully grounded** from a `FountainPolicy` (N=20, K=6, H=30
|
|
50
|
+
reference). Replication overhead (1.5×), per-peer load (5%), active-eject
|
|
51
|
+
threshold (H×1.15=34.5), holographic degradation tiers, and the **survival
|
|
52
|
+
floor** `P(Binomial(H, q) ≥ N)` computed in log-space. The calculator
|
|
53
|
+
**reproduces the scale_model v0.7 survival curve from first principles**
|
|
54
|
+
(99.99999 / 99.991 / 99.706 / 97.438 / 73.04 % at q = 0.95/0.90/0.85/0.80/0.70)
|
|
55
|
+
— asserted in tests — which is what makes "measured vs modeled" trustworthy.
|
|
56
|
+
- **Live overlay** (`with_measurement`): recomputes overhead + survival from
|
|
57
|
+
observed holders + real per-peer `q`, and **alarms** when live survival dips
|
|
58
|
+
under the 99% floor (the early-warning signal before content becomes
|
|
59
|
+
unreconstructable), or on >2.0× over-replication.
|
|
60
|
+
- **Substrate + holonomic tiers are honest `gated` stubs** (not fabricated):
|
|
61
|
+
substrate gated on edge v4.1.1's `NETWORK_CAPACITY_MODEL.md` + benches
|
|
62
|
+
(CIRISEdge PR#147); holonomic gated on fountain/holonomic wiring (#11) +
|
|
63
|
+
CIRISRegistry#88's composite model that grounds the targets.
|
|
64
|
+
|
|
65
|
+
## [0.2.4] — 2026-06-16
|
|
66
|
+
|
|
67
|
+
Catch-up to the **v8 / v4 / v5.8 substrate family** and **CEG 1.0-RC11**. Two
|
|
68
|
+
substrate MAJOR bumps (persist 7→8, edge 3→4) adopted with **zero composition-root
|
|
69
|
+
changes** — the breakage surface was a single benchmark.
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
- **Substrate floor → persist v8.1.0 / edge v4.1.0 / verify-family v5.8.0**
|
|
73
|
+
(root + in-tree `ciris-lens-core`, MAJOR caret pins co-bumped). The major bumps
|
|
74
|
+
are additive: persist v8 = the `fountain` content primitive (new module);
|
|
75
|
+
edge v4 = the `holonomic` substrate (CEG §19) + realtime-A/V scale work — none of
|
|
76
|
+
it touches the symbols the composition root calls. `compose.rs`, `import.rs`,
|
|
77
|
+
`lib.rs`, and the replication bench/test needed no edits; `CompleteTrace` and the
|
|
78
|
+
hybrid ingest gate are unchanged (replication test still green under v8.1.0).
|
|
79
|
+
- **CEG → 1.0-RC11** (doc/vendor-only for the node, as RC6/RC7 were). The frozen
|
|
80
|
+
§4 "1+4" attestation envelope, signature format, dest-hash, trace schema, and
|
|
81
|
+
identity aggregate are untouched across RC7→RC11. The one envelope-touching
|
|
82
|
+
behavior change — RC8's store-path PQC clarification (the durable corpus MUST
|
|
83
|
+
carry+verify the ML-DSA-65 half) — is already satisfied by 0.2.3's hybrid hard
|
|
84
|
+
cut. RC9/RC10/RC11 wire additions (`codec_id`/`ChunkLayer`, the full
|
|
85
|
+
`SealedAvChunk` layout + double-seal nonces, the §19 holonomic shapes) are
|
|
86
|
+
**edge-owned transport/substrate framing**, additive, reached only through the
|
|
87
|
+
edge dependency.
|
|
88
|
+
|
|
89
|
+
### Fixed
|
|
90
|
+
- **`pqc_av_streaming` bench** updated to edge v3.8.0's seal API (CIRISEdge#128):
|
|
91
|
+
`seal_av_chunk`/`seal_av_inner` take `codec_id` + `ChunkLayer` (pass
|
|
92
|
+
`CODEC_OPAQUE` + `ChunkLayer::BASE` to keep byte-identical v3.7.0 wire output),
|
|
93
|
+
and `MeshParticipant::new` defaults the new `layer_policy`. CI now checks
|
|
94
|
+
`--all-targets` so the (harness=false) bench can't silently break on a co-bump.
|
|
95
|
+
|
|
96
|
+
### Adoption
|
|
97
|
+
- Closes the persist 7.0/7.1/7.2 adoption issues (#3/#8/#10) — all satisfied by the
|
|
98
|
+
0.2.3 hybrid hard cut + this floor. persist v8.0's fountain store API (#11) is now
|
|
99
|
+
available at the floor; wiring the fountain/swarm storage role is tracked as
|
|
100
|
+
follow-on feature work, not required for the floor.
|
|
101
|
+
|
|
102
|
+
## [0.2.3] — 2026-06-16
|
|
103
|
+
|
|
104
|
+
Hybrid **hard cut, complete end-to-end** (no classical-only path at any tier),
|
|
105
|
+
substrate floor → the v3.7.1 / v7.2.0 / v5.7.0 family, CEG **1.0-RC7**, and a
|
|
106
|
+
CEWP-honest benchmark page.
|
|
107
|
+
|
|
108
|
+
### Changed
|
|
109
|
+
- **Hard cut to hybrid signing — now end-to-end (CIRISVerify#75 — "no classical-
|
|
110
|
+
only, HNDL demands it").** Three tiers, all hybrid (sealed Ed25519 + ML-DSA-65):
|
|
111
|
+
1. **Federation wire** sigs — edge `LocalSigner` (already hybrid).
|
|
112
|
+
2. **Storage-tier scrub** sig — the Engine is built with
|
|
113
|
+
`Engine::with_hardware_signer_hybrid` (CIRISPersist#224); the Ed25519 half
|
|
114
|
+
stays hardware-sealed (never unsealed), the ML-DSA-65 half is the software PQC
|
|
115
|
+
signer. Applies to the node Engine **and** the legacy-import Engine.
|
|
116
|
+
3. **Per-trace envelope** sig — closed by **persist v7.2.0** (CIRISPersist#225,
|
|
117
|
+
migration `V083`): `trace_events` carries the ML-DSA-65 half and
|
|
118
|
+
`VerifyMode::Full` **rejects classical-only per-trace sigs**. CIRISServer's
|
|
119
|
+
replication path inherits the rejection; the legacy-import path stays exempt
|
|
120
|
+
(`TrustPreVerified`, provenance-only Ed25519).
|
|
121
|
+
Rationale is forge-later, not decrypt-later: the trace corpus is durable,
|
|
122
|
+
content-addressed, kept-for-posterity evidence, so its signatures must outlive
|
|
123
|
+
the classical primitive.
|
|
124
|
+
- **`GET /v1/identity` now serves all six keys.** With the hybrid hardware Engine,
|
|
125
|
+
the aggregate is sourced directly from persist's `local_identity_aggregate`
|
|
126
|
+
(CIRISPersist#223) — the ML-DSA-65 signing half **and** the persist-minted
|
|
127
|
+
content-KEM pair (`content_x25519` / `content_ml_kem_768`) are populated; they
|
|
128
|
+
are no longer `null`. Removes the hand-assembled aggregate.
|
|
129
|
+
- **Substrate floor → persist v7.2.0 / edge v3.7.1 / verify-family v5.7.0**
|
|
130
|
+
(edge v3.7.1's hard-cut co-bump: verify v5.7.0 = hybrid-required at federation
|
|
131
|
+
tier, closes CIRISVerify#75/#76/#77; persist v7.2.0 = trace-tier hybrid, #225);
|
|
132
|
+
**CEG 1.0-RC7**. lens-core co-bumped in lockstep.
|
|
133
|
+
|
|
134
|
+
### Added
|
|
135
|
+
- **Benchmark upgrade — the CEWP crux ("stream and store at massive scale").**
|
|
136
|
+
- `av_mesh_fanout/shared_inner` now drives v3.7.0's real `seal_av_inner` /
|
|
137
|
+
`seal_av_outer` (CIRISEdge#122), not a hand-rolled mirror — measured fan-out
|
|
138
|
+
win 1.36×/1.85×/**2.07×** at N=2/8/50.
|
|
139
|
+
- **`av_rekey`** (new): the membership-change rekey cost, **projected** from the
|
|
140
|
+
real hybrid-KEM wrap — `flat_rewrap` O(N) vs `tree_rewrap` O(log N). A 50-room
|
|
141
|
+
delta is ~3.4 ms flat → ~0.41 ms with the tree (8.3×). Labelled projected: the
|
|
142
|
+
substrate doesn't rekey on join/leave yet (**CIRISEdge#129**), so "effectively
|
|
143
|
+
free" holds at steady state, not yet under churn.
|
|
144
|
+
- **Honest accounting:** `av_frame_halves` now measures seal (send) vs open
|
|
145
|
+
(recv) **per size**; the report charges receivers open-only and states its GOP
|
|
146
|
+
model inline instead of cherry-picking a frame. A 50-person 30 fps room is
|
|
147
|
+
~0.5% of a core to receive (stated 720p/GOP-30 model), range ~0.17–0.45%.
|
|
148
|
+
- **Replication is now hybrid (the hard cut at the store path).** The bench
|
|
149
|
+
signs full-hybrid traces (the only kind v7.2.0 accepts); measured ingest is
|
|
150
|
+
**~230 µs/trace (~4,300 traces/s/core)** — the ML-DSA-65 verify adds ~150 µs
|
|
151
|
+
over the old Ed25519-only ~76 µs. That is the **measured HNDL price** at the
|
|
152
|
+
store path. Re-delivery still pays full verify (replay is verify-bound by
|
|
153
|
+
design — verify-before-mutation; dedup-first would be an AV-9 oracle), so the
|
|
154
|
+
levers are the pre-verified relay path + **batch verification** (now materially
|
|
155
|
+
more valuable; tracked in CIRISPersist#225's scale note), not reordering.
|
|
156
|
+
|
|
157
|
+
## [0.2.2] — 2026-06-15
|
|
158
|
+
|
|
159
|
+
### Added
|
|
160
|
+
- **`import-traces` on the wheel** (pip-only bridge): the abi3 wheel now exposes
|
|
161
|
+
`ciris_server.import_traces(dump_dir)`, and the `ciris-server` console script
|
|
162
|
+
accepts `ciris-server import-traces <dump-dir>` (same CLI as the binary). The
|
|
163
|
+
legacy CIRISLens dump → persist-corpus-as-CEG import no longer needs the
|
|
164
|
+
source-built binary. Verified from the installed wheel against the prod dump:
|
|
165
|
+
all 12,165 traces, errored=0.
|
|
166
|
+
|
|
167
|
+
## [0.2.1] — 2026-06-15
|
|
168
|
+
|
|
169
|
+
Android wheels (incl. arm32) now publish; legacy-trace importer.
|
|
170
|
+
|
|
171
|
+
### Added
|
|
172
|
+
- **`ciris-server import-traces <dump-dir>`** — imports the legacy CIRISLens
|
|
173
|
+
TimescaleDB dump into the persist corpus as CEG objects. Reconstructs flat
|
|
174
|
+
1.9.x lens rows → `CompleteTrace`/`BatchEnvelope` (reasoning columns →
|
|
175
|
+
components; original schema + signature in a provenance component); stamped
|
|
176
|
+
`2.7.legacy`; imported pre-verified; idempotent. A salvage pass repairs the
|
|
177
|
+
dump's systematic `\\"`→`\"` export mis-escaping and flags those rows
|
|
178
|
+
`_salvaged: true`. Validated on the prod dump: **all 12,165 traces →
|
|
179
|
+
20,959 trace-events, errored=0** (3,635 salvaged).
|
|
180
|
+
- **Android wheels** (armeabi-v7a + arm64-v8a) now build & publish (NDK r26b
|
|
181
|
+
cross-compile: explicit `CC`/`AR`/linker for the toolchain, legacy-NDK
|
|
182
|
+
tool-name shims for openssl-src, `ANDROID_API_LEVEL`). Promoted from
|
|
183
|
+
continue-on-error to a required publish lane.
|
|
184
|
+
|
|
185
|
+
## [0.2.0] — 2026-06-15
|
|
186
|
+
|
|
187
|
+
All-platforms-green CI, **full hybrid post-quantum federation signatures**, and a
|
|
188
|
+
published interpreted benchmark page.
|
|
189
|
+
|
|
190
|
+
### Added
|
|
191
|
+
- **Full hybrid PQC federation signature (Ed25519 + ML-DSA-65).** The node mints
|
|
192
|
+
(or **adopts**, on takeover) an `ml_dsa_65.seed` and signs every federation
|
|
193
|
+
envelope with both halves (edge `LocalSigner` classical + pqc). `/v1/identity`
|
|
194
|
+
now carries `ml_dsa_65_pubkey_b64` + `pqc_key_id`. Classical stays
|
|
195
|
+
hardware-sealed; the ML-DSA half is a software seed (no sealed-ML-DSA backend
|
|
196
|
+
exists — a TPM can't do ML-DSA).
|
|
197
|
+
- **One remaining classical path**, filed upstream: persist's storage-tier
|
|
198
|
+
scrub signature is Ed25519-only — `with_hardware_signer` is classical-only and
|
|
199
|
+
`with_signer_arcs` (hybrid) needs a plaintext key. **CIRISPersist#224** adds a
|
|
200
|
+
hybrid-hardware ctor to close it without un-sealing.
|
|
201
|
+
- **Interpreted benchmark page** → `https://cirisai.github.io/CIRISServer/`
|
|
202
|
+
(`.github/workflows/bench.yml` + `scripts/bench_report.py`): video throughput
|
|
203
|
+
(fps ceiling, sustainable mesh participants @30 fps), post-quantum handshake
|
|
204
|
+
overhead, mesh fan-out, and **replication speed** (new `replication_ingest`
|
|
205
|
+
bench, ~13K traces/s/core).
|
|
206
|
+
- Android arm32 (armeabi-v7a) + arm64 wheel lane (NDK cross-compile;
|
|
207
|
+
`continue-on-error` while it iterates to green).
|
|
208
|
+
|
|
209
|
+
### Changed / Fixed
|
|
210
|
+
- **All CI platforms green** (was red on macOS/Windows/Win7). Root cause was our
|
|
211
|
+
own feature wiring: a top-level `tpm` feature + unconditional `postgres`
|
|
212
|
+
dragged `tss-esapi`/`openssl` onto platforms that can't build them. Fixed with
|
|
213
|
+
per-target deps (`postgres` + `tpm` Linux-only; `android` keyring backend) and
|
|
214
|
+
dropping `--all-features`.
|
|
215
|
+
|
|
216
|
+
## [0.1.2] — 2026-06-15
|
|
217
|
+
|
|
218
|
+
Substrate floor bump + the `/v1/identity` endpoint the migration runbook requires.
|
|
219
|
+
|
|
220
|
+
### Added
|
|
221
|
+
- **`GET /v1/identity`** — the node's `LocalIdentityAggregate` (CEG §5.6.8.8.2),
|
|
222
|
+
merged onto the read-API listener (same port as `GET /lens/api/v1/*`). Serves
|
|
223
|
+
`key_id`, the Ed25519 federation pubkey, the Reticulum transport pubkeys
|
|
224
|
+
(x25519 ‖ ed25519), and `identity_hash` — the identity-continuity surface the
|
|
225
|
+
CIRISLens→CIRISServer cutover verifies (runbook §4 step 1). Closes the gap that
|
|
226
|
+
blocked the first cutover attempt (#5).
|
|
227
|
+
- `content_x25519` / `content_ml_kem_768` are `null` for now: persist's
|
|
228
|
+
`local_identity_aggregate` requires a software `LocalSigner`, and CIRISServer
|
|
229
|
+
runs a hardware signer (`with_hardware_signer` → `local_signer: None`). The
|
|
230
|
+
content-KEM halves fill in once persist exposes the aggregate for a
|
|
231
|
+
hardware-signed Engine (tracked upstream).
|
|
232
|
+
|
|
233
|
+
### Changed
|
|
234
|
+
- Substrate floor → **persist v7.0.0 / edge v3.6.0 / verify-family v5.6.0**
|
|
235
|
+
(the edge v3.6.0 "CEWP-ready" co-bump; CEG 1.0-RC6). Major persist 6→7, built
|
|
236
|
+
clean with zero code changes.
|
|
237
|
+
- `build_edge` wires the Reticulum transport via the typed `.reticulum_transport()`
|
|
238
|
+
builder so `Edge::local_transport_pubkey()` resolves (populates the
|
|
239
|
+
RET-transport role of `/v1/identity`).
|
|
240
|
+
|
|
241
|
+
## [0.1.1] — 2026-06-15
|
|
242
|
+
|
|
243
|
+
Release-CI fixes only — **no change to the node**. 0.1.0 was tagged but did not
|
|
244
|
+
publish: `publish-pypi.yml`'s linux wheel built in a manylinux_2_28 (AlmaLinux 8)
|
|
245
|
+
container whose tpm2-tss is 2.3.2, too old for the keyring's `tss-esapi-sys`
|
|
246
|
+
(`tss2-sys not found`), and two lint gates failed.
|
|
247
|
+
|
|
248
|
+
### Fixed
|
|
249
|
+
- **Linux wheels** now build on the native runners (ubuntu-latest + ubuntu-24.04-arm)
|
|
250
|
+
with apt `libtss2-dev` + `patchelf` — the same recipe the green conformance
|
|
251
|
+
wheel job and the sister wheels (persist `manylinux_2_38`, edge `_2_39`) use —
|
|
252
|
+
instead of the el8 container with its stale tss2.
|
|
253
|
+
- `rustfmt` (bench formatting) and `clippy` doc-list lints in
|
|
254
|
+
`benches/pqc_av_streaming.rs` (allow the two stylized-doc lints).
|
|
255
|
+
|
|
256
|
+
## [0.1.0] — 2026-06-15
|
|
257
|
+
|
|
258
|
+
First release. **Lens-only fabric node** — the federation's headless cohabitation
|
|
259
|
+
runtime with only the observation slice live. Replaces both the deployed CIRISLens
|
|
260
|
+
server and the agent's direct `ciris-lens-core` cohabitation.
|
|
261
|
+
|
|
262
|
+
### Added
|
|
263
|
+
- **Zero-setup node** (`ciris-server`): one shared persist `Engine` + one shared
|
|
264
|
+
Reticulum `Edge` (a single federation identity), mode defaults to `server`,
|
|
265
|
+
no wizard. Data under `$CIRIS_HOME`; SQLite corpus by default, Postgres via
|
|
266
|
+
`CIRIS_DB_URL`.
|
|
267
|
+
- **Lens slice**: relay ingest of CEG `AccordEventsBatch` (over Reticulum/HTTP)
|
|
268
|
+
into the shared corpus, plus the seven frozen `GET /lens/api/v1/*` read
|
|
269
|
+
endpoints. `ciris-lens-core` is absorbed in-tree (workspace member); the
|
|
270
|
+
standalone CIRISLensCore library and the CIRISLens deployment retire.
|
|
271
|
+
- **Hardware key custody**, two classes: the RNS transport identity and the
|
|
272
|
+
Ed25519 federation seed are TPM / Secure-Enclave / StrongBox sealed, with a
|
|
273
|
+
software-encrypted fallback. Existing keys are **adopted byte-identically** —
|
|
274
|
+
a CIRISLens host keeps its `key_id` and RNS destination on cutover (no re-key,
|
|
275
|
+
no re-enroll). See `FSD/LENS_TO_SERVER_MIGRATION.md`.
|
|
276
|
+
- **Reticulum floor with capability gating**: always a routable RET node; the
|
|
277
|
+
lens corpus + read API gate on a realistic free-disk minimum
|
|
278
|
+
(`CIRIS_SERVER_LENS_STORE_MIN_GIB`), else the node runs as a relay.
|
|
279
|
+
- **`ciris-canonical` founder-quorum** (`src/quorum.rs`): the entrenched 2-of-3
|
|
280
|
+
trust root that replaces the shared steward key (prep for the 0.5 registry
|
|
281
|
+
fold; CEG §8.1.13.1.1).
|
|
282
|
+
- **PyO3 abi3 wheel**: `pip install ciris-server` → the `ciris-server` command,
|
|
283
|
+
and the lens drop-in `from ciris_server import LensClient` for CIRISAgent.
|
|
284
|
+
- **Conformance + benchmarks**: cohabitation + CEG-profile gating via
|
|
285
|
+
CIRISConformance; `benches/pqc_av_streaming.rs` (realtime-A/V two-layer
|
|
286
|
+
hybrid-PQC mesh) and `tests/replication.rs` (CEG-RC5 corpus replication spine).
|
|
287
|
+
|
|
288
|
+
### Substrate
|
|
289
|
+
- persist **v7.0.0** · edge **v3.6.0** · verify-family **v5.6.0**
|
|
290
|
+
(verify-core + keyring + crypto). CEG **1.0-RC6**.
|
|
291
|
+
|
|
292
|
+
### Notes
|
|
293
|
+
- Registry (0.5) and node (1.0) slices are scaffolded in `src/compose.rs` and
|
|
294
|
+
fold in as their co-bumps land. Registry-fold prep: `FSD/REGISTRY_FOLD_DERISK.md`,
|
|
295
|
+
[#2](https://github.com/CIRISAI/CIRISServer/issues/2).
|
|
296
|
+
|
|
297
|
+
[0.1.0]: https://github.com/CIRISAI/CIRISServer/releases/tag/v0.1.0
|