Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 5 additions & 16 deletions .github/workflows/axum-performance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,22 +60,11 @@ jobs:
# Backport only phase observations and the example observer wiring.
# Retain the exact diff so the baseline's instrumentation is auditable.
patch="$GITHUB_WORKSPACE/scripts/axum-write-telemetry.patch"
# The candidate may reorganize admission; this fixed fixture only
# backports observations, never candidate scheduling changes.
if git -C "$RUNNER_TEMP/axum-baseline-source" apply --check "$patch"; then
git -C "$RUNNER_TEMP/axum-baseline-source" apply "$patch"
elif git -C "$RUNNER_TEMP/axum-baseline-source" apply --reverse --check "$patch"; then
:
else
# An instrumented baseline may have reorganized these files.
# Accept it only when every patch target already matches the
# candidate byte for byte; never copy candidate policy into it.
git apply --numstat "$patch" > "$RUNNER_TEMP/axum-evidence/telemetry-targets.tsv"
test -s "$RUNNER_TEMP/axum-evidence/telemetry-targets.tsv"
while IFS=$'\t' read -r added removed target; do
cmp "$GITHUB_WORKSPACE/$target" "$RUNNER_TEMP/axum-baseline-source/$target"
done < "$RUNNER_TEMP/axum-evidence/telemetry-targets.tsv"
fi
python3 -B -m unittest discover -s scripts/tests -p 'test_*.py'
python3 scripts/apply-axum-write-telemetry.py \
--candidate "$GITHUB_WORKSPACE" \
--baseline "$RUNNER_TEMP/axum-baseline-source" \
--evidence "$RUNNER_TEMP/axum-evidence"
cp crates/cellule-axum/examples/sql_metrics/mod.rs \
"$RUNNER_TEMP/axum-baseline-source/crates/cellule-axum/examples/sql_metrics/mod.rs"
cp "$patch" "$RUNNER_TEMP/axum-evidence/telemetry-backport.patch"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
run: cargo fmt --all --check
- name: Architecture boundaries
run: |
python3 -B -m unittest discover -s scripts/tests -p 'test_*.py'
python3 scripts/check-boundaries.py
python3 scripts/check-module-layout.py
python3 scripts/check-doc-rust-fences.py
Expand Down
6 changes: 6 additions & 0 deletions crates/cellule-axum/examples/sql_metrics/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ struct WriteMetrics {
root_admission: Histogram,
root_preparation: Histogram,
root_preparation_work: Histogram,
root_open: Histogram,
directory: Histogram,
dirty_admission: Histogram,
recovery_admission: Histogram,
publication_failures: AtomicU64,
Expand Down Expand Up @@ -150,6 +152,8 @@ impl CellTelemetry for QueryMetrics {
use cellule_ltx::LtxPhase;
match phase {
LtxPhase::Compaction => self.writes.compaction.observe(elapsed),
LtxPhase::RootOpen => self.writes.root_open.observe(elapsed),
LtxPhase::Directory => self.writes.directory.observe(elapsed),
LtxPhase::RootAdmission => self.writes.root_admission.observe(elapsed),
LtxPhase::RootPreparation => self.writes.root_preparation.observe(elapsed),
LtxPhase::RootPreparationWork => self.writes.root_preparation_work.observe(elapsed),
Expand Down Expand Up @@ -246,6 +250,8 @@ impl QueryMetrics {
"authority": self.writes.authority.snapshot(),
"publication": self.writes.publication.snapshot(),
"compaction": self.writes.compaction.snapshot(),
"root_open": self.writes.root_open.snapshot(),
"directory": self.writes.directory.snapshot(),
"root_admission": self.writes.root_admission.snapshot(),
"root_preparation": self.writes.root_preparation.snapshot(),
"root_preparation_work": self.writes.root_preparation_work.snapshot(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"source": "4c1c9826322b154a4dd2af6f86b89cd586e871a7",
"profile": "Isolated real runtime pressure-append fixture; test-only request counting and final-root inventory, not timed HTTP evidence. Valid append is measured without first preparing an invalid sequence. Fixed limits and remaining publication/schema/fencing assertions retained.",
"results": [
{
"schema": 1,
"provider_puts": 10,
"provider_heads": 4,
"provider_full_gets": 1,
"new_objects": 9,
"objects_not_reachable_from_final_root": [
"quiet-compaction/cells/v1/apps/2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b/cells/2929292929292929292929292929292929292929292929292929292929292929/inc/2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a/objects/24d244c8d19d58849ca09ca8a05ce13638536a74778ec9fdf5d923ebd8362acb.root",
"quiet-compaction/cells/v1/apps/2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b/cells/2929292929292929292929292929292929292929292929292929292929292929/inc/2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a/objects/35093ab4139f45354b7d5a8bc14147522507450b00c91b807a1d04efa0404dfc.root",
"quiet-compaction/cells/v1/apps/2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b/cells/2929292929292929292929292929292929292929292929292929292929292929/inc/2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a/objects/9b968a77d1879f0b02fa33c990c086870eb3a95b93661d8e38482baa37e673e4.dir"
],
"restored_rows": 39,
"final_root_origin_inventory_verified": true,
"log_sha256": "4ca782511cbcc5d762d3e5ccc0d9b6e39ac68e477a7e8b34e5379cdbf8405d93"
},
{
"schema": 2,
"provider_puts": 10,
"provider_heads": 4,
"provider_full_gets": 1,
"new_objects": 9,
"objects_not_reachable_from_final_root": [
"quiet-compaction/cells/v1/apps/2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b/cells/2929292929292929292929292929292929292929292929292929292929292929/inc/2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a/objects/24d244c8d19d58849ca09ca8a05ce13638536a74778ec9fdf5d923ebd8362acb.root",
"quiet-compaction/cells/v1/apps/2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b/cells/2929292929292929292929292929292929292929292929292929292929292929/inc/2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a/objects/35093ab4139f45354b7d5a8bc14147522507450b00c91b807a1d04efa0404dfc.root",
"quiet-compaction/cells/v1/apps/2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b/cells/2929292929292929292929292929292929292929292929292929292929292929/inc/2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a/objects/9b968a77d1879f0b02fa33c990c086870eb3a95b93661d8e38482baa37e673e4.dir"
],
"restored_rows": 39,
"final_root_origin_inventory_verified": true,
"log_sha256": "9790129feafea75db86e44944ee7c0fd61541df36583a0e41c92c1f3d3d2fe58"
}
],
"conclusion": "Both native append and schema migration issue ten PUTs and four metadata HEADs. Two newly uploaded root metadata objects and one directory object are absent from the final dependency inventory. First optimization target: construct final root from verified compaction state without uploading/reopening intermediate root metadata. Directory streaming and retained locator nodes must remain bounded and complete.",
"limitations": [
"The replica cost ledger is drained inside publisher compaction telemetry; its final five-object count does not cover the entire preparation. Provider counters cover the full operation.",
"Unreachable intermediate directory removal cannot be generalized to partial-page updates; unchanged compacted directory nodes may remain required.",
"No implementation or end-to-end speedup has been established by this diagnostic."
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Intermediate compaction publication cost

An isolated probe of the real runtime pressure-append path finds redundant
metadata uploads. [Dataset](2026-10-04-compaction-publication-cost.json).
Production sources match merged main `4c1c9826322b154a4dd2af6f86b89cd586e871a7`.

| Operation | PUTs | Metadata HEADs | New objects | New root metadata outside final inventory | Restored rows |
| --- | ---: | ---: | ---: | ---: | ---: |
| Native append after compaction | 10 | 4 | 9 | 2 | 39 |
| Schema migration after compaction | 10 | 4 | 9 | 2 | 39 |

Both probes verify the final dependency inventory at origin, retain authority
and schema assertions, and restore 39 rows into a fresh SQLite file. They measure
a valid append without first preparing the fixture's intentional invalid sequence.
Provider counters cover the whole preparation; the replica ledger is drained
mid-operation by compaction telemetry and reports only the final five-object append.

Two new root metadata objects and one new directory object are absent from the
final inventory. The next implementation should construct the final append root
from verified compaction state, avoiding upload and reopening of intermediate
root metadata. Persisted formats and the original authority predecessor must
remain unchanged. Directory relocation must stay bounded; compacted directory
nodes can remain necessary when an append changes only some pages.

This is an operation-count diagnostic, not timed HTTP evidence. No removal or
speedup is established yet; both require regression tests and sustained paired runs.
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
{
"candidate": "ce93119794182c01c5d876568799cdb4dbe94628",
"source": "1ca9759282fb5b1d5a15059b8b235bf34c819f2e",
"source_tree": "8cfad7e150ed12e1b22731f1933aa4a3c0cb1ad9",
"source_tree_matches_candidate": true,
"workspace_msrv": {
"head": "ce93119794182c01c5d876568799cdb4dbe94628",
"base": "fa548bb2cc1993bbf77dc7f4fbef499a0de3f5a4",
"pr_merge": "1ca9759282fb5b1d5a15059b8b235bf34c819f2e",
"tree": "8cfad7e150ed12e1b22731f1933aa4a3c0cb1ad9",
"tree_matches_candidate": true,
"qualification_runs": [
37187645547,
37187645453
],
"rust_run": 37187645416,
"note": "Terminal workspace/MSRV steps and both actual merge checkouts confirmed in completed CI logs; independent provider/reference build and role-binary audits confirm the same candidate tree.",
"rust_terminal_status": "success",
"workspace_required_steps_verified": [
"Format",
"Architecture boundaries",
"Check",
"Documentation links",
"Test",
"Test local LTX without replica",
"Test replica feature",
"Lint",
"Validate SQL and peer contracts",
"Test fleet journal and public controller models",
"Verify Axum HTTP publication, retries and cold recovery against RustFS"
],
"msrv_verified": true,
"actual_checkout_confirmed_in_both_job_logs": true,
"workspace_log_sha256": "14fe20e24baa6dd5dde5c51e7d774a63c186ea7082eaeb33925c88e4bdc7cfa3"
},
"provider_qualification": {
"ci_run": "https://github.com/crabbuild/cellule/actions/runs/37187645547",
"candidate": "ce93119794182c01c5d876568799cdb4dbe94628",
"source": "1ca9759282fb5b1d5a15059b8b235bf34c819f2e",
"source_tree": "8cfad7e150ed12e1b22731f1933aa4a3c0cb1ad9",
"repeats": [
{
"lane": "follower",
"repeat": "cell-follower-capacity-run-1",
"acknowledged_writes": 5348,
"raw_files_checked": 95,
"binary_sha256": "203b7bcfcbc840a2e1cb378956dd1b92c310e54bffe7ee344bec4958cf73e4cf"
},
{
"lane": "follower",
"repeat": "cell-follower-capacity-run-2",
"acknowledged_writes": 7057,
"raw_files_checked": 101,
"binary_sha256": "203b7bcfcbc840a2e1cb378956dd1b92c310e54bffe7ee344bec4958cf73e4cf"
},
{
"lane": "follower",
"repeat": "cell-follower-capacity-run-3",
"acknowledged_writes": 6706,
"raw_files_checked": 95,
"binary_sha256": "203b7bcfcbc840a2e1cb378956dd1b92c310e54bffe7ee344bec4958cf73e4cf"
},
{
"lane": "object",
"repeat": "cell-write-capacity-run-1",
"acknowledged_writes": 7488,
"raw_files_checked": 100,
"binary_sha256": "203b7bcfcbc840a2e1cb378956dd1b92c310e54bffe7ee344bec4958cf73e4cf"
},
{
"lane": "object",
"repeat": "cell-write-capacity-run-2",
"acknowledged_writes": 8916,
"raw_files_checked": 103,
"binary_sha256": "203b7bcfcbc840a2e1cb378956dd1b92c310e54bffe7ee344bec4958cf73e4cf"
},
{
"lane": "object",
"repeat": "cell-write-capacity-run-3",
"acknowledged_writes": 8894,
"raw_files_checked": 103,
"binary_sha256": "203b7bcfcbc840a2e1cb378956dd1b92c310e54bffe7ee344bec4958cf73e4cf"
}
],
"acknowledged_writes": 44409,
"raw_files_checked": 597,
"source_tree_matches_candidate": true,
"all_six_repeats_independently_reverified": true,
"budget_proof": "Every driver/node role: cpu.max=100000/100000, memory.max=1GiB, swap.max=0, no OOM, clean exit; node sessions withdrawn.",
"audit_log_sha256": "954f9d0c7c881224009fcf0dec5f39250be83e3963d568500afc9bf3e87deb82"
},
"reference_qualification": {
"run_id": 37187645453,
"head": "ce93119794182c01c5d876568799cdb4dbe94628",
"actual_source": "1ca9759282fb5b1d5a15059b8b235bf34c819f2e",
"source_tree": "8cfad7e150ed12e1b22731f1933aa4a3c0cb1ad9",
"workloads": {
"entity-scaling": {
"verified_cells": 80,
"acknowledged_writes": 12310,
"windows": 36,
"raw_hashes": 377,
"roles_verified": 21,
"unique_scratch_volumes": 21,
"binary_sha256": "250b5360ae81e09e60d5a095760465134ff31fd2174d5e97de035bde3be065dd"
},
"scaling": {
"mixed_windows": 4,
"reader_loss_verified": true,
"raw_hashes": 46,
"acknowledged_writes": 1500,
"successful_reads": 281737,
"roles_verified": 21,
"unique_scratch_volumes": 21,
"binary_sha256": "250b5360ae81e09e60d5a095760465134ff31fd2174d5e97de035bde3be065dd"
}
}
},
"reference_ci_run": "https://github.com/crabbuild/cellule/actions/runs/37187645453",
"limitations": [
"Counts are correctness evidence, not paired performance gains.",
"Reader/entity scaling uses independent constrained processes with one shared fixed provider.",
"Raw evidence remains in CI artifacts; source, binary and audit hashes are retained here."
],
"evidence_hashes": {
"qualification-ce93119-summary.json": "f6af536d232e89891be0b9c84d0b451dbe983d443b6cef88257265b2296410ed",
"reference-ce93119-audit-summary.json": "46e3531c94cccd58a1a3c52d5d1610cdd38da87531541bd14f200abcd4a49a4c",
"composed-ce93119-ci-source-audit.json": "19ba4bea8b0ad4edfb0be9f28c809308262b5f332b0622f8798aacad6cc7d96c",
"audit-ce93119-qualification.py": "1f92d2881e7d6a888fb923f8c7ed8f189f14d8083301260f98a839a998e14a47",
"audit-ce93119-reference.py": "59087a7d97b983cfce7c75be48b2181411a57415c677a26e3b8a508b8c88102c",
"reference-ce93119-audit.log": "d66f5e5b5f1f73fe6fc9ccbf0197ba7853284ca9285a41ea3d5325800c5daea0",
"qualification-ce93119-audit.log": "954f9d0c7c881224009fcf0dec5f39250be83e3963d568500afc9bf3e87deb82",
"composed-ce93119-workspace-ci.log": "14fe20e24baa6dd5dde5c51e7d774a63c186ea7082eaeb33925c88e4bdc7cfa3"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Composed compaction correctness qualification

The integrated source passes workspace/MSRV CI and independent provider proof
checks. [Dataset](2026-10-04-composed-compaction-qualification.json).

Candidate `ce93119794182c01c5d876568799cdb4dbe94628` and actual CI merge
`1ca9759282fb5b1d5a15059b8b235bf34c819f2e` share tree
`8cfad7e150ed12e1b22731f1933aa4a3c0cb1ad9`.

| Evidence | Critical result | Source |
| --- | --- | --- |
| Workspace/MSRV | All required steps pass; composition, recovery, lineage, dependency-failure and cancellation regressions ran | [CI](https://github.com/crabbuild/cellule/actions/runs/37187645416) |
| Object/follower qualification | Three fresh repeats each; 44,409 acknowledged writes; 597 raw files independently checked | [CI](https://github.com/crabbuild/cellule/actions/runs/37187645547) |
| Entity qualification | 80 Cells; 36 windows; 12,310 acknowledged writes; 377 raw files checked | [CI](https://github.com/crabbuild/cellule/actions/runs/37187645453) |
| Reader qualification | Four 60-second mixed windows; 1,500 writes; 281,737 reads; reader-loss/replacement proof; 46 raw files checked | [CI](https://github.com/crabbuild/cellule/actions/runs/37187645453) |

Independent checks rerun the existing raw-evidence verifiers and authenticate
source/build/role-binary identities. Provider qualification verifies one CPU,
1 GiB memory, no swap, no OOM, clean shutdown and withdrawn node sessions.
Reference qualification verifies kernel/Docker limits, unique scratch volumes
for all 21 roles, clean exits, and intentional reader loss/replacement.

These are correctness and resource-limit proofs. Counts are not paired throughput
gains; the scaling qualification uses independent processes with a shared fixed
provider. Source, binary and audit hashes are retained in JSON; raw artifacts
remain linked through CI.
Loading
Loading