ciris-server 0.1.1__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 (128) hide show
  1. ciris_server-0.1.1/.github/workflows/ci.yml +71 -0
  2. ciris_server-0.1.1/.github/workflows/conformance.yml +63 -0
  3. ciris_server-0.1.1/.github/workflows/publish-pypi.yml +166 -0
  4. ciris_server-0.1.1/.github/workflows/release.yml +207 -0
  5. ciris_server-0.1.1/.gitignore +6 -0
  6. ciris_server-0.1.1/CHANGELOG.md +63 -0
  7. ciris_server-0.1.1/Cargo.lock +7062 -0
  8. ciris_server-0.1.1/Cargo.toml +131 -0
  9. ciris_server-0.1.1/FSD/LENS_TO_SERVER_MIGRATION.md +142 -0
  10. ciris_server-0.1.1/FSD/PQC_AV_STREAMING_BENCH.md +95 -0
  11. ciris_server-0.1.1/FSD/REGISTRY_FOLD_DERISK.md +120 -0
  12. ciris_server-0.1.1/FSD/SERVER_1.0_PLAN.md +173 -0
  13. ciris_server-0.1.1/LICENSE +661 -0
  14. ciris_server-0.1.1/MISSION.md +512 -0
  15. ciris_server-0.1.1/PKG-INFO +135 -0
  16. ciris_server-0.1.1/README.md +123 -0
  17. ciris_server-0.1.1/benches/pqc_av_streaming.rs +334 -0
  18. ciris_server-0.1.1/crates/ciris-lens-core/.github/workflows/bench.yml +88 -0
  19. ciris_server-0.1.1/crates/ciris-lens-core/.github/workflows/ci.yml +1089 -0
  20. ciris_server-0.1.1/crates/ciris-lens-core/.gitignore +25 -0
  21. ciris_server-0.1.1/crates/ciris-lens-core/.pre-commit-config.yaml +91 -0
  22. ciris_server-0.1.1/crates/ciris-lens-core/Cargo.toml +167 -0
  23. ciris_server-0.1.1/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +353 -0
  24. ciris_server-0.1.1/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +683 -0
  25. ciris_server-0.1.1/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +377 -0
  26. ciris_server-0.1.1/crates/ciris-lens-core/LICENSE +205 -0
  27. ciris_server-0.1.1/crates/ciris-lens-core/MISSION.md +491 -0
  28. ciris_server-0.1.1/crates/ciris-lens-core/README.md +79 -0
  29. ciris_server-0.1.1/crates/ciris-lens-core/benches/aggregate.rs +99 -0
  30. ciris_server-0.1.1/crates/ciris-lens-core/benches/canonicalize.rs +79 -0
  31. ciris_server-0.1.1/crates/ciris-lens-core/benches/project.rs +102 -0
  32. ciris_server-0.1.1/crates/ciris-lens-core/deny.toml +120 -0
  33. ciris_server-0.1.1/crates/ciris-lens-core/docs/BENCHMARKS.md +184 -0
  34. ciris_server-0.1.1/crates/ciris-lens-core/docs/COHABITATION.md +283 -0
  35. ciris_server-0.1.1/crates/ciris-lens-core/docs/PRE_COMMIT.md +132 -0
  36. ciris_server-0.1.1/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +957 -0
  37. ciris_server-0.1.1/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +269 -0
  38. ciris_server-0.1.1/crates/ciris-lens-core/docs/RELEASE_NOTES.md +1034 -0
  39. ciris_server-0.1.1/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +306 -0
  40. ciris_server-0.1.1/crates/ciris-lens-core/docs/THREAT_MODEL.md +939 -0
  41. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +161 -0
  42. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +365 -0
  43. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +9 -0
  44. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +215 -0
  45. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +101 -0
  46. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +249 -0
  47. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +887 -0
  48. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +194 -0
  49. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +184 -0
  50. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +309 -0
  51. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +378 -0
  52. ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +256 -0
  53. ciris_server-0.1.1/crates/ciris-lens-core/pyproject.toml +93 -0
  54. ciris_server-0.1.1/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +125 -0
  55. ciris_server-0.1.1/crates/ciris-lens-core/src/audit/api.rs +508 -0
  56. ciris_server-0.1.1/crates/ciris-lens-core/src/audit/delegate.rs +326 -0
  57. ciris_server-0.1.1/crates/ciris-lens-core/src/audit/mod.rs +37 -0
  58. ciris_server-0.1.1/crates/ciris-lens-core/src/audit/pyo3.rs +447 -0
  59. ciris_server-0.1.1/crates/ciris-lens-core/src/canonical/ceg_egress.rs +284 -0
  60. ciris_server-0.1.1/crates/ciris-lens-core/src/canonical/mod.rs +207 -0
  61. ciris_server-0.1.1/crates/ciris-lens-core/src/capacity/attestation.rs +146 -0
  62. ciris_server-0.1.1/crates/ciris-lens-core/src/capacity/mod.rs +35 -0
  63. ciris_server-0.1.1/crates/ciris-lens-core/src/capacity/score.rs +299 -0
  64. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/batch.rs +495 -0
  65. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/client.rs +1256 -0
  66. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/consent.rs +479 -0
  67. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/correlation.rs +835 -0
  68. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/event.rs +303 -0
  69. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/mod.rs +57 -0
  70. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/partial.rs +460 -0
  71. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/py_engine.rs +524 -0
  72. ciris_server-0.1.1/crates/ciris-lens-core/src/capture/seal.rs +818 -0
  73. ciris_server-0.1.1/crates/ciris-lens-core/src/cohort/declared.rs +252 -0
  74. ciris_server-0.1.1/crates/ciris-lens-core/src/cohort/mod.rs +24 -0
  75. ciris_server-0.1.1/crates/ciris-lens-core/src/cohort/resourcing.rs +47 -0
  76. ciris_server-0.1.1/crates/ciris-lens-core/src/config/egress.rs +983 -0
  77. ciris_server-0.1.1/crates/ciris-lens-core/src/config/mod.rs +35 -0
  78. ciris_server-0.1.1/crates/ciris-lens-core/src/config/node.rs +227 -0
  79. ciris_server-0.1.1/crates/ciris-lens-core/src/config/retention.rs +146 -0
  80. ciris_server-0.1.1/crates/ciris-lens-core/src/config/upstream.rs +61 -0
  81. ciris_server-0.1.1/crates/ciris-lens-core/src/detector/axis_metrics.rs +739 -0
  82. ciris_server-0.1.1/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +200 -0
  83. ciris_server-0.1.1/crates/ciris-lens-core/src/detector/correlated_action.rs +563 -0
  84. ciris_server-0.1.1/crates/ciris-lens-core/src/detector/distributive_access.rs +524 -0
  85. ciris_server-0.1.1/crates/ciris-lens-core/src/detector/manifold.rs +774 -0
  86. ciris_server-0.1.1/crates/ciris-lens-core/src/detector/mod.rs +144 -0
  87. ciris_server-0.1.1/crates/ciris-lens-core/src/extract/mod.rs +20 -0
  88. ciris_server-0.1.1/crates/ciris-lens-core/src/extract/projection.rs +259 -0
  89. ciris_server-0.1.1/crates/ciris-lens-core/src/ffi/mod.rs +7 -0
  90. ciris_server-0.1.1/crates/ciris-lens-core/src/ffi/pyo3.rs +1864 -0
  91. ciris_server-0.1.1/crates/ciris-lens-core/src/lib.rs +119 -0
  92. ciris_server-0.1.1/crates/ciris-lens-core/src/observability/mod.rs +2 -0
  93. ciris_server-0.1.1/crates/ciris-lens-core/src/pipeline/lifecycle.rs +415 -0
  94. ciris_server-0.1.1/crates/ciris-lens-core/src/pipeline/mod.rs +4 -0
  95. ciris_server-0.1.1/crates/ciris-lens-core/src/retention/eviction.rs +347 -0
  96. ciris_server-0.1.1/crates/ciris-lens-core/src/retention/mod.rs +49 -0
  97. ciris_server-0.1.1/crates/ciris-lens-core/src/retention/summary.rs +59 -0
  98. ciris_server-0.1.1/crates/ciris-lens-core/src/role/handler.rs +97 -0
  99. ciris_server-0.1.1/crates/ciris-lens-core/src/role/mod.rs +71 -0
  100. ciris_server-0.1.1/crates/ciris-lens-core/src/role/node.rs +1128 -0
  101. ciris_server-0.1.1/crates/ciris-lens-core/src/role/relay.rs +225 -0
  102. ciris_server-0.1.1/crates/ciris-lens-core/src/role/ret_relay.rs +335 -0
  103. ciris_server-0.1.1/crates/ciris-lens-core/src/scores/aggregate.rs +360 -0
  104. ciris_server-0.1.1/crates/ciris-lens-core/src/scores/mod.rs +59 -0
  105. ciris_server-0.1.1/crates/ciris-lens-core/src/scores/oracle.rs +113 -0
  106. ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/assembly.rs +290 -0
  107. ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/axis_calibration.rs +508 -0
  108. ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/calibration.rs +495 -0
  109. ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/capacity.rs +124 -0
  110. ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/mod.rs +25 -0
  111. ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/n_eff.rs +132 -0
  112. ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/result.rs +161 -0
  113. ciris_server-0.1.1/crates/ciris-lens-core/src/signing/event.rs +617 -0
  114. ciris_server-0.1.1/crates/ciris-lens-core/src/signing/mod.rs +9 -0
  115. ciris_server-0.1.1/crates/ciris-lens-core/src/wire/mod.rs +125 -0
  116. ciris_server-0.1.1/crates/ciris-lens-core/src/wire/signer.rs +149 -0
  117. ciris_server-0.1.1/crates/ciris-lens-core/tests/parity/README.md +44 -0
  118. ciris_server-0.1.1/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +385 -0
  119. ciris_server-0.1.1/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +218 -0
  120. ciris_server-0.1.1/crates/ciris-lens-core/tests/sovereign_rlib.rs +355 -0
  121. ciris_server-0.1.1/pyproject.toml +39 -0
  122. ciris_server-0.1.1/rust-toolchain.toml +5 -0
  123. ciris_server-0.1.1/src/compose.rs +254 -0
  124. ciris_server-0.1.1/src/config.rs +218 -0
  125. ciris_server-0.1.1/src/lib.rs +92 -0
  126. ciris_server-0.1.1/src/main.rs +14 -0
  127. ciris_server-0.1.1/src/quorum.rs +137 -0
  128. ciris_server-0.1.1/tests/replication.rs +238 -0
@@ -0,0 +1,71 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ env:
9
+ CARGO_TERM_COLOR: always
10
+
11
+ jobs:
12
+ fmt:
13
+ name: rustfmt
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: dtolnay/rust-toolchain@stable
18
+ with:
19
+ components: rustfmt
20
+ - run: cargo fmt --all --check
21
+
22
+ clippy-test:
23
+ name: clippy + test (${{ matrix.os }})
24
+ runs-on: ${{ matrix.os }}
25
+ strategy:
26
+ fail-fast: false
27
+ matrix:
28
+ os: [ubuntu-latest, macos-latest, windows-latest]
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+ - uses: dtolnay/rust-toolchain@stable
32
+ with:
33
+ components: clippy
34
+ - name: Install build deps (Linux)
35
+ if: runner.os == 'Linux'
36
+ run: sudo apt-get update && sudo apt-get install -y libtss2-dev libsqlite3-dev
37
+ - uses: Swatinem/rust-cache@v2
38
+ continue-on-error: true
39
+ with:
40
+ cache-bin: false
41
+ - run: cargo clippy --all-targets --all-features -- -D warnings
42
+ - run: cargo test --all-features
43
+
44
+ # Win7-SP1 → Win11 build check (CIRISVerify#67 pattern, mirrored by every
45
+ # upstream substrate crate). Rust 1.78 raised the windows-msvc std floor to
46
+ # Win10 1809; a default-target build hard-imports Win8/Win10 APIs. We build
47
+ # the Tier-3 target `x86_64-win7-windows-msvc` (std keeps the Win7 fallbacks)
48
+ # on nightly + `-Zbuild-std` so the fabric node still LoadLibrary's on Win7.
49
+ # build-std crate list is `std,panic_abort`; panic_abort is required by std's
50
+ # own build (omit → E0463) and does NOT set the panic strategy, which stays
51
+ # "unwind" via the Cargo.toml profile pin (so any catch_unwind sites work).
52
+ win7-build-std:
53
+ name: Win7 build-std check
54
+ runs-on: windows-latest
55
+ steps:
56
+ - uses: actions/checkout@v4
57
+ - uses: dtolnay/rust-toolchain@nightly
58
+ with:
59
+ components: rust-src
60
+ - uses: Swatinem/rust-cache@v2
61
+ continue-on-error: true
62
+ with:
63
+ cache-bin: false
64
+ key: ci-win7-build-std
65
+ - name: Build (x86_64-win7-windows-msvc, build-std)
66
+ shell: bash
67
+ run: |
68
+ cargo +nightly build --release \
69
+ --target x86_64-win7-windows-msvc \
70
+ -Z build-std=std,panic_abort \
71
+ -p ciris-server
@@ -0,0 +1,63 @@
1
+ name: conformance
2
+
3
+ # Cohabitation conformance: build the ciris-server abi3 wheel, then drive it
4
+ # through CIRISConformance's reusable suite alongside the pinned substrate
5
+ # triple (persist / edge / verify) — the production cohabitation shape (the
6
+ # wheels run together in one Python process). CIRISServer carries the absorbed
7
+ # lens surface, so the suite's `requires_lens` tests run against THIS wheel.
8
+ #
9
+ # A failure here is the cohabitation contract failing — the same gate that
10
+ # blocks publish-pypi in the substrate sisters' release flows. Wired on PR +
11
+ # push now; promote to a publish gate when the PyPI release job lands.
12
+
13
+ on:
14
+ push:
15
+ branches: [main]
16
+ pull_request:
17
+ workflow_dispatch:
18
+
19
+ jobs:
20
+ build-wheel:
21
+ name: build ciris-server wheel (linux-x86_64)
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - uses: dtolnay/rust-toolchain@stable
26
+ - name: Install build deps
27
+ # libtss2-dev: the family links the TPM keyring backend on Linux.
28
+ # libsqlite3-dev: persist's sqlite backend.
29
+ # patchelf: maturin's manylinux repair (the wheel dynamically links
30
+ # libtss2/libcrypto) — without it `maturin build` fails.
31
+ run: sudo apt-get update && sudo apt-get install -y libtss2-dev libsqlite3-dev patchelf
32
+ - uses: actions/setup-python@v5
33
+ with:
34
+ python-version: "3.12"
35
+ - name: Build abi3 wheel (maturin)
36
+ # [tool.maturin] in pyproject.toml supplies features = ["extension-module"]
37
+ # + module-name = ciris_server; pyo3 abi3-py310 → one wheel for 3.10+.
38
+ run: |
39
+ python -m pip install --upgrade pip
40
+ pip install "maturin>=1.7,<2"
41
+ maturin build --release --out dist
42
+ ls -l dist/
43
+ - uses: actions/upload-artifact@v4
44
+ with:
45
+ name: ciris_server-wheel-linux-x86_64
46
+ path: dist/*.whl
47
+ if-no-files-found: error
48
+
49
+ cohabitation-conformance:
50
+ name: cohabitation (linux-x86_64 × ${{ matrix.backend }})
51
+ needs: build-wheel
52
+ strategy:
53
+ fail-fast: false
54
+ matrix:
55
+ backend: [sqlite, postgres]
56
+ uses: CIRISAI/CIRISConformance/.github/workflows/run-against-wheels.yml@main
57
+ with:
58
+ runs-on: ubuntu-latest
59
+ backend: ${{ matrix.backend }}
60
+ under-test-wheel-artifact: ciris_server-wheel-linux-x86_64
61
+ under-test-package: ciris-server
62
+ # matrix-ref defaults to main, which pins the persist-7 substrate triple
63
+ # + maps requires_lens → ciris_server (CIRISConformance#14, merged).
@@ -0,0 +1,166 @@
1
+ name: publish-pypi
2
+
3
+ # Build the ciris-server abi3 wheels for every platform, gate them through the
4
+ # CIRISConformance cohabitation suite, then publish to PyPI via **Trusted
5
+ # Publishing** (OIDC — no stored API token). Fires on a v* tag.
6
+ #
7
+ # Trusted-publisher registration (one-time, done on PyPI by a maintainer):
8
+ # PyPI project: ciris-server
9
+ # Owner: CIRISAI
10
+ # Repository: CIRISServer
11
+ # Workflow filename: publish-pypi.yml
12
+ # Environment: pypi
13
+ # Until that's registered, the `publish` job's OIDC mint will fail — the build
14
+ # + conformance jobs still run, so the gate is exercised on every tag.
15
+
16
+ on:
17
+ push:
18
+ tags: ["v*"]
19
+ workflow_dispatch:
20
+ inputs:
21
+ publish:
22
+ description: "Publish to PyPI (true) or build+conformance only (false)"
23
+ type: boolean
24
+ default: false
25
+
26
+ permissions:
27
+ contents: read
28
+
29
+ jobs:
30
+ # ── Build abi3 wheels per platform ─────────────────────────────────────────
31
+ # Linux: build on the native runners with apt deps + patchelf (NOT a manylinux
32
+ # container). The keyring's tss-esapi-sys needs tpm2-tss >= 3.x; the
33
+ # manylinux_2_28/el8 container only ships 2.3.2 → "tss2-sys not found". Ubuntu
34
+ # 24.04 has 4.0.x, and maturin+patchelf produce a manylinux_2_39 wheel — the
35
+ # same recipe the sister wheels ship (persist manylinux_2_38, edge _2_39) and
36
+ # the one the green conformance build-wheel job uses.
37
+ linux:
38
+ name: wheel ${{ matrix.plat.name }}
39
+ runs-on: ${{ matrix.plat.runs-on }}
40
+ strategy:
41
+ fail-fast: false
42
+ matrix:
43
+ plat:
44
+ - { name: linux-x86_64, runs-on: ubuntu-latest }
45
+ - { name: linux-aarch64, runs-on: ubuntu-24.04-arm }
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+ - uses: dtolnay/rust-toolchain@stable
49
+ - name: Install build deps
50
+ run: sudo apt-get update && sudo apt-get install -y libtss2-dev libsqlite3-dev patchelf
51
+ - uses: actions/setup-python@v5
52
+ with:
53
+ python-version: "3.12"
54
+ - name: Build wheel (maturin)
55
+ run: |
56
+ python -m pip install --upgrade pip
57
+ pip install "maturin>=1.7,<2"
58
+ maturin build --release --out dist
59
+ - uses: actions/upload-artifact@v4
60
+ with:
61
+ name: wheels-${{ matrix.plat.name }}
62
+ path: dist/*.whl
63
+ if-no-files-found: error
64
+
65
+ macos:
66
+ name: wheel macos-${{ matrix.target }}
67
+ runs-on: macos-14
68
+ strategy:
69
+ fail-fast: false
70
+ matrix:
71
+ target: [aarch64, x86_64]
72
+ steps:
73
+ - uses: actions/checkout@v4
74
+ - uses: actions/setup-python@v5
75
+ with:
76
+ python-version: "3.12"
77
+ - name: Build wheel (maturin)
78
+ uses: PyO3/maturin-action@v1
79
+ with:
80
+ target: ${{ matrix.target }}
81
+ args: --release --out dist
82
+ - uses: actions/upload-artifact@v4
83
+ with:
84
+ name: wheels-macos-${{ matrix.target }}
85
+ path: dist/*.whl
86
+ if-no-files-found: error
87
+
88
+ windows:
89
+ name: wheel windows-x64
90
+ runs-on: windows-latest
91
+ # The family's Windows wheel has historically failed on persist's Unix-only
92
+ # paths (CIRISPersist#200 / CIRISEdge#90). Don't block the release on it;
93
+ # publish whatever platforms succeed. Remove continue-on-error once green.
94
+ continue-on-error: true
95
+ steps:
96
+ - uses: actions/checkout@v4
97
+ - uses: actions/setup-python@v5
98
+ with:
99
+ python-version: "3.12"
100
+ - name: Build wheel (maturin)
101
+ uses: PyO3/maturin-action@v1
102
+ with:
103
+ target: x64
104
+ args: --release --out dist
105
+ - uses: actions/upload-artifact@v4
106
+ with:
107
+ name: wheels-windows-x64
108
+ path: dist/*.whl
109
+ if-no-files-found: warn
110
+
111
+ sdist:
112
+ name: sdist
113
+ runs-on: ubuntu-latest
114
+ steps:
115
+ - uses: actions/checkout@v4
116
+ - name: Build sdist
117
+ uses: PyO3/maturin-action@v1
118
+ with:
119
+ command: sdist
120
+ args: --out dist
121
+ - uses: actions/upload-artifact@v4
122
+ with:
123
+ name: wheels-sdist
124
+ path: dist/*.tar.gz
125
+ if-no-files-found: error
126
+
127
+ # ── Gate: the linux wheel must pass cohabitation conformance ───────────────
128
+ # A failure here BLOCKS publish (the substrate-sister discipline). Runs the
129
+ # CIRISConformance suite with the just-built wheel + the pinned triple.
130
+ conformance-gate:
131
+ name: cohabitation gate (linux-x86_64 × ${{ matrix.backend }})
132
+ needs: linux
133
+ strategy:
134
+ fail-fast: true
135
+ matrix:
136
+ backend: [sqlite, postgres]
137
+ uses: CIRISAI/CIRISConformance/.github/workflows/run-against-wheels.yml@main
138
+ with:
139
+ runs-on: ubuntu-latest
140
+ backend: ${{ matrix.backend }}
141
+ under-test-wheel-artifact: wheels-linux-x86_64
142
+ under-test-package: ciris-server
143
+ # matrix-ref defaults to main = the persist-7 triple (CIRISConformance#14, merged).
144
+
145
+ # ── Publish to PyPI via Trusted Publishing (OIDC) ──────────────────────────
146
+ publish:
147
+ name: publish to PyPI
148
+ needs: [linux, macos, windows, sdist, conformance-gate]
149
+ runs-on: ubuntu-latest
150
+ if: startsWith(github.ref, 'refs/tags/') || inputs.publish
151
+ environment: pypi
152
+ permissions:
153
+ id-token: write # OIDC token for Trusted Publishing — no stored secret
154
+ steps:
155
+ - uses: actions/download-artifact@v4
156
+ with:
157
+ pattern: wheels-*
158
+ path: dist
159
+ merge-multiple: true
160
+ - run: ls -l dist/
161
+ - name: Publish
162
+ uses: pypa/gh-action-pypi-publish@release/v1
163
+ with:
164
+ packages-dir: dist/
165
+ # Trusted Publishing: no `password:` — the OIDC identity is verified
166
+ # against the publisher registered on PyPI.
@@ -0,0 +1,207 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ env:
9
+ CARGO_TERM_COLOR: always
10
+
11
+ permissions:
12
+ contents: write
13
+ id-token: write # Sigstore keyless signing
14
+
15
+ # ============================================================================
16
+ # CIRISServer ships the `ciris-server` BINARY (the fabric node) across the full
17
+ # server/embedded matrix — the same platform set the upstream substrate crates
18
+ # (Edge / Persist / Verify / LensCore) build, restricted to targets a headless
19
+ # server actually runs on, plus the two the maintainer requires explicitly:
20
+ # **Windows 7** (the Tier-3 build-std lane) and **ARM32** (armv7 linux — Pi /
21
+ # embedded Reticulum-mesh nodes; de-singletonization includes hardware
22
+ # diversity, M-1).
23
+ #
24
+ # The mobile FFI lanes (Android .aar / iOS .xcframework) are NOT here: a headless
25
+ # server binary does not ship as a mobile library. Those belong to the core
26
+ # LIBRARY crates this binary composes (they build them in their own repos so the
27
+ # AGENT — fabric node + brain — can embed them on mobile).
28
+ #
29
+ # TODO(post-#210): when the binary actually builds (CIRISPersist#210 +
30
+ # CIRISEdge v2.3.0 land the shared-edge-singleton API), port the deeper
31
+ # conformance pipeline from CIRISVerify/.github/workflows/release.yml —
32
+ # function-manifest generation + signed BuildManifest self-attestation +
33
+ # upload to the registry's /v1/verify/build-manifest. The fabric node is part
34
+ # of the conformance fabric; it must attest its own builds.
35
+ # ============================================================================
36
+
37
+ jobs:
38
+ build-native:
39
+ name: Build (${{ matrix.target }})
40
+ runs-on: ${{ matrix.os }}
41
+ strategy:
42
+ fail-fast: false
43
+ matrix:
44
+ include:
45
+ - os: ubuntu-latest
46
+ target: x86_64-unknown-linux-gnu
47
+ - os: ubuntu-latest
48
+ target: aarch64-unknown-linux-gnu
49
+ cross: true
50
+ # ARM32 — Raspberry Pi / embedded mesh nodes.
51
+ - os: ubuntu-latest
52
+ target: armv7-unknown-linux-gnueabihf
53
+ cross: true
54
+ - os: macos-latest
55
+ target: x86_64-apple-darwin
56
+ - os: macos-latest
57
+ target: aarch64-apple-darwin
58
+ # Windows 7 → Win11 lane (CIRISVerify#67). `target` stays
59
+ # x86_64-pc-windows-msvc so the artifact name is stable; `build_target`
60
+ # is the Tier-3 win7 triple cargo actually compiles (nightly +
61
+ # build-std keeps std's Win7 syscall fallbacks). panic_abort is in the
62
+ # build-std crate list because std's build references it (else E0463);
63
+ # the active panic strategy stays "unwind" via the Cargo.toml profile.
64
+ - os: windows-latest
65
+ target: x86_64-pc-windows-msvc
66
+ build_target: x86_64-win7-windows-msvc
67
+ toolchain: nightly
68
+ build_std: "true"
69
+
70
+ steps:
71
+ - uses: actions/checkout@v4
72
+
73
+ - uses: dtolnay/rust-toolchain@stable
74
+ if: ${{ matrix.toolchain != 'nightly' }}
75
+ with:
76
+ targets: ${{ matrix.target }}
77
+ - uses: dtolnay/rust-toolchain@nightly
78
+ if: ${{ matrix.toolchain == 'nightly' }}
79
+ with:
80
+ components: rust-src
81
+
82
+ - name: Install build deps (Linux native)
83
+ if: runner.os == 'Linux' && !matrix.cross
84
+ run: sudo apt-get update && sudo apt-get install -y libtss2-dev libsqlite3-dev
85
+
86
+ - uses: Swatinem/rust-cache@v2
87
+ continue-on-error: true
88
+ with:
89
+ cache-bin: false
90
+ key: release-${{ matrix.build_target || matrix.target }}-${{ github.ref_name }}
91
+
92
+ - name: Install cross (retry on timeout)
93
+ if: matrix.cross
94
+ uses: nick-fields/retry@v3
95
+ with:
96
+ timeout_minutes: 10
97
+ max_attempts: 2
98
+ retry_wait_seconds: 30
99
+ retry_on: timeout
100
+ command: cargo install cross --git https://github.com/cross-rs/cross
101
+
102
+ - name: Build (cross)
103
+ if: matrix.cross
104
+ run: cross build --release --target ${{ matrix.target }} -p ciris-server
105
+
106
+ - name: Build (native)
107
+ if: ${{ !matrix.cross }}
108
+ shell: bash
109
+ run: |
110
+ TARGET="${{ matrix.build_target || matrix.target }}"
111
+ if [ "${{ matrix.build_std }}" = "true" ]; then
112
+ cargo +nightly build --release --target "$TARGET" -Z build-std=std,panic_abort -p ciris-server
113
+ else
114
+ cargo build --release --target "$TARGET" -p ciris-server
115
+ fi
116
+
117
+ - name: Stage + strip binary
118
+ shell: bash
119
+ run: |
120
+ TARGET="${{ matrix.build_target || matrix.target }}"
121
+ EXT=""; [ "${{ runner.os }}" = "Windows" ] && EXT=".exe"
122
+ BIN="target/$TARGET/release/ciris-server$EXT"
123
+ mkdir -p stage
124
+ if [ "${{ runner.os }}" != "Windows" ]; then strip "$BIN" || true; fi
125
+ cp "$BIN" stage/
126
+
127
+ - uses: actions/upload-artifact@v4
128
+ with:
129
+ name: ciris-server-${{ matrix.target }}
130
+ path: stage/
131
+ if-no-files-found: error
132
+
133
+ # Linux ARM64 musl (Alpine / Home Assistant) — static, via zigbuild.
134
+ build-musl:
135
+ name: Build (aarch64 musl)
136
+ runs-on: ubuntu-latest
137
+ steps:
138
+ - uses: actions/checkout@v4
139
+ - uses: dtolnay/rust-toolchain@stable
140
+ with:
141
+ targets: aarch64-unknown-linux-musl
142
+ - uses: Swatinem/rust-cache@v2
143
+ continue-on-error: true
144
+ with:
145
+ cache-bin: false
146
+ key: release-musl-aarch64-${{ github.ref_name }}
147
+ - uses: mlugg/setup-zig@v2
148
+ with:
149
+ version: 0.13.0
150
+ - name: Install cargo-zigbuild (retry on timeout)
151
+ uses: nick-fields/retry@v3
152
+ with:
153
+ timeout_minutes: 10
154
+ max_attempts: 2
155
+ retry_wait_seconds: 30
156
+ retry_on: timeout
157
+ command: cargo install cargo-zigbuild
158
+ - run: cargo zigbuild --release --target aarch64-unknown-linux-musl -p ciris-server
159
+ - name: Stage + strip
160
+ run: |
161
+ BIN=target/aarch64-unknown-linux-musl/release/ciris-server
162
+ zig objcopy --strip-all "$BIN" "$BIN.stripped" && mv "$BIN.stripped" "$BIN" || true
163
+ mkdir -p stage && cp "$BIN" stage/
164
+ - uses: actions/upload-artifact@v4
165
+ with:
166
+ name: ciris-server-aarch64-unknown-linux-musl
167
+ path: stage/
168
+ if-no-files-found: error
169
+
170
+ create-release:
171
+ name: Create Release
172
+ needs: [build-native, build-musl]
173
+ runs-on: ubuntu-latest
174
+ steps:
175
+ - uses: actions/checkout@v4
176
+ - uses: actions/download-artifact@v4
177
+ with:
178
+ path: artifacts
179
+ - name: Package + checksum
180
+ run: |
181
+ mkdir -p release
182
+ for dir in artifacts/ciris-server-*; do
183
+ [ -d "$dir" ] || continue
184
+ target=$(basename "$dir" | sed 's/ciris-server-//')
185
+ tar -czvf "release/ciris-server-${{ github.ref_name }}-${target}.tar.gz" -C "$dir" .
186
+ done
187
+ cd release && sha256sum *.tar.gz > SHA256SUMS
188
+ - name: Install cosign
189
+ uses: sigstore/cosign-installer@v3
190
+ - name: Sign artifacts (Sigstore keyless)
191
+ run: |
192
+ cd release
193
+ for f in *.tar.gz SHA256SUMS; do
194
+ cosign sign-blob --yes --output-signature "$f.sig" --output-certificate "$f.pem" "$f"
195
+ done
196
+ - name: Create GitHub Release
197
+ uses: softprops/action-gh-release@v1
198
+ with:
199
+ files: |
200
+ release/*.tar.gz
201
+ release/*.tar.gz.sig
202
+ release/*.tar.gz.pem
203
+ release/SHA256SUMS
204
+ release/SHA256SUMS.sig
205
+ release/SHA256SUMS.pem
206
+ generate_release_notes: true
207
+ prerelease: ${{ contains(github.ref_name, '-rc') || contains(github.ref_name, '-spec') || contains(github.ref_name, '-beta') }}
@@ -0,0 +1,6 @@
1
+ /target
2
+ **/*.rs.bk
3
+ Cargo.lock.bak
4
+ .DS_Store
5
+ *.identity
6
+ /keyring
@@ -0,0 +1,63 @@
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.1.1] — 2026-06-15
8
+
9
+ Release-CI fixes only — **no change to the node**. 0.1.0 was tagged but did not
10
+ publish: `publish-pypi.yml`'s linux wheel built in a manylinux_2_28 (AlmaLinux 8)
11
+ container whose tpm2-tss is 2.3.2, too old for the keyring's `tss-esapi-sys`
12
+ (`tss2-sys not found`), and two lint gates failed.
13
+
14
+ ### Fixed
15
+ - **Linux wheels** now build on the native runners (ubuntu-latest + ubuntu-24.04-arm)
16
+ with apt `libtss2-dev` + `patchelf` — the same recipe the green conformance
17
+ wheel job and the sister wheels (persist `manylinux_2_38`, edge `_2_39`) use —
18
+ instead of the el8 container with its stale tss2.
19
+ - `rustfmt` (bench formatting) and `clippy` doc-list lints in
20
+ `benches/pqc_av_streaming.rs` (allow the two stylized-doc lints).
21
+
22
+ ## [0.1.0] — 2026-06-15
23
+
24
+ First release. **Lens-only fabric node** — the federation's headless cohabitation
25
+ runtime with only the observation slice live. Replaces both the deployed CIRISLens
26
+ server and the agent's direct `ciris-lens-core` cohabitation.
27
+
28
+ ### Added
29
+ - **Zero-setup node** (`ciris-server`): one shared persist `Engine` + one shared
30
+ Reticulum `Edge` (a single federation identity), mode defaults to `server`,
31
+ no wizard. Data under `$CIRIS_HOME`; SQLite corpus by default, Postgres via
32
+ `CIRIS_DB_URL`.
33
+ - **Lens slice**: relay ingest of CEG `AccordEventsBatch` (over Reticulum/HTTP)
34
+ into the shared corpus, plus the seven frozen `GET /lens/api/v1/*` read
35
+ endpoints. `ciris-lens-core` is absorbed in-tree (workspace member); the
36
+ standalone CIRISLensCore library and the CIRISLens deployment retire.
37
+ - **Hardware key custody**, two classes: the RNS transport identity and the
38
+ Ed25519 federation seed are TPM / Secure-Enclave / StrongBox sealed, with a
39
+ software-encrypted fallback. Existing keys are **adopted byte-identically** —
40
+ a CIRISLens host keeps its `key_id` and RNS destination on cutover (no re-key,
41
+ no re-enroll). See `FSD/LENS_TO_SERVER_MIGRATION.md`.
42
+ - **Reticulum floor with capability gating**: always a routable RET node; the
43
+ lens corpus + read API gate on a realistic free-disk minimum
44
+ (`CIRIS_SERVER_LENS_STORE_MIN_GIB`), else the node runs as a relay.
45
+ - **`ciris-canonical` founder-quorum** (`src/quorum.rs`): the entrenched 2-of-3
46
+ trust root that replaces the shared steward key (prep for the 0.5 registry
47
+ fold; CEG §8.1.13.1.1).
48
+ - **PyO3 abi3 wheel**: `pip install ciris-server` → the `ciris-server` command,
49
+ and the lens drop-in `from ciris_server import LensClient` for CIRISAgent.
50
+ - **Conformance + benchmarks**: cohabitation + CEG-profile gating via
51
+ CIRISConformance; `benches/pqc_av_streaming.rs` (realtime-A/V two-layer
52
+ hybrid-PQC mesh) and `tests/replication.rs` (CEG-RC5 corpus replication spine).
53
+
54
+ ### Substrate
55
+ - persist **v7.0.0** · edge **v3.6.0** · verify-family **v5.6.0**
56
+ (verify-core + keyring + crypto). CEG **1.0-RC6**.
57
+
58
+ ### Notes
59
+ - Registry (0.5) and node (1.0) slices are scaffolded in `src/compose.rs` and
60
+ fold in as their co-bumps land. Registry-fold prep: `FSD/REGISTRY_FOLD_DERISK.md`,
61
+ [#2](https://github.com/CIRISAI/CIRISServer/issues/2).
62
+
63
+ [0.1.0]: https://github.com/CIRISAI/CIRISServer/releases/tag/v0.1.0