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.
Files changed (357) hide show
  1. {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/bench.yml +5 -2
  2. {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/ci.yml +10 -0
  3. {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/publish-pypi.yml +4 -0
  4. {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/release.yml +17 -3
  5. ciris_server-0.3.0/CHANGELOG.md +358 -0
  6. {ciris_server-0.2.2 → ciris_server-0.3.0}/Cargo.lock +581 -26
  7. {ciris_server-0.2.2 → ciris_server-0.3.0}/Cargo.toml +88 -26
  8. {ciris_server-0.2.2 → ciris_server-0.3.0}/FSD/LENS_TO_SERVER_MIGRATION.md +81 -14
  9. ciris_server-0.3.0/FSD/MESH_ANIMATION_BRIEF.md +228 -0
  10. ciris_server-0.3.0/FSD/ONE_WHEEL_REEXPORT.md +171 -0
  11. ciris_server-0.3.0/FSD/PQC_AV_STREAMING_BENCH.md +159 -0
  12. ciris_server-0.3.0/FSD/QA_AGAINST_RUST.md +180 -0
  13. {ciris_server-0.2.2 → ciris_server-0.3.0}/PKG-INFO +24 -10
  14. {ciris_server-0.2.2 → ciris_server-0.3.0}/README.md +23 -9
  15. ciris_server-0.3.0/app/.gitignore +7 -0
  16. ciris_server-0.3.0/app/README.md +88 -0
  17. ciris_server-0.3.0/app/build.gradle.kts +20 -0
  18. ciris_server-0.3.0/app/fabric-client/build.gradle.kts +122 -0
  19. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/auth/FederationSigner.kt +90 -0
  20. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/Erasure.kt +51 -0
  21. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationContent.kt +28 -0
  22. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationMetrics.kt +30 -0
  23. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationPeer.kt +95 -0
  24. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/NodeCode.kt +28 -0
  25. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/identity/LocalIdentityAggregate.kt +78 -0
  26. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/net/FabricClient.kt +126 -0
  27. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/net/FabricEndpoints.kt +112 -0
  28. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/platform/PlatformLogger.kt +16 -0
  29. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/ui/screens/ErasureScreen.kt +94 -0
  30. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/ui/screens/IdentityScreen.kt +105 -0
  31. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/viewmodel/ErasureViewModel.kt +73 -0
  32. ciris_server-0.3.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/viewmodel/IdentityViewModel.kt +52 -0
  33. ciris_server-0.3.0/app/fabric-client/src/commonTest/kotlin/ai/ciris/fabric/IdentitySliceTest.kt +84 -0
  34. ciris_server-0.3.0/app/gradle/wrapper/gradle-wrapper.jar +0 -0
  35. ciris_server-0.3.0/app/gradle/wrapper/gradle-wrapper.properties +7 -0
  36. ciris_server-0.3.0/app/gradle.properties +13 -0
  37. ciris_server-0.3.0/app/gradlew +248 -0
  38. ciris_server-0.3.0/app/gradlew.bat +92 -0
  39. ciris_server-0.3.0/app/settings.gradle.kts +29 -0
  40. ciris_server-0.3.0/bench-site/data.json +167 -0
  41. ciris_server-0.3.0/bench-site/index.html +125 -0
  42. ciris_server-0.3.0/benches/alm_chain.rs +122 -0
  43. {ciris_server-0.2.2 → ciris_server-0.3.0}/benches/pqc_av_streaming.rs +146 -58
  44. {ciris_server-0.2.2 → ciris_server-0.3.0}/benches/replication_ingest.rs +38 -10
  45. ciris_server-0.3.0/benches/stream_fanout.rs +75 -0
  46. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/Cargo.toml +3 -3
  47. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/node.rs +318 -26
  48. {ciris_server-0.2.2 → ciris_server-0.3.0}/pyproject.toml +5 -2
  49. ciris_server-0.3.0/qa/README.md +70 -0
  50. ciris_server-0.3.0/qa/ciris_sdk/README.md +275 -0
  51. ciris_server-0.3.0/qa/ciris_sdk/REFACTORING_SUMMARY.md +115 -0
  52. ciris_server-0.3.0/qa/ciris_sdk/__init__.py +124 -0
  53. ciris_server-0.3.0/qa/ciris_sdk/auth_store.py +283 -0
  54. ciris_server-0.3.0/qa/ciris_sdk/client.py +261 -0
  55. ciris_server-0.3.0/qa/ciris_sdk/examples/__init__.py +0 -0
  56. ciris_server-0.3.0/qa/ciris_sdk/examples/agent_interaction.py +116 -0
  57. ciris_server-0.3.0/qa/ciris_sdk/examples/unified_telemetry_examples.py +223 -0
  58. ciris_server-0.3.0/qa/ciris_sdk/examples/wa_example.py +72 -0
  59. ciris_server-0.3.0/qa/ciris_sdk/exceptions.py +73 -0
  60. ciris_server-0.3.0/qa/ciris_sdk/model_types.py +258 -0
  61. ciris_server-0.3.0/qa/ciris_sdk/models.py +349 -0
  62. ciris_server-0.3.0/qa/ciris_sdk/pagination.py +214 -0
  63. ciris_server-0.3.0/qa/ciris_sdk/rate_limiter.py +188 -0
  64. ciris_server-0.3.0/qa/ciris_sdk/resources/CONFIG_CLIENT.md +196 -0
  65. ciris_server-0.3.0/qa/ciris_sdk/resources/WA_CLIENT_GUIDE.md +157 -0
  66. ciris_server-0.3.0/qa/ciris_sdk/resources/__init__.py +0 -0
  67. ciris_server-0.3.0/qa/ciris_sdk/resources/agent.py +298 -0
  68. ciris_server-0.3.0/qa/ciris_sdk/resources/audit.py +210 -0
  69. ciris_server-0.3.0/qa/ciris_sdk/resources/auth.py +194 -0
  70. ciris_server-0.3.0/qa/ciris_sdk/resources/billing.py +189 -0
  71. ciris_server-0.3.0/qa/ciris_sdk/resources/config.py +317 -0
  72. ciris_server-0.3.0/qa/ciris_sdk/resources/consent.py +619 -0
  73. ciris_server-0.3.0/qa/ciris_sdk/resources/emergency.py +245 -0
  74. ciris_server-0.3.0/qa/ciris_sdk/resources/jobs.py +349 -0
  75. ciris_server-0.3.0/qa/ciris_sdk/resources/memory.py +595 -0
  76. ciris_server-0.3.0/qa/ciris_sdk/resources/setup.py +265 -0
  77. ciris_server-0.3.0/qa/ciris_sdk/resources/system.py +324 -0
  78. ciris_server-0.3.0/qa/ciris_sdk/resources/telemetry.py +747 -0
  79. ciris_server-0.3.0/qa/ciris_sdk/resources/wa.py +150 -0
  80. ciris_server-0.3.0/qa/ciris_sdk/resources/websocket.py +395 -0
  81. ciris_server-0.3.0/qa/ciris_sdk/setup.py +67 -0
  82. ciris_server-0.3.0/qa/ciris_sdk/telemetry_models.py +257 -0
  83. ciris_server-0.3.0/qa/ciris_sdk/telemetry_responses.py +199 -0
  84. ciris_server-0.3.0/qa/ciris_sdk/transport.py +177 -0
  85. ciris_server-0.3.0/qa/ciris_sdk/websocket.py +400 -0
  86. ciris_server-0.3.0/qa/fabric_results.json +627 -0
  87. ciris_server-0.3.0/qa/qa_runner/BILLING_QA_README.md +321 -0
  88. ciris_server-0.3.0/qa/qa_runner/CLAUDE.md +331 -0
  89. ciris_server-0.3.0/qa/qa_runner/README.md +240 -0
  90. ciris_server-0.3.0/qa/qa_runner/SDK_MODULE_INTEGRATION.md +443 -0
  91. ciris_server-0.3.0/qa/qa_runner/__init__.py +11 -0
  92. ciris_server-0.3.0/qa/qa_runner/__main__.py +666 -0
  93. ciris_server-0.3.0/qa/qa_runner/config.py +529 -0
  94. ciris_server-0.3.0/qa/qa_runner/mcp_test_server.py +138 -0
  95. ciris_server-0.3.0/qa/qa_runner/modules/CLAUDE.md +110 -0
  96. ciris_server-0.3.0/qa/qa_runner/modules/MULTI_OCCURRENCE_README.md +122 -0
  97. ciris_server-0.3.0/qa/qa_runner/modules/__init__.py +79 -0
  98. ciris_server-0.3.0/qa/qa_runner/modules/_module_metadata.py +121 -0
  99. ciris_server-0.3.0/qa/qa_runner/modules/accord_metrics_tests.py +1340 -0
  100. ciris_server-0.3.0/qa/qa_runner/modules/accord_tests.py +853 -0
  101. ciris_server-0.3.0/qa/qa_runner/modules/adapter_autoload_tests.py +504 -0
  102. ciris_server-0.3.0/qa/qa_runner/modules/adapter_availability_tests.py +410 -0
  103. ciris_server-0.3.0/qa/qa_runner/modules/adapter_config_tests.py +790 -0
  104. ciris_server-0.3.0/qa/qa_runner/modules/adapter_manifest_tests.py +360 -0
  105. ciris_server-0.3.0/qa/qa_runner/modules/agent_mode_tests.py +252 -0
  106. ciris_server-0.3.0/qa/qa_runner/modules/air_tests.py +280 -0
  107. ciris_server-0.3.0/qa/qa_runner/modules/api_tests.py +365 -0
  108. ciris_server-0.3.0/qa/qa_runner/modules/base_test_module.py +454 -0
  109. ciris_server-0.3.0/qa/qa_runner/modules/billing_integration_tests.py +406 -0
  110. ciris_server-0.3.0/qa/qa_runner/modules/billing_tests.py +272 -0
  111. ciris_server-0.3.0/qa/qa_runner/modules/cirisnode_tests.py +554 -0
  112. ciris_server-0.3.0/qa/qa_runner/modules/cognitive_state_api_tests.py +346 -0
  113. ciris_server-0.3.0/qa/qa_runner/modules/comprehensive_api_tests.py +311 -0
  114. ciris_server-0.3.0/qa/qa_runner/modules/comprehensive_single_step_tests.py +172 -0
  115. ciris_server-0.3.0/qa/qa_runner/modules/consent_tests.py +216 -0
  116. ciris_server-0.3.0/qa/qa_runner/modules/context_enrichment_tests.py +451 -0
  117. ciris_server-0.3.0/qa/qa_runner/modules/deferral_taxonomy_tests.py +121 -0
  118. ciris_server-0.3.0/qa/qa_runner/modules/deferral_tests.py +265 -0
  119. ciris_server-0.3.0/qa/qa_runner/modules/degraded_mode_tests.py +455 -0
  120. ciris_server-0.3.0/qa/qa_runner/modules/desktop_viz.py +304 -0
  121. ciris_server-0.3.0/qa/qa_runner/modules/dream_live_tests.py +439 -0
  122. ciris_server-0.3.0/qa/qa_runner/modules/dsar_multi_source_tests.py +609 -0
  123. ciris_server-0.3.0/qa/qa_runner/modules/dsar_tests.py +177 -0
  124. ciris_server-0.3.0/qa/qa_runner/modules/dsar_ticket_workflow_tests.py +431 -0
  125. ciris_server-0.3.0/qa/qa_runner/modules/filter_test_helper.py +269 -0
  126. ciris_server-0.3.0/qa/qa_runner/modules/filter_tests.py +550 -0
  127. ciris_server-0.3.0/qa/qa_runner/modules/handler_tests.py +545 -0
  128. ciris_server-0.3.0/qa/qa_runner/modules/he300_benchmark_tests.py +647 -0
  129. ciris_server-0.3.0/qa/qa_runner/modules/homeassistant_agentic_tests.py +687 -0
  130. ciris_server-0.3.0/qa/qa_runner/modules/hosted_tools_tests.py +484 -0
  131. ciris_server-0.3.0/qa/qa_runner/modules/identity_update_tests.py +497 -0
  132. ciris_server-0.3.0/qa/qa_runner/modules/l4_attestation_tests.py +278 -0
  133. ciris_server-0.3.0/qa/qa_runner/modules/licensed_agent_tests.py +489 -0
  134. ciris_server-0.3.0/qa/qa_runner/modules/mcp_tests.py +1370 -0
  135. ciris_server-0.3.0/qa/qa_runner/modules/memory_benchmark_tests.py +413 -0
  136. ciris_server-0.3.0/qa/qa_runner/modules/message_id_debug_test.py +146 -0
  137. ciris_server-0.3.0/qa/qa_runner/modules/mobile/__init__.py +92 -0
  138. ciris_server-0.3.0/qa/qa_runner/modules/mobile/__main__.py +1562 -0
  139. ciris_server-0.3.0/qa/qa_runner/modules/mobile/adb_helper.py +691 -0
  140. ciris_server-0.3.0/qa/qa_runner/modules/mobile/device_helper.py +364 -0
  141. ciris_server-0.3.0/qa/qa_runner/modules/mobile/first_time_licensed_agent.py +703 -0
  142. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/__init__.py +8 -0
  143. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/build_helper.py +659 -0
  144. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/idevice_helper.py +867 -0
  145. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/ios_ui_automator.py +186 -0
  146. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/vision_helper.py +208 -0
  147. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios/xcrun_helper.py +639 -0
  148. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios_physical_test_cases.py +1016 -0
  149. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ios_test_cases.py +891 -0
  150. ciris_server-0.3.0/qa/qa_runner/modules/mobile/portal_registration.py +586 -0
  151. ciris_server-0.3.0/qa/qa_runner/modules/mobile/test_cases.py +1823 -0
  152. ciris_server-0.3.0/qa/qa_runner/modules/mobile/test_runner.py +595 -0
  153. ciris_server-0.3.0/qa/qa_runner/modules/mobile/ui_automator.py +370 -0
  154. ciris_server-0.3.0/qa/qa_runner/modules/mobile/verify_trust_tests.py +491 -0
  155. ciris_server-0.3.0/qa/qa_runner/modules/model_eval_tests.py +770 -0
  156. ciris_server-0.3.0/qa/qa_runner/modules/multi_occurrence_tests.py +410 -0
  157. ciris_server-0.3.0/qa/qa_runner/modules/parallel_locales_tests.py +448 -0
  158. ciris_server-0.3.0/qa/qa_runner/modules/partnership_tests.py +165 -0
  159. ciris_server-0.3.0/qa/qa_runner/modules/play_live_tests.py +329 -0
  160. ciris_server-0.3.0/qa/qa_runner/modules/reddit_tests.py +374 -0
  161. ciris_server-0.3.0/qa/qa_runner/modules/safety_battery.py +903 -0
  162. ciris_server-0.3.0/qa/qa_runner/modules/safety_interpret.py +1132 -0
  163. ciris_server-0.3.0/qa/qa_runner/modules/sdk_tests.py +114 -0
  164. ciris_server-0.3.0/qa/qa_runner/modules/secrets_encryption_tests.py +236 -0
  165. ciris_server-0.3.0/qa/qa_runner/modules/setup_e2e_tests.py +681 -0
  166. ciris_server-0.3.0/qa/qa_runner/modules/setup_tests.py +331 -0
  167. ciris_server-0.3.0/qa/qa_runner/modules/simple_single_step_tests.py +78 -0
  168. ciris_server-0.3.0/qa/qa_runner/modules/solitude_live_tests.py +395 -0
  169. ciris_server-0.3.0/qa/qa_runner/modules/sql_external_data_tests.py +858 -0
  170. ciris_server-0.3.0/qa/qa_runner/modules/state_transition_tests.py +425 -0
  171. ciris_server-0.3.0/qa/qa_runner/modules/streaming_verification.py +2053 -0
  172. ciris_server-0.3.0/qa/qa_runner/modules/system_messages_tests.py +225 -0
  173. ciris_server-0.3.0/qa/qa_runner/modules/utility_adapters_tests.py +333 -0
  174. ciris_server-0.3.0/qa/qa_runner/modules/vision_tests.py +382 -0
  175. ciris_server-0.3.0/qa/qa_runner/modules/wallet_tests.py +507 -0
  176. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/CLAUDE.md +174 -0
  177. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/__init__.py +89 -0
  178. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/__main__.py +1676 -0
  179. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/browser_helper.py +476 -0
  180. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/desktop_app_helper.py +734 -0
  181. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/desktop_test.py +152 -0
  182. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/federation_screen_tags.py +272 -0
  183. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/federation_walk_report.py +281 -0
  184. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/federation_walk_test.py +942 -0
  185. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/licensed_agent_flow.py +687 -0
  186. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/server_manager.py +496 -0
  187. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/test_cases.py +1146 -0
  188. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/test_federation_walk_unit.py +299 -0
  189. ciris_server-0.3.0/qa/qa_runner/modules/web_ui/test_runner.py +515 -0
  190. ciris_server-0.3.0/qa/qa_runner/qa_api_test.py +204 -0
  191. ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_073205.json +113 -0
  192. ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_153259.json +221 -0
  193. ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_154628.json +174 -0
  194. ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_154817.json +170 -0
  195. ciris_server-0.3.0/qa/qa_runner/qa_reports/qa_report_20250825_155917.json +373 -0
  196. ciris_server-0.3.0/qa/qa_runner/qa_reports_comprehensive/qa_report_20250825_075504.json +149 -0
  197. ciris_server-0.3.0/qa/qa_runner/qa_reports_final/qa_report_20250825_092420.json +123 -0
  198. ciris_server-0.3.0/qa/qa_runner/qa_reports_test/qa_report_20250825_092452.json +35 -0
  199. ciris_server-0.3.0/qa/qa_runner/qa_scripts/README.md +118 -0
  200. ciris_server-0.3.0/qa/qa_runner/qa_scripts/qa_api_test.py +262 -0
  201. ciris_server-0.3.0/qa/qa_runner/qa_scripts/qa_v1.0_sdk_comprehensive.py +243 -0
  202. ciris_server-0.3.0/qa/qa_runner/qa_scripts/qa_v1.0_unhealthy_services_check.py +89 -0
  203. ciris_server-0.3.0/qa/qa_runner/qa_test.py +272 -0
  204. ciris_server-0.3.0/qa/qa_runner/qa_test_sdk.py +434 -0
  205. ciris_server-0.3.0/qa/qa_runner/requirements.txt +5 -0
  206. ciris_server-0.3.0/qa/qa_runner/runner.py +2717 -0
  207. ciris_server-0.3.0/qa/qa_runner/scripts/__init__.py +0 -0
  208. ciris_server-0.3.0/qa/qa_runner/scripts/he300_stream_debug.py +70 -0
  209. ciris_server-0.3.0/qa/qa_runner/server.py +1682 -0
  210. ciris_server-0.3.0/qa/qa_runner/staged_env.py +269 -0
  211. ciris_server-0.3.0/qa/qa_runner/status_tracker.py +244 -0
  212. ciris_server-0.3.0/qa/qa_runner/test_data/dsar_multi_source_privacy_schema.yaml +28 -0
  213. ciris_server-0.3.0/qa/qa_runner/test_data/qa_test.db +0 -0
  214. ciris_server-0.3.0/qa/qa_runner/test_data/qa_test_privacy_schema.yaml +40 -0
  215. ciris_server-0.3.0/qa/qa_runner/test_data/sql_config.json +9 -0
  216. ciris_server-0.3.0/qa/run_fabric.py +313 -0
  217. ciris_server-0.3.0/qa/seed_wa_cert.py +65 -0
  218. ciris_server-0.3.0/scripts/bench_report.py +674 -0
  219. ciris_server-0.3.0/src/auth/ABSORPTION.md +163 -0
  220. ciris_server-0.3.0/src/auth/api_keys.rs +306 -0
  221. ciris_server-0.3.0/src/auth/attestation.rs +138 -0
  222. ciris_server-0.3.0/src/auth/consent.rs +140 -0
  223. ciris_server-0.3.0/src/auth/device_auth.rs +391 -0
  224. ciris_server-0.3.0/src/auth/erasure.rs +108 -0
  225. ciris_server-0.3.0/src/auth/gate.rs +47 -0
  226. ciris_server-0.3.0/src/auth/mod.rs +41 -0
  227. ciris_server-0.3.0/src/auth/oauth.rs +961 -0
  228. ciris_server-0.3.0/src/auth/roles.rs +508 -0
  229. ciris_server-0.3.0/src/auth/self_login.rs +167 -0
  230. ciris_server-0.3.0/src/auth/session.rs +436 -0
  231. ciris_server-0.3.0/src/auth/store.rs +121 -0
  232. ciris_server-0.3.0/src/auth/verify.rs +100 -0
  233. ciris_server-0.3.0/src/benchmarks/mod.rs +31 -0
  234. ciris_server-0.3.0/src/benchmarks/scoreboard.rs +374 -0
  235. {ciris_server-0.2.2 → ciris_server-0.3.0}/src/compose.rs +61 -52
  236. {ciris_server-0.2.2 → ciris_server-0.3.0}/src/import.rs +12 -4
  237. ciris_server-0.3.0/src/lib.rs +237 -0
  238. {ciris_server-0.2.2 → ciris_server-0.3.0}/src/main.rs +6 -0
  239. ciris_server-0.3.0/tests/alm_chain.rs +78 -0
  240. ciris_server-0.3.0/tests/chaos_mesh.rs +234 -0
  241. ciris_server-0.3.0/tests/noise_floor.rs +587 -0
  242. {ciris_server-0.2.2 → ciris_server-0.3.0}/tests/replication.rs +17 -2
  243. ciris_server-0.2.2/CHANGELOG.md +0 -147
  244. ciris_server-0.2.2/FSD/PQC_AV_STREAMING_BENCH.md +0 -95
  245. ciris_server-0.2.2/scripts/bench_report.py +0 -234
  246. ciris_server-0.2.2/src/lib.rs +0 -126
  247. {ciris_server-0.2.2 → ciris_server-0.3.0}/.cargo/config.toml +0 -0
  248. {ciris_server-0.2.2 → ciris_server-0.3.0}/.github/workflows/conformance.yml +0 -0
  249. {ciris_server-0.2.2 → ciris_server-0.3.0}/.gitignore +0 -0
  250. {ciris_server-0.2.2 → ciris_server-0.3.0}/FSD/REGISTRY_FOLD_DERISK.md +0 -0
  251. {ciris_server-0.2.2 → ciris_server-0.3.0}/FSD/SERVER_1.0_PLAN.md +0 -0
  252. {ciris_server-0.2.2 → ciris_server-0.3.0}/LICENSE +0 -0
  253. {ciris_server-0.2.2 → ciris_server-0.3.0}/MISSION.md +0 -0
  254. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/.github/workflows/bench.yml +0 -0
  255. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/.github/workflows/ci.yml +0 -0
  256. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/.gitignore +0 -0
  257. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/.pre-commit-config.yaml +0 -0
  258. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +0 -0
  259. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +0 -0
  260. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +0 -0
  261. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/LICENSE +0 -0
  262. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/MISSION.md +0 -0
  263. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/README.md +0 -0
  264. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/aggregate.rs +0 -0
  265. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/canonicalize.rs +0 -0
  266. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/benches/project.rs +0 -0
  267. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/deny.toml +0 -0
  268. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/BENCHMARKS.md +0 -0
  269. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/COHABITATION.md +0 -0
  270. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PRE_COMMIT.md +0 -0
  271. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +0 -0
  272. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +0 -0
  273. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/RELEASE_NOTES.md +0 -0
  274. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +0 -0
  275. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/docs/THREAT_MODEL.md +0 -0
  276. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +0 -0
  277. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +0 -0
  278. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +0 -0
  279. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +0 -0
  280. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +0 -0
  281. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +0 -0
  282. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +0 -0
  283. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +0 -0
  284. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +0 -0
  285. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +0 -0
  286. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +0 -0
  287. {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
  288. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/pyproject.toml +0 -0
  289. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +0 -0
  290. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/api.rs +0 -0
  291. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/delegate.rs +0 -0
  292. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/mod.rs +0 -0
  293. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/audit/pyo3.rs +0 -0
  294. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/canonical/ceg_egress.rs +0 -0
  295. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/canonical/mod.rs +0 -0
  296. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/attestation.rs +0 -0
  297. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/mod.rs +0 -0
  298. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capacity/score.rs +0 -0
  299. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/batch.rs +0 -0
  300. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/client.rs +0 -0
  301. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/consent.rs +0 -0
  302. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/correlation.rs +0 -0
  303. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/event.rs +0 -0
  304. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/mod.rs +0 -0
  305. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/partial.rs +0 -0
  306. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/py_engine.rs +0 -0
  307. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/capture/seal.rs +0 -0
  308. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/declared.rs +0 -0
  309. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/mod.rs +0 -0
  310. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/cohort/resourcing.rs +0 -0
  311. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/egress.rs +0 -0
  312. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/mod.rs +0 -0
  313. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/node.rs +0 -0
  314. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/retention.rs +0 -0
  315. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/config/upstream.rs +0 -0
  316. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/axis_metrics.rs +0 -0
  317. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +0 -0
  318. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/correlated_action.rs +0 -0
  319. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/distributive_access.rs +0 -0
  320. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/manifold.rs +0 -0
  321. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/detector/mod.rs +0 -0
  322. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/extract/mod.rs +0 -0
  323. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/extract/projection.rs +0 -0
  324. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/ffi/mod.rs +0 -0
  325. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/ffi/pyo3.rs +0 -0
  326. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/lib.rs +0 -0
  327. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/observability/mod.rs +0 -0
  328. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/pipeline/lifecycle.rs +0 -0
  329. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/pipeline/mod.rs +0 -0
  330. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/eviction.rs +0 -0
  331. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/mod.rs +0 -0
  332. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/retention/summary.rs +0 -0
  333. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/handler.rs +0 -0
  334. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/mod.rs +0 -0
  335. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/relay.rs +0 -0
  336. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/role/ret_relay.rs +0 -0
  337. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/aggregate.rs +0 -0
  338. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/mod.rs +0 -0
  339. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scores/oracle.rs +0 -0
  340. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/assembly.rs +0 -0
  341. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/axis_calibration.rs +0 -0
  342. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/calibration.rs +0 -0
  343. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/capacity.rs +0 -0
  344. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/mod.rs +0 -0
  345. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/n_eff.rs +0 -0
  346. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/scoring/result.rs +0 -0
  347. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/signing/event.rs +0 -0
  348. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/signing/mod.rs +0 -0
  349. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/wire/mod.rs +0 -0
  350. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/src/wire/signer.rs +0 -0
  351. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/README.md +0 -0
  352. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +0 -0
  353. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +0 -0
  354. {ciris_server-0.2.2 → ciris_server-0.3.0}/crates/ciris-lens-core/tests/sovereign_rlib.rs +0 -0
  355. {ciris_server-0.2.2 → ciris_server-0.3.0}/rust-toolchain.toml +0 -0
  356. {ciris_server-0.2.2 → ciris_server-0.3.0}/src/config.rs +0 -0
  357. {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
- - os: ubuntu-latest
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
- cross: true
50
- # ARM32 Raspberry Pi / embedded mesh nodes.
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