ciris-server 0.5.63__tar.gz → 0.5.69__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 (258) hide show
  1. {ciris_server-0.5.63 → ciris_server-0.5.69}/.github/workflows/bench.yml +11 -18
  2. {ciris_server-0.5.63 → ciris_server-0.5.69}/.github/workflows/build-wheels.yml +58 -83
  3. ciris_server-0.5.69/.github/workflows/ci.yml +141 -0
  4. {ciris_server-0.5.63 → ciris_server-0.5.69}/.github/workflows/client-artifacts.yml +17 -25
  5. {ciris_server-0.5.63 → ciris_server-0.5.69}/.github/workflows/conformance.yml +11 -18
  6. {ciris_server-0.5.63 → ciris_server-0.5.69}/.github/workflows/release.yml +38 -73
  7. {ciris_server-0.5.63 → ciris_server-0.5.69}/Cargo.lock +3 -3
  8. ciris_server-0.5.69/Cargo.toml +321 -0
  9. {ciris_server-0.5.63 → ciris_server-0.5.69}/PKG-INFO +1 -1
  10. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/Cargo.toml +1 -1
  11. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/bootstrap.rs +3 -0
  12. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/ownership.rs +181 -1
  13. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/claim_remote.rs +105 -2
  14. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/compose.rs +29 -1
  15. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/config_api.rs +101 -1
  16. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/config_reconcile.rs +22 -0
  17. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/graph_config.rs +42 -1
  18. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/claim_remote.rs +48 -15
  19. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/ownership.rs +124 -2
  20. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/support.rs +1 -1
  21. ciris_server-0.5.63/.github/workflows/ci.yml +0 -266
  22. ciris_server-0.5.63/.github/workflows/windows7-installer.yml +0 -279
  23. ciris_server-0.5.63/Cargo.toml +0 -321
  24. {ciris_server-0.5.63 → ciris_server-0.5.69}/.cargo/config.toml +0 -0
  25. {ciris_server-0.5.63 → ciris_server-0.5.69}/.claude/workflows/localize-ui.js +0 -0
  26. {ciris_server-0.5.63 → ciris_server-0.5.69}/.github/workflows/localization.yml +0 -0
  27. {ciris_server-0.5.63 → ciris_server-0.5.69}/.github/workflows/publish-pypi.yml +0 -0
  28. {ciris_server-0.5.63 → ciris_server-0.5.69}/.gitignore +0 -0
  29. {ciris_server-0.5.63 → ciris_server-0.5.69}/CHANGELOG.md +0 -0
  30. {ciris_server-0.5.63 → ciris_server-0.5.69}/LICENSE +0 -0
  31. {ciris_server-0.5.63 → ciris_server-0.5.69}/MISSION.md +0 -0
  32. {ciris_server-0.5.63 → ciris_server-0.5.69}/README.md +0 -0
  33. {ciris_server-0.5.63 → ciris_server-0.5.69}/bench-site/bench_results.json +0 -0
  34. {ciris_server-0.5.63 → ciris_server-0.5.69}/bench-site/index.html +0 -0
  35. {ciris_server-0.5.63 → ciris_server-0.5.69}/bench_results.json +0 -0
  36. {ciris_server-0.5.63 → ciris_server-0.5.69}/benches/alm_chain.rs +0 -0
  37. {ciris_server-0.5.63 → ciris_server-0.5.69}/benches/erasure_survival.rs +0 -0
  38. {ciris_server-0.5.63 → ciris_server-0.5.69}/benches/n_eff_scoring.rs +0 -0
  39. {ciris_server-0.5.63 → ciris_server-0.5.69}/benches/pqc_av_streaming.rs +0 -0
  40. {ciris_server-0.5.63 → ciris_server-0.5.69}/benches/replication_ingest.rs +0 -0
  41. {ciris_server-0.5.63 → ciris_server-0.5.69}/benches/sig_overhead.rs +0 -0
  42. {ciris_server-0.5.63 → ciris_server-0.5.69}/benches/stream_fanout.rs +0 -0
  43. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/.github/workflows/bench.yml +0 -0
  44. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/.github/workflows/ci.yml +0 -0
  45. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/.gitignore +0 -0
  46. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/.pre-commit-config.yaml +0 -0
  47. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +0 -0
  48. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +0 -0
  49. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +0 -0
  50. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/LICENSE +0 -0
  51. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/MISSION.md +0 -0
  52. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/README.md +0 -0
  53. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/benches/aggregate.rs +0 -0
  54. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/benches/canonicalize.rs +0 -0
  55. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/benches/project.rs +0 -0
  56. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/deny.toml +0 -0
  57. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/docs/BENCHMARKS.md +0 -0
  58. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/docs/COHABITATION.md +0 -0
  59. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/docs/PRE_COMMIT.md +0 -0
  60. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +0 -0
  61. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +0 -0
  62. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/docs/RELEASE_NOTES.md +0 -0
  63. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +0 -0
  64. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/docs/THREAT_MODEL.md +0 -0
  65. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +0 -0
  66. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +0 -0
  67. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +0 -0
  68. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +0 -0
  69. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +0 -0
  70. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +0 -0
  71. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +0 -0
  72. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +0 -0
  73. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +0 -0
  74. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +0 -0
  75. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +0 -0
  76. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +0 -0
  77. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/pyproject.toml +0 -0
  78. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +0 -0
  79. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/audit/api.rs +0 -0
  80. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/audit/delegate.rs +0 -0
  81. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/audit/mod.rs +0 -0
  82. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/audit/pyo3.rs +0 -0
  83. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/canonical/ceg_egress.rs +0 -0
  84. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/canonical/mod.rs +0 -0
  85. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capacity/attestation.rs +0 -0
  86. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capacity/mod.rs +0 -0
  87. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capacity/score.rs +0 -0
  88. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/batch.rs +0 -0
  89. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/client.rs +0 -0
  90. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/consent.rs +0 -0
  91. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/correlation.rs +0 -0
  92. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/event.rs +0 -0
  93. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/mod.rs +0 -0
  94. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/partial.rs +0 -0
  95. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/py_engine.rs +0 -0
  96. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/capture/seal.rs +0 -0
  97. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/cohort/declared.rs +0 -0
  98. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/cohort/mod.rs +0 -0
  99. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/cohort/resourcing.rs +0 -0
  100. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/config/egress.rs +0 -0
  101. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/config/mod.rs +0 -0
  102. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/config/node.rs +0 -0
  103. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/config/retention.rs +0 -0
  104. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/config/upstream.rs +0 -0
  105. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/detector/axis_metrics.rs +0 -0
  106. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +0 -0
  107. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/detector/correlated_action.rs +0 -0
  108. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/detector/distributive_access.rs +0 -0
  109. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/detector/manifold.rs +0 -0
  110. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/detector/mod.rs +0 -0
  111. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/extract/mod.rs +0 -0
  112. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/extract/projection.rs +0 -0
  113. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/ffi/mod.rs +0 -0
  114. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/ffi/pyo3.rs +0 -0
  115. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/lib.rs +0 -0
  116. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/observability/mod.rs +0 -0
  117. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/pipeline/lifecycle.rs +0 -0
  118. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/pipeline/mod.rs +0 -0
  119. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/retention/eviction.rs +0 -0
  120. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/retention/mod.rs +0 -0
  121. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/retention/summary.rs +0 -0
  122. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/role/handler.rs +0 -0
  123. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/role/mod.rs +0 -0
  124. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/role/node.rs +0 -0
  125. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/role/relay.rs +0 -0
  126. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/role/ret_relay.rs +0 -0
  127. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scores/aggregate.rs +0 -0
  128. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scores/mod.rs +0 -0
  129. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scores/oracle.rs +0 -0
  130. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scoring/assembly.rs +0 -0
  131. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scoring/axis_calibration.rs +0 -0
  132. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scoring/calibration.rs +0 -0
  133. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scoring/capacity.rs +0 -0
  134. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scoring/mod.rs +0 -0
  135. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scoring/n_eff.rs +0 -0
  136. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/scoring/result.rs +0 -0
  137. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/signing/event.rs +0 -0
  138. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/signing/mod.rs +0 -0
  139. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/wire/mod.rs +0 -0
  140. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/src/wire/signer.rs +0 -0
  141. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/tests/parity/README.md +0 -0
  142. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +0 -0
  143. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +0 -0
  144. {ciris_server-0.5.63 → ciris_server-0.5.69}/crates/ciris-lens-core/tests/sovereign_rlib.rs +0 -0
  145. {ciris_server-0.5.63 → ciris_server-0.5.69}/data/live_mesh_2026-06-22.json +0 -0
  146. {ciris_server-0.5.63 → ciris_server-0.5.69}/docs/SCOPE_PRIVACY.md +0 -0
  147. {ciris_server-0.5.63 → ciris_server-0.5.69}/examples/mesh_propagation/main.rs +0 -0
  148. {ciris_server-0.5.63 → ciris_server-0.5.69}/examples/qa_runner/accord.rs +0 -0
  149. {ciris_server-0.5.63 → ciris_server-0.5.69}/examples/qa_runner/common.rs +0 -0
  150. {ciris_server-0.5.63 → ciris_server-0.5.69}/examples/qa_runner/family.rs +0 -0
  151. {ciris_server-0.5.63 → ciris_server-0.5.69}/examples/qa_runner/main.rs +0 -0
  152. {ciris_server-0.5.63 → ciris_server-0.5.69}/examples/qa_runner/verify.rs +0 -0
  153. {ciris_server-0.5.63 → ciris_server-0.5.69}/installers/windows/README.md +0 -0
  154. {ciris_server-0.5.63 → ciris_server-0.5.69}/installers/windows/bundle-jre.ps1 +0 -0
  155. {ciris_server-0.5.63 → ciris_server-0.5.69}/installers/windows/ciris-server-entry.py +0 -0
  156. {ciris_server-0.5.63 → ciris_server-0.5.69}/installers/windows/ciris-server-installer.iss +0 -0
  157. {ciris_server-0.5.63 → ciris_server-0.5.69}/installers/windows/ciris-server.spec +0 -0
  158. {ciris_server-0.5.63 → ciris_server-0.5.69}/pyproject.toml +0 -0
  159. {ciris_server-0.5.63 → ciris_server-0.5.69}/python/ciris_server/__init__.py +0 -0
  160. {ciris_server-0.5.63 → ciris_server-0.5.69}/python/ciris_server/__main__.py +0 -0
  161. {ciris_server-0.5.63 → ciris_server-0.5.69}/python/ciris_server/cli.py +0 -0
  162. {ciris_server-0.5.63 → ciris_server-0.5.69}/python/ciris_server/desktop_launcher.py +0 -0
  163. {ciris_server-0.5.63 → ciris_server-0.5.69}/rust-toolchain.toml +0 -0
  164. {ciris_server-0.5.63 → ciris_server-0.5.69}/scripts/bench_report.py +0 -0
  165. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/accord.rs +0 -0
  166. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/accord_custody.rs +0 -0
  167. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/accord_halt.rs +0 -0
  168. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/accord_pki/yubico_attestation_root_1.der +0 -0
  169. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/accord_pki/yubico_attestation_root_1.pem +0 -0
  170. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/accord_provision.rs +0 -0
  171. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/accord_reactivate.rs +0 -0
  172. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/adapter.rs +0 -0
  173. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/ABSORPTION.md +0 -0
  174. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/api_keys.rs +0 -0
  175. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/attestation.rs +0 -0
  176. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/consent.rs +0 -0
  177. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/device_auth.rs +0 -0
  178. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/device_grant.rs +0 -0
  179. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/erasure.rs +0 -0
  180. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/gate.rs +0 -0
  181. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/loopback.rs +0 -0
  182. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/mod.rs +0 -0
  183. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/oauth.rs +0 -0
  184. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/occurrence.rs +0 -0
  185. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/portable_occurrence.rs +0 -0
  186. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/roles.rs +0 -0
  187. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/self_login.rs +0 -0
  188. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/session.rs +0 -0
  189. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/store.rs +0 -0
  190. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/auth/verify.rs +0 -0
  191. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/benchmarks/bench_results.rs +0 -0
  192. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/benchmarks/mesh.rs +0 -0
  193. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/benchmarks/mod.rs +0 -0
  194. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/benchmarks/scoreboard.rs +0 -0
  195. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/config.rs +0 -0
  196. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/family.rs +0 -0
  197. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/federation_admin.rs +0 -0
  198. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/federation_nodecode.rs +0 -0
  199. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/federation_peers.rs +0 -0
  200. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/health.rs +0 -0
  201. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/holonomic.rs +0 -0
  202. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/http_log.rs +0 -0
  203. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/identity.rs +0 -0
  204. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/ids.rs +0 -0
  205. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/import.rs +0 -0
  206. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/ingest_http.rs +0 -0
  207. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/lib.rs +0 -0
  208. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/main.rs +0 -0
  209. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/memory_api.rs +0 -0
  210. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/nodecode.rs +0 -0
  211. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/peer.rs +0 -0
  212. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/proxy.rs +0 -0
  213. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/py_adapter.rs +0 -0
  214. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/quorum.rs +0 -0
  215. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/radio.rs +0 -0
  216. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/replication_reconcile.rs +0 -0
  217. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/safety/age.rs +0 -0
  218. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/safety/mod.rs +0 -0
  219. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/safety/moderation.rs +0 -0
  220. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/safety/named.rs +0 -0
  221. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/safety/watchlist.rs +0 -0
  222. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/scorer/n_eff.rs +0 -0
  223. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/scorer.rs +0 -0
  224. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/system_data.rs +0 -0
  225. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/telemetry_logs.rs +0 -0
  226. {ciris_server-0.5.63 → ciris_server-0.5.69}/src/yubico_attestation_ca.pem +0 -0
  227. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/accord.rs +0 -0
  228. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/alm_chain.rs +0 -0
  229. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/audit_chain.rs +0 -0
  230. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/capacity_scorer.rs +0 -0
  231. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/chaos_mesh.rs +0 -0
  232. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/config_reconcile.rs +0 -0
  233. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/device_grant.rs +0 -0
  234. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/federation_admin.rs +0 -0
  235. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/federation_session_kex.rs +0 -0
  236. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/graph_config.rs +0 -0
  237. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/ingest_http.rs +0 -0
  238. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/nat_traversal.rs +0 -0
  239. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/nodecode.rs +0 -0
  240. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/noise_floor.rs +0 -0
  241. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/occurrence.rs +0 -0
  242. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/peer_replication.rs +0 -0
  243. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/portable_occurrence.rs +0 -0
  244. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/stage1.rs +0 -0
  245. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/stage2.rs +0 -0
  246. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/stage3.rs +0 -0
  247. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/stage4.rs +0 -0
  248. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/stage5.rs +0 -0
  249. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/stage6.rs +0 -0
  250. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/stage7.rs +0 -0
  251. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates/stage8.rs +0 -0
  252. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/release_gates.rs +0 -0
  253. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/replication.rs +0 -0
  254. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/replication_reconcile.rs +0 -0
  255. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/root_bootstrap.rs +0 -0
  256. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/safety.rs +0 -0
  257. {ciris_server-0.5.63 → ciris_server-0.5.69}/tests/stream_sth_consistency.rs +0 -0
  258. {ciris_server-0.5.63 → ciris_server-0.5.69}/tools/audit_cohort_scope_callers.py +0 -0
@@ -77,32 +77,25 @@ jobs:
77
77
  echo "key-persist=${KEY_PERSIST}"
78
78
  echo "key-edge=${KEY_EDGE}"
79
79
  echo "key=${KEY_SERVER}"
80
+ echo "key-server-prefix=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s"
80
81
  } >> "$GITHUB_OUTPUT"
81
82
  echo "::notice::CIRISCache (${PLAT}): S=${S:-NONE} P=${P:-NONE} V=${V:-NONE} EDGE=${EDGE:-NONE} RUSTC=${RUSTC}"
82
83
  echo "::notice::${KEY_VERIFY}"
83
84
  echo "::notice::${KEY_PERSIST}"
84
85
  echo "::notice::${KEY_EDGE}"
85
86
  echo "::notice::${KEY_SERVER}"
86
- - name: CIRISCache restore (verify layer)
87
- uses: CIRISAI/CIRISCache/restore@v1
87
+ # Deepest-first, first-hit-wins (CIRISCache restore@v2): one extraction of
88
+ # the deepest available blob (cumulative supersets) instead of N redundant.
89
+ - name: CIRISCache restore (server→edge→persist→verify, first hit)
90
+ uses: CIRISAI/CIRISCache/restore@v2
88
91
  continue-on-error: true
89
92
  with:
90
- key: ${{ steps.cachekey.outputs.key-verify }}
91
- - name: CIRISCache restore (persist layer)
92
- uses: CIRISAI/CIRISCache/restore@v1
93
- continue-on-error: true
94
- with:
95
- key: ${{ steps.cachekey.outputs.key-persist }}
96
- - name: CIRISCache restore (edge layer)
97
- uses: CIRISAI/CIRISCache/restore@v1
98
- continue-on-error: true
99
- with:
100
- key: ${{ steps.cachekey.outputs.key-edge }}
101
- - name: CIRISCache restore (server layer)
102
- uses: CIRISAI/CIRISCache/restore@v1
103
- continue-on-error: true
104
- with:
105
- key: ${{ steps.cachekey.outputs.key }}
93
+ keys: |
94
+ ${{ steps.cachekey.outputs.key }}
95
+ ${{ steps.cachekey.outputs.key-server-prefix }}*
96
+ ${{ steps.cachekey.outputs.key-edge }}
97
+ ${{ steps.cachekey.outputs.key-persist }}
98
+ ${{ steps.cachekey.outputs.key-verify }}
106
99
  - uses: actions/setup-python@v5
107
100
  with:
108
101
  python-version: "3.12"
@@ -9,13 +9,16 @@ name: build-wheels
9
9
  # or the cache they share never hits. Keeping the steps in one place guarantees
10
10
  # that — there is no second copy to drift.
11
11
  #
12
- # Cache model (GitHub scopes caches by ref — a tag run can only restore the
13
- # default branch's caches): every rust-cache step SAVES only on main
14
- # (`save-if: github.ref == 'refs/heads/main'`) and RESTORES everywhere. So when
15
- # warm-release-cache calls this on a main push it populates the cache; when
16
- # publish-pypi calls it on a tag it restores that warm cache and skips the
17
- # ~12–15 min substrate recompile. The maturin-action legs (macOS/Windows) use
18
- # the action's built-in `sccache` (its GHA object cache), warmed the same way.
12
+ # Cache model (two tiers):
13
+ # Swatinem rust-cache (GHA L1) GitHub scopes GHA caches by ref, and a tag
14
+ # run can only READ the default branch's caches, so it SAVES only on main
15
+ # (`save-if: main`) and restores everywhere.
16
+ # CIRISCache (GHCR L2, restore@v2) a GHCR package is NOT ref-scoped, so the
17
+ # SERVER `-s<version>` blob is saved on main AND on the v* tag publish (this
18
+ # workflow's only caller now that warm-release-cache is retired). That keeps a
19
+ # per-version `-s` blob so the next release's restore@v2 `-s*` prefix fallback
20
+ # pulls the latest lean ~1 GB server blob instead of the larger edge layer.
21
+ # The maturin-action legs (macOS/Windows) use the action's built-in `sccache`.
19
22
 
20
23
  on:
21
24
  workflow_call:
@@ -77,32 +80,25 @@ jobs:
77
80
  echo "key-persist=${KEY_PERSIST}"
78
81
  echo "key-edge=${KEY_EDGE}"
79
82
  echo "key=${KEY_SERVER}"
83
+ echo "key-server-prefix=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s"
80
84
  } >> "$GITHUB_OUTPUT"
81
85
  echo "::notice::CIRISCache (${PLAT}): S=${S:-NONE} P=${P:-NONE} V=${V:-NONE} EDGE=${EDGE:-NONE} RUSTC=${RUSTC}"
82
86
  echo "::notice::${KEY_VERIFY}"
83
87
  echo "::notice::${KEY_PERSIST}"
84
88
  echo "::notice::${KEY_EDGE}"
85
89
  echo "::notice::${KEY_SERVER}"
86
- - name: CIRISCache restore (verify layer)
87
- uses: CIRISAI/CIRISCache/restore@v1
90
+ # Deepest-first, first-hit-wins (CIRISCache restore@v2): one extraction of
91
+ # the deepest available blob (cumulative supersets) instead of N redundant.
92
+ - name: CIRISCache restore (server→edge→persist→verify, first hit)
93
+ uses: CIRISAI/CIRISCache/restore@v2
88
94
  continue-on-error: true
89
95
  with:
90
- key: ${{ steps.cachekey.outputs.key-verify }}
91
- - name: CIRISCache restore (persist layer)
92
- uses: CIRISAI/CIRISCache/restore@v1
93
- continue-on-error: true
94
- with:
95
- key: ${{ steps.cachekey.outputs.key-persist }}
96
- - name: CIRISCache restore (edge layer)
97
- uses: CIRISAI/CIRISCache/restore@v1
98
- continue-on-error: true
99
- with:
100
- key: ${{ steps.cachekey.outputs.key-edge }}
101
- - name: CIRISCache restore (server layer)
102
- uses: CIRISAI/CIRISCache/restore@v1
103
- continue-on-error: true
104
- with:
105
- key: ${{ steps.cachekey.outputs.key }}
96
+ keys: |
97
+ ${{ steps.cachekey.outputs.key }}
98
+ ${{ steps.cachekey.outputs.key-server-prefix }}*
99
+ ${{ steps.cachekey.outputs.key-edge }}
100
+ ${{ steps.cachekey.outputs.key-persist }}
101
+ ${{ steps.cachekey.outputs.key-verify }}
106
102
  - name: Install build deps
107
103
  run: |
108
104
  # Drop the preinstalled Microsoft/azure-cli apt repo: it intermittently
@@ -155,7 +151,7 @@ jobs:
155
151
  # GITHUB_TOKEN, no external secret).
156
152
  - name: CIRISCache save (server layer, main only)
157
153
  uses: CIRISAI/CIRISCache/save@v1
158
- if: github.ref == 'refs/heads/main'
154
+ if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
159
155
  continue-on-error: true
160
156
  with:
161
157
  key: ${{ steps.cachekey.outputs.key }}
@@ -230,32 +226,25 @@ jobs:
230
226
  echo "key-persist=${KEY_PERSIST}"
231
227
  echo "key-edge=${KEY_EDGE}"
232
228
  echo "key=${KEY_SERVER}"
229
+ echo "key-server-prefix=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s"
233
230
  } >> "$GITHUB_OUTPUT"
234
231
  echo "::notice::CIRISCache (${PLAT}): S=${S:-NONE} P=${P:-NONE} V=${V:-NONE} EDGE=${EDGE:-NONE} RUSTC=${RUSTC}"
235
232
  echo "::notice::${KEY_VERIFY}"
236
233
  echo "::notice::${KEY_PERSIST}"
237
234
  echo "::notice::${KEY_EDGE}"
238
235
  echo "::notice::${KEY_SERVER}"
239
- - name: CIRISCache restore (verify layer)
240
- uses: CIRISAI/CIRISCache/restore@v1
236
+ # Deepest-first, first-hit-wins (CIRISCache restore@v2): one extraction of
237
+ # the deepest available blob (cumulative supersets) instead of N redundant.
238
+ - name: CIRISCache restore (server→edge→persist→verify, first hit)
239
+ uses: CIRISAI/CIRISCache/restore@v2
241
240
  continue-on-error: true
242
241
  with:
243
- key: ${{ steps.cachekey.outputs.key-verify }}
244
- - name: CIRISCache restore (persist layer)
245
- uses: CIRISAI/CIRISCache/restore@v1
246
- continue-on-error: true
247
- with:
248
- key: ${{ steps.cachekey.outputs.key-persist }}
249
- - name: CIRISCache restore (edge layer)
250
- uses: CIRISAI/CIRISCache/restore@v1
251
- continue-on-error: true
252
- with:
253
- key: ${{ steps.cachekey.outputs.key-edge }}
254
- - name: CIRISCache restore (server layer)
255
- uses: CIRISAI/CIRISCache/restore@v1
256
- continue-on-error: true
257
- with:
258
- key: ${{ steps.cachekey.outputs.key }}
242
+ keys: |
243
+ ${{ steps.cachekey.outputs.key }}
244
+ ${{ steps.cachekey.outputs.key-server-prefix }}*
245
+ ${{ steps.cachekey.outputs.key-edge }}
246
+ ${{ steps.cachekey.outputs.key-persist }}
247
+ ${{ steps.cachekey.outputs.key-verify }}
259
248
  - name: Build wheel (maturin)
260
249
  uses: PyO3/maturin-action@v1
261
250
  with:
@@ -274,7 +263,7 @@ jobs:
274
263
  # Populate the cross-repo CIRISCache blob on main under the SERVER key.
275
264
  - name: CIRISCache save (server layer, main only)
276
265
  uses: CIRISAI/CIRISCache/save@v1
277
- if: github.ref == 'refs/heads/main'
266
+ if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
278
267
  continue-on-error: true
279
268
  with:
280
269
  key: ${{ steps.cachekey.outputs.key }}
@@ -336,32 +325,25 @@ jobs:
336
325
  echo "key-persist=${KEY_PERSIST}"
337
326
  echo "key-edge=${KEY_EDGE}"
338
327
  echo "key=${KEY_SERVER}"
328
+ echo "key-server-prefix=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s"
339
329
  } >> "$GITHUB_OUTPUT"
340
330
  echo "::notice::CIRISCache (${PLAT}): S=${S:-NONE} P=${P:-NONE} V=${V:-NONE} EDGE=${EDGE:-NONE} RUSTC=${RUSTC}"
341
331
  echo "::notice::${KEY_VERIFY}"
342
332
  echo "::notice::${KEY_PERSIST}"
343
333
  echo "::notice::${KEY_EDGE}"
344
334
  echo "::notice::${KEY_SERVER}"
345
- - name: CIRISCache restore (verify layer)
346
- uses: CIRISAI/CIRISCache/restore@v1
335
+ # Deepest-first, first-hit-wins (CIRISCache restore@v2): one extraction of
336
+ # the deepest available blob (cumulative supersets) instead of N redundant.
337
+ - name: CIRISCache restore (server→edge→persist→verify, first hit)
338
+ uses: CIRISAI/CIRISCache/restore@v2
347
339
  continue-on-error: true
348
340
  with:
349
- key: ${{ steps.cachekey.outputs.key-verify }}
350
- - name: CIRISCache restore (persist layer)
351
- uses: CIRISAI/CIRISCache/restore@v1
352
- continue-on-error: true
353
- with:
354
- key: ${{ steps.cachekey.outputs.key-persist }}
355
- - name: CIRISCache restore (edge layer)
356
- uses: CIRISAI/CIRISCache/restore@v1
357
- continue-on-error: true
358
- with:
359
- key: ${{ steps.cachekey.outputs.key-edge }}
360
- - name: CIRISCache restore (server layer)
361
- uses: CIRISAI/CIRISCache/restore@v1
362
- continue-on-error: true
363
- with:
364
- key: ${{ steps.cachekey.outputs.key }}
341
+ keys: |
342
+ ${{ steps.cachekey.outputs.key }}
343
+ ${{ steps.cachekey.outputs.key-server-prefix }}*
344
+ ${{ steps.cachekey.outputs.key-edge }}
345
+ ${{ steps.cachekey.outputs.key-persist }}
346
+ ${{ steps.cachekey.outputs.key-verify }}
365
347
  - name: Build wheel (maturin)
366
348
  uses: PyO3/maturin-action@v1
367
349
  with:
@@ -379,7 +361,7 @@ jobs:
379
361
  # Populate the cross-repo CIRISCache blob on main under the SERVER key.
380
362
  - name: CIRISCache save (server layer, main only)
381
363
  uses: CIRISAI/CIRISCache/save@v1
382
- if: github.ref == 'refs/heads/main'
364
+ if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
383
365
  continue-on-error: true
384
366
  with:
385
367
  key: ${{ steps.cachekey.outputs.key }}
@@ -437,32 +419,25 @@ jobs:
437
419
  echo "key-persist=${KEY_PERSIST}"
438
420
  echo "key-edge=${KEY_EDGE}"
439
421
  echo "key=${KEY_SERVER}"
422
+ echo "key-server-prefix=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s"
440
423
  } >> "$GITHUB_OUTPUT"
441
424
  echo "::notice::CIRISCache (${PLAT}): S=${S:-NONE} P=${P:-NONE} V=${V:-NONE} EDGE=${EDGE:-NONE} RUSTC=${RUSTC}"
442
425
  echo "::notice::${KEY_VERIFY}"
443
426
  echo "::notice::${KEY_PERSIST}"
444
427
  echo "::notice::${KEY_EDGE}"
445
428
  echo "::notice::${KEY_SERVER}"
446
- - name: CIRISCache restore (verify layer)
447
- uses: CIRISAI/CIRISCache/restore@v1
429
+ # Deepest-first, first-hit-wins (CIRISCache restore@v2): one extraction of
430
+ # the deepest available blob (cumulative supersets) instead of N redundant.
431
+ - name: CIRISCache restore (server→edge→persist→verify, first hit)
432
+ uses: CIRISAI/CIRISCache/restore@v2
448
433
  continue-on-error: true
449
434
  with:
450
- key: ${{ steps.cachekey.outputs.key-verify }}
451
- - name: CIRISCache restore (persist layer)
452
- uses: CIRISAI/CIRISCache/restore@v1
453
- continue-on-error: true
454
- with:
455
- key: ${{ steps.cachekey.outputs.key-persist }}
456
- - name: CIRISCache restore (edge layer)
457
- uses: CIRISAI/CIRISCache/restore@v1
458
- continue-on-error: true
459
- with:
460
- key: ${{ steps.cachekey.outputs.key-edge }}
461
- - name: CIRISCache restore (server layer)
462
- uses: CIRISAI/CIRISCache/restore@v1
463
- continue-on-error: true
464
- with:
465
- key: ${{ steps.cachekey.outputs.key }}
435
+ keys: |
436
+ ${{ steps.cachekey.outputs.key }}
437
+ ${{ steps.cachekey.outputs.key-server-prefix }}*
438
+ ${{ steps.cachekey.outputs.key-edge }}
439
+ ${{ steps.cachekey.outputs.key-persist }}
440
+ ${{ steps.cachekey.outputs.key-verify }}
466
441
  - uses: actions/setup-python@v5
467
442
  with:
468
443
  python-version: "3.12"
@@ -526,7 +501,7 @@ jobs:
526
501
  # Populate the cross-repo CIRISCache blob on main under the SERVER key.
527
502
  - name: CIRISCache save (server layer, main only)
528
503
  uses: CIRISAI/CIRISCache/save@v1
529
- if: github.ref == 'refs/heads/main'
504
+ if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
530
505
  continue-on-error: true
531
506
  with:
532
507
  key: ${{ steps.cachekey.outputs.key }}
@@ -0,0 +1,141 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ # Docs-only commits don't change the Rust build — skip the full compile.
7
+ paths-ignore:
8
+ - "**/*.md"
9
+ - "FSD/**"
10
+ - "docs/**"
11
+ pull_request:
12
+ paths-ignore:
13
+ - "**/*.md"
14
+ - "FSD/**"
15
+ - "docs/**"
16
+
17
+ # Cancel a superseded run on the same ref (PR re-push / newer main commit). A tag
18
+ # ref is distinct, so this never cancels a release pipeline.
19
+ concurrency:
20
+ group: ci-${{ github.ref }}
21
+ cancel-in-progress: true
22
+
23
+ permissions:
24
+ contents: read
25
+ packages: write # CIRISCache save (GHCR) on main — CIRISServer#99
26
+
27
+ env:
28
+ CARGO_TERM_COLOR: always
29
+
30
+ jobs:
31
+ fmt:
32
+ name: rustfmt
33
+ runs-on: ubuntu-latest
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+ - uses: dtolnay/rust-toolchain@stable
37
+ with:
38
+ components: rustfmt
39
+ - run: cargo fmt --all --check
40
+
41
+ clippy-test:
42
+ name: clippy + test (${{ matrix.os }})
43
+ runs-on: ${{ matrix.os }}
44
+ strategy:
45
+ fail-fast: false
46
+ matrix:
47
+ os: [ubuntu-latest, macos-latest, windows-latest]
48
+ steps:
49
+ - uses: actions/checkout@v4
50
+ - uses: dtolnay/rust-toolchain@stable
51
+ with:
52
+ components: clippy
53
+ - name: Install build deps (Linux)
54
+ if: runner.os == 'Linux'
55
+ # libtss2-dev: the Linux-only keyring/tpm backend (cfg(target_os=linux)).
56
+ # libsqlite3-dev: persist's sqlite. macOS/Windows pull NEITHER tss-esapi
57
+ # nor openssl (postgres+tpm are Linux-only per Cargo.toml [target.linux]).
58
+ run: |
59
+ # Drop the preinstalled Microsoft/azure-cli apt repo: it intermittently
60
+ # 403s and tanks apt-get update (its packages are not needed here).
61
+ sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list /etc/apt/sources.list.d/azure-cli.list /etc/apt/sources.list.d/azure-cli.sources
62
+ sudo apt-get update
63
+ sudo apt-get install -y libtss2-dev libsqlite3-dev libudev-dev
64
+ - uses: Swatinem/rust-cache@v2
65
+ continue-on-error: true
66
+ with:
67
+ cache-bin: false
68
+ # CIRISCache (CIRISServer#99) — 4-layer centipede over the Swatinem GHA L1.
69
+ # PLAT from the NATIVE target of each runner (macos-latest = arm64). Restore
70
+ # verify→persist→edge→server; SAVE under the server-specific -s key on main.
71
+ - name: Compute CIRISCache keys (4-layer centipede, CIRISServer#99)
72
+ id: cachekey
73
+ shell: bash
74
+ run: |
75
+ case "${{ matrix.os }}" in
76
+ ubuntu-latest) PLAT=linux-x86_64 ;;
77
+ macos-latest) PLAT=macos-aarch64 ;;
78
+ windows-latest) PLAT=windows-x64 ;;
79
+ *) PLAT=unknown ;;
80
+ esac
81
+ RUSTC=$(rustc -V | awk '{print $2}')
82
+ S=$(grep -m1 '^version = ' Cargo.toml | sed -E 's/^version = "([^"]+)".*/\1/')
83
+ P=$(grep -m1 'CIRISPersist.*tag = "v' Cargo.toml | sed -E 's/.*tag = "v([0-9.]+)".*/\1/')
84
+ V=$(grep -m1 'CIRISVerify.*tag = "v' Cargo.toml | sed -E 's/.*tag = "v([0-9.]+)".*/\1/')
85
+ EDGE=$(grep -m1 'CIRISEdge.*tag = "v' Cargo.toml | sed -E 's/.*tag = "v([0-9.]+)".*/\1/')
86
+ BASE="ciris-substrate-v1-${PLAT}-release-rustc${RUSTC}"
87
+ KEY_VERIFY="${BASE}-pnone-enone-v${V:-none}"
88
+ KEY_PERSIST="${BASE}-p${P:-none}-enone-v${V:-none}"
89
+ KEY_EDGE="${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}"
90
+ KEY_SERVER="${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s${S:-none}"
91
+ {
92
+ echo "key-verify=${KEY_VERIFY}"
93
+ echo "key-persist=${KEY_PERSIST}"
94
+ echo "key-edge=${KEY_EDGE}"
95
+ echo "key=${KEY_SERVER}"
96
+ echo "key-server-prefix=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s"
97
+ } >> "$GITHUB_OUTPUT"
98
+ echo "::notice::CIRISCache (${PLAT}): S=${S:-NONE} P=${P:-NONE} V=${V:-NONE} EDGE=${EDGE:-NONE} RUSTC=${RUSTC}"
99
+ echo "::notice::${KEY_VERIFY}"
100
+ echo "::notice::${KEY_PERSIST}"
101
+ echo "::notice::${KEY_EDGE}"
102
+ echo "::notice::${KEY_SERVER}"
103
+ # Deepest-first, first-hit-wins (CIRISCache restore@v2): the layers are
104
+ # cumulative supersets, so one restore of the deepest available blob beats
105
+ # extracting verify→persist→edge→server in sequence (the edge layer alone
106
+ # measured 452s/7.5min on v1 — redundant overwrite I/O).
107
+ - name: CIRISCache restore (server→edge→persist→verify, first hit)
108
+ uses: CIRISAI/CIRISCache/restore@v2
109
+ continue-on-error: true
110
+ with:
111
+ keys: |
112
+ ${{ steps.cachekey.outputs.key }}
113
+ ${{ steps.cachekey.outputs.key-server-prefix }}*
114
+ ${{ steps.cachekey.outputs.key-edge }}
115
+ ${{ steps.cachekey.outputs.key-persist }}
116
+ ${{ steps.cachekey.outputs.key-verify }}
117
+ # Default features build everywhere (sqlite + the binary path); postgres +
118
+ # tpm are Linux-only (per-target). NOT --all-features: that drags
119
+ # `extension-module` (libpython-no-link) into the test binary.
120
+ - run: cargo clippy --all-targets -- -D warnings
121
+ - run: cargo test
122
+ # The NOISE FLOOR proof (CIRISServer#14, CEG §19.7 / §19.3 N5) — provable
123
+ # individual-unrecoverability for erasure compliance, run explicitly so the
124
+ # MEASURED residual-fidelity numbers land in the CI log (Linux only — one
125
+ # canonical record; the test also runs on every OS via `cargo test` above).
126
+ # The three gated cases: (a) revocation ⇒ EjectHardDelete leaves NO
127
+ # recoverable tier, (b) the measured noise floor below n_source symbols,
128
+ # (c) N→1 aggregation erases the individual below the 1/N gist bound.
129
+ - name: Noise floor proof (MEASURED, Linux)
130
+ if: runner.os == 'Linux'
131
+ run: cargo test --test noise_floor -- --nocapture
132
+ # The PyO3 wheel surface (Linux only; libpython linked, no extension-module).
133
+ - name: clippy (python surface, Linux)
134
+ if: runner.os == 'Linux'
135
+ run: cargo clippy --all-targets --features python -- -D warnings
136
+ # NB: CI does NOT save a cache blob. It builds DEBUG (clippy+test); saving a
137
+ # debug `target/` measured ~586s (10 min) on main to spare only the ~30s
138
+ # debug ciris-server recompile next run — a net loss — and it collided with
139
+ # conformance's RELEASE `-s<version>` blob (same key). The release `-s` is
140
+ # populated by conformance (on main) + build-wheels (on tags); CI only
141
+ # RESTORES (the centipede above) and lets cargo do the cheap debug delta.
@@ -146,25 +146,25 @@ jobs:
146
146
  echo "key-persist=${BASE}-p${P:-none}-enone-v${V:-none}"
147
147
  echo "key-edge=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}"
148
148
  echo "key=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s${S:-none}"
149
+ echo "key-server-prefix=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s"
149
150
  } >> "$GITHUB_OUTPUT"
150
151
  echo "::notice::CIRISCache (${PLAT}): S=${S:-NONE} P=${P:-NONE} V=${V:-NONE} EDGE=${EDGE:-NONE} RUSTC=${RUSTC}"
151
- - uses: CIRISAI/CIRISCache/restore@v1
152
+ # Deepest-first, first-hit-wins (CIRISCache restore@v2): one extraction.
153
+ - uses: CIRISAI/CIRISCache/restore@v2
152
154
  continue-on-error: true
153
- with: { key: "${{ steps.cachekey.outputs.key-verify }}" }
154
- - uses: CIRISAI/CIRISCache/restore@v1
155
- continue-on-error: true
156
- with: { key: "${{ steps.cachekey.outputs.key-persist }}" }
157
- - uses: CIRISAI/CIRISCache/restore@v1
158
- continue-on-error: true
159
- with: { key: "${{ steps.cachekey.outputs.key-edge }}" }
160
- - uses: CIRISAI/CIRISCache/restore@v1
161
- continue-on-error: true
162
- with: { key: "${{ steps.cachekey.outputs.key }}" }
155
+ with:
156
+ keys: |
157
+ ${{ steps.cachekey.outputs.key }}
158
+ ${{ steps.cachekey.outputs.key-server-prefix }}*
159
+ ${{ steps.cachekey.outputs.key-edge }}
160
+ ${{ steps.cachekey.outputs.key-persist }}
161
+ ${{ steps.cachekey.outputs.key-verify }}
163
162
 
164
- - name: Set up Java 17 (Liberica — Win7-capable jlink runtime)
165
- # Liberica/Zulu retain Windows 7 support; Temurin dropped it. The
166
- # trimmed jlink runtime here ships inside the installer, so even the
167
- # mainline (Win8.1-floor) build uses a Win7-capable JDK for the JRE.
163
+ - name: Set up Java 17 (Liberica)
164
+ # Liberica 17 provides the trimmed jlink runtime bundled into the
165
+ # installer. Modern Windows floor (Win10+/Server 2016+) since 0.5.65
166
+ # the Win7 support that drove this distro choice is no longer a
167
+ # requirement, but Liberica stays (stable jlink source).
168
168
  uses: actions/setup-java@v4
169
169
  with:
170
170
  distribution: 'liberica'
@@ -246,16 +246,8 @@ jobs:
246
246
  if (-not $jar) { Write-Error "No CIRIS-windows-*.jar found"; exit 1 }
247
247
  .\installers\windows\bundle-jre.ps1 -JarPath $jar.FullName -OutputDir dist\runtime
248
248
 
249
- - name: Fetch Universal CRT redist (Windows 7 prerequisite, best-effort)
250
- continue-on-error: true
251
- shell: pwsh
252
- run: |
253
- $dst = "installers/windows/redist"
254
- New-Item -ItemType Directory -Force -Path $dst | Out-Null
255
- $url = "https://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/Windows6.1-KB2999226-x64.msu"
256
- try {
257
- Invoke-WebRequest -Uri $url -OutFile "$dst/Windows6.1-KB2999226-x64.msu" -UseBasicParsing -TimeoutSec 120
258
- } catch { Write-Warning "UCRT fetch failed ($_); Win7 users hand-provision." }
249
+ # (Removed in 0.5.65: the Universal CRT redist fetch was a Win7 SP1
250
+ # prerequisite — Win10+/Server 2016+ ship the UCRT in-box.)
259
251
 
260
252
  - name: Install Inno Setup
261
253
  uses: nick-fields/retry@v4
@@ -79,32 +79,25 @@ jobs:
79
79
  echo "key-persist=${KEY_PERSIST}"
80
80
  echo "key-edge=${KEY_EDGE}"
81
81
  echo "key=${KEY_SERVER}"
82
+ echo "key-server-prefix=${BASE}-p${P:-none}-e${EDGE:-none}-v${V:-none}-s"
82
83
  } >> "$GITHUB_OUTPUT"
83
84
  echo "::notice::CIRISCache (${PLAT}): S=${S:-NONE} P=${P:-NONE} V=${V:-NONE} EDGE=${EDGE:-NONE} RUSTC=${RUSTC}"
84
85
  echo "::notice::${KEY_VERIFY}"
85
86
  echo "::notice::${KEY_PERSIST}"
86
87
  echo "::notice::${KEY_EDGE}"
87
88
  echo "::notice::${KEY_SERVER}"
88
- - name: CIRISCache restore (verify layer)
89
- uses: CIRISAI/CIRISCache/restore@v1
89
+ # Deepest-first, first-hit-wins (CIRISCache restore@v2): one extraction of
90
+ # the deepest available blob (cumulative supersets) instead of N redundant.
91
+ - name: CIRISCache restore (server→edge→persist→verify, first hit)
92
+ uses: CIRISAI/CIRISCache/restore@v2
90
93
  continue-on-error: true
91
94
  with:
92
- key: ${{ steps.cachekey.outputs.key-verify }}
93
- - name: CIRISCache restore (persist layer)
94
- uses: CIRISAI/CIRISCache/restore@v1
95
- continue-on-error: true
96
- with:
97
- key: ${{ steps.cachekey.outputs.key-persist }}
98
- - name: CIRISCache restore (edge layer)
99
- uses: CIRISAI/CIRISCache/restore@v1
100
- continue-on-error: true
101
- with:
102
- key: ${{ steps.cachekey.outputs.key-edge }}
103
- - name: CIRISCache restore (server layer)
104
- uses: CIRISAI/CIRISCache/restore@v1
105
- continue-on-error: true
106
- with:
107
- key: ${{ steps.cachekey.outputs.key }}
95
+ keys: |
96
+ ${{ steps.cachekey.outputs.key }}
97
+ ${{ steps.cachekey.outputs.key-server-prefix }}*
98
+ ${{ steps.cachekey.outputs.key-edge }}
99
+ ${{ steps.cachekey.outputs.key-persist }}
100
+ ${{ steps.cachekey.outputs.key-verify }}
108
101
  - name: Install build deps
109
102
  #: the family links the TPM keyring backend on Linux.
110
103
  # libsqlite3-dev: persist's sqlite backend.