ciris-server 0.2.6__tar.gz → 0.4.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 (373) hide show
  1. {ciris_server-0.2.6 → ciris_server-0.4.0}/.github/workflows/bench.yml +6 -2
  2. {ciris_server-0.2.6 → ciris_server-0.4.0}/.github/workflows/ci.yml +10 -0
  3. {ciris_server-0.2.6 → ciris_server-0.4.0}/.github/workflows/publish-pypi.yml +4 -0
  4. {ciris_server-0.2.6 → ciris_server-0.4.0}/.github/workflows/release.yml +17 -3
  5. {ciris_server-0.2.6 → ciris_server-0.4.0}/CHANGELOG.md +69 -0
  6. {ciris_server-0.2.6 → ciris_server-0.4.0}/Cargo.lock +116 -251
  7. {ciris_server-0.2.6 → ciris_server-0.4.0}/Cargo.toml +76 -12
  8. {ciris_server-0.2.6 → ciris_server-0.4.0}/FSD/LENS_TO_SERVER_MIGRATION.md +80 -13
  9. ciris_server-0.4.0/FSD/MESH_ANIMATION_BRIEF.md +228 -0
  10. ciris_server-0.4.0/FSD/MODERATION_CHILD_SAFETY.md +512 -0
  11. ciris_server-0.4.0/FSD/ONE_WHEEL_REEXPORT.md +171 -0
  12. {ciris_server-0.2.6 → ciris_server-0.4.0}/FSD/PQC_AV_STREAMING_BENCH.md +53 -25
  13. ciris_server-0.4.0/FSD/QA_AGAINST_RUST.md +180 -0
  14. ciris_server-0.4.0/FSD/SAFETY_LANDSCAPE.md +121 -0
  15. ciris_server-0.4.0/FSD/WATCHLIST_DETECTION.md +344 -0
  16. {ciris_server-0.2.6 → ciris_server-0.4.0}/PKG-INFO +17 -9
  17. {ciris_server-0.2.6 → ciris_server-0.4.0}/README.md +16 -8
  18. ciris_server-0.4.0/app/.gitignore +7 -0
  19. ciris_server-0.4.0/app/README.md +88 -0
  20. ciris_server-0.4.0/app/build.gradle.kts +20 -0
  21. ciris_server-0.4.0/app/fabric-client/build.gradle.kts +122 -0
  22. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/auth/FederationSigner.kt +90 -0
  23. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/Erasure.kt +51 -0
  24. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationContent.kt +28 -0
  25. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationMetrics.kt +30 -0
  26. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/FederationPeer.kt +95 -0
  27. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/federation/NodeCode.kt +28 -0
  28. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/model/identity/LocalIdentityAggregate.kt +78 -0
  29. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/net/FabricClient.kt +126 -0
  30. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/net/FabricEndpoints.kt +112 -0
  31. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/platform/PlatformLogger.kt +16 -0
  32. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/ui/screens/ErasureScreen.kt +94 -0
  33. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/ui/screens/IdentityScreen.kt +105 -0
  34. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/viewmodel/ErasureViewModel.kt +73 -0
  35. ciris_server-0.4.0/app/fabric-client/src/commonMain/kotlin/ai/ciris/fabric/viewmodel/IdentityViewModel.kt +52 -0
  36. ciris_server-0.4.0/app/fabric-client/src/commonTest/kotlin/ai/ciris/fabric/IdentitySliceTest.kt +84 -0
  37. ciris_server-0.4.0/app/gradle/wrapper/gradle-wrapper.jar +0 -0
  38. ciris_server-0.4.0/app/gradle/wrapper/gradle-wrapper.properties +7 -0
  39. ciris_server-0.4.0/app/gradle.properties +13 -0
  40. ciris_server-0.4.0/app/gradlew +248 -0
  41. ciris_server-0.4.0/app/gradlew.bat +92 -0
  42. ciris_server-0.4.0/app/settings.gradle.kts +29 -0
  43. ciris_server-0.4.0/benches/stream_fanout.rs +75 -0
  44. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/Cargo.toml +3 -3
  45. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/role/node.rs +318 -26
  46. ciris_server-0.4.0/qa/README.md +70 -0
  47. ciris_server-0.4.0/qa/ciris_sdk/README.md +275 -0
  48. ciris_server-0.4.0/qa/ciris_sdk/REFACTORING_SUMMARY.md +115 -0
  49. ciris_server-0.4.0/qa/ciris_sdk/__init__.py +124 -0
  50. ciris_server-0.4.0/qa/ciris_sdk/auth_store.py +283 -0
  51. ciris_server-0.4.0/qa/ciris_sdk/client.py +261 -0
  52. ciris_server-0.4.0/qa/ciris_sdk/examples/__init__.py +0 -0
  53. ciris_server-0.4.0/qa/ciris_sdk/examples/agent_interaction.py +116 -0
  54. ciris_server-0.4.0/qa/ciris_sdk/examples/unified_telemetry_examples.py +223 -0
  55. ciris_server-0.4.0/qa/ciris_sdk/examples/wa_example.py +72 -0
  56. ciris_server-0.4.0/qa/ciris_sdk/exceptions.py +73 -0
  57. ciris_server-0.4.0/qa/ciris_sdk/model_types.py +258 -0
  58. ciris_server-0.4.0/qa/ciris_sdk/models.py +349 -0
  59. ciris_server-0.4.0/qa/ciris_sdk/pagination.py +214 -0
  60. ciris_server-0.4.0/qa/ciris_sdk/rate_limiter.py +188 -0
  61. ciris_server-0.4.0/qa/ciris_sdk/resources/CONFIG_CLIENT.md +196 -0
  62. ciris_server-0.4.0/qa/ciris_sdk/resources/WA_CLIENT_GUIDE.md +157 -0
  63. ciris_server-0.4.0/qa/ciris_sdk/resources/__init__.py +0 -0
  64. ciris_server-0.4.0/qa/ciris_sdk/resources/agent.py +298 -0
  65. ciris_server-0.4.0/qa/ciris_sdk/resources/audit.py +210 -0
  66. ciris_server-0.4.0/qa/ciris_sdk/resources/auth.py +194 -0
  67. ciris_server-0.4.0/qa/ciris_sdk/resources/billing.py +189 -0
  68. ciris_server-0.4.0/qa/ciris_sdk/resources/config.py +317 -0
  69. ciris_server-0.4.0/qa/ciris_sdk/resources/consent.py +619 -0
  70. ciris_server-0.4.0/qa/ciris_sdk/resources/emergency.py +245 -0
  71. ciris_server-0.4.0/qa/ciris_sdk/resources/jobs.py +349 -0
  72. ciris_server-0.4.0/qa/ciris_sdk/resources/memory.py +595 -0
  73. ciris_server-0.4.0/qa/ciris_sdk/resources/setup.py +265 -0
  74. ciris_server-0.4.0/qa/ciris_sdk/resources/system.py +324 -0
  75. ciris_server-0.4.0/qa/ciris_sdk/resources/telemetry.py +747 -0
  76. ciris_server-0.4.0/qa/ciris_sdk/resources/wa.py +150 -0
  77. ciris_server-0.4.0/qa/ciris_sdk/resources/websocket.py +395 -0
  78. ciris_server-0.4.0/qa/ciris_sdk/setup.py +67 -0
  79. ciris_server-0.4.0/qa/ciris_sdk/telemetry_models.py +257 -0
  80. ciris_server-0.4.0/qa/ciris_sdk/telemetry_responses.py +199 -0
  81. ciris_server-0.4.0/qa/ciris_sdk/transport.py +177 -0
  82. ciris_server-0.4.0/qa/ciris_sdk/websocket.py +400 -0
  83. ciris_server-0.4.0/qa/fabric_results.json +627 -0
  84. ciris_server-0.4.0/qa/qa_runner/BILLING_QA_README.md +321 -0
  85. ciris_server-0.4.0/qa/qa_runner/CLAUDE.md +331 -0
  86. ciris_server-0.4.0/qa/qa_runner/README.md +240 -0
  87. ciris_server-0.4.0/qa/qa_runner/SDK_MODULE_INTEGRATION.md +443 -0
  88. ciris_server-0.4.0/qa/qa_runner/__init__.py +11 -0
  89. ciris_server-0.4.0/qa/qa_runner/__main__.py +666 -0
  90. ciris_server-0.4.0/qa/qa_runner/config.py +529 -0
  91. ciris_server-0.4.0/qa/qa_runner/mcp_test_server.py +138 -0
  92. ciris_server-0.4.0/qa/qa_runner/modules/CLAUDE.md +110 -0
  93. ciris_server-0.4.0/qa/qa_runner/modules/MULTI_OCCURRENCE_README.md +122 -0
  94. ciris_server-0.4.0/qa/qa_runner/modules/__init__.py +79 -0
  95. ciris_server-0.4.0/qa/qa_runner/modules/_module_metadata.py +121 -0
  96. ciris_server-0.4.0/qa/qa_runner/modules/accord_metrics_tests.py +1340 -0
  97. ciris_server-0.4.0/qa/qa_runner/modules/accord_tests.py +853 -0
  98. ciris_server-0.4.0/qa/qa_runner/modules/adapter_autoload_tests.py +504 -0
  99. ciris_server-0.4.0/qa/qa_runner/modules/adapter_availability_tests.py +410 -0
  100. ciris_server-0.4.0/qa/qa_runner/modules/adapter_config_tests.py +790 -0
  101. ciris_server-0.4.0/qa/qa_runner/modules/adapter_manifest_tests.py +360 -0
  102. ciris_server-0.4.0/qa/qa_runner/modules/agent_mode_tests.py +252 -0
  103. ciris_server-0.4.0/qa/qa_runner/modules/air_tests.py +280 -0
  104. ciris_server-0.4.0/qa/qa_runner/modules/api_tests.py +365 -0
  105. ciris_server-0.4.0/qa/qa_runner/modules/base_test_module.py +454 -0
  106. ciris_server-0.4.0/qa/qa_runner/modules/billing_integration_tests.py +406 -0
  107. ciris_server-0.4.0/qa/qa_runner/modules/billing_tests.py +272 -0
  108. ciris_server-0.4.0/qa/qa_runner/modules/cirisnode_tests.py +554 -0
  109. ciris_server-0.4.0/qa/qa_runner/modules/cognitive_state_api_tests.py +346 -0
  110. ciris_server-0.4.0/qa/qa_runner/modules/comprehensive_api_tests.py +311 -0
  111. ciris_server-0.4.0/qa/qa_runner/modules/comprehensive_single_step_tests.py +172 -0
  112. ciris_server-0.4.0/qa/qa_runner/modules/consent_tests.py +216 -0
  113. ciris_server-0.4.0/qa/qa_runner/modules/context_enrichment_tests.py +451 -0
  114. ciris_server-0.4.0/qa/qa_runner/modules/deferral_taxonomy_tests.py +121 -0
  115. ciris_server-0.4.0/qa/qa_runner/modules/deferral_tests.py +265 -0
  116. ciris_server-0.4.0/qa/qa_runner/modules/degraded_mode_tests.py +455 -0
  117. ciris_server-0.4.0/qa/qa_runner/modules/desktop_viz.py +304 -0
  118. ciris_server-0.4.0/qa/qa_runner/modules/dream_live_tests.py +439 -0
  119. ciris_server-0.4.0/qa/qa_runner/modules/dsar_multi_source_tests.py +609 -0
  120. ciris_server-0.4.0/qa/qa_runner/modules/dsar_tests.py +177 -0
  121. ciris_server-0.4.0/qa/qa_runner/modules/dsar_ticket_workflow_tests.py +431 -0
  122. ciris_server-0.4.0/qa/qa_runner/modules/filter_test_helper.py +269 -0
  123. ciris_server-0.4.0/qa/qa_runner/modules/filter_tests.py +550 -0
  124. ciris_server-0.4.0/qa/qa_runner/modules/handler_tests.py +545 -0
  125. ciris_server-0.4.0/qa/qa_runner/modules/he300_benchmark_tests.py +647 -0
  126. ciris_server-0.4.0/qa/qa_runner/modules/homeassistant_agentic_tests.py +687 -0
  127. ciris_server-0.4.0/qa/qa_runner/modules/hosted_tools_tests.py +484 -0
  128. ciris_server-0.4.0/qa/qa_runner/modules/identity_update_tests.py +497 -0
  129. ciris_server-0.4.0/qa/qa_runner/modules/l4_attestation_tests.py +278 -0
  130. ciris_server-0.4.0/qa/qa_runner/modules/licensed_agent_tests.py +489 -0
  131. ciris_server-0.4.0/qa/qa_runner/modules/mcp_tests.py +1370 -0
  132. ciris_server-0.4.0/qa/qa_runner/modules/memory_benchmark_tests.py +413 -0
  133. ciris_server-0.4.0/qa/qa_runner/modules/message_id_debug_test.py +146 -0
  134. ciris_server-0.4.0/qa/qa_runner/modules/mobile/__init__.py +92 -0
  135. ciris_server-0.4.0/qa/qa_runner/modules/mobile/__main__.py +1562 -0
  136. ciris_server-0.4.0/qa/qa_runner/modules/mobile/adb_helper.py +691 -0
  137. ciris_server-0.4.0/qa/qa_runner/modules/mobile/device_helper.py +364 -0
  138. ciris_server-0.4.0/qa/qa_runner/modules/mobile/first_time_licensed_agent.py +703 -0
  139. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ios/__init__.py +8 -0
  140. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ios/build_helper.py +659 -0
  141. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ios/idevice_helper.py +867 -0
  142. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ios/ios_ui_automator.py +186 -0
  143. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ios/vision_helper.py +208 -0
  144. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ios/xcrun_helper.py +639 -0
  145. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ios_physical_test_cases.py +1016 -0
  146. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ios_test_cases.py +891 -0
  147. ciris_server-0.4.0/qa/qa_runner/modules/mobile/portal_registration.py +586 -0
  148. ciris_server-0.4.0/qa/qa_runner/modules/mobile/test_cases.py +1823 -0
  149. ciris_server-0.4.0/qa/qa_runner/modules/mobile/test_runner.py +595 -0
  150. ciris_server-0.4.0/qa/qa_runner/modules/mobile/ui_automator.py +370 -0
  151. ciris_server-0.4.0/qa/qa_runner/modules/mobile/verify_trust_tests.py +491 -0
  152. ciris_server-0.4.0/qa/qa_runner/modules/model_eval_tests.py +770 -0
  153. ciris_server-0.4.0/qa/qa_runner/modules/multi_occurrence_tests.py +410 -0
  154. ciris_server-0.4.0/qa/qa_runner/modules/parallel_locales_tests.py +448 -0
  155. ciris_server-0.4.0/qa/qa_runner/modules/partnership_tests.py +165 -0
  156. ciris_server-0.4.0/qa/qa_runner/modules/play_live_tests.py +329 -0
  157. ciris_server-0.4.0/qa/qa_runner/modules/reddit_tests.py +374 -0
  158. ciris_server-0.4.0/qa/qa_runner/modules/safety_battery.py +903 -0
  159. ciris_server-0.4.0/qa/qa_runner/modules/safety_interpret.py +1132 -0
  160. ciris_server-0.4.0/qa/qa_runner/modules/sdk_tests.py +114 -0
  161. ciris_server-0.4.0/qa/qa_runner/modules/secrets_encryption_tests.py +236 -0
  162. ciris_server-0.4.0/qa/qa_runner/modules/setup_e2e_tests.py +681 -0
  163. ciris_server-0.4.0/qa/qa_runner/modules/setup_tests.py +331 -0
  164. ciris_server-0.4.0/qa/qa_runner/modules/simple_single_step_tests.py +78 -0
  165. ciris_server-0.4.0/qa/qa_runner/modules/solitude_live_tests.py +395 -0
  166. ciris_server-0.4.0/qa/qa_runner/modules/sql_external_data_tests.py +858 -0
  167. ciris_server-0.4.0/qa/qa_runner/modules/state_transition_tests.py +425 -0
  168. ciris_server-0.4.0/qa/qa_runner/modules/streaming_verification.py +2053 -0
  169. ciris_server-0.4.0/qa/qa_runner/modules/system_messages_tests.py +225 -0
  170. ciris_server-0.4.0/qa/qa_runner/modules/utility_adapters_tests.py +333 -0
  171. ciris_server-0.4.0/qa/qa_runner/modules/vision_tests.py +382 -0
  172. ciris_server-0.4.0/qa/qa_runner/modules/wallet_tests.py +507 -0
  173. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/CLAUDE.md +174 -0
  174. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/__init__.py +89 -0
  175. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/__main__.py +1676 -0
  176. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/browser_helper.py +476 -0
  177. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/desktop_app_helper.py +734 -0
  178. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/desktop_test.py +152 -0
  179. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/federation_screen_tags.py +272 -0
  180. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/federation_walk_report.py +281 -0
  181. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/federation_walk_test.py +942 -0
  182. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/licensed_agent_flow.py +687 -0
  183. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/server_manager.py +496 -0
  184. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/test_cases.py +1146 -0
  185. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/test_federation_walk_unit.py +299 -0
  186. ciris_server-0.4.0/qa/qa_runner/modules/web_ui/test_runner.py +515 -0
  187. ciris_server-0.4.0/qa/qa_runner/qa_api_test.py +204 -0
  188. ciris_server-0.4.0/qa/qa_runner/qa_reports/qa_report_20250825_073205.json +113 -0
  189. ciris_server-0.4.0/qa/qa_runner/qa_reports/qa_report_20250825_153259.json +221 -0
  190. ciris_server-0.4.0/qa/qa_runner/qa_reports/qa_report_20250825_154628.json +174 -0
  191. ciris_server-0.4.0/qa/qa_runner/qa_reports/qa_report_20250825_154817.json +170 -0
  192. ciris_server-0.4.0/qa/qa_runner/qa_reports/qa_report_20250825_155917.json +373 -0
  193. ciris_server-0.4.0/qa/qa_runner/qa_reports_comprehensive/qa_report_20250825_075504.json +149 -0
  194. ciris_server-0.4.0/qa/qa_runner/qa_reports_final/qa_report_20250825_092420.json +123 -0
  195. ciris_server-0.4.0/qa/qa_runner/qa_reports_test/qa_report_20250825_092452.json +35 -0
  196. ciris_server-0.4.0/qa/qa_runner/qa_scripts/README.md +118 -0
  197. ciris_server-0.4.0/qa/qa_runner/qa_scripts/qa_api_test.py +262 -0
  198. ciris_server-0.4.0/qa/qa_runner/qa_scripts/qa_v1.0_sdk_comprehensive.py +243 -0
  199. ciris_server-0.4.0/qa/qa_runner/qa_scripts/qa_v1.0_unhealthy_services_check.py +89 -0
  200. ciris_server-0.4.0/qa/qa_runner/qa_test.py +272 -0
  201. ciris_server-0.4.0/qa/qa_runner/qa_test_sdk.py +434 -0
  202. ciris_server-0.4.0/qa/qa_runner/requirements.txt +5 -0
  203. ciris_server-0.4.0/qa/qa_runner/runner.py +2717 -0
  204. ciris_server-0.4.0/qa/qa_runner/scripts/__init__.py +0 -0
  205. ciris_server-0.4.0/qa/qa_runner/scripts/he300_stream_debug.py +70 -0
  206. ciris_server-0.4.0/qa/qa_runner/server.py +1682 -0
  207. ciris_server-0.4.0/qa/qa_runner/staged_env.py +269 -0
  208. ciris_server-0.4.0/qa/qa_runner/status_tracker.py +244 -0
  209. ciris_server-0.4.0/qa/qa_runner/test_data/dsar_multi_source_privacy_schema.yaml +28 -0
  210. ciris_server-0.4.0/qa/qa_runner/test_data/qa_test.db +0 -0
  211. ciris_server-0.4.0/qa/qa_runner/test_data/qa_test_privacy_schema.yaml +40 -0
  212. ciris_server-0.4.0/qa/qa_runner/test_data/sql_config.json +9 -0
  213. ciris_server-0.4.0/qa/run_fabric.py +313 -0
  214. ciris_server-0.4.0/qa/seed_wa_cert.py +65 -0
  215. {ciris_server-0.2.6 → ciris_server-0.4.0}/scripts/bench_report.py +65 -20
  216. ciris_server-0.4.0/src/auth/ABSORPTION.md +163 -0
  217. ciris_server-0.4.0/src/auth/api_keys.rs +313 -0
  218. ciris_server-0.4.0/src/auth/attestation.rs +153 -0
  219. ciris_server-0.4.0/src/auth/bootstrap.rs +751 -0
  220. ciris_server-0.4.0/src/auth/consent.rs +155 -0
  221. ciris_server-0.4.0/src/auth/device_auth.rs +408 -0
  222. ciris_server-0.4.0/src/auth/erasure.rs +120 -0
  223. ciris_server-0.4.0/src/auth/gate.rs +47 -0
  224. ciris_server-0.4.0/src/auth/mod.rs +46 -0
  225. ciris_server-0.4.0/src/auth/oauth.rs +1043 -0
  226. ciris_server-0.4.0/src/auth/roles.rs +523 -0
  227. ciris_server-0.4.0/src/auth/self_login.rs +188 -0
  228. ciris_server-0.4.0/src/auth/session.rs +460 -0
  229. ciris_server-0.4.0/src/auth/store.rs +123 -0
  230. ciris_server-0.4.0/src/auth/verify.rs +106 -0
  231. {ciris_server-0.2.6 → ciris_server-0.4.0}/src/benchmarks/mod.rs +17 -5
  232. ciris_server-0.4.0/src/benchmarks/scoreboard.rs +780 -0
  233. ciris_server-0.4.0/src/compose.rs +753 -0
  234. {ciris_server-0.2.6 → ciris_server-0.4.0}/src/config.rs +92 -0
  235. ciris_server-0.4.0/src/federation_admin.rs +236 -0
  236. ciris_server-0.4.0/src/federation_nodecode.rs +140 -0
  237. ciris_server-0.4.0/src/lib.rs +283 -0
  238. ciris_server-0.4.0/src/main.rs +51 -0
  239. ciris_server-0.4.0/src/nodecode.rs +645 -0
  240. ciris_server-0.4.0/src/peer.rs +327 -0
  241. ciris_server-0.4.0/src/scorer/n_eff.rs +437 -0
  242. ciris_server-0.4.0/src/scorer.rs +349 -0
  243. ciris_server-0.4.0/tests/capacity_scorer.rs +332 -0
  244. ciris_server-0.4.0/tests/chaos_mesh.rs +234 -0
  245. ciris_server-0.4.0/tests/federation_admin.rs +444 -0
  246. ciris_server-0.4.0/tests/nodecode.rs +99 -0
  247. ciris_server-0.4.0/tests/noise_floor.rs +587 -0
  248. ciris_server-0.4.0/tests/peer_replication.rs +495 -0
  249. ciris_server-0.4.0/tests/root_bootstrap.rs +440 -0
  250. ciris_server-0.2.6/src/benchmarks/scoreboard.rs +0 -374
  251. ciris_server-0.2.6/src/compose.rs +0 -369
  252. ciris_server-0.2.6/src/lib.rs +0 -136
  253. ciris_server-0.2.6/src/main.rs +0 -32
  254. ciris_server-0.2.6/tests/chaos_mesh.rs +0 -111
  255. {ciris_server-0.2.6 → ciris_server-0.4.0}/.cargo/config.toml +0 -0
  256. {ciris_server-0.2.6 → ciris_server-0.4.0}/.github/workflows/conformance.yml +0 -0
  257. {ciris_server-0.2.6 → ciris_server-0.4.0}/.gitignore +0 -0
  258. {ciris_server-0.2.6 → ciris_server-0.4.0}/FSD/REGISTRY_FOLD_DERISK.md +0 -0
  259. {ciris_server-0.2.6 → ciris_server-0.4.0}/FSD/SERVER_1.0_PLAN.md +0 -0
  260. {ciris_server-0.2.6 → ciris_server-0.4.0}/LICENSE +0 -0
  261. {ciris_server-0.2.6 → ciris_server-0.4.0}/MISSION.md +0 -0
  262. {ciris_server-0.2.6 → ciris_server-0.4.0}/bench-site/data.json +0 -0
  263. {ciris_server-0.2.6 → ciris_server-0.4.0}/bench-site/index.html +0 -0
  264. {ciris_server-0.2.6 → ciris_server-0.4.0}/benches/alm_chain.rs +0 -0
  265. {ciris_server-0.2.6 → ciris_server-0.4.0}/benches/pqc_av_streaming.rs +0 -0
  266. {ciris_server-0.2.6 → ciris_server-0.4.0}/benches/replication_ingest.rs +0 -0
  267. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/.github/workflows/bench.yml +0 -0
  268. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/.github/workflows/ci.yml +0 -0
  269. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/.gitignore +0 -0
  270. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/.pre-commit-config.yaml +0 -0
  271. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +0 -0
  272. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +0 -0
  273. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +0 -0
  274. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/LICENSE +0 -0
  275. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/MISSION.md +0 -0
  276. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/README.md +0 -0
  277. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/benches/aggregate.rs +0 -0
  278. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/benches/canonicalize.rs +0 -0
  279. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/benches/project.rs +0 -0
  280. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/deny.toml +0 -0
  281. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/docs/BENCHMARKS.md +0 -0
  282. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/docs/COHABITATION.md +0 -0
  283. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/docs/PRE_COMMIT.md +0 -0
  284. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +0 -0
  285. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +0 -0
  286. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/docs/RELEASE_NOTES.md +0 -0
  287. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +0 -0
  288. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/docs/THREAT_MODEL.md +0 -0
  289. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +0 -0
  290. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +0 -0
  291. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +0 -0
  292. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +0 -0
  293. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +0 -0
  294. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +0 -0
  295. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +0 -0
  296. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +0 -0
  297. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +0 -0
  298. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +0 -0
  299. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +0 -0
  300. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +0 -0
  301. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/pyproject.toml +0 -0
  302. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +0 -0
  303. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/audit/api.rs +0 -0
  304. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/audit/delegate.rs +0 -0
  305. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/audit/mod.rs +0 -0
  306. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/audit/pyo3.rs +0 -0
  307. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/canonical/ceg_egress.rs +0 -0
  308. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/canonical/mod.rs +0 -0
  309. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capacity/attestation.rs +0 -0
  310. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capacity/mod.rs +0 -0
  311. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capacity/score.rs +0 -0
  312. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/batch.rs +0 -0
  313. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/client.rs +0 -0
  314. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/consent.rs +0 -0
  315. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/correlation.rs +0 -0
  316. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/event.rs +0 -0
  317. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/mod.rs +0 -0
  318. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/partial.rs +0 -0
  319. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/py_engine.rs +0 -0
  320. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/capture/seal.rs +0 -0
  321. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/cohort/declared.rs +0 -0
  322. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/cohort/mod.rs +0 -0
  323. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/cohort/resourcing.rs +0 -0
  324. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/config/egress.rs +0 -0
  325. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/config/mod.rs +0 -0
  326. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/config/node.rs +0 -0
  327. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/config/retention.rs +0 -0
  328. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/config/upstream.rs +0 -0
  329. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/detector/axis_metrics.rs +0 -0
  330. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +0 -0
  331. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/detector/correlated_action.rs +0 -0
  332. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/detector/distributive_access.rs +0 -0
  333. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/detector/manifold.rs +0 -0
  334. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/detector/mod.rs +0 -0
  335. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/extract/mod.rs +0 -0
  336. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/extract/projection.rs +0 -0
  337. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/ffi/mod.rs +0 -0
  338. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/ffi/pyo3.rs +0 -0
  339. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/lib.rs +0 -0
  340. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/observability/mod.rs +0 -0
  341. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/pipeline/lifecycle.rs +0 -0
  342. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/pipeline/mod.rs +0 -0
  343. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/retention/eviction.rs +0 -0
  344. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/retention/mod.rs +0 -0
  345. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/retention/summary.rs +0 -0
  346. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/role/handler.rs +0 -0
  347. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/role/mod.rs +0 -0
  348. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/role/relay.rs +0 -0
  349. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/role/ret_relay.rs +0 -0
  350. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scores/aggregate.rs +0 -0
  351. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scores/mod.rs +0 -0
  352. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scores/oracle.rs +0 -0
  353. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scoring/assembly.rs +0 -0
  354. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scoring/axis_calibration.rs +0 -0
  355. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scoring/calibration.rs +0 -0
  356. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scoring/capacity.rs +0 -0
  357. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scoring/mod.rs +0 -0
  358. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scoring/n_eff.rs +0 -0
  359. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/scoring/result.rs +0 -0
  360. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/signing/event.rs +0 -0
  361. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/signing/mod.rs +0 -0
  362. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/wire/mod.rs +0 -0
  363. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/src/wire/signer.rs +0 -0
  364. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/tests/parity/README.md +0 -0
  365. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +0 -0
  366. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +0 -0
  367. {ciris_server-0.2.6 → ciris_server-0.4.0}/crates/ciris-lens-core/tests/sovereign_rlib.rs +0 -0
  368. {ciris_server-0.2.6 → ciris_server-0.4.0}/pyproject.toml +0 -0
  369. {ciris_server-0.2.6 → ciris_server-0.4.0}/rust-toolchain.toml +0 -0
  370. {ciris_server-0.2.6 → ciris_server-0.4.0}/src/import.rs +0 -0
  371. {ciris_server-0.2.6 → ciris_server-0.4.0}/src/quorum.rs +0 -0
  372. {ciris_server-0.2.6 → ciris_server-0.4.0}/tests/alm_chain.rs +0 -0
  373. {ciris_server-0.2.6 → ciris_server-0.4.0}/tests/replication.rs +0 -0
@@ -52,9 +52,13 @@ 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
- run: cargo run --release --quiet -- scoreboard > scoreboard.json
57
+ # Pass the criterion dir so the substrate tier is promoted to MEASURED from
58
+ # the real bench numbers above ("numbers through the fabric"); metrics with
59
+ # no bench (mls_commit/cold-join, the holonomic tier) stay honestly gated.
60
+ # Publish-only — not a pass/fail gate (shared runners are noisy).
61
+ run: cargo run --release --quiet -- scoreboard --criterion-dir target/criterion > scoreboard.json
58
62
  - name: Generate interpreted page
59
63
  run: |
60
64
  BENCH_DATE="$(date -u +%Y-%m-%d)" \
@@ -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
@@ -4,6 +4,75 @@ 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.1] — 2026-06-17
8
+
9
+ Substrate floor → **persist v8.6.0 / edge v4.5.0 / verify-family v5.11.0** —
10
+ the §19.7 forever-memory cross-impl loop closed: `EjectAggregatedTierOnly`
11
+ tier-granular eviction + the unified `EjectionVerdict` surface (edge v4.5.0 ↔
12
+ verify v5.11.0 ↔ persist v8.6.0). Additive; build + full test suite green
13
+ (25 lib + lens-core 352 + integration), no composition-root change.
14
+
15
+ ## [0.3.0] — 2026-06-16
16
+
17
+ The integrated fabric node: the **auth subsystem** absorbed, the **one-wheel**
18
+ re-export surface, and the substrate on the **v8.4.0 / v4.3.0 / v5.10.0** floor.
19
+ This is the node we replace the deployed CIRISLens with (and the wheel CIRISAgent
20
+ adopts to drop its lens-core + its own auth).
21
+
22
+ ### Added
23
+ - **Auth subsystem (`src/auth/`, CIRISServer#9) — the fabric is the single auth
24
+ authority.** The agent's entire user/WA/OAuth/api-key/service-token surface
25
+ already lived in one persist table (`wa_cert`), so this is a Python→Rust port
26
+ over the same rows — **no schema fork, 0 conflicts** (`src/auth/ABSORPTION.md`:
27
+ 33 capabilities mapped). One `x-ciris-*` hybrid request verifier (accepts the
28
+ identity **or** any admitted occurrence — the consenting user *and* the
29
+ generating agent are both valid signers); **self-at-login** (§8.1.12.7) as the
30
+ login ceremony; OAuth front-door (providers/login/callback + native
31
+ google/apple); sessions/token issuer (replaces OAuth→WA→JWT); the CEG role-set
32
+ **plus** the agent's `UserRole`/`Permission` model verbatim; api-keys +
33
+ service-token revocation; attestation; user-signed **consent**; and CEG-native
34
+ **erasure** (GDPR Art. 17 in-app path → `Engine::evict_actor`). Password KDF,
35
+ native-token JWKS, and root-signature verification are byte-compatible with the
36
+ agent's own crypto (verified against agent-produced vectors).
37
+ - **One-wheel re-export (CIRISServer#4):** `ciris_server` re-hosts the persist /
38
+ edge / lens Python surfaces under one `.so` (one PyO3 type registry —
39
+ `ciris_server.Engine is ciris_server.persist.Engine`), so CIRISAgent consumes a
40
+ single wheel and the cross-wheel type-identity bug class (CIRISPersist#109)
41
+ cannot occur. (`reset_engine` / `init_edge_runtime` re-export hooks pending
42
+ upstream: CIRISPersist#231, CIRISEdge#156; `ciris-verify` stays a standalone
43
+ ctypes wheel.)
44
+ - **Noise-floor compliance bench (CIRISServer#14, `tests/noise_floor.rs`):**
45
+ measured individual-unrecoverability — revocation → hard-delete, the
46
+ reconstruction cliff at the fountain floor, aggregation-is-erasure.
47
+ - **The fabric app (`app/`, CIRISServer#15):** the CIRISAgent KMP mesh app minus
48
+ agent cards (identity slice proven; governance/safety surfaces).
49
+
50
+ ### Changed
51
+ - Substrate floor → **persist v8.4.0 / edge v4.3.0 / verify-family v5.10.0** (the
52
+ §19.7 erasure primitives + `wa_cert` auth substrate).
53
+
54
+ ### Validated
55
+ - **Behavior-correct drop-in proof (`qa/`, `FSD/QA_AGAINST_RUST.md`).** The agent's
56
+ own Python QA-runner module definitions are run unmodified against a live Rust
57
+ `ciris-server`: **12/12 fabric-route tests pass, 0 gaps** — including the
58
+ load-bearing byte-compat proof that a password hash produced by the agent's own
59
+ `cryptography.PBKDF2HMAC` authenticates against the Rust `verify_password`. The
60
+ ~30 agent-brain modules are correctly N/A on a headless fabric node. The QA
61
+ runner stays Python (it is HTTP-driving conformance, not ported).
62
+
63
+ ### Fixed
64
+ - **api-keys / service-token routes are now authz-gated.** `POST/GET/DELETE
65
+ /v1/auth/api-keys*` and `/v1/auth/service-token/revoke` now require a live
66
+ session bearer whose role carries `manage_user_permissions` (matching the
67
+ agent's gate) — the one residual the conformance run surfaced.
68
+
69
+ ### Notes
70
+ - Companion: **CIRISStatus** becomes a fabric monitoring node (Flows A/B +
71
+ `health:liveness` `scores` + website sockets).
72
+ - GDPR erasure is **both** entry points: the DSAR endpoint on the monitor node
73
+ **and** the in-app CEG-native `withdraws`. Full lens decommission stays gated on
74
+ the DSAR-via-status endpoint landing (keep the Python DSAR reachable until then).
75
+
7
76
  ## [0.2.6] — 2026-06-16
8
77
 
9
78
  Substrate floor → **v4.2.0 family** + the **multi-tier ALM relay chain** test