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.
- ciris_server-0.1.1/.github/workflows/ci.yml +71 -0
- ciris_server-0.1.1/.github/workflows/conformance.yml +63 -0
- ciris_server-0.1.1/.github/workflows/publish-pypi.yml +166 -0
- ciris_server-0.1.1/.github/workflows/release.yml +207 -0
- ciris_server-0.1.1/.gitignore +6 -0
- ciris_server-0.1.1/CHANGELOG.md +63 -0
- ciris_server-0.1.1/Cargo.lock +7062 -0
- ciris_server-0.1.1/Cargo.toml +131 -0
- ciris_server-0.1.1/FSD/LENS_TO_SERVER_MIGRATION.md +142 -0
- ciris_server-0.1.1/FSD/PQC_AV_STREAMING_BENCH.md +95 -0
- ciris_server-0.1.1/FSD/REGISTRY_FOLD_DERISK.md +120 -0
- ciris_server-0.1.1/FSD/SERVER_1.0_PLAN.md +173 -0
- ciris_server-0.1.1/LICENSE +661 -0
- ciris_server-0.1.1/MISSION.md +512 -0
- ciris_server-0.1.1/PKG-INFO +135 -0
- ciris_server-0.1.1/README.md +123 -0
- ciris_server-0.1.1/benches/pqc_av_streaming.rs +334 -0
- ciris_server-0.1.1/crates/ciris-lens-core/.github/workflows/bench.yml +88 -0
- ciris_server-0.1.1/crates/ciris-lens-core/.github/workflows/ci.yml +1089 -0
- ciris_server-0.1.1/crates/ciris-lens-core/.gitignore +25 -0
- ciris_server-0.1.1/crates/ciris-lens-core/.pre-commit-config.yaml +91 -0
- ciris_server-0.1.1/crates/ciris-lens-core/Cargo.toml +167 -0
- ciris_server-0.1.1/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +353 -0
- ciris_server-0.1.1/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +683 -0
- ciris_server-0.1.1/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +377 -0
- ciris_server-0.1.1/crates/ciris-lens-core/LICENSE +205 -0
- ciris_server-0.1.1/crates/ciris-lens-core/MISSION.md +491 -0
- ciris_server-0.1.1/crates/ciris-lens-core/README.md +79 -0
- ciris_server-0.1.1/crates/ciris-lens-core/benches/aggregate.rs +99 -0
- ciris_server-0.1.1/crates/ciris-lens-core/benches/canonicalize.rs +79 -0
- ciris_server-0.1.1/crates/ciris-lens-core/benches/project.rs +102 -0
- ciris_server-0.1.1/crates/ciris-lens-core/deny.toml +120 -0
- ciris_server-0.1.1/crates/ciris-lens-core/docs/BENCHMARKS.md +184 -0
- ciris_server-0.1.1/crates/ciris-lens-core/docs/COHABITATION.md +283 -0
- ciris_server-0.1.1/crates/ciris-lens-core/docs/PRE_COMMIT.md +132 -0
- ciris_server-0.1.1/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +957 -0
- ciris_server-0.1.1/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +269 -0
- ciris_server-0.1.1/crates/ciris-lens-core/docs/RELEASE_NOTES.md +1034 -0
- ciris_server-0.1.1/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +306 -0
- ciris_server-0.1.1/crates/ciris-lens-core/docs/THREAT_MODEL.md +939 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +161 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +365 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +9 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +215 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +101 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +249 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +887 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +194 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +184 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +309 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +378 -0
- ciris_server-0.1.1/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +256 -0
- ciris_server-0.1.1/crates/ciris-lens-core/pyproject.toml +93 -0
- ciris_server-0.1.1/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +125 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/audit/api.rs +508 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/audit/delegate.rs +326 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/audit/mod.rs +37 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/audit/pyo3.rs +447 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/canonical/ceg_egress.rs +284 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/canonical/mod.rs +207 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capacity/attestation.rs +146 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capacity/mod.rs +35 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capacity/score.rs +299 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/batch.rs +495 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/client.rs +1256 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/consent.rs +479 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/correlation.rs +835 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/event.rs +303 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/mod.rs +57 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/partial.rs +460 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/py_engine.rs +524 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/capture/seal.rs +818 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/cohort/declared.rs +252 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/cohort/mod.rs +24 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/cohort/resourcing.rs +47 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/config/egress.rs +983 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/config/mod.rs +35 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/config/node.rs +227 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/config/retention.rs +146 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/config/upstream.rs +61 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/detector/axis_metrics.rs +739 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +200 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/detector/correlated_action.rs +563 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/detector/distributive_access.rs +524 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/detector/manifold.rs +774 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/detector/mod.rs +144 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/extract/mod.rs +20 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/extract/projection.rs +259 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/ffi/mod.rs +7 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/ffi/pyo3.rs +1864 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/lib.rs +119 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/observability/mod.rs +2 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/pipeline/lifecycle.rs +415 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/pipeline/mod.rs +4 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/retention/eviction.rs +347 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/retention/mod.rs +49 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/retention/summary.rs +59 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/role/handler.rs +97 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/role/mod.rs +71 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/role/node.rs +1128 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/role/relay.rs +225 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/role/ret_relay.rs +335 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scores/aggregate.rs +360 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scores/mod.rs +59 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scores/oracle.rs +113 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/assembly.rs +290 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/axis_calibration.rs +508 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/calibration.rs +495 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/capacity.rs +124 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/mod.rs +25 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/n_eff.rs +132 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/scoring/result.rs +161 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/signing/event.rs +617 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/signing/mod.rs +9 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/wire/mod.rs +125 -0
- ciris_server-0.1.1/crates/ciris-lens-core/src/wire/signer.rs +149 -0
- ciris_server-0.1.1/crates/ciris-lens-core/tests/parity/README.md +44 -0
- ciris_server-0.1.1/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +385 -0
- ciris_server-0.1.1/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +218 -0
- ciris_server-0.1.1/crates/ciris-lens-core/tests/sovereign_rlib.rs +355 -0
- ciris_server-0.1.1/pyproject.toml +39 -0
- ciris_server-0.1.1/rust-toolchain.toml +5 -0
- ciris_server-0.1.1/src/compose.rs +254 -0
- ciris_server-0.1.1/src/config.rs +218 -0
- ciris_server-0.1.1/src/lib.rs +92 -0
- ciris_server-0.1.1/src/main.rs +14 -0
- ciris_server-0.1.1/src/quorum.rs +137 -0
- 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,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
|