ciris-server 0.2.6__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.6 → ciris_server-0.3.0}/.github/workflows/bench.yml +1 -1
- {ciris_server-0.2.6 → ciris_server-0.3.0}/.github/workflows/ci.yml +10 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/.github/workflows/publish-pypi.yml +4 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/.github/workflows/release.yml +17 -3
- {ciris_server-0.2.6 → ciris_server-0.3.0}/CHANGELOG.md +61 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/Cargo.lock +45 -24
- {ciris_server-0.2.6 → ciris_server-0.3.0}/Cargo.toml +76 -12
- {ciris_server-0.2.6 → ciris_server-0.3.0}/FSD/LENS_TO_SERVER_MIGRATION.md +80 -13
- 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.2.6 → ciris_server-0.3.0}/FSD/PQC_AV_STREAMING_BENCH.md +53 -25
- ciris_server-0.3.0/FSD/QA_AGAINST_RUST.md +180 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/PKG-INFO +17 -9
- {ciris_server-0.2.6 → ciris_server-0.3.0}/README.md +16 -8
- 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/benches/stream_fanout.rs +75 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/Cargo.toml +3 -3
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/node.rs +318 -26
- 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.2.6 → ciris_server-0.3.0}/scripts/bench_report.py +30 -18
- 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.2.6 → ciris_server-0.3.0}/src/compose.rs +23 -1
- {ciris_server-0.2.6 → ciris_server-0.3.0}/src/lib.rs +102 -1
- 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.6/tests/chaos_mesh.rs +0 -111
- {ciris_server-0.2.6 → ciris_server-0.3.0}/.cargo/config.toml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/.github/workflows/conformance.yml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/.gitignore +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/FSD/REGISTRY_FOLD_DERISK.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/FSD/SERVER_1.0_PLAN.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/LICENSE +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/MISSION.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/bench-site/data.json +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/bench-site/index.html +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/benches/alm_chain.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/benches/pqc_av_streaming.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/benches/replication_ingest.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/.github/workflows/bench.yml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/.github/workflows/ci.yml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/.gitignore +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/.pre-commit-config.yaml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/LICENSE +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/MISSION.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/README.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/aggregate.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/canonicalize.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/project.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/deny.toml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/BENCHMARKS.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/COHABITATION.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PRE_COMMIT.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/RELEASE_NOTES.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/THREAT_MODEL.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/pyproject.toml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/api.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/delegate.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/pyo3.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/canonical/ceg_egress.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/canonical/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/attestation.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/score.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/batch.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/client.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/consent.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/correlation.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/event.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/partial.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/py_engine.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/seal.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/declared.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/resourcing.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/egress.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/node.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/retention.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/upstream.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/axis_metrics.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/correlated_action.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/distributive_access.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/manifold.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/extract/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/extract/projection.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/ffi/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/ffi/pyo3.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/lib.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/observability/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/pipeline/lifecycle.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/pipeline/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/eviction.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/summary.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/handler.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/relay.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/ret_relay.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/aggregate.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/oracle.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/assembly.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/axis_calibration.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/calibration.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/capacity.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/n_eff.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/result.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/signing/event.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/signing/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/wire/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/src/wire/signer.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/README.md +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/sovereign_rlib.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/pyproject.toml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/rust-toolchain.toml +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/src/benchmarks/mod.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/src/benchmarks/scoreboard.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/src/config.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/src/import.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/src/main.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/src/quorum.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/tests/alm_chain.rs +0 -0
- {ciris_server-0.2.6 → ciris_server-0.3.0}/tests/replication.rs +0 -0
|
@@ -52,7 +52,7 @@ 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 --bench alm_chain
|
|
55
|
+
run: cargo bench --bench pqc_av_streaming --bench replication_ingest --bench alm_chain --bench stream_fanout
|
|
56
56
|
- name: Generate holonomic scoreboard (CIRISServer#12/#13)
|
|
57
57
|
run: cargo run --release --quiet -- scoreboard > scoreboard.json
|
|
58
58
|
- name: Generate interpreted page
|
|
@@ -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
|
|
@@ -4,6 +4,67 @@ All notable changes to CIRISServer. Format follows [Keep a Changelog](https://ke
|
|
|
4
4
|
this project uses [Semantic Versioning](https://semver.org/). The minor line tracks
|
|
5
5
|
the fabric-node scope (0.1 lens · 0.5 +registry · 1.0 +node), paced by the CIRISAgent train.
|
|
6
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
|
+
|
|
7
68
|
## [0.2.6] — 2026-06-16
|
|
8
69
|
|
|
9
70
|
Substrate floor → **v4.2.0 family** + the **multi-tier ALM relay chain** test
|
|
@@ -812,8 +812,8 @@ dependencies = [
|
|
|
812
812
|
|
|
813
813
|
[[package]]
|
|
814
814
|
name = "ciris-crypto"
|
|
815
|
-
version = "5.
|
|
816
|
-
source = "git+https://github.com/CIRISAI/CIRISVerify?tag=v5.
|
|
815
|
+
version = "5.10.0"
|
|
816
|
+
source = "git+https://github.com/CIRISAI/CIRISVerify?tag=v5.10.0#be2511433a2ef14d315571655933ecf9d05699e1"
|
|
817
817
|
dependencies = [
|
|
818
818
|
"ed25519-dalek",
|
|
819
819
|
"hex",
|
|
@@ -838,8 +838,8 @@ dependencies = [
|
|
|
838
838
|
|
|
839
839
|
[[package]]
|
|
840
840
|
name = "ciris-edge"
|
|
841
|
-
version = "4.
|
|
842
|
-
source = "git+https://github.com/CIRISAI/CIRISEdge?tag=v4.
|
|
841
|
+
version = "4.3.0"
|
|
842
|
+
source = "git+https://github.com/CIRISAI/CIRISEdge?tag=v4.3.0#ab4f1bc49783faa470472ea577a3f4cf10b37e28"
|
|
843
843
|
dependencies = [
|
|
844
844
|
"async-trait",
|
|
845
845
|
"axum",
|
|
@@ -863,6 +863,7 @@ dependencies = [
|
|
|
863
863
|
"pyo3",
|
|
864
864
|
"pyo3-async-runtimes",
|
|
865
865
|
"qrcodegen",
|
|
866
|
+
"raptorq",
|
|
866
867
|
"rcgen",
|
|
867
868
|
"reqwest",
|
|
868
869
|
"reticulum-core",
|
|
@@ -889,8 +890,8 @@ dependencies = [
|
|
|
889
890
|
|
|
890
891
|
[[package]]
|
|
891
892
|
name = "ciris-keyring"
|
|
892
|
-
version = "5.
|
|
893
|
-
source = "git+https://github.com/CIRISAI/CIRISVerify?tag=v5.
|
|
893
|
+
version = "5.10.0"
|
|
894
|
+
source = "git+https://github.com/CIRISAI/CIRISVerify?tag=v5.10.0#be2511433a2ef14d315571655933ecf9d05699e1"
|
|
894
895
|
dependencies = [
|
|
895
896
|
"aes-gcm",
|
|
896
897
|
"async-trait",
|
|
@@ -953,8 +954,8 @@ dependencies = [
|
|
|
953
954
|
|
|
954
955
|
[[package]]
|
|
955
956
|
name = "ciris-persist"
|
|
956
|
-
version = "8.
|
|
957
|
-
source = "git+https://github.com/CIRISAI/CIRISPersist?tag=v8.
|
|
957
|
+
version = "8.4.0"
|
|
958
|
+
source = "git+https://github.com/CIRISAI/CIRISPersist?tag=v8.4.0#7b40aae71cc17683f5cfb9553f1d484d267f1970"
|
|
958
959
|
dependencies = [
|
|
959
960
|
"async-trait",
|
|
960
961
|
"base64 0.22.1",
|
|
@@ -993,9 +994,10 @@ dependencies = [
|
|
|
993
994
|
|
|
994
995
|
[[package]]
|
|
995
996
|
name = "ciris-server"
|
|
996
|
-
version = "0.
|
|
997
|
+
version = "0.3.0"
|
|
997
998
|
dependencies = [
|
|
998
999
|
"anyhow",
|
|
1000
|
+
"async-trait",
|
|
999
1001
|
"axum",
|
|
1000
1002
|
"base64 0.22.1",
|
|
1001
1003
|
"chrono",
|
|
@@ -1010,19 +1012,27 @@ dependencies = [
|
|
|
1010
1012
|
"flate2",
|
|
1011
1013
|
"fs2",
|
|
1012
1014
|
"getrandom 0.3.4",
|
|
1015
|
+
"hex",
|
|
1016
|
+
"hmac 0.12.1",
|
|
1017
|
+
"jsonwebtoken",
|
|
1018
|
+
"pbkdf2",
|
|
1013
1019
|
"pyo3",
|
|
1014
1020
|
"pyo3-async-runtimes",
|
|
1021
|
+
"reqwest",
|
|
1015
1022
|
"serde",
|
|
1016
1023
|
"serde_json",
|
|
1024
|
+
"sha2 0.10.9",
|
|
1025
|
+
"subtle",
|
|
1017
1026
|
"tokio",
|
|
1018
1027
|
"tracing",
|
|
1019
1028
|
"tracing-subscriber",
|
|
1029
|
+
"urlencoding",
|
|
1020
1030
|
]
|
|
1021
1031
|
|
|
1022
1032
|
[[package]]
|
|
1023
1033
|
name = "ciris-verify-core"
|
|
1024
|
-
version = "5.
|
|
1025
|
-
source = "git+https://github.com/CIRISAI/CIRISVerify?tag=v5.
|
|
1034
|
+
version = "5.10.0"
|
|
1035
|
+
source = "git+https://github.com/CIRISAI/CIRISVerify?tag=v5.10.0#be2511433a2ef14d315571655933ecf9d05699e1"
|
|
1026
1036
|
dependencies = [
|
|
1027
1037
|
"android_system_properties",
|
|
1028
1038
|
"anyhow",
|
|
@@ -1242,7 +1252,7 @@ dependencies = [
|
|
|
1242
1252
|
"criterion-plot",
|
|
1243
1253
|
"futures",
|
|
1244
1254
|
"is-terminal",
|
|
1245
|
-
"itertools
|
|
1255
|
+
"itertools",
|
|
1246
1256
|
"num-traits",
|
|
1247
1257
|
"once_cell",
|
|
1248
1258
|
"oorandom",
|
|
@@ -1264,7 +1274,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
1264
1274
|
checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
|
|
1265
1275
|
dependencies = [
|
|
1266
1276
|
"cast",
|
|
1267
|
-
"itertools
|
|
1277
|
+
"itertools",
|
|
1268
1278
|
]
|
|
1269
1279
|
|
|
1270
1280
|
[[package]]
|
|
@@ -2828,15 +2838,6 @@ dependencies = [
|
|
|
2828
2838
|
"either",
|
|
2829
2839
|
]
|
|
2830
2840
|
|
|
2831
|
-
[[package]]
|
|
2832
|
-
name = "itertools"
|
|
2833
|
-
version = "0.12.1"
|
|
2834
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2835
|
-
checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
|
|
2836
|
-
dependencies = [
|
|
2837
|
-
"either",
|
|
2838
|
-
]
|
|
2839
|
-
|
|
2840
2841
|
[[package]]
|
|
2841
2842
|
name = "itoa"
|
|
2842
2843
|
version = "1.0.18"
|
|
@@ -2933,9 +2934,11 @@ checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde"
|
|
|
2933
2934
|
dependencies = [
|
|
2934
2935
|
"base64 0.22.1",
|
|
2935
2936
|
"js-sys",
|
|
2937
|
+
"pem",
|
|
2936
2938
|
"ring",
|
|
2937
2939
|
"serde",
|
|
2938
2940
|
"serde_json",
|
|
2941
|
+
"simple_asn1",
|
|
2939
2942
|
]
|
|
2940
2943
|
|
|
2941
2944
|
[[package]]
|
|
@@ -4392,7 +4395,7 @@ checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
|
|
|
4392
4395
|
dependencies = [
|
|
4393
4396
|
"bytes",
|
|
4394
4397
|
"heck",
|
|
4395
|
-
"itertools
|
|
4398
|
+
"itertools",
|
|
4396
4399
|
"log",
|
|
4397
4400
|
"multimap",
|
|
4398
4401
|
"once_cell",
|
|
@@ -4412,7 +4415,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
4412
4415
|
checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1"
|
|
4413
4416
|
dependencies = [
|
|
4414
4417
|
"anyhow",
|
|
4415
|
-
"itertools
|
|
4418
|
+
"itertools",
|
|
4416
4419
|
"proc-macro2",
|
|
4417
4420
|
"quote",
|
|
4418
4421
|
"syn 2.0.117",
|
|
@@ -4681,6 +4684,12 @@ dependencies = [
|
|
|
4681
4684
|
"rand_core 0.9.5",
|
|
4682
4685
|
]
|
|
4683
4686
|
|
|
4687
|
+
[[package]]
|
|
4688
|
+
name = "raptorq"
|
|
4689
|
+
version = "2.0.1"
|
|
4690
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4691
|
+
checksum = "4d4215fb79ef19442a0c71616aabb0715a386e6a16ed9031775ee3e3f20e7502"
|
|
4692
|
+
|
|
4684
4693
|
[[package]]
|
|
4685
4694
|
name = "rayon"
|
|
4686
4695
|
version = "1.12.0"
|
|
@@ -5583,6 +5592,18 @@ version = "0.3.9"
|
|
|
5583
5592
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5584
5593
|
checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
|
|
5585
5594
|
|
|
5595
|
+
[[package]]
|
|
5596
|
+
name = "simple_asn1"
|
|
5597
|
+
version = "0.6.4"
|
|
5598
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5599
|
+
checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d"
|
|
5600
|
+
dependencies = [
|
|
5601
|
+
"num-bigint",
|
|
5602
|
+
"num-traits",
|
|
5603
|
+
"thiserror 2.0.18",
|
|
5604
|
+
"time",
|
|
5605
|
+
]
|
|
5606
|
+
|
|
5586
5607
|
[[package]]
|
|
5587
5608
|
name = "siphasher"
|
|
5588
5609
|
version = "1.0.3"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "ciris-server"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0" # 0.1 = lens-only (agent ~2.9.7); 0.3 = +auth subsystem / one-wheel; 0.5 = +registry (~2.9.8); 1.0 = +node (~2.9.10). Patch forward on breakage.
|
|
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.
|
|
@@ -37,10 +37,32 @@ path = "src/main.rs"
|
|
|
37
37
|
default = []
|
|
38
38
|
# `python` pulls the PyO3 bindings (for the wheel). The binary builds WITHOUT it,
|
|
39
39
|
# so a plain `cargo build` never links libpython.
|
|
40
|
-
|
|
40
|
+
# ONE-WHEEL RE-EXPORT (CIRISServer#4): `python` ALSO turns on the substrate
|
|
41
|
+
# crates' OWN pyo3 surfaces (`ciris-persist/pyo3`, `ciris-edge/pyo3`) so their
|
|
42
|
+
# `#[pyclass]`es compile into THIS cdylib — one `.so`, one PyO3 type registry,
|
|
43
|
+
# so the persist `Engine` handed to edge is the SAME type both sides see (the
|
|
44
|
+
# CIRISPersist#109 cross-wheel type-identity bug CANNOT occur). persist names its
|
|
45
|
+
# feature `pyo3` (not `python`); edge likewise, and edge's `pyo3` already pulls
|
|
46
|
+
# `ciris-persist/pyo3` transitively — both listed for explicitness. verify is
|
|
47
|
+
# deliberately ABSENT: it is a ctypes wheel (libciris_verify_ffi.so via
|
|
48
|
+
# ctypes.CDLL), not a `#[pymodule]`, so it cannot be a pyo3 submodule.
|
|
49
|
+
python = [
|
|
50
|
+
"dep:pyo3",
|
|
51
|
+
"dep:pyo3-async-runtimes",
|
|
52
|
+
"ciris-lens-core/python",
|
|
53
|
+
"ciris-persist/pyo3",
|
|
54
|
+
"ciris-edge/pyo3",
|
|
55
|
+
]
|
|
41
56
|
# `extension-module` is what maturin builds the wheel with (tells PyO3 not to
|
|
42
57
|
# link libpython). The bin must NOT enable it. See pyproject.toml [tool.maturin].
|
|
43
|
-
|
|
58
|
+
# Propagated to the substrate crates so THEIR pyo3 surfaces also skip linking
|
|
59
|
+
# libpython (each crate gates `extension-module` as its own feature).
|
|
60
|
+
extension-module = [
|
|
61
|
+
"python",
|
|
62
|
+
"pyo3/extension-module",
|
|
63
|
+
"ciris-persist/extension-module",
|
|
64
|
+
"ciris-edge/extension-module",
|
|
65
|
+
]
|
|
44
66
|
# NOTE: hardware key custody (TPM/SE/StrongBox) is wired per-TARGET below, not as
|
|
45
67
|
# a cargo feature — TPM (tss-esapi) is Linux-only, so a top-level `tpm` feature
|
|
46
68
|
# made `--all-features` drag tss-esapi onto Windows/macOS (where it can't build).
|
|
@@ -54,7 +76,7 @@ extension-module = ["python", "pyo3/extension-module"]
|
|
|
54
76
|
# libraries over ONE shared persist Engine (registry + lens read/write the same
|
|
55
77
|
# corpus in-process; per-slice views via Engine::from_shared).
|
|
56
78
|
#
|
|
57
|
-
# Substrate floor (SHIPPED): persist v8.
|
|
79
|
+
# Substrate floor (SHIPPED): persist v8.4.0 / edge v4.3.0 / verify-family v5.10.0
|
|
58
80
|
# (ciris-keyring + ciris-crypto + ciris-verify-core), CEG 1.0-RC12. The composition
|
|
59
81
|
# root pins the singleton construction; the in-tree ciris-lens-core co-bumps in
|
|
60
82
|
# lockstep (MAJOR caret pins persist "8" / edge "4"). edge v4.2.0 ships the relay
|
|
@@ -76,16 +98,19 @@ ciris-lens-core = { path = "crates/ciris-lens-core" } # ABSORBED in-tree (wo
|
|
|
76
98
|
# sqlite on all platforms; postgres is Linux-only (libpq/openssl don't link
|
|
77
99
|
# cleanly on the macOS/Windows runners — same posture as persist's own CI). The
|
|
78
100
|
# `[target.linux]` table below adds postgres.
|
|
79
|
-
|
|
80
|
-
|
|
101
|
+
# `cirislens_wa_cert` + `cirislens_service_token_revocation` expose the auth
|
|
102
|
+
# substrate the fabric absorbs (CIRISServer#9, src/auth): the agent's `wa_cert`
|
|
103
|
+
# table (users/WA/OAuth/api-keys) + the `revoked_service_tokens` table.
|
|
104
|
+
ciris-persist = { git = "https://github.com/CIRISAI/CIRISPersist", tag = "v8.4.0", features = ["sqlite", "cirislens_wa_cert", "cirislens_service_token_revocation"] }
|
|
105
|
+
ciris-edge = { git = "https://github.com/CIRISAI/CIRISEdge", tag = "v4.3.0", features = ["transport-reticulum", "transport-http"] }
|
|
81
106
|
# Founder-quorum verification + key-id fingerprint at the composition root
|
|
82
107
|
# (threshold:: module path — NOT re-exported at the crate root).
|
|
83
|
-
ciris-verify-core = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.
|
|
108
|
+
ciris-verify-core = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.10.0" }
|
|
84
109
|
# Hardware-backed transport-identity keystore (verify v5.2.0 #68 / edge #99).
|
|
85
110
|
# Base = software keystore + byte-identical migration of an existing .rid (works
|
|
86
111
|
# everywhere, no libtss2). The real TPM-2.0 / SE / StrongBox backend rides the
|
|
87
112
|
# `tpm` feature; runtime auto-detects hardware and falls back to software.
|
|
88
|
-
ciris-keyring = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.
|
|
113
|
+
ciris-keyring = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.10.0", version = "5", features = ["software", "pqc-ml-dsa"] }
|
|
89
114
|
|
|
90
115
|
# PyO3 bindings for the abi3 wheel — optional, gated behind the `python` feature
|
|
91
116
|
# so the binary never links them. 0.29 matches the persist/edge family floor.
|
|
@@ -102,6 +127,31 @@ base64 = "0.22"
|
|
|
102
127
|
serde = { version = "1", features = ["derive"] } # holonomic scoreboard model (benchmarks::)
|
|
103
128
|
serde_json = "1"
|
|
104
129
|
getrandom = "0.3" # mint the ML-DSA-65 federation seed on first boot (hybrid PQC)
|
|
130
|
+
# Auth subsystem (src/auth, CIRISServer#9): timestamps on the absorbed wa_cert
|
|
131
|
+
# rows, SHA-256 for api-key / service-token hashing, hex for the digest wire form.
|
|
132
|
+
# All three already in the lock as substrate-transitive deps (no new resolution).
|
|
133
|
+
chrono = { version = "0.4", features = ["serde"] }
|
|
134
|
+
sha2 = "0.10"
|
|
135
|
+
hex = "0.4"
|
|
136
|
+
# Auth gap-close (CIRISServer#9, src/auth): the byte-compatible password KDF +
|
|
137
|
+
# the OAuth/native/device-auth outbound-HTTP + JWKS-verify halves. All already in
|
|
138
|
+
# the lock as substrate-transitive deps (reqwest/jsonwebtoken via edge+verify;
|
|
139
|
+
# pbkdf2/hmac/ed25519-dalek via the crypto family) — pinned here so the auth
|
|
140
|
+
# subsystem owns them directly, no new resolution.
|
|
141
|
+
# - pbkdf2 + hmac: reproduce the agent's PBKDF2-HMAC-SHA256(100k) password hash
|
|
142
|
+
# (auth_service.py `_hash_password`/`_verify_password`) byte-for-byte.
|
|
143
|
+
# - ed25519-dalek: verify the ROOT mint signature (the agent's `verify_root_signature`).
|
|
144
|
+
# - jsonwebtoken: Apple Sign-In RS256 JWKS verification.
|
|
145
|
+
# - reqwest (rustls): Google tokeninfo / OAuth code→token / Apple JWKS / Portal HTTP.
|
|
146
|
+
# - urlencoding: build the provider authorize-URL query string (matches urlencode).
|
|
147
|
+
pbkdf2 = { version = "0.12", default-features = false }
|
|
148
|
+
hmac = "0.12"
|
|
149
|
+
subtle = "2" # constant-time password-hash compare (the agent's hmac.compare_digest)
|
|
150
|
+
ed25519-dalek = "2"
|
|
151
|
+
jsonwebtoken = "9"
|
|
152
|
+
urlencoding = "2"
|
|
153
|
+
async-trait = "0.1" # the ProviderClient HTTP seam (async fn in trait)
|
|
154
|
+
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }
|
|
105
155
|
flate2 = "1" # read the gz'd legacy-trace dump (import-traces subcommand)
|
|
106
156
|
tracing = "0.1"
|
|
107
157
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
|
@@ -112,13 +162,13 @@ tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
|
|
112
162
|
# - keyring `tpm` (tss-esapi / TPM 2.0) — the real hardware backend; needs
|
|
113
163
|
# libtss2 (Linux build dep). Other targets keep the software keystore.
|
|
114
164
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
115
|
-
ciris-persist = { git = "https://github.com/CIRISAI/CIRISPersist", tag = "v8.
|
|
116
|
-
ciris-keyring = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.
|
|
165
|
+
ciris-persist = { git = "https://github.com/CIRISAI/CIRISPersist", tag = "v8.4.0", features = ["postgres", "cirislens_wa_cert", "cirislens_service_token_revocation"] }
|
|
166
|
+
ciris-keyring = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.10.0", version = "5", features = ["tpm"] }
|
|
117
167
|
|
|
118
168
|
# Android (arm64/arm32/x86_64): the keyring `android` backend (JNI → Android
|
|
119
169
|
# Keystore/StrongBox); sqlite bundles, no postgres/tpm. Mirrors persist/edge.
|
|
120
170
|
[target.'cfg(target_os = "android")'.dependencies]
|
|
121
|
-
ciris-keyring = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.
|
|
171
|
+
ciris-keyring = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.10.0", version = "5", features = ["android"] }
|
|
122
172
|
|
|
123
173
|
# Test-only — the two-node replication integration test (tests/replication.rs)
|
|
124
174
|
# builds + signs CEG batches with the same primitives persist verifies against.
|
|
@@ -133,7 +183,14 @@ criterion = { version = "0.5", features = ["async_tokio"] }
|
|
|
133
183
|
# The PQC primitives the realtime-A/V E2E bench drives directly: hybrid KEX
|
|
134
184
|
# (X25519 + ML-KEM-768) for the per-Link transit key, AES-256-GCM for the
|
|
135
185
|
# two-layer chunk seal. Same pin/features edge composes (tag parity).
|
|
136
|
-
ciris-crypto = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.
|
|
186
|
+
ciris-crypto = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.10.0", version = "5", features = ["hybrid-kex", "aes-gcm", "pqc-ml-dsa"] }
|
|
187
|
+
# Enable edge's OWN fountain codec (`codec-fountain`, L1-A) for the survival-floor
|
|
188
|
+
# proof — dev/test ONLY (feature unification applies to test/bench builds; the
|
|
189
|
+
# shipped wheel stays codec-free, since a relay forwards sealed symbols opaquely
|
|
190
|
+
# and never encodes/decodes). This lets tests/chaos_mesh.rs exercise the SUBSTRATE
|
|
191
|
+
# codec (`fountain_encode`/`fountain_decode`) directly — a real MEASURED proof,
|
|
192
|
+
# not a reference stand-in.
|
|
193
|
+
ciris-edge = { git = "https://github.com/CIRISAI/CIRISEdge", tag = "v4.3.0", features = ["codec-fountain"] }
|
|
137
194
|
|
|
138
195
|
# PQC realtime-A/V streaming E2E benchmark (CIRISEdge#62 realtime_av profile).
|
|
139
196
|
[[bench]]
|
|
@@ -151,6 +208,13 @@ harness = false
|
|
|
151
208
|
name = "alm_chain"
|
|
152
209
|
harness = false
|
|
153
210
|
|
|
211
|
+
# Sustained multi-stream seal throughput — measures the actual core-fraction to
|
|
212
|
+
# seal N blob streams @30fps in a real loop (promotes the page's "2,000 blob
|
|
213
|
+
# streams ≈ 6-10% of a core" from arithmetic to MEASURED).
|
|
214
|
+
[[bench]]
|
|
215
|
+
name = "stream_fanout"
|
|
216
|
+
harness = false
|
|
217
|
+
|
|
154
218
|
[profile.release]
|
|
155
219
|
# panic strategy stays "unwind" (the Win7 build-std lane relies on this being
|
|
156
220
|
# pinned here, not on the build-std crate list — see release.yml win7 lane).
|
|
@@ -24,6 +24,13 @@
|
|
|
24
24
|
> (`ed25519.seed.migrated` archived), the `.rid` adopted into the keystore
|
|
25
25
|
> (`hardware_backed=true`), no re-key. Adoption is deterministic: the carried
|
|
26
26
|
> identity reproduces byte-for-byte.
|
|
27
|
+
>
|
|
28
|
+
> **Trace import re-validated** (2026-06-16, on the v8.2.0 / edge-v4.2.0 / CEG-RC12
|
|
29
|
+
> floor): `import-traces` on the prod dump → 12,165 traces → 20,959 events,
|
|
30
|
+
> errored=0 (3,635 salvaged). **All cutover gates are met — this migration is
|
|
31
|
+
> READY:** identity continuity (byte-identical `key_id` + RNS dest), 100% hybrid PQC
|
|
32
|
+
> signing, six-key `/v1/identity`, the frozen read endpoints, and legacy-history
|
|
33
|
+
> pre-seed all proven on the shipped floor.
|
|
27
34
|
|
|
28
35
|
## 1. What changes
|
|
29
36
|
|
|
@@ -40,10 +47,54 @@
|
|
|
40
47
|
manifold conformity, and the detection-event corpus all run inside the node over
|
|
41
48
|
the shared substrate, queryable from any node.
|
|
42
49
|
|
|
50
|
+
## 1.5 Scope correction — the three-way split + the DSAR gate
|
|
51
|
+
|
|
52
|
+
> The deployed CIRISLens (`CIRISAI/CIRISLens`) serves **more than** the 7 frozen
|
|
53
|
+
> read endpoints: a **DSAR** erasure surface (GDPR Art. 17 — `POST /dsar/delete`,
|
|
54
|
+
> Ed25519-signed, key-scoped: *only traces signed by the requesting key are
|
|
55
|
+
> deleted*), a **public-keys registry**, the **CIRIS scoring feed** (`/capacity/*`,
|
|
56
|
+
> `/factors/*` — distinct from detection-event `/scores`), and **access tiers**
|
|
57
|
+
> (`public_sample` / `partner_access` / `AccessLevel`). The frozen-7 alone is
|
|
58
|
+
> **not** a complete replacement. Migration completeness requires all of it — but
|
|
59
|
+
> it is split three ways, not absorbed wholesale into one node:
|
|
60
|
+
|
|
61
|
+
- **fabric (the lens node):** the epistemic substrate — ingest, corpus, scoring
|
|
62
|
+
(emits `capacity:*`), `system:*` self-report, the **signed / key-scoped** reads,
|
|
63
|
+
the **erasure mechanism** (§19.7 hard-delete / `EjectHardDelete`), the
|
|
64
|
+
**public-keys registry**, and the **access tiers**. The fabric *performs* erasure;
|
|
65
|
+
it exposes no public hook for it.
|
|
66
|
+
- **ciris-status (the monitor node):** the public aggregator + health attestor —
|
|
67
|
+
reads `capacity:*`/`system:*`, serves the public scoring + status surface
|
|
68
|
+
ciris.ai consumes, emits `health:liveness` `scores`. See
|
|
69
|
+
[`CIRISStatus/FSD/MONITORING_NODE_DESIGN.md`](https://github.com/CIRISAI/CIRISStatus).
|
|
70
|
+
The fabric node does **not** serve the public website feed.
|
|
71
|
+
- **thin presentation (ciris.ai / Portal):** renders over the monitor's surface.
|
|
72
|
+
|
|
73
|
+
**GDPR erasure — TWO entry points (both, not either/or), one mechanism.** Right-to-be-
|
|
74
|
+
forgotten reaches the §19.7 hard-delete via **both**:
|
|
75
|
+
1. **DSAR endpoint, surfaced through ciris-status** — the key-scoped, hybrid-signed
|
|
76
|
+
`dsar/delete` request (CIRISLens `accord_api.py` shape: *only content signed by
|
|
77
|
+
the requesting key is deleted*), exposed on the public monitor node (not a fabric
|
|
78
|
+
public hook), which drives the fabric's erasure; **and**
|
|
79
|
+
2. **in-app, CEG-native** — the KMP fabric app lets the data subject emit a signed
|
|
80
|
+
`withdraws`/revocation against their content directly; the substrate honours it
|
|
81
|
+
via the same §19.7 descent.
|
|
82
|
+
Both collapse to one substrate mechanism (revocation → `EjectHardDelete` → below the
|
|
83
|
+
recoverability floor), proven by the noise-floor demonstration (CIRISServer#14).
|
|
84
|
+
|
|
85
|
+
**The DSAR gate (hard).** The §19.7 erasure primitives DSAR needs
|
|
86
|
+
(`evict_fountain_content_hard_delete`, `content_aggregation`,
|
|
87
|
+
`EjectionVerdict::EjectHardDelete`) ship in **persist v8.4.0 / verify v5.10.0**;
|
|
88
|
+
the wheel pins **v8.2.0 / v5.9.0**. **Do not decommission CIRISLens until DSAR
|
|
89
|
+
works as designed on the fabric node** (substrate bump → port DSAR + public-keys
|
|
90
|
+
+ tiers → CIRISServer#14 noise-floor demonstration). Read-replacement (the 7
|
|
91
|
+
endpoints) can swap first; the Python DSAR path stays reachable until then.
|
|
92
|
+
|
|
43
93
|
## 2. Prerequisites
|
|
44
94
|
|
|
45
|
-
- **`ciris-server` is published on PyPI** (0.
|
|
46
|
-
x86_64 + aarch64, macOS, Windows
|
|
95
|
+
- **`ciris-server` is published on PyPI** (0.2.x, abi3 / CPython 3.10+: manylinux
|
|
96
|
+
x86_64 + aarch64, macOS, Windows, **Android arm64 + armeabi-v7a**). Substrate
|
|
97
|
+
floor baked into the wheel:
|
|
47
98
|
**persist v8.2.0 / edge v4.2.0 / verify-family v5.9.0** (CEG 1.0-RC12).
|
|
48
99
|
- **`pip install ciris-server` needs NO build deps** — the manylinux wheel
|
|
49
100
|
bundles libtss2 + libcrypto (auditwheel). This is the recommended path.
|
|
@@ -125,20 +176,28 @@ replaceable default pin).
|
|
|
125
176
|
the agent's KMP client.
|
|
126
177
|
|
|
127
178
|
### 3.5 Corpus
|
|
128
|
-
The corpus **starts fresh** on the persist substrate.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
179
|
+
The live corpus **starts fresh** on the persist substrate. **Legacy history can be
|
|
180
|
+
pre-seeded** for posterity / to show the ragged edge:
|
|
181
|
+
```
|
|
182
|
+
ciris-server import-traces <dump-dir> # the CIRISLens TimescaleDB dump dir
|
|
183
|
+
```
|
|
184
|
+
It reconstructs the flat 1.9.x `accord_traces` rows into CEG `CompleteTrace`s under
|
|
185
|
+
the closed-set `2.7.legacy` schema bucket — the original 1.9.x Ed25519 signature
|
|
186
|
+
preserved as **provenance**, imported **pre-verified** (`VerifyMode::TrustPreVerified`
|
|
187
|
+
carve-out; the legacy sig signed the 1.9.x bytes, not the reconstruction, so it is
|
|
188
|
+
not re-verifiable), content-addressed + idempotent. A salvage pass repairs the dump's
|
|
189
|
+
systematic `\\"`→`\"` export mis-escaping. **Validated on the prod dump (v8.2.0
|
|
190
|
+
floor): 12,165 traces → 20,959 trace-events, errored=0 (3,635 salvaged).** Keep the
|
|
191
|
+
old TimescaleDB read-only until you've imported + verified, then decommission.
|
|
132
192
|
|
|
133
193
|
## 4. Verify (before tearing anything down)
|
|
134
|
-
- `GET /v1/identity` (on the read-API port, `listen+1`) returns the
|
|
194
|
+
- `GET /v1/identity` (on the read-API port, `listen+1`) returns the **six-key**
|
|
135
195
|
`LocalIdentityAggregate` with the **same `key_id`** the CIRISLens node published
|
|
136
|
-
(identity continuity confirmed)
|
|
137
|
-
|
|
138
|
-
`content_ml_kem_768`
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
continuity-critical fields (`key_id`, `ed25519_pubkey_b64`, transport) are present.
|
|
196
|
+
(identity continuity confirmed): the **hybrid** federation signing keys (Ed25519 +
|
|
197
|
+
ML-DSA-65), the persist-minted content-KEM pair (`content_x25519` /
|
|
198
|
+
`content_ml_kem_768`), and the Reticulum transport pubkeys — **all populated** as
|
|
199
|
+
of 0.2.x (CIRISPersist#223/#224; the `with_hardware_signer_hybrid` Engine). A
|
|
200
|
+
carried-over `ed25519.seed` yields a byte-identical `key_id`.
|
|
142
201
|
- Boot log shows `transport-identity keystore opened hardware_backed=true` (TPM
|
|
143
202
|
host) and, for the federation key, the keyring reports a sealed-Ed25519 / hardware
|
|
144
203
|
posture (not `NO HARDWARE BINDING`) — or encrypted-software fallback on a
|
|
@@ -152,6 +211,14 @@ service, the OAuth admin UI, and the prod telemetry sidecars
|
|
|
152
211
|
(Prometheus/Loki/Tempo/Mimir/MinIO). Archive the `*.migrated-<ts>` identity files
|
|
153
212
|
and the read-only TimescaleDB per your retention policy.
|
|
154
213
|
|
|
214
|
+
**Gate (do NOT skip — §1.5):** decommission only after the **DSAR** erasure
|
|
215
|
+
surface (Art. 17), the public-keys registry, and the access tiers run on the
|
|
216
|
+
fabric node — which is gated on the persist v8.4.0 / verify v5.10.0 bump. Until
|
|
217
|
+
then, keep the CIRISLens DSAR path reachable (you may retire its Grafana /
|
|
218
|
+
ingest / scoring serving earlier — scoring serving moves to the ciris-status
|
|
219
|
+
monitor node). Phasing: (1) read-replacement swap → (2) ciris-status public
|
|
220
|
+
surface → (3) DSAR on fabric → (4) full decommission.
|
|
221
|
+
|
|
155
222
|
## 6. Rollback
|
|
156
223
|
The cutover is reversible until decommission: the old deployment runs read-only
|
|
157
224
|
alongside the node during the window. If the node misbehaves, re-point emitters/read
|