ciris-server 0.5.82__tar.gz → 0.5.83__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.5.82 → ciris_server-0.5.83}/Cargo.lock +1 -1
- {ciris_server-0.5.82 → ciris_server-0.5.83}/Cargo.toml +1 -1
- {ciris_server-0.5.82 → ciris_server-0.5.83}/PKG-INFO +1 -1
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/accord.rs +147 -4
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/accord_provision.rs +21 -7
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.cargo/config.toml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.claude/workflows/localize-ui.js +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.github/workflows/bench.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.github/workflows/build-wheels.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.github/workflows/ci.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.github/workflows/client-artifacts.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.github/workflows/conformance.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.github/workflows/localization.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.github/workflows/publish-pypi.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.github/workflows/release.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/.gitignore +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/CHANGELOG.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/LICENSE +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/MISSION.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/README.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/WIRE_VOCABULARY_KINDS.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/bench-site/bench_results.json +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/bench-site/index.html +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/bench_results.json +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/benches/alm_chain.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/benches/erasure_survival.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/benches/n_eff_scoring.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/benches/pqc_av_streaming.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/benches/replication_ingest.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/benches/sig_overhead.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/benches/stream_fanout.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/.github/workflows/bench.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/.github/workflows/ci.yml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/.gitignore +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/.pre-commit-config.yaml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/Cargo.toml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/LICENSE +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/MISSION.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/README.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/benches/aggregate.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/benches/canonicalize.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/benches/project.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/deny.toml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/BENCHMARKS.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/COHABITATION.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/PRE_COMMIT.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/RELEASE_NOTES.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/THREAT_MODEL.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/pyproject.toml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/audit/api.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/audit/delegate.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/audit/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/audit/pyo3.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/canonical/ceg_egress.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/canonical/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capacity/attestation.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capacity/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capacity/score.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/batch.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/client.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/consent.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/correlation.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/event.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/partial.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/py_engine.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/seal.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/cohort/declared.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/cohort/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/cohort/resourcing.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/config/egress.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/config/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/config/node.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/config/retention.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/config/upstream.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/axis_metrics.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/correlated_action.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/distributive_access.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/manifold.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/extract/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/extract/projection.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/ffi/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/ffi/pyo3.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/lib.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/observability/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/pipeline/lifecycle.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/pipeline/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/retention/eviction.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/retention/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/retention/summary.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/role/handler.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/role/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/role/node.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/role/relay.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/role/ret_relay.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scores/aggregate.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scores/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scores/oracle.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/assembly.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/axis_calibration.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/calibration.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/capacity.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/n_eff.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/result.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/signing/event.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/signing/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/wire/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/wire/signer.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/tests/parity/README.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/tests/sovereign_rlib.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/data/live_mesh_2026-06-22.json +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/docs/SCOPE_PRIVACY.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/evidence/README.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/evidence/cc_impl.tsv +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/examples/mesh_propagation/main.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/examples/qa_runner/accord.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/examples/qa_runner/common.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/examples/qa_runner/family.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/examples/qa_runner/main.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/examples/qa_runner/verify.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/installers/windows/README.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/installers/windows/bundle-jre.ps1 +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/installers/windows/ciris-server-entry.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/installers/windows/ciris-server-installer.iss +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/installers/windows/ciris-server.spec +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/pyproject.toml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/python/ciris_server/__init__.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/python/ciris_server/__main__.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/python/ciris_server/cli.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/python/ciris_server/desktop_launcher.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/rust-toolchain.toml +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/scripts/bench_report.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/accord_custody.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/accord_halt.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/accord_pki/yubico_attestation_root_1.der +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/accord_pki/yubico_attestation_root_1.pem +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/accord_reactivate.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/adapter.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/ABSORPTION.md +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/api_keys.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/attestation.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/bootstrap.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/consent.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/device_auth.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/device_grant.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/erasure.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/gate.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/loopback.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/oauth.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/occurrence.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/ownership.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/portable_occurrence.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/roles.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/self_login.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/session.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/store.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/auth/verify.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/benchmarks/bench_results.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/benchmarks/mesh.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/benchmarks/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/benchmarks/scoreboard.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/claim_remote.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/compose.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/config.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/config_api.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/config_reconcile.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/delegation_transparency.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/family.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/federation_admin.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/federation_nodecode.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/federation_peers.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/graph_config.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/health.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/holonomic.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/http_log.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/identity.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/ids.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/import.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/ingest_http.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/lib.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/main.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/memory_api.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/mesh_relay.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/nodecode.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/peer.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/proxy.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/py_adapter.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/quorum.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/radio.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/replication_reconcile.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/safety/age.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/safety/mod.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/safety/moderation.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/safety/named.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/safety/watchlist.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/scorer/n_eff.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/scorer.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/system_data.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/telemetry_logs.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/src/yubico_attestation_ca.pem +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/accord.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/accord_admit_node.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/alm_chain.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/audit_chain.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/capacity_scorer.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/chaos_mesh.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/claim_remote.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/config_reconcile.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/device_grant.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/federation_admin.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/federation_session_kex.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/graph_config.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/ingest_http.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/mesh_seed_e2e.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/mesh_seed_keyplane_e2e.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/nat_traversal.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/nodecode.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/noise_floor.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/noise_floor_verdicts.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/occurrence.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/ownership.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/peer_replication.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/portable_occurrence.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/stage1.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/stage2.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/stage3.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/stage4.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/stage5.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/stage6.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/stage7.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/stage8.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates/support.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/release_gates.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/replication.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/replication_reconcile.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/root_bootstrap.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/safety.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/stream_sth_consistency.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tests/wire_vocabulary_gate.rs +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tools/audit_cohort_scope_callers.py +0 -0
- {ciris_server-0.5.82 → ciris_server-0.5.83}/tools/check_evidence.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "ciris-server"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.83" # 0.5.83 = BAKED-FAMILY RECOGNITION + RAISE-A-HALT. Same substrate (edge v9.1.2 / persist v13.2.0 / verify v8.9.0). Fixes "No accord family established on this node yet" on a node that has the BAKED genesis but no entrenched federation_families row (persist seeds the 3 holder KEY rows, not the family row — durable fix filed CIRISPersist#386): GET /v1/accord/family + the co-scrub quorum_needed now fall back to verify's baked humanity_accord_genesis() (the 2/3 family + 3 seats, entrenched=false, recognized_via=baked-genesis) — the same recognition resolve_kill_switch_roster already uses. PLUS raise-a-halt: POST /v1/accord/halt (initiate_halt, the binding twin of /drill — one opener signature is sub-quorum and cannot latch; 2-of-3 concur latches) + the client "Halt the mesh" action (was a disabled placeholder). 0.5.82 = CO-SCRUB END-TO-END. Same substrate lockstep edge v9.1.2 / persist v13.2.0 / verify v8.9.0 (no triple change). The cross-device m-of-n seed now works from the app: the co-scrub partial GOSSIPS over the accord peer-plane (the same HTTP set the kill-switch uses) — propose on A1's box → the partial surfaces under "Pending co-signs (canonical)" on B1's box → cosign → conferred, no manual transfer. Server (src/accord_provision.rs): ProvisionState gains an ephemeral bounded pending store + a (target,scrub-count) seen-set; ingest_partial validates structurally + upserts + gossips; NEW open (non-loopback) POST /v1/accord/canonical/gossip-partial peer-receive + GET /v1/accord/canonical/pending; router() split into build()→{loopback,gossip}. Client (#174): proposeCanonical/cosignCanonical/listPendingCoscrubs, the "Pending co-signs (canonical)" section + CanonicalCosignSheet (pending-entry or pasted-partial fallback), "[+ New] Add"→"Propose a canonical server". Bundled: #117 (Delegations loads on screen entry, not VM init → no pre-login 401) + #134 (existing-key offer no longer gated on a typed label; label auto-populates from the picked key_id). 0.5.81 = M-OF-N TRUST ROOT. Substrate lockstep edge v9.1.2 / persist v13.2.0 / verify v8.9.0 (CIRISPersist#383: KeyRecord.additional_scrubs + the DYNAMIC m-of-n admission gate via verify's verify_quorum_policy — canonical is conferred iff distinct_scrub_count() ≥ the family's entrenched quorum:M/N, NOT a hardcoded 2; the 1-of-N genesis is no longer auto-baked). Trust Root co-scrub ceremony (server-side, hardware-signed via the shared open_holder_identity custody path): POST /v1/accord/canonical/{propose,cosign} (scrub #1 → gossip/transfer the partial → append_scrub over the byte-identical envelope → adopt_scrub_upgrade lets the m-of-n gate confer/hold), plus /withdraw + /supersede (#377, 2-of-3 via proposal_digest) and IP-in-envelope TransportHint. Accord ops drill + announce (/v1/accord/{drill,announce}, node-synth'd invocation, gossiped, recorded pre-latch) + /halt-status. DRY audit landed (recipes routed through the substrate: build_self_key_record→produce_self_key_record, CANONICAL_BOOTSTRAP_PEERS→Engine::canonical_bootstrap_hints, owner_binding consts aliased). CEG-native Trust Root card redesign (one AttestationCard + ⋮ hamburger; concur now hardware-signs). KNOWN → 0.5.82 (#174): the client "Add canonical" still posts /add (1-scrub partial under m-of-n) — wire the propose→cosign buttons. 0.5.80 = THE MESH-SEED RELEASE. Substrate lockstep edge v9.1.0 / persist v13.0.1 / verify v8.7.0 (CC 1.0 RC1: KeyRecord.consent_role, the accord-conferred `canonical` identity_type role + admission gate CIRISPersist#372, single-owner owner_of #162, CIRISEdge#277 upgrade-aware Key-plane apply → KERI publish-own end-to-end). Trust Root canonical ops (#164): POST /v1/accord/canonical/add — the 1-of-N hardware-scrub SEED op (scrub-sign w/ the canonical role + adopt onto own row + publish address) + GET /v1/accord/canonical/servers + the client "Canonical servers" card (update-address shipped #165; supersede/withdraw → 0.5.81, need a persist role-removal primitive). ci.yml revived (my #155 evidence-step colon had broken the Rust gate repo-wide). 0.5.79 = substrate triple edge v8.7.2 / persist v12.5.0 / verify v8.7.0 (cross-cdylib block_on-deadlock/SIGABRT fix + CC 0.9.3 gates + dep-trims landed: hickory 0.25 de-dup, dead openssl/qrcodegen/bip39 gone) + REMOTE adopt-scrubbed endpoint (#150 — POST /v1/federation/adopt-scrubbed applies an A1-scrubbed record onto a node's own row so it roots; the seed producer's remote leg, keys live off-node) + server-local dep-trims (#152: drop hmac/pyo3-async-runtimes, lens-core async-trait/opentelemetry, base64 0.21→0.22). 0.5.78 = edge v8.6.1 / persist v12.2.0 adoption — the COMPLETE admit-node → mesh-seed loop. (1) #144 KEY-PLANE replication (KERI publish-own): the ReplicationRuntime converges an EnvelopeKind::Key coordinator per consent peer + a key_selector publishing the node's OWN key_id. (2) #150 PRODUCER: admit-node now calls persist v12.2.0 Engine::adopt_scrub_upgrade (CIRISPersist#351) to upgrade the node's own self-signed row to the accord-holder-scrubbed record — so the Key plane publishes an ANCHORED, rootable record → peers root it. Producer (server upgrades the row) + publish-own (edge advertises it) = the seed closes in place, no wipe. (3) #147 §Q B5: persist FountainHeldMeta.{content_bytes,cohort_scope} adopted (server has no fountain-content admit path; import.rs already sets cohort_scope). Verify unchanged v8.5.0. 0.5.77 = persist v12.0.2 anchor seed + accord-card UX.
|
|
4
4
|
edition = "2021"
|
|
5
5
|
# MSRV floor is set by the substrate: ciris-verify v5.2.0 requires 1.86
|
|
6
6
|
# (persist v6.0.1 is 1.83). Build with the higher of the two.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ciris-server
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.83
|
|
4
4
|
License-File: LICENSE
|
|
5
5
|
Summary: The fabric node — the federation's headless cohabitation runtime (registry + lens [+ node] over one shared substrate), as the abi3 wheel CIRISAgent consumes. agent = fabric node + brain.
|
|
6
6
|
Author-email: Eric Moore <eric@ciris.ai>
|
|
@@ -1062,14 +1062,58 @@ async fn genesis_assemble(
|
|
|
1062
1062
|
.into_response()
|
|
1063
1063
|
}
|
|
1064
1064
|
|
|
1065
|
+
/// Project the family from the BAKED verify genesis (`humanity_accord_genesis`) — the
|
|
1066
|
+
/// recognized-but-not-yet-entrenched form used when no persist `federation_families` row
|
|
1067
|
+
/// exists. The genesis body's `family` block already carries `family_name`,
|
|
1068
|
+
/// `consensus_protocol` (`quorum:2/3`), and the `members` list ({key_id, role}) verbatim —
|
|
1069
|
+
/// exactly the `GET /v1/accord/family` shape. `entrenched:false` + `recognized_via` tell the
|
|
1070
|
+
/// client this is the baked recognition, not an entrenched row. 404 only if the genesis is
|
|
1071
|
+
/// somehow unbaked (never, in a shipped build).
|
|
1072
|
+
fn recognized_family_from_baked_genesis() -> Response {
|
|
1073
|
+
let Some(genesis) = humanity_accord_genesis() else {
|
|
1074
|
+
return err(StatusCode::NOT_FOUND, "no HUMANITY_ACCORD family yet");
|
|
1075
|
+
};
|
|
1076
|
+
let fam = genesis.body.get("family");
|
|
1077
|
+
let family_name = fam
|
|
1078
|
+
.and_then(|f| f.get("family_name"))
|
|
1079
|
+
.and_then(|v| v.as_str())
|
|
1080
|
+
.unwrap_or("HUMANITY_ACCORD");
|
|
1081
|
+
let consensus_protocol = fam
|
|
1082
|
+
.and_then(|f| f.get("consensus_protocol"))
|
|
1083
|
+
.and_then(|v| v.as_str())
|
|
1084
|
+
.unwrap_or("quorum:2/3");
|
|
1085
|
+
let members = fam
|
|
1086
|
+
.and_then(|f| f.get("members"))
|
|
1087
|
+
.cloned()
|
|
1088
|
+
.unwrap_or_else(|| serde_json::json!([]));
|
|
1089
|
+
(
|
|
1090
|
+
StatusCode::OK,
|
|
1091
|
+
Json(serde_json::json!({
|
|
1092
|
+
"family_key_id": HUMANITY_ACCORD_FAMILY_KEY_ID,
|
|
1093
|
+
"family_name": family_name,
|
|
1094
|
+
"consensus_protocol": consensus_protocol,
|
|
1095
|
+
"entrenched": false,
|
|
1096
|
+
"recognized_via": "baked-genesis",
|
|
1097
|
+
"members": members,
|
|
1098
|
+
})),
|
|
1099
|
+
)
|
|
1100
|
+
.into_response()
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1065
1103
|
/// `GET /v1/accord/family` — the entrenched HUMANITY_ACCORD family, read from the
|
|
1066
1104
|
/// persist `federation_families` row via the generic family layer
|
|
1067
1105
|
/// ([`crate::family::lookup`]) + its LIVE roster ([`crate::family::active_members`],
|
|
1068
|
-
/// revocation-folded).
|
|
1106
|
+
/// revocation-folded). Falls back to the BAKED genesis recognition
|
|
1107
|
+
/// ([`recognized_family_from_baked_genesis`]) when no row is entrenched yet.
|
|
1069
1108
|
async fn get_family(State(st): State<AccordState>) -> Response {
|
|
1070
1109
|
let family = match crate::family::lookup(&st.engine, HUMANITY_ACCORD_FAMILY_KEY_ID).await {
|
|
1071
1110
|
Ok(Some(f)) => f,
|
|
1072
|
-
|
|
1111
|
+
// No entrenched `federation_families` row — but the family is still RECOGNIZED from
|
|
1112
|
+
// the BAKED genesis (verify's `humanity_accord_genesis`), the same recognition the
|
|
1113
|
+
// kill-switch roster uses. Project the baked 2/3 family (entrenched=false) so the
|
|
1114
|
+
// Trust Root card + the co-scrub quorum resolve on a fresh node, BEFORE persist bakes
|
|
1115
|
+
// the row (CIRISPersist#386 — the durable fix that makes this fallback redundant).
|
|
1116
|
+
Ok(None) => return recognized_family_from_baked_genesis(),
|
|
1073
1117
|
Err(e) => return err(StatusCode::SERVICE_UNAVAILABLE, &format!("store: {e}")),
|
|
1074
1118
|
};
|
|
1075
1119
|
// The live seats (admitted MINUS revoked) — what a swap reflects immediately.
|
|
@@ -1196,8 +1240,9 @@ async fn hardware_sign_invocation(
|
|
|
1196
1240
|
/// the id / message — never a signed envelope (it holds no keys and fabricates no
|
|
1197
1241
|
/// crypto), so the node mints the CSPRNG nonce, the §0.5 timestamps (a 1-hour
|
|
1198
1242
|
/// validity window), and the §0.6 `payload_sha256` (binding the notify's `message`;
|
|
1199
|
-
/// the empty payload for a drill).
|
|
1200
|
-
/// `CONSTITUTIONAL` halt
|
|
1243
|
+
/// the empty payload for a drill). Used for the non-binding kinds AND for RAISING a
|
|
1244
|
+
/// `CONSTITUTIONAL` halt ([`initiate_halt`]) — the synthesized halt carries ONE opener
|
|
1245
|
+
/// signature, which is sub-quorum and cannot latch; only the family M-of-N does.
|
|
1201
1246
|
fn synth_invocation(kind: InvocationKind, invocation_id: &str, payload: &[u8]) -> Invocation {
|
|
1202
1247
|
use base64::Engine as _;
|
|
1203
1248
|
let mut nonce = [0u8; 32];
|
|
@@ -1309,6 +1354,82 @@ async fn initiate_drill(State(st): State<AccordState>, body: axum::body::Bytes)
|
|
|
1309
1354
|
.await
|
|
1310
1355
|
}
|
|
1311
1356
|
|
|
1357
|
+
/// `POST /v1/accord/halt` request. Mirror of [`DrillRequest`] — supply a full
|
|
1358
|
+
/// `constitutional` `invocation` (holder-app path) OR just an `invocation_id` (or nothing,
|
|
1359
|
+
/// for a fresh `halt-<uuid>`) for the node to synthesize it. The cosignature is client-
|
|
1360
|
+
/// submitted OR hardware-signed on the node.
|
|
1361
|
+
#[derive(Debug, Deserialize)]
|
|
1362
|
+
#[cfg_attr(not(feature = "pkcs11"), allow(dead_code))]
|
|
1363
|
+
struct HaltRequest {
|
|
1364
|
+
#[serde(default)]
|
|
1365
|
+
invocation: Option<Invocation>,
|
|
1366
|
+
#[serde(default)]
|
|
1367
|
+
invocation_id: Option<String>,
|
|
1368
|
+
#[serde(default)]
|
|
1369
|
+
signature: Option<ThresholdSignature>,
|
|
1370
|
+
/// Hardware-sign path (mirrors admit-node): the holder's federation `key_id`.
|
|
1371
|
+
#[serde(default)]
|
|
1372
|
+
key_id: Option<String>,
|
|
1373
|
+
/// Hardware-sign path: the USB directory holding the wrapped ML-DSA-65 half.
|
|
1374
|
+
#[serde(default)]
|
|
1375
|
+
mldsa_usb_path: Option<String>,
|
|
1376
|
+
/// Hardware-sign path: the holder's YubiKey PKCS#11 / PIV knobs.
|
|
1377
|
+
#[serde(default)]
|
|
1378
|
+
pkcs11: crate::accord_provision::ProvisionPkcs11,
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
/// `POST /v1/accord/halt` — **RAISE** a 2-of-3 `CONSTITUTIONAL` kill-switch invocation.
|
|
1382
|
+
///
|
|
1383
|
+
/// The initiating holder hardware-signs ONE signature — which is **sub-quorum**, so this
|
|
1384
|
+
/// does **NOT** latch anything: a halt latches ONLY when the family M-of-N is met
|
|
1385
|
+
/// ([`replicate_and_maybe_halt`]'s `is_global_halt` requires `quorum_met`). Raising is thus
|
|
1386
|
+
/// safe to expose from the app; the gravity is protected by the QUORUM, not by making the
|
|
1387
|
+
/// switch un-raisable. The raised invocation gossips to peers and surfaces in their pending
|
|
1388
|
+
/// set; the other holders cosign via `/v1/accord/invocation/concur`, and the quorum-
|
|
1389
|
+
/// completing signature is what replicates-first-then-latches the disk halt.
|
|
1390
|
+
///
|
|
1391
|
+
/// This is the binding twin of [`initiate_drill`] (identical opener; the kind is
|
|
1392
|
+
/// `constitutional` instead of `drill`). Unlike a drill, a synthesized halt is a REAL
|
|
1393
|
+
/// kill-switch once it reaches quorum — the sub-quorum raise is the deliberately safe part.
|
|
1394
|
+
async fn initiate_halt(State(st): State<AccordState>, body: axum::body::Bytes) -> Response {
|
|
1395
|
+
let req: HaltRequest = match serde_json::from_slice(&body) {
|
|
1396
|
+
Ok(r) => r,
|
|
1397
|
+
Err(e) => return err(StatusCode::BAD_REQUEST, &format!("bad request: {e}")),
|
|
1398
|
+
};
|
|
1399
|
+
// A full constitutional invocation (holder-app path) takes precedence; otherwise the
|
|
1400
|
+
// node synthesizes it from the id (the app holds no keys). The single opener signature
|
|
1401
|
+
// is sub-quorum — it gossips but cannot latch.
|
|
1402
|
+
let invocation = match req.invocation {
|
|
1403
|
+
Some(inv) => {
|
|
1404
|
+
if inv.invocation_kind != InvocationKind::Constitutional {
|
|
1405
|
+
return err(
|
|
1406
|
+
StatusCode::BAD_REQUEST,
|
|
1407
|
+
"the halt endpoint requires invocation_kind \"constitutional\"",
|
|
1408
|
+
);
|
|
1409
|
+
}
|
|
1410
|
+
inv
|
|
1411
|
+
}
|
|
1412
|
+
None => {
|
|
1413
|
+
let id = req
|
|
1414
|
+
.invocation_id
|
|
1415
|
+
.as_deref()
|
|
1416
|
+
.map(str::trim)
|
|
1417
|
+
.filter(|s| !s.is_empty())
|
|
1418
|
+
.map_or_else(|| format!("halt-{}", uuid::Uuid::new_v4()), str::to_string);
|
|
1419
|
+
synth_invocation(InvocationKind::Constitutional, &id, b"")
|
|
1420
|
+
}
|
|
1421
|
+
};
|
|
1422
|
+
open_invocation(
|
|
1423
|
+
&st,
|
|
1424
|
+
invocation,
|
|
1425
|
+
req.signature,
|
|
1426
|
+
req.key_id,
|
|
1427
|
+
req.mldsa_usb_path,
|
|
1428
|
+
&req.pkcs11,
|
|
1429
|
+
)
|
|
1430
|
+
.await
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1312
1433
|
/// Shared opener for [`create_invocation`] / [`initiate_drill`]: resolve the
|
|
1313
1434
|
/// initiating cosignature (client-submitted OR hardware-signed on the node), build the
|
|
1314
1435
|
/// invocation object over the registered roster, replicate + maybe-halt (which
|
|
@@ -2445,6 +2566,9 @@ pub fn router_with_halt(engine: Arc<Engine>, halt: AccordHalt) -> Router {
|
|
|
2445
2566
|
"/v1/accord/announce",
|
|
2446
2567
|
axum::routing::post(initiate_announce),
|
|
2447
2568
|
)
|
|
2569
|
+
// RAISE a 2-of-3 CONSTITUTIONAL halt (one opener signature — sub-quorum, cannot
|
|
2570
|
+
// latch; the family M-of-N cosign latches). The binding twin of /drill.
|
|
2571
|
+
.route("/v1/accord/halt", axum::routing::post(initiate_halt))
|
|
2448
2572
|
.route("/v1/accord/halt-status", axum::routing::get(halt_status))
|
|
2449
2573
|
.route("/v1/accord/events", axum::routing::get(list_events))
|
|
2450
2574
|
// genesis ceremony
|
|
@@ -2517,6 +2641,25 @@ mod tests {
|
|
|
2517
2641
|
}
|
|
2518
2642
|
}
|
|
2519
2643
|
|
|
2644
|
+
/// With no entrenched `federation_families` row, `GET /v1/accord/family` projects the
|
|
2645
|
+
/// BAKED genesis — the 2/3 HUMANITY_ACCORD family with its 3 seats — so a fresh node's
|
|
2646
|
+
/// Trust Root card + co-scrub quorum resolve before persist bakes the row (#386).
|
|
2647
|
+
#[tokio::test]
|
|
2648
|
+
async fn get_family_falls_back_to_the_baked_genesis() {
|
|
2649
|
+
let resp = recognized_family_from_baked_genesis();
|
|
2650
|
+
assert_eq!(resp.status(), StatusCode::OK);
|
|
2651
|
+
let bytes = axum::body::to_bytes(resp.into_body(), usize::MAX)
|
|
2652
|
+
.await
|
|
2653
|
+
.unwrap();
|
|
2654
|
+
let v: serde_json::Value = serde_json::from_slice(&bytes).unwrap();
|
|
2655
|
+
assert_eq!(v["family_key_id"], HUMANITY_ACCORD_FAMILY_KEY_ID);
|
|
2656
|
+
assert_eq!(v["family_name"], "HUMANITY_ACCORD");
|
|
2657
|
+
assert_eq!(v["consensus_protocol"], "quorum:2/3");
|
|
2658
|
+
assert_eq!(v["entrenched"], false);
|
|
2659
|
+
assert_eq!(v["recognized_via"], "baked-genesis");
|
|
2660
|
+
assert_eq!(v["members"].as_array().map(|a| a.len()), Some(3));
|
|
2661
|
+
}
|
|
2662
|
+
|
|
2520
2663
|
/// A client-submitted signature is passed through verbatim (the holder-app
|
|
2521
2664
|
/// contract keeps working, feature-independent).
|
|
2522
2665
|
#[tokio::test]
|
|
@@ -1795,16 +1795,30 @@ fn now_rfc3339() -> String {
|
|
|
1795
1795
|
chrono::Utc::now().to_rfc3339()
|
|
1796
1796
|
}
|
|
1797
1797
|
|
|
1798
|
-
/// The accord family's live m-of-n `M
|
|
1798
|
+
/// The accord family's live m-of-n `M`. Reads the entrenched persist family row when
|
|
1799
|
+
/// present, else falls back to the BAKED verify genesis quorum (the same recognition the
|
|
1800
|
+
/// kill-switch roster + `GET /v1/accord/family` use) so a fresh node reports `2` rather than
|
|
1801
|
+
/// `0` before persist entrenches the row (CIRISPersist#386). `0` only if unresolvable.
|
|
1799
1802
|
async fn family_quorum_m(engine: &Engine) -> usize {
|
|
1800
|
-
use ciris_verify_core::accord_genesis::
|
|
1803
|
+
use ciris_verify_core::accord_genesis::{
|
|
1804
|
+
humanity_accord_genesis, HUMANITY_ACCORD_FAMILY_KEY_ID,
|
|
1805
|
+
};
|
|
1801
1806
|
use ciris_verify_core::threshold::QuorumPolicy;
|
|
1802
|
-
|
|
1803
|
-
|
|
1807
|
+
if let Ok(Some(fam)) = crate::family::lookup(engine, HUMANITY_ACCORD_FAMILY_KEY_ID).await {
|
|
1808
|
+
return QuorumPolicy::parse(&fam.consensus_protocol)
|
|
1804
1809
|
.map(|p| p.m)
|
|
1805
|
-
.unwrap_or(0)
|
|
1806
|
-
|
|
1807
|
-
|
|
1810
|
+
.unwrap_or(0);
|
|
1811
|
+
}
|
|
1812
|
+
humanity_accord_genesis()
|
|
1813
|
+
.and_then(|g| {
|
|
1814
|
+
g.body
|
|
1815
|
+
.get("family")
|
|
1816
|
+
.and_then(|f| f.get("consensus_protocol"))
|
|
1817
|
+
.and_then(|v| v.as_str())
|
|
1818
|
+
})
|
|
1819
|
+
.and_then(QuorumPolicy::parse)
|
|
1820
|
+
.map(|p| p.m)
|
|
1821
|
+
.unwrap_or(0)
|
|
1808
1822
|
}
|
|
1809
1823
|
|
|
1810
1824
|
/// The accord family roster's member `key_id`s (None when it can't be resolved — e.g. no
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/.github/workflows/bench.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/canonical/ceg_egress.rs
RENAMED
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capacity/attestation.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/capture/correlation.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/axis_metrics.rs
RENAMED
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs
RENAMED
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/detector/correlated_action.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/extract/projection.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/pipeline/lifecycle.rs
RENAMED
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/retention/eviction.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/axis_calibration.rs
RENAMED
|
File without changes
|
{ciris_server-0.5.82 → ciris_server-0.5.83}/crates/ciris-lens-core/src/scoring/calibration.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|