ciris-server 0.2.2__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/bench.yml +5 -2
- {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/ci.yml +10 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/publish-pypi.yml +4 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/release.yml +17 -3
- ciris_server-0.3.0/CHANGELOG.md +358 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/Cargo.lock +581 -26
- {ciris_server-0.2.2 → ciris_server-0.3.0}/Cargo.toml +88 -26
- {ciris_server-0.2.2 → ciris_server-0.3.0}/FSD/LENS_TO_SERVER_MIGRATION.md +81 -14
- ciris_server-0.3.0/FSD/MESH_ANIMATION_BRIEF.md +228 -0
- ciris_server-0.3.0/FSD/ONE_WHEEL_REEXPORT.md +171 -0
- ciris_server-0.3.0/FSD/PQC_AV_STREAMING_BENCH.md +159 -0
- ciris_server-0.3.0/FSD/QA_AGAINST_RUST.md +180 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/PKG-INFO +24 -10
- {ciris_server-0.2.2 → ciris_server-0.3.0}/README.md +23 -9
- ciris_server-0.3.0/app/.gitignore +7 -0
- ciris_server-0.3.0/app/README.md +88 -0
- ciris_server-0.3.0/app/build.gradle.kts +20 -0
- ciris_server-0.3.0/app/fabric-client/build.gradle.kts +122 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/auth/FederationSigner.kt +90 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/Erasure.kt +51 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationContent.kt +28 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationMetrics.kt +30 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationPeer.kt +95 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/NodeCode.kt +28 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/identity/LocalIdentityAggregate.kt +78 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/net/FabricClient.kt +126 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/net/FabricEndpoints.kt +112 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/platform/PlatformLogger.kt +16 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/ui/screens/ErasureScreen.kt +94 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/ui/screens/IdentityScreen.kt +105 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/viewmodel/ErasureViewModel.kt +73 -0
- ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/viewmodel/IdentityViewModel.kt +52 -0
- ciris_server-0.3.0/app/fabric-client/src/commonTest/kotlin/ai/ciris/fabric/IdentitySliceTest.kt +84 -0
- ciris_server-0.3.0/app/gradle/wrapper/gradle-wrapper.jar +0 -0
- ciris_server-0.3.0/app/gradle/wrapper/gradle-wrapper.properties +7 -0
- ciris_server-0.3.0/app/gradle.properties +13 -0
- ciris_server-0.3.0/app/gradlew +248 -0
- ciris_server-0.3.0/app/gradlew.bat +92 -0
- ciris_server-0.3.0/app/settings.gradle.kts +29 -0
- ciris_server-0.3.0/bench-site/data.json +167 -0
- ciris_server-0.3.0/bench-site/index.html +125 -0
- ciris_server-0.3.0/benches/alm_chain.rs +122 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/benches/pqc_av_streaming.rs +146 -58
- {ciris_server-0.2.2 → ciris_server-0.3.0}/benches/replication_ingest.rs +38 -10
- ciris_server-0.3.0/benches/stream_fanout.rs +75 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/Cargo.toml +3 -3
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/node.rs +318 -26
- {ciris_server-0.2.2 → ciris_server-0.3.0}/pyproject.toml +5 -2
- ciris_server-0.3.0/qa/README.md +70 -0
- ciris_server-0.3.0/qa/ciris_sdk/README.md +275 -0
- ciris_server-0.3.0/qa/ciris_sdk/REFACTORING_SUMMARY.md +115 -0
- ciris_server-0.3.0/qa/ciris_sdk/__init__.py +124 -0
- ciris_server-0.3.0/qa/ciris_sdk/auth_store.py +283 -0
- ciris_server-0.3.0/qa/ciris_sdk/client.py +261 -0
- ciris_server-0.3.0/qa/ciris_sdk/examples/__init__.py +0 -0
- ciris_server-0.3.0/qa/ciris_sdk/examples/agent_interaction.py +116 -0
- ciris_server-0.3.0/qa/ciris_sdk/examples/unified_telemetry_examples.py +223 -0
- ciris_server-0.3.0/qa/ciris_sdk/examples/wa_example.py +72 -0
- ciris_server-0.3.0/qa/ciris_sdk/exceptions.py +73 -0
- ciris_server-0.3.0/qa/ciris_sdk/model_types.py +258 -0
- ciris_server-0.3.0/qa/ciris_sdk/models.py +349 -0
- ciris_server-0.3.0/qa/ciris_sdk/pagination.py +214 -0
- ciris_server-0.3.0/qa/ciris_sdk/rate_limiter.py +188 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/CONFIG_CLIENT.md +196 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/WA_CLIENT_GUIDE.md +157 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/__init__.py +0 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/agent.py +298 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/audit.py +210 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/auth.py +194 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/billing.py +189 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/config.py +317 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/consent.py +619 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/emergency.py +245 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/jobs.py +349 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/memory.py +595 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/setup.py +265 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/system.py +324 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/telemetry.py +747 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/wa.py +150 -0
- ciris_server-0.3.0/qa/ciris_sdk/resources/websocket.py +395 -0
- ciris_server-0.3.0/qa/ciris_sdk/setup.py +67 -0
- ciris_server-0.3.0/qa/ciris_sdk/telemetry_models.py +257 -0
- ciris_server-0.3.0/qa/ciris_sdk/telemetry_responses.py +199 -0
- ciris_server-0.3.0/qa/ciris_sdk/transport.py +177 -0
- ciris_server-0.3.0/qa/ciris_sdk/websocket.py +400 -0
- ciris_server-0.3.0/qa/fabric_results.json +627 -0
- ciris_server-0.3.0/qa/qa_runner/BILLING_QA_README.md +321 -0
- ciris_server-0.3.0/qa/qa_runner/CLAUDE.md +331 -0
- ciris_server-0.3.0/qa/qa_runner/README.md +240 -0
- ciris_server-0.3.0/qa/qa_runner/SDK_MODULE_INTEGRATION.md +443 -0
- ciris_server-0.3.0/qa/qa_runner/__init__.py +11 -0
- ciris_server-0.3.0/qa/qa_runner/__main__.py +666 -0
- ciris_server-0.3.0/qa/qa_runner/config.py +529 -0
- ciris_server-0.3.0/qa/qa_runner/mcp_test_server.py +138 -0
- ciris_server-0.3.0/qa/qa_runner/modules/CLAUDE.md +110 -0
- ciris_server-0.3.0/qa/qa_runner/modules/MULTI_OCCURRENCE_README.md +122 -0
- ciris_server-0.3.0/qa/qa_runner/modules/__init__.py +79 -0
- ciris_server-0.3.0/qa/qa_runner/modules/_module_metadata.py +121 -0
- ciris_server-0.3.0/qa/qa_runner/modules/accord_metrics_tests.py +1340 -0
- ciris_server-0.3.0/qa/qa_runner/modules/accord_tests.py +853 -0
- ciris_server-0.3.0/qa/qa_runner/modules/adapter_autoload_tests.py +504 -0
- ciris_server-0.3.0/qa/qa_runner/modules/adapter_availability_tests.py +410 -0
- ciris_server-0.3.0/qa/qa_runner/modules/adapter_config_tests.py +790 -0
- ciris_server-0.3.0/qa/qa_runner/modules/adapter_manifest_tests.py +360 -0
- ciris_server-0.3.0/qa/qa_runner/modules/agent_mode_tests.py +252 -0
- ciris_server-0.3.0/qa/qa_runner/modules/air_tests.py +280 -0
- ciris_server-0.3.0/qa/qa_runner/modules/api_tests.py +365 -0
- ciris_server-0.3.0/qa/qa_runner/modules/base_test_module.py +454 -0
- ciris_server-0.3.0/qa/qa_runner/modules/billing_integration_tests.py +406 -0
- ciris_server-0.3.0/qa/qa_runner/modules/billing_tests.py +272 -0
- ciris_server-0.3.0/qa/qa_runner/modules/cirisnode_tests.py +554 -0
- ciris_server-0.3.0/qa/qa_runner/modules/cognitive_state_api_tests.py +346 -0
- ciris_server-0.3.0/qa/qa_runner/modules/comprehensive_api_tests.py +311 -0
- ciris_server-0.3.0/qa/qa_runner/modules/comprehensive_single_step_tests.py +172 -0
- ciris_server-0.3.0/qa/qa_runner/modules/consent_tests.py +216 -0
- ciris_server-0.3.0/qa/qa_runner/modules/context_enrichment_tests.py +451 -0
- ciris_server-0.3.0/qa/qa_runner/modules/deferral_taxonomy_tests.py +121 -0
- ciris_server-0.3.0/qa/qa_runner/modules/deferral_tests.py +265 -0
- ciris_server-0.3.0/qa/qa_runner/modules/degraded_mode_tests.py +455 -0
- ciris_server-0.3.0/qa/qa_runner/modules/desktop_viz.py +304 -0
- ciris_server-0.3.0/qa/qa_runner/modules/dream_live_tests.py +439 -0
- ciris_server-0.3.0/qa/qa_runner/modules/dsar_multi_source_tests.py +609 -0
- ciris_server-0.3.0/qa/qa_runner/modules/dsar_tests.py +177 -0
- ciris_server-0.3.0/qa/qa_runner/modules/dsar_ticket_workflow_tests.py +431 -0
- ciris_server-0.3.0/qa/qa_runner/modules/filter_test_helper.py +269 -0
- ciris_server-0.3.0/qa/qa_runner/modules/filter_tests.py +550 -0
- ciris_server-0.3.0/qa/qa_runner/modules/handler_tests.py +545 -0
- ciris_server-0.3.0/qa/qa_runner/modules/he300_benchmark_tests.py +647 -0
- ciris_server-0.3.0/qa/qa_runner/modules/homeassistant_agentic_tests.py +687 -0
- ciris_server-0.3.0/qa/qa_runner/modules/hosted_tools_tests.py +484 -0
- ciris_server-0.3.0/qa/qa_runner/modules/identity_update_tests.py +497 -0
- ciris_server-0.3.0/qa/qa_runner/modules/l4_attestation_tests.py +278 -0
- ciris_server-0.3.0/qa/qa_runner/modules/licensed_agent_tests.py +489 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mcp_tests.py +1370 -0
- ciris_server-0.3.0/qa/qa_runner/modules/memory_benchmark_tests.py +413 -0
- ciris_server-0.3.0/qa/qa_runner/modules/message_id_debug_test.py +146 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/__init__.py +92 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/__main__.py +1562 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/adb_helper.py +691 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/device_helper.py +364 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/first_time_licensed_agent.py +703 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/__init__.py +8 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/build_helper.py +659 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/idevice_helper.py +867 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/ios_ui_automator.py +186 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/vision_helper.py +208 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/xcrun_helper.py +639 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios_physical_test_cases.py +1016 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios_test_cases.py +891 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/portal_registration.py +586 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/test_cases.py +1823 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/test_runner.py +595 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/ui_automator.py +370 -0
- ciris_server-0.3.0/qa/qa_runner/modules/mobile/verify_trust_tests.py +491 -0
- ciris_server-0.3.0/qa/qa_runner/modules/model_eval_tests.py +770 -0
- ciris_server-0.3.0/qa/qa_runner/modules/multi_occurrence_tests.py +410 -0
- ciris_server-0.3.0/qa/qa_runner/modules/parallel_locales_tests.py +448 -0
- ciris_server-0.3.0/qa/qa_runner/modules/partnership_tests.py +165 -0
- ciris_server-0.3.0/qa/qa_runner/modules/play_live_tests.py +329 -0
- ciris_server-0.3.0/qa/qa_runner/modules/reddit_tests.py +374 -0
- ciris_server-0.3.0/qa/qa_runner/modules/safety_battery.py +903 -0
- ciris_server-0.3.0/qa/qa_runner/modules/safety_interpret.py +1132 -0
- ciris_server-0.3.0/qa/qa_runner/modules/sdk_tests.py +114 -0
- ciris_server-0.3.0/qa/qa_runner/modules/secrets_encryption_tests.py +236 -0
- ciris_server-0.3.0/qa/qa_runner/modules/setup_e2e_tests.py +681 -0
- ciris_server-0.3.0/qa/qa_runner/modules/setup_tests.py +331 -0
- ciris_server-0.3.0/qa/qa_runner/modules/simple_single_step_tests.py +78 -0
- ciris_server-0.3.0/qa/qa_runner/modules/solitude_live_tests.py +395 -0
- ciris_server-0.3.0/qa/qa_runner/modules/sql_external_data_tests.py +858 -0
- ciris_server-0.3.0/qa/qa_runner/modules/state_transition_tests.py +425 -0
- ciris_server-0.3.0/qa/qa_runner/modules/streaming_verification.py +2053 -0
- ciris_server-0.3.0/qa/qa_runner/modules/system_messages_tests.py +225 -0
- ciris_server-0.3.0/qa/qa_runner/modules/utility_adapters_tests.py +333 -0
- ciris_server-0.3.0/qa/qa_runner/modules/vision_tests.py +382 -0
- ciris_server-0.3.0/qa/qa_runner/modules/wallet_tests.py +507 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/CLAUDE.md +174 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/__init__.py +89 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/__main__.py +1676 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/browser_helper.py +476 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/desktop_app_helper.py +734 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/desktop_test.py +152 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/federation_screen_tags.py +272 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/federation_walk_report.py +281 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/federation_walk_test.py +942 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/licensed_agent_flow.py +687 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/server_manager.py +496 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/test_cases.py +1146 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/test_federation_walk_unit.py +299 -0
- ciris_server-0.3.0/qa/qa_runner/modules/web_ui/test_runner.py +515 -0
- ciris_server-0.3.0/qa/qa_runner/qa_api_test.py +204 -0
- ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_073205.json +113 -0
- ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_153259.json +221 -0
- ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_154628.json +174 -0
- ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_154817.json +170 -0
- ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_155917.json +373 -0
- ciris_server-0.3.0/qa/qa_runner/qa_reports_comprehensive/qa_report_20250825_075504.json +149 -0
- ciris_server-0.3.0/qa/qa_runner/qa_reports_final/qa_report_20250825_092420.json +123 -0
- ciris_server-0.3.0/qa/qa_runner/qa_reports_test/qa_report_20250825_092452.json +35 -0
- ciris_server-0.3.0/qa/qa_runner/qa_scripts/README.md +118 -0
- ciris_server-0.3.0/qa/qa_runner/qa_scripts/qa_api_test.py +262 -0
- ciris_server-0.3.0/qa/qa_runner/qa_scripts/qa_v1.0_sdk_comprehensive.py +243 -0
- ciris_server-0.3.0/qa/qa_runner/qa_scripts/qa_v1.0_unhealthy_services_check.py +89 -0
- ciris_server-0.3.0/qa/qa_runner/qa_test.py +272 -0
- ciris_server-0.3.0/qa/qa_runner/qa_test_sdk.py +434 -0
- ciris_server-0.3.0/qa/qa_runner/requirements.txt +5 -0
- ciris_server-0.3.0/qa/qa_runner/runner.py +2717 -0
- ciris_server-0.3.0/qa/qa_runner/scripts/__init__.py +0 -0
- ciris_server-0.3.0/qa/qa_runner/scripts/he300_stream_debug.py +70 -0
- ciris_server-0.3.0/qa/qa_runner/server.py +1682 -0
- ciris_server-0.3.0/qa/qa_runner/staged_env.py +269 -0
- ciris_server-0.3.0/qa/qa_runner/status_tracker.py +244 -0
- ciris_server-0.3.0/qa/qa_runner/test_data/dsar_multi_source_privacy_schema.yaml +28 -0
- ciris_server-0.3.0/qa/qa_runner/test_data/qa_test.db +0 -0
- ciris_server-0.3.0/qa/qa_runner/test_data/qa_test_privacy_schema.yaml +40 -0
- ciris_server-0.3.0/qa/qa_runner/test_data/sql_config.json +9 -0
- ciris_server-0.3.0/qa/run_fabric.py +313 -0
- ciris_server-0.3.0/qa/seed_wa_cert.py +65 -0
- ciris_server-0.3.0/scripts/bench_report.py +674 -0
- ciris_server-0.3.0/src/auth/ABSORPTION.md +163 -0
- ciris_server-0.3.0/src/auth/api_keys.rs +306 -0
- ciris_server-0.3.0/src/auth/attestation.rs +138 -0
- ciris_server-0.3.0/src/auth/consent.rs +140 -0
- ciris_server-0.3.0/src/auth/device_auth.rs +391 -0
- ciris_server-0.3.0/src/auth/erasure.rs +108 -0
- ciris_server-0.3.0/src/auth/gate.rs +47 -0
- ciris_server-0.3.0/src/auth/mod.rs +41 -0
- ciris_server-0.3.0/src/auth/oauth.rs +961 -0
- ciris_server-0.3.0/src/auth/roles.rs +508 -0
- ciris_server-0.3.0/src/auth/self_login.rs +167 -0
- ciris_server-0.3.0/src/auth/session.rs +436 -0
- ciris_server-0.3.0/src/auth/store.rs +121 -0
- ciris_server-0.3.0/src/auth/verify.rs +100 -0
- ciris_server-0.3.0/src/benchmarks/mod.rs +31 -0
- ciris_server-0.3.0/src/benchmarks/scoreboard.rs +374 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/src/compose.rs +61 -52
- {ciris_server-0.2.2 → ciris_server-0.3.0}/src/import.rs +12 -4
- ciris_server-0.3.0/src/lib.rs +237 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/src/main.rs +6 -0
- ciris_server-0.3.0/tests/alm_chain.rs +78 -0
- ciris_server-0.3.0/tests/chaos_mesh.rs +234 -0
- ciris_server-0.3.0/tests/noise_floor.rs +587 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/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/src/lib.rs +0 -126
- {ciris_server-0.2.2 → ciris_server-0.3.0}/.cargo/config.toml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/conformance.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/.gitignore +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/FSD/REGISTRY_FOLD_DERISK.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/FSD/SERVER_1.0_PLAN.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/LICENSE +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/MISSION.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/.github/workflows/bench.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/.github/workflows/ci.yml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/.gitignore +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/.pre-commit-config.yaml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/LICENSE +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/MISSION.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/README.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/aggregate.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/canonicalize.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/project.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/deny.toml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/BENCHMARKS.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/COHABITATION.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PRE_COMMIT.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/RELEASE_NOTES.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/THREAT_MODEL.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/pyproject.toml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/api.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/delegate.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/pyo3.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/canonical/ceg_egress.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/canonical/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/attestation.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/score.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/batch.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/client.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/consent.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/correlation.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/event.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/partial.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/py_engine.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/seal.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/declared.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/resourcing.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/egress.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/node.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/retention.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/upstream.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/axis_metrics.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/correlated_action.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/distributive_access.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/manifold.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/extract/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/extract/projection.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/ffi/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/ffi/pyo3.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/lib.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/observability/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/pipeline/lifecycle.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/pipeline/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/eviction.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/summary.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/handler.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/relay.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/ret_relay.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/aggregate.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/oracle.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/assembly.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/axis_calibration.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/calibration.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/capacity.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/n_eff.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/result.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/signing/event.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/signing/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/wire/mod.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/wire/signer.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/README.md +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/sovereign_rlib.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/rust-toolchain.toml +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/src/config.rs +0 -0
- {ciris_server-0.2.2 → ciris_server-0.3.0}/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 --bench stream_fanout
|
|
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
|
|
@@ -46,6 +46,16 @@ jobs:
|
|
|
46
46
|
# `extension-module` (libpython-no-link) into the test binary.
|
|
47
47
|
- run: cargo clippy --all-targets -- -D warnings
|
|
48
48
|
- run: cargo test
|
|
49
|
+
# The NOISE FLOOR proof (CIRISServer#14, CEG §19.7 / §19.3 N5) — provable
|
|
50
|
+
# individual-unrecoverability for erasure compliance, run explicitly so the
|
|
51
|
+
# MEASURED residual-fidelity numbers land in the CI log (Linux only — one
|
|
52
|
+
# canonical record; the test also runs on every OS via `cargo test` above).
|
|
53
|
+
# The three gated cases: (a) revocation ⇒ EjectHardDelete leaves NO
|
|
54
|
+
# recoverable tier, (b) the measured noise floor below n_source symbols,
|
|
55
|
+
# (c) N→1 aggregation erases the individual below the 1/N gist bound.
|
|
56
|
+
- name: Noise floor proof (MEASURED, Linux)
|
|
57
|
+
if: runner.os == 'Linux'
|
|
58
|
+
run: cargo test --test noise_floor -- --nocapture
|
|
49
59
|
# The PyO3 wheel surface (Linux only; libpython linked, no extension-module).
|
|
50
60
|
- name: clippy (python surface, Linux)
|
|
51
61
|
if: runner.os == 'Linux'
|
|
@@ -243,3 +243,7 @@ jobs:
|
|
|
243
243
|
packages-dir: dist/
|
|
244
244
|
# Trusted Publishing: no `password:` — the OIDC identity is verified
|
|
245
245
|
# against the publisher registered on PyPI.
|
|
246
|
+
# Idempotent re-cuts: if a tag is re-cut onto a new commit, the wheels
|
|
247
|
+
# for any platform already on PyPI are skipped instead of 400-ing the
|
|
248
|
+
# whole upload — a clean re-cut publishes only the newly-built files.
|
|
249
|
+
skip-existing: true
|
|
@@ -38,19 +38,26 @@ jobs:
|
|
|
38
38
|
build-native:
|
|
39
39
|
name: Build (${{ matrix.target }})
|
|
40
40
|
runs-on: ${{ matrix.os }}
|
|
41
|
+
# Allowed-to-fail lanes (the TPM backend can't cross-compile) never block the
|
|
42
|
+
# release; see the armv7 entry + the build-musl job.
|
|
43
|
+
continue-on-error: ${{ matrix.allow_fail || false }}
|
|
41
44
|
strategy:
|
|
42
45
|
fail-fast: false
|
|
43
46
|
matrix:
|
|
44
47
|
include:
|
|
45
48
|
- os: ubuntu-latest
|
|
46
49
|
target: x86_64-unknown-linux-gnu
|
|
47
|
-
-
|
|
50
|
+
# ARM64 builds NATIVELY on an ARM runner (apt libtss2-dev applies) —
|
|
51
|
+
# cross-compiling tss-esapi from x86 has no target libtss2.
|
|
52
|
+
- os: ubuntu-24.04-arm
|
|
48
53
|
target: aarch64-unknown-linux-gnu
|
|
49
|
-
|
|
50
|
-
#
|
|
54
|
+
# ARM32 — Raspberry Pi / embedded mesh nodes. Cross-builds the TPM
|
|
55
|
+
# backend with no target libtss2 → allowed-to-fail (CIRISServer#7);
|
|
56
|
+
# never blocks the release.
|
|
51
57
|
- os: ubuntu-latest
|
|
52
58
|
target: armv7-unknown-linux-gnueabihf
|
|
53
59
|
cross: true
|
|
60
|
+
allow_fail: true
|
|
54
61
|
- os: macos-latest
|
|
55
62
|
target: x86_64-apple-darwin
|
|
56
63
|
- os: macos-latest
|
|
@@ -134,6 +141,9 @@ jobs:
|
|
|
134
141
|
build-musl:
|
|
135
142
|
name: Build (aarch64 musl)
|
|
136
143
|
runs-on: ubuntu-latest
|
|
144
|
+
# zigbuild cross can't satisfy the TPM backend's target libtss2 — allowed to
|
|
145
|
+
# fail so it never blocks the release (aarch64-gnu native covers ARM64 Linux).
|
|
146
|
+
continue-on-error: true
|
|
137
147
|
steps:
|
|
138
148
|
- uses: actions/checkout@v4
|
|
139
149
|
- uses: dtolnay/rust-toolchain@stable
|
|
@@ -170,6 +180,10 @@ jobs:
|
|
|
170
180
|
create-release:
|
|
171
181
|
name: Create Release
|
|
172
182
|
needs: [build-native, build-musl]
|
|
183
|
+
# Run as long as the build stage finished (not cancelled) — the allowed-to-fail
|
|
184
|
+
# ARM lanes (armv7 cross, aarch64 musl) must not skip the release; it ships
|
|
185
|
+
# whatever built (x86_64 linux/mac/win + aarch64-linux-gnu native).
|
|
186
|
+
if: ${{ !cancelled() }}
|
|
173
187
|
runs-on: ubuntu-latest
|
|
174
188
|
steps:
|
|
175
189
|
- uses: actions/checkout@v4
|
|
@@ -0,0 +1,358 @@
|
|
|
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.3.0] — 2026-06-16
|
|
8
|
+
|
|
9
|
+
The integrated fabric node: the **auth subsystem** absorbed, the **one-wheel**
|
|
10
|
+
re-export surface, and the substrate on the **v8.4.0 / v4.3.0 / v5.10.0** floor.
|
|
11
|
+
This is the node we replace the deployed CIRISLens with (and the wheel CIRISAgent
|
|
12
|
+
adopts to drop its lens-core + its own auth).
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- **Auth subsystem (`src/auth/`, CIRISServer#9) — the fabric is the single auth
|
|
16
|
+
authority.** The agent's entire user/WA/OAuth/api-key/service-token surface
|
|
17
|
+
already lived in one persist table (`wa_cert`), so this is a Python→Rust port
|
|
18
|
+
over the same rows — **no schema fork, 0 conflicts** (`src/auth/ABSORPTION.md`:
|
|
19
|
+
33 capabilities mapped). One `x-ciris-*` hybrid request verifier (accepts the
|
|
20
|
+
identity **or** any admitted occurrence — the consenting user *and* the
|
|
21
|
+
generating agent are both valid signers); **self-at-login** (§8.1.12.7) as the
|
|
22
|
+
login ceremony; OAuth front-door (providers/login/callback + native
|
|
23
|
+
google/apple); sessions/token issuer (replaces OAuth→WA→JWT); the CEG role-set
|
|
24
|
+
**plus** the agent's `UserRole`/`Permission` model verbatim; api-keys +
|
|
25
|
+
service-token revocation; attestation; user-signed **consent**; and CEG-native
|
|
26
|
+
**erasure** (GDPR Art. 17 in-app path → `Engine::evict_actor`). Password KDF,
|
|
27
|
+
native-token JWKS, and root-signature verification are byte-compatible with the
|
|
28
|
+
agent's own crypto (verified against agent-produced vectors).
|
|
29
|
+
- **One-wheel re-export (CIRISServer#4):** `ciris_server` re-hosts the persist /
|
|
30
|
+
edge / lens Python surfaces under one `.so` (one PyO3 type registry —
|
|
31
|
+
`ciris_server.Engine is ciris_server.persist.Engine`), so CIRISAgent consumes a
|
|
32
|
+
single wheel and the cross-wheel type-identity bug class (CIRISPersist#109)
|
|
33
|
+
cannot occur. (`reset_engine` / `init_edge_runtime` re-export hooks pending
|
|
34
|
+
upstream: CIRISPersist#231, CIRISEdge#156; `ciris-verify` stays a standalone
|
|
35
|
+
ctypes wheel.)
|
|
36
|
+
- **Noise-floor compliance bench (CIRISServer#14, `tests/noise_floor.rs`):**
|
|
37
|
+
measured individual-unrecoverability — revocation → hard-delete, the
|
|
38
|
+
reconstruction cliff at the fountain floor, aggregation-is-erasure.
|
|
39
|
+
- **The fabric app (`app/`, CIRISServer#15):** the CIRISAgent KMP mesh app minus
|
|
40
|
+
agent cards (identity slice proven; governance/safety surfaces).
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
- Substrate floor → **persist v8.4.0 / edge v4.3.0 / verify-family v5.10.0** (the
|
|
44
|
+
§19.7 erasure primitives + `wa_cert` auth substrate).
|
|
45
|
+
|
|
46
|
+
### Validated
|
|
47
|
+
- **Behavior-correct drop-in proof (`qa/`, `FSD/QA_AGAINST_RUST.md`).** The agent's
|
|
48
|
+
own Python QA-runner module definitions are run unmodified against a live Rust
|
|
49
|
+
`ciris-server`: **12/12 fabric-route tests pass, 0 gaps** — including the
|
|
50
|
+
load-bearing byte-compat proof that a password hash produced by the agent's own
|
|
51
|
+
`cryptography.PBKDF2HMAC` authenticates against the Rust `verify_password`. The
|
|
52
|
+
~30 agent-brain modules are correctly N/A on a headless fabric node. The QA
|
|
53
|
+
runner stays Python (it is HTTP-driving conformance, not ported).
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
- **api-keys / service-token routes are now authz-gated.** `POST/GET/DELETE
|
|
57
|
+
/v1/auth/api-keys*` and `/v1/auth/service-token/revoke` now require a live
|
|
58
|
+
session bearer whose role carries `manage_user_permissions` (matching the
|
|
59
|
+
agent's gate) — the one residual the conformance run surfaced.
|
|
60
|
+
|
|
61
|
+
### Notes
|
|
62
|
+
- Companion: **CIRISStatus** becomes a fabric monitoring node (Flows A/B +
|
|
63
|
+
`health:liveness` `scores` + website sockets).
|
|
64
|
+
- GDPR erasure is **both** entry points: the DSAR endpoint on the monitor node
|
|
65
|
+
**and** the in-app CEG-native `withdraws`. Full lens decommission stays gated on
|
|
66
|
+
the DSAR-via-status endpoint landing (keep the Python DSAR reachable until then).
|
|
67
|
+
|
|
68
|
+
## [0.2.6] — 2026-06-16
|
|
69
|
+
|
|
70
|
+
Substrate floor → **v4.2.0 family** + the **multi-tier ALM relay chain** test
|
|
71
|
+
(CIRISEdge#149 shipped).
|
|
72
|
+
|
|
73
|
+
### Changed
|
|
74
|
+
- **Floor → persist v8.2.0 / edge v4.2.0 / verify-family v5.9.0** (CEG 1.0-RC12),
|
|
75
|
+
root + in-tree lens-core. Additive minor bumps; no composition-root change.
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- **`benches/alm_chain.rs` + `tests/alm_chain.rs`** — the multi-tier ALM relay
|
|
79
|
+
chain, now buildable because edge v4.2.0 ships the relay outer-open primitive
|
|
80
|
+
`open_av_outer` (CIRISEdge#149). Each interior hop opens the inbound per-link
|
|
81
|
+
outer AEAD and re-seals downstream **without touching the epoch DEK**, so the
|
|
82
|
+
inner E2E ciphertext survives arbitrary relay→relay hops.
|
|
83
|
+
- **Correctness (gated)**: `inner_e2e_survives_relay_chain` — viewer recovers the
|
|
84
|
+
publisher's plaintext byte-identical after 1–5 relay hops; `wrong_outer_key_at_a_hop_fails_closed`.
|
|
85
|
+
- **Cost (measured)**: ~**437 ns per relay hop** (blob) / 3.18 µs (full 720p);
|
|
86
|
+
end-to-end through 4 tiers ~2.7 µs (≈0.44 µs/added tier). So 2,000 blob streams
|
|
87
|
+
× 4 tiers @30 fps ≈ ~10% of one core of relay forwarding — confirming the limit
|
|
88
|
+
is donated bandwidth, not CPU (FSD §3–§4).
|
|
89
|
+
- **`tests/chaos_mesh.rs` — resilience proofs.** Stream **path-redundancy**: a
|
|
90
|
+
chunk reaches a viewer over disjoint relay paths (ALM primary + 2 backups); any
|
|
91
|
+
*surviving* path yields the identical plaintext — kill all but one and the stream
|
|
92
|
+
continues, no re-publish. And the **survival floor**: any 20 of 30 fountain
|
|
93
|
+
holders reconstruct → 33% holder-loss tolerance.
|
|
94
|
+
- **Bench page → "Guaranteed mesh characteristics" (the UX spec).** Each guarantee
|
|
95
|
+
— presence-blob (50 kbps) / focus-stream (2.5 Mbps) bandwidth, per-relay-hop +
|
|
96
|
+
tree-depth latency, join/rekey cost, path-redundancy, content survival, E2E-PQC
|
|
97
|
+
(~0/frame) — with a provenance badge (MEASURED / MODEL / PROJECTED) and a UX
|
|
98
|
+
implication, so the UX is built against guaranteed envelopes. `alm_chain` wired
|
|
99
|
+
into `bench.yml`; the ALM pillar now carries the measured per-hop/per-tier cost.
|
|
100
|
+
|
|
101
|
+
## [0.2.5] — 2026-06-16
|
|
102
|
+
|
|
103
|
+
First cut of the **holonomic federation scoreboard** (CIRISServer#12/#13) — the
|
|
104
|
+
operator-facing measured-vs-modeled surface, replacing per-cut SOTA-comparison toy
|
|
105
|
+
numbers with grounded metrics.
|
|
106
|
+
|
|
107
|
+
### Added
|
|
108
|
+
- **`server::benchmarks` module + `ciris-server scoreboard`** — emits a JSON
|
|
109
|
+
scoreboard of the federation's capacity/survival posture.
|
|
110
|
+
- **Storage tier — fully grounded** from a `FountainPolicy` (N=20, K=6, H=30
|
|
111
|
+
reference). Replication overhead (1.5×), per-peer load (5%), active-eject
|
|
112
|
+
threshold (H×1.15=34.5), holographic degradation tiers, and the **survival
|
|
113
|
+
floor** `P(Binomial(H, q) ≥ N)` computed in log-space. The calculator
|
|
114
|
+
**reproduces the scale_model v0.7 survival curve from first principles**
|
|
115
|
+
(99.99999 / 99.991 / 99.706 / 97.438 / 73.04 % at q = 0.95/0.90/0.85/0.80/0.70)
|
|
116
|
+
— asserted in tests — which is what makes "measured vs modeled" trustworthy.
|
|
117
|
+
- **Live overlay** (`with_measurement`): recomputes overhead + survival from
|
|
118
|
+
observed holders + real per-peer `q`, and **alarms** when live survival dips
|
|
119
|
+
under the 99% floor (the early-warning signal before content becomes
|
|
120
|
+
unreconstructable), or on >2.0× over-replication.
|
|
121
|
+
- **Substrate + holonomic tiers are honest `gated` stubs** (not fabricated):
|
|
122
|
+
substrate gated on edge v4.1.1's `NETWORK_CAPACITY_MODEL.md` + benches
|
|
123
|
+
(CIRISEdge PR#147); holonomic gated on fountain/holonomic wiring (#11) +
|
|
124
|
+
CIRISRegistry#88's composite model that grounds the targets.
|
|
125
|
+
|
|
126
|
+
## [0.2.4] — 2026-06-16
|
|
127
|
+
|
|
128
|
+
Catch-up to the **v8 / v4 / v5.8 substrate family** and **CEG 1.0-RC11**. Two
|
|
129
|
+
substrate MAJOR bumps (persist 7→8, edge 3→4) adopted with **zero composition-root
|
|
130
|
+
changes** — the breakage surface was a single benchmark.
|
|
131
|
+
|
|
132
|
+
### Changed
|
|
133
|
+
- **Substrate floor → persist v8.1.0 / edge v4.1.0 / verify-family v5.8.0**
|
|
134
|
+
(root + in-tree `ciris-lens-core`, MAJOR caret pins co-bumped). The major bumps
|
|
135
|
+
are additive: persist v8 = the `fountain` content primitive (new module);
|
|
136
|
+
edge v4 = the `holonomic` substrate (CEG §19) + realtime-A/V scale work — none of
|
|
137
|
+
it touches the symbols the composition root calls. `compose.rs`, `import.rs`,
|
|
138
|
+
`lib.rs`, and the replication bench/test needed no edits; `CompleteTrace` and the
|
|
139
|
+
hybrid ingest gate are unchanged (replication test still green under v8.1.0).
|
|
140
|
+
- **CEG → 1.0-RC11** (doc/vendor-only for the node, as RC6/RC7 were). The frozen
|
|
141
|
+
§4 "1+4" attestation envelope, signature format, dest-hash, trace schema, and
|
|
142
|
+
identity aggregate are untouched across RC7→RC11. The one envelope-touching
|
|
143
|
+
behavior change — RC8's store-path PQC clarification (the durable corpus MUST
|
|
144
|
+
carry+verify the ML-DSA-65 half) — is already satisfied by 0.2.3's hybrid hard
|
|
145
|
+
cut. RC9/RC10/RC11 wire additions (`codec_id`/`ChunkLayer`, the full
|
|
146
|
+
`SealedAvChunk` layout + double-seal nonces, the §19 holonomic shapes) are
|
|
147
|
+
**edge-owned transport/substrate framing**, additive, reached only through the
|
|
148
|
+
edge dependency.
|
|
149
|
+
|
|
150
|
+
### Fixed
|
|
151
|
+
- **`pqc_av_streaming` bench** updated to edge v3.8.0's seal API (CIRISEdge#128):
|
|
152
|
+
`seal_av_chunk`/`seal_av_inner` take `codec_id` + `ChunkLayer` (pass
|
|
153
|
+
`CODEC_OPAQUE` + `ChunkLayer::BASE` to keep byte-identical v3.7.0 wire output),
|
|
154
|
+
and `MeshParticipant::new` defaults the new `layer_policy`. CI now checks
|
|
155
|
+
`--all-targets` so the (harness=false) bench can't silently break on a co-bump.
|
|
156
|
+
|
|
157
|
+
### Adoption
|
|
158
|
+
- Closes the persist 7.0/7.1/7.2 adoption issues (#3/#8/#10) — all satisfied by the
|
|
159
|
+
0.2.3 hybrid hard cut + this floor. persist v8.0's fountain store API (#11) is now
|
|
160
|
+
available at the floor; wiring the fountain/swarm storage role is tracked as
|
|
161
|
+
follow-on feature work, not required for the floor.
|
|
162
|
+
|
|
163
|
+
## [0.2.3] — 2026-06-16
|
|
164
|
+
|
|
165
|
+
Hybrid **hard cut, complete end-to-end** (no classical-only path at any tier),
|
|
166
|
+
substrate floor → the v3.7.1 / v7.2.0 / v5.7.0 family, CEG **1.0-RC7**, and a
|
|
167
|
+
CEWP-honest benchmark page.
|
|
168
|
+
|
|
169
|
+
### Changed
|
|
170
|
+
- **Hard cut to hybrid signing — now end-to-end (CIRISVerify#75 — "no classical-
|
|
171
|
+
only, HNDL demands it").** Three tiers, all hybrid (sealed Ed25519 + ML-DSA-65):
|
|
172
|
+
1. **Federation wire** sigs — edge `LocalSigner` (already hybrid).
|
|
173
|
+
2. **Storage-tier scrub** sig — the Engine is built with
|
|
174
|
+
`Engine::with_hardware_signer_hybrid` (CIRISPersist#224); the Ed25519 half
|
|
175
|
+
stays hardware-sealed (never unsealed), the ML-DSA-65 half is the software PQC
|
|
176
|
+
signer. Applies to the node Engine **and** the legacy-import Engine.
|
|
177
|
+
3. **Per-trace envelope** sig — closed by **persist v7.2.0** (CIRISPersist#225,
|
|
178
|
+
migration `V083`): `trace_events` carries the ML-DSA-65 half and
|
|
179
|
+
`VerifyMode::Full` **rejects classical-only per-trace sigs**. CIRISServer's
|
|
180
|
+
replication path inherits the rejection; the legacy-import path stays exempt
|
|
181
|
+
(`TrustPreVerified`, provenance-only Ed25519).
|
|
182
|
+
Rationale is forge-later, not decrypt-later: the trace corpus is durable,
|
|
183
|
+
content-addressed, kept-for-posterity evidence, so its signatures must outlive
|
|
184
|
+
the classical primitive.
|
|
185
|
+
- **`GET /v1/identity` now serves all six keys.** With the hybrid hardware Engine,
|
|
186
|
+
the aggregate is sourced directly from persist's `local_identity_aggregate`
|
|
187
|
+
(CIRISPersist#223) — the ML-DSA-65 signing half **and** the persist-minted
|
|
188
|
+
content-KEM pair (`content_x25519` / `content_ml_kem_768`) are populated; they
|
|
189
|
+
are no longer `null`. Removes the hand-assembled aggregate.
|
|
190
|
+
- **Substrate floor → persist v7.2.0 / edge v3.7.1 / verify-family v5.7.0**
|
|
191
|
+
(edge v3.7.1's hard-cut co-bump: verify v5.7.0 = hybrid-required at federation
|
|
192
|
+
tier, closes CIRISVerify#75/#76/#77; persist v7.2.0 = trace-tier hybrid, #225);
|
|
193
|
+
**CEG 1.0-RC7**. lens-core co-bumped in lockstep.
|
|
194
|
+
|
|
195
|
+
### Added
|
|
196
|
+
- **Benchmark upgrade — the CEWP crux ("stream and store at massive scale").**
|
|
197
|
+
- `av_mesh_fanout/shared_inner` now drives v3.7.0's real `seal_av_inner` /
|
|
198
|
+
`seal_av_outer` (CIRISEdge#122), not a hand-rolled mirror — measured fan-out
|
|
199
|
+
win 1.36×/1.85×/**2.07×** at N=2/8/50.
|
|
200
|
+
- **`av_rekey`** (new): the membership-change rekey cost, **projected** from the
|
|
201
|
+
real hybrid-KEM wrap — `flat_rewrap` O(N) vs `tree_rewrap` O(log N). A 50-room
|
|
202
|
+
delta is ~3.4 ms flat → ~0.41 ms with the tree (8.3×). Labelled projected: the
|
|
203
|
+
substrate doesn't rekey on join/leave yet (**CIRISEdge#129**), so "effectively
|
|
204
|
+
free" holds at steady state, not yet under churn.
|
|
205
|
+
- **Honest accounting:** `av_frame_halves` now measures seal (send) vs open
|
|
206
|
+
(recv) **per size**; the report charges receivers open-only and states its GOP
|
|
207
|
+
model inline instead of cherry-picking a frame. A 50-person 30 fps room is
|
|
208
|
+
~0.5% of a core to receive (stated 720p/GOP-30 model), range ~0.17–0.45%.
|
|
209
|
+
- **Replication is now hybrid (the hard cut at the store path).** The bench
|
|
210
|
+
signs full-hybrid traces (the only kind v7.2.0 accepts); measured ingest is
|
|
211
|
+
**~230 µs/trace (~4,300 traces/s/core)** — the ML-DSA-65 verify adds ~150 µs
|
|
212
|
+
over the old Ed25519-only ~76 µs. That is the **measured HNDL price** at the
|
|
213
|
+
store path. Re-delivery still pays full verify (replay is verify-bound by
|
|
214
|
+
design — verify-before-mutation; dedup-first would be an AV-9 oracle), so the
|
|
215
|
+
levers are the pre-verified relay path + **batch verification** (now materially
|
|
216
|
+
more valuable; tracked in CIRISPersist#225's scale note), not reordering.
|
|
217
|
+
|
|
218
|
+
## [0.2.2] — 2026-06-15
|
|
219
|
+
|
|
220
|
+
### Added
|
|
221
|
+
- **`import-traces` on the wheel** (pip-only bridge): the abi3 wheel now exposes
|
|
222
|
+
`ciris_server.import_traces(dump_dir)`, and the `ciris-server` console script
|
|
223
|
+
accepts `ciris-server import-traces <dump-dir>` (same CLI as the binary). The
|
|
224
|
+
legacy CIRISLens dump → persist-corpus-as-CEG import no longer needs the
|
|
225
|
+
source-built binary. Verified from the installed wheel against the prod dump:
|
|
226
|
+
all 12,165 traces, errored=0.
|
|
227
|
+
|
|
228
|
+
## [0.2.1] — 2026-06-15
|
|
229
|
+
|
|
230
|
+
Android wheels (incl. arm32) now publish; legacy-trace importer.
|
|
231
|
+
|
|
232
|
+
### Added
|
|
233
|
+
- **`ciris-server import-traces <dump-dir>`** — imports the legacy CIRISLens
|
|
234
|
+
TimescaleDB dump into the persist corpus as CEG objects. Reconstructs flat
|
|
235
|
+
1.9.x lens rows → `CompleteTrace`/`BatchEnvelope` (reasoning columns →
|
|
236
|
+
components; original schema + signature in a provenance component); stamped
|
|
237
|
+
`2.7.legacy`; imported pre-verified; idempotent. A salvage pass repairs the
|
|
238
|
+
dump's systematic `\\"`→`\"` export mis-escaping and flags those rows
|
|
239
|
+
`_salvaged: true`. Validated on the prod dump: **all 12,165 traces →
|
|
240
|
+
20,959 trace-events, errored=0** (3,635 salvaged).
|
|
241
|
+
- **Android wheels** (armeabi-v7a + arm64-v8a) now build & publish (NDK r26b
|
|
242
|
+
cross-compile: explicit `CC`/`AR`/linker for the toolchain, legacy-NDK
|
|
243
|
+
tool-name shims for openssl-src, `ANDROID_API_LEVEL`). Promoted from
|
|
244
|
+
continue-on-error to a required publish lane.
|
|
245
|
+
|
|
246
|
+
## [0.2.0] — 2026-06-15
|
|
247
|
+
|
|
248
|
+
All-platforms-green CI, **full hybrid post-quantum federation signatures**, and a
|
|
249
|
+
published interpreted benchmark page.
|
|
250
|
+
|
|
251
|
+
### Added
|
|
252
|
+
- **Full hybrid PQC federation signature (Ed25519 + ML-DSA-65).** The node mints
|
|
253
|
+
(or **adopts**, on takeover) an `ml_dsa_65.seed` and signs every federation
|
|
254
|
+
envelope with both halves (edge `LocalSigner` classical + pqc). `/v1/identity`
|
|
255
|
+
now carries `ml_dsa_65_pubkey_b64` + `pqc_key_id`. Classical stays
|
|
256
|
+
hardware-sealed; the ML-DSA half is a software seed (no sealed-ML-DSA backend
|
|
257
|
+
exists — a TPM can't do ML-DSA).
|
|
258
|
+
- **One remaining classical path**, filed upstream: persist's storage-tier
|
|
259
|
+
scrub signature is Ed25519-only — `with_hardware_signer` is classical-only and
|
|
260
|
+
`with_signer_arcs` (hybrid) needs a plaintext key. **CIRISPersist#224** adds a
|
|
261
|
+
hybrid-hardware ctor to close it without un-sealing.
|
|
262
|
+
- **Interpreted benchmark page** → `https://cirisai.github.io/CIRISServer/`
|
|
263
|
+
(`.github/workflows/bench.yml` + `scripts/bench_report.py`): video throughput
|
|
264
|
+
(fps ceiling, sustainable mesh participants @30 fps), post-quantum handshake
|
|
265
|
+
overhead, mesh fan-out, and **replication speed** (new `replication_ingest`
|
|
266
|
+
bench, ~13K traces/s/core).
|
|
267
|
+
- Android arm32 (armeabi-v7a) + arm64 wheel lane (NDK cross-compile;
|
|
268
|
+
`continue-on-error` while it iterates to green).
|
|
269
|
+
|
|
270
|
+
### Changed / Fixed
|
|
271
|
+
- **All CI platforms green** (was red on macOS/Windows/Win7). Root cause was our
|
|
272
|
+
own feature wiring: a top-level `tpm` feature + unconditional `postgres`
|
|
273
|
+
dragged `tss-esapi`/`openssl` onto platforms that can't build them. Fixed with
|
|
274
|
+
per-target deps (`postgres` + `tpm` Linux-only; `android` keyring backend) and
|
|
275
|
+
dropping `--all-features`.
|
|
276
|
+
|
|
277
|
+
## [0.1.2] — 2026-06-15
|
|
278
|
+
|
|
279
|
+
Substrate floor bump + the `/v1/identity` endpoint the migration runbook requires.
|
|
280
|
+
|
|
281
|
+
### Added
|
|
282
|
+
- **`GET /v1/identity`** — the node's `LocalIdentityAggregate` (CEG §5.6.8.8.2),
|
|
283
|
+
merged onto the read-API listener (same port as `GET /lens/api/v1/*`). Serves
|
|
284
|
+
`key_id`, the Ed25519 federation pubkey, the Reticulum transport pubkeys
|
|
285
|
+
(x25519 ‖ ed25519), and `identity_hash` — the identity-continuity surface the
|
|
286
|
+
CIRISLens→CIRISServer cutover verifies (runbook §4 step 1). Closes the gap that
|
|
287
|
+
blocked the first cutover attempt (#5).
|
|
288
|
+
- `content_x25519` / `content_ml_kem_768` are `null` for now: persist's
|
|
289
|
+
`local_identity_aggregate` requires a software `LocalSigner`, and CIRISServer
|
|
290
|
+
runs a hardware signer (`with_hardware_signer` → `local_signer: None`). The
|
|
291
|
+
content-KEM halves fill in once persist exposes the aggregate for a
|
|
292
|
+
hardware-signed Engine (tracked upstream).
|
|
293
|
+
|
|
294
|
+
### Changed
|
|
295
|
+
- Substrate floor → **persist v7.0.0 / edge v3.6.0 / verify-family v5.6.0**
|
|
296
|
+
(the edge v3.6.0 "CEWP-ready" co-bump; CEG 1.0-RC6). Major persist 6→7, built
|
|
297
|
+
clean with zero code changes.
|
|
298
|
+
- `build_edge` wires the Reticulum transport via the typed `.reticulum_transport()`
|
|
299
|
+
builder so `Edge::local_transport_pubkey()` resolves (populates the
|
|
300
|
+
RET-transport role of `/v1/identity`).
|
|
301
|
+
|
|
302
|
+
## [0.1.1] — 2026-06-15
|
|
303
|
+
|
|
304
|
+
Release-CI fixes only — **no change to the node**. 0.1.0 was tagged but did not
|
|
305
|
+
publish: `publish-pypi.yml`'s linux wheel built in a manylinux_2_28 (AlmaLinux 8)
|
|
306
|
+
container whose tpm2-tss is 2.3.2, too old for the keyring's `tss-esapi-sys`
|
|
307
|
+
(`tss2-sys not found`), and two lint gates failed.
|
|
308
|
+
|
|
309
|
+
### Fixed
|
|
310
|
+
- **Linux wheels** now build on the native runners (ubuntu-latest + ubuntu-24.04-arm)
|
|
311
|
+
with apt `libtss2-dev` + `patchelf` — the same recipe the green conformance
|
|
312
|
+
wheel job and the sister wheels (persist `manylinux_2_38`, edge `_2_39`) use —
|
|
313
|
+
instead of the el8 container with its stale tss2.
|
|
314
|
+
- `rustfmt` (bench formatting) and `clippy` doc-list lints in
|
|
315
|
+
`benches/pqc_av_streaming.rs` (allow the two stylized-doc lints).
|
|
316
|
+
|
|
317
|
+
## [0.1.0] — 2026-06-15
|
|
318
|
+
|
|
319
|
+
First release. **Lens-only fabric node** — the federation's headless cohabitation
|
|
320
|
+
runtime with only the observation slice live. Replaces both the deployed CIRISLens
|
|
321
|
+
server and the agent's direct `ciris-lens-core` cohabitation.
|
|
322
|
+
|
|
323
|
+
### Added
|
|
324
|
+
- **Zero-setup node** (`ciris-server`): one shared persist `Engine` + one shared
|
|
325
|
+
Reticulum `Edge` (a single federation identity), mode defaults to `server`,
|
|
326
|
+
no wizard. Data under `$CIRIS_HOME`; SQLite corpus by default, Postgres via
|
|
327
|
+
`CIRIS_DB_URL`.
|
|
328
|
+
- **Lens slice**: relay ingest of CEG `AccordEventsBatch` (over Reticulum/HTTP)
|
|
329
|
+
into the shared corpus, plus the seven frozen `GET /lens/api/v1/*` read
|
|
330
|
+
endpoints. `ciris-lens-core` is absorbed in-tree (workspace member); the
|
|
331
|
+
standalone CIRISLensCore library and the CIRISLens deployment retire.
|
|
332
|
+
- **Hardware key custody**, two classes: the RNS transport identity and the
|
|
333
|
+
Ed25519 federation seed are TPM / Secure-Enclave / StrongBox sealed, with a
|
|
334
|
+
software-encrypted fallback. Existing keys are **adopted byte-identically** —
|
|
335
|
+
a CIRISLens host keeps its `key_id` and RNS destination on cutover (no re-key,
|
|
336
|
+
no re-enroll). See `FSD/LENS_TO_SERVER_MIGRATION.md`.
|
|
337
|
+
- **Reticulum floor with capability gating**: always a routable RET node; the
|
|
338
|
+
lens corpus + read API gate on a realistic free-disk minimum
|
|
339
|
+
(`CIRIS_SERVER_LENS_STORE_MIN_GIB`), else the node runs as a relay.
|
|
340
|
+
- **`ciris-canonical` founder-quorum** (`src/quorum.rs`): the entrenched 2-of-3
|
|
341
|
+
trust root that replaces the shared steward key (prep for the 0.5 registry
|
|
342
|
+
fold; CEG §8.1.13.1.1).
|
|
343
|
+
- **PyO3 abi3 wheel**: `pip install ciris-server` → the `ciris-server` command,
|
|
344
|
+
and the lens drop-in `from ciris_server import LensClient` for CIRISAgent.
|
|
345
|
+
- **Conformance + benchmarks**: cohabitation + CEG-profile gating via
|
|
346
|
+
CIRISConformance; `benches/pqc_av_streaming.rs` (realtime-A/V two-layer
|
|
347
|
+
hybrid-PQC mesh) and `tests/replication.rs` (CEG-RC5 corpus replication spine).
|
|
348
|
+
|
|
349
|
+
### Substrate
|
|
350
|
+
- persist **v7.0.0** · edge **v3.6.0** · verify-family **v5.6.0**
|
|
351
|
+
(verify-core + keyring + crypto). CEG **1.0-RC6**.
|
|
352
|
+
|
|
353
|
+
### Notes
|
|
354
|
+
- Registry (0.5) and node (1.0) slices are scaffolded in `src/compose.rs` and
|
|
355
|
+
fold in as their co-bumps land. Registry-fold prep: `FSD/REGISTRY_FOLD_DERISK.md`,
|
|
356
|
+
[#2](https://github.com/CIRISAI/CIRISServer/issues/2).
|
|
357
|
+
|
|
358
|
+
[0.1.0]: https://github.com/CIRISAI/CIRISServer/releases/tag/v0.1.0
|