Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
96e687f
Merge commit 'c6f08ef97b2ff8fc1cf9a475eaeda511cd147bd5' into test/mst…
Ivanbeethoven Oct 5, 2026
af57150
test(snapshot): measure real isolated commit update performance
Ivanbeethoven Oct 5, 2026
63a25b7
ci(mst2): pin latest verified Mega2 assembly
Ivanbeethoven Oct 5, 2026
59f7d13
ci(mst2): pin fixture-corrected Mega2 assembly
Ivanbeethoven Oct 5, 2026
57f3b5c
ci(mst2): pin corrected native and GC fixtures
Ivanbeethoven Oct 5, 2026
5fcebeb
ci(mst2): pin repaired server integration gate
Ivanbeethoven Oct 5, 2026
f91434d
ci(snapshot): allow explicit PR-label real benchmark dispatch
Ivanbeethoven Oct 5, 2026
14a5c6b
Merge verified closure batch optimization into real benchmark
Ivanbeethoven Oct 5, 2026
6a49021
Merge verified raw digest codec and identity-compatible transport
Ivanbeethoven Oct 5, 2026
809ab3d
test(snapshot): bind full snapshot object fixture frame headers
Ivanbeethoven Oct 5, 2026
a930606
test(snapshot): use the existing Axum path extractor alias
Ivanbeethoven Oct 5, 2026
618dd96
fix(bench): initialize owned native head and preserve recovery deadline
Ivanbeethoven Oct 5, 2026
3d3a2b2
test(mst2): validate root-only native bootstrap before HTTP startup
Ivanbeethoven Oct 5, 2026
3f188fb
test: report bounded commit-update failure stages
Ivanbeethoven Oct 5, 2026
7cce2eb
test: audit old views against their bound shared content store
Ivanbeethoven Oct 5, 2026
d818877
style: apply nightly import grouping to driver regression
Ivanbeethoven Oct 5, 2026
3e753b5
Bound real update stages and compare durable verified endpoints
Ivanbeethoven Oct 5, 2026
bd9e009
Verify owned groups after leaders exit and bound readiness waits
Ivanbeethoven Oct 5, 2026
cd70006
Reap startup identity failures and reject late cleanup success
Ivanbeethoven Oct 5, 2026
8c90184
fix(bench): pin command leader until owned group cleanup
Ivanbeethoven Oct 5, 2026
0d2070c
fix(bench): reap exited command leaders on cleanup failure
Ivanbeethoven Oct 5, 2026
b9929af
Merge commit '0d2070c5c0a39518ba4fd5d5348289f39272b314' into feat/mst…
Ivanbeethoven Oct 5, 2026
b9f87ae
Merge commit '3285824428d5fdbd45b59d37264f4bf3ac264179' into feat/mst…
Ivanbeethoven Oct 5, 2026
b475387
Bind commit update projection collection to actual durable resolve re…
Ivanbeethoven Oct 5, 2026
be0ab35
Reject durable acknowledgements that complete after the original dead…
Ivanbeethoven Oct 5, 2026
0ee78c8
Preserve the validated closed writer footer in final experiment evidence
Ivanbeethoven Oct 5, 2026
4a58160
Merge remote-tracking branch 'origin/main' into feat/mst2-projection-…
Ivanbeethoven Oct 5, 2026
684934f
Merge commit '0fd132781a548593796ad57abaf81d8a960a97d4' into feat/mst…
Oct 6, 2026
096cafe
Preserve legacy projection placeholders in benchmark records
Ivanbeethoven Oct 6, 2026
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
12 changes: 12 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,18 @@ jobs:
- name: Run tests
run: cargo test --verbose

- name: Check real runner budgets and process cleanup
run: |
python3 -B tests/mst2-e2e/test_commit_update_bench.py -v
python3 -B tests/mst2-e2e/test_commit_update_budget.py -v
python3 -B tests/mst2-e2e/test_commit_update_projection.py -v

- name: Check measurement driver old-view audit
run: |
cargo build --locked --release --example mst2_update_measure
MST2_MEASURE_DRIVER="$GITHUB_WORKSPACE/target/release/examples/mst2_update_measure" \
cargo test --locked --release --example mst2_update_measure

docker:
name: Docker image
runs-on: ubuntu-latest
Expand Down
132 changes: 132 additions & 0 deletions .github/workflows/mst2-projection-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: MST2 request-bound projection update benchmark

on:
workflow_dispatch:
inputs:
mega_sha:
description: Immutable reviewed server SHA with typed projection writer
required: true
profile:
type: choice
description: Fixture size
options: [medium, smoke]
default: medium
rounds:
description: Complete repetitions (3 to 10)
required: true
default: '3'
session_started_utc:
description: Actual dispatch UTC T0, retained on recovery
required: true
session_deadline_utc:
description: Original absolute UTC D, exactly T0 plus 235 minutes
required: true

permissions:
contents: read

jobs:
benchmark:
runs-on: ubuntu-latest
timeout-minutes: 220
env:
CARGO_BUILD_JOBS: '2'
CARGO_INCREMENTAL: '0'
CARGO_PROFILE_RELEASE_DEBUG: '0'
NO_PROXY: localhost,127.0.0.1
MEGA_SHA: ${{ inputs.mega_sha }}
SCORPIO_SHA: ${{ github.sha }}
PROFILE: ${{ inputs.profile }}
ROUNDS: ${{ inputs.rounds }}
STARTED_INPUT: ${{ inputs.session_started_utc }}
DEADLINE_INPUT: ${{ inputs.session_deadline_utc }}
steps:
- uses: actions/checkout@v7
with:
ref: ${{ env.SCORPIO_SHA }}
path: scorpiofs
persist-credentials: false

- name: Admit original dispatch window before builds
shell: bash
run: |
python3 -B - <<'PY'
import os, sys
sys.path.insert(0, 'scorpiofs/tests/mst2-e2e')
from commit_update_projection import window_anchor
anchor = window_anchor(os.environ['STARTED_INPUT'], os.environ['DEADLINE_INPUT'], admission=True)
with open(os.environ['GITHUB_ENV'], 'a') as stream:
stream.write('MST2_SESSION_STARTED=' + os.environ['STARTED_INPUT'] + '\n')
stream.write('MST2_SESSION_DEADLINE=' + os.environ['DEADLINE_INPUT'] + '\n')
stream.write('MST2_WORK_CLEANUP_DEADLINE_MONOTONIC=' + repr(anchor) + '\n')
stream.write('MST2_OWNED_ROOT=' + os.environ['RUNNER_TEMP'] + '/mst2-real-' + os.environ['GITHUB_RUN_ID'] + '-' + os.environ['GITHUB_RUN_ATTEMPT'] + '\n')
PY

- uses: actions/checkout@v7
with:
repository: gitmono-dev/mega2
ref: ${{ env.MEGA_SHA }}
path: mega2
persist-credentials: false

- uses: actions/cache@v6
with:
path: scorpiofs/target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('scorpiofs/Cargo.lock') }}

- name: Install system dependencies
timeout-minutes: 10
run: |
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev libfuse3-dev protobuf-compiler postgresql-client

- uses: dtolnay/rust-toolchain@stable

- name: Build immutable server and measurement client
shell: bash
run: |
set -euo pipefail
[[ "$MEGA_SHA" =~ ^[0-9a-f]{40}$ ]]
test "$(git -C scorpiofs rev-parse HEAD)" = "$SCORPIO_SHA"
test "$(git -C mega2 rev-parse HEAD)" = "$MEGA_SHA"
for target in server client; do
if test "$target" = server; then
python3 -B scorpiofs/tests/mst2-e2e/commit_update_budget.py --rounds "$ROUNDS" --stage server-build -- \
cargo build --manifest-path mega2/Cargo.toml --locked --release --bin mega2
else
python3 -B scorpiofs/tests/mst2-e2e/commit_update_budget.py --rounds "$ROUNDS" --stage client-build -- \
cargo build --manifest-path scorpiofs/Cargo.toml --locked --release --example mst2_update_measure
fi
done

- name: Check collector and actual process ownership
shell: bash
run: |
python3 -B scorpiofs/tests/mst2-e2e/commit_update_budget.py --rounds "$ROUNDS" --stage fences -- bash -euo pipefail -c '
python3 -B scorpiofs/tests/mst2-e2e/test_commit_update_bench.py -v
python3 -B scorpiofs/tests/mst2-e2e/test_commit_update_budget.py -v
python3 -B scorpiofs/tests/mst2-e2e/test_commit_update_projection.py -v
MST2_MEASURE_DRIVER="$GITHUB_WORKSPACE/scorpiofs/target/release/examples/mst2_update_measure" \
cargo test --manifest-path scorpiofs/Cargo.toml --locked --release --example mst2_update_measure
'

- name: Measure actual request-bound commit updates on owned deployment
shell: bash
run: |
set -euo pipefail
DRIVER="$GITHUB_WORKSPACE/scorpiofs/target/release/examples/mst2_update_measure"
DRIVER_SHA=$(sha256sum "$DRIVER" | cut -d ' ' -f 1)
python3 -B scorpiofs/tests/mst2-e2e/commit_update_ci.py --execute --projection-traces \
--run-root "$MST2_OWNED_ROOT" --mega-source "$GITHUB_WORKSPACE/mega2" \
--mega-sha "$MEGA_SHA" --mega-binary "$GITHUB_WORKSPACE/mega2/target/release/mega2" \
--driver "$DRIVER" --driver-sha256 "$DRIVER_SHA" --profile "$PROFILE" --rounds "$ROUNDS" \
--session-started-utc "$MST2_SESSION_STARTED" --session-deadline-utc "$MST2_SESSION_DEADLINE"

- name: Clean up owned deployment within original H
if: always()
shell: bash
run: |
if test -n "$MST2_OWNED_ROOT" && test -f scorpiofs/tests/mst2-e2e/commit_update_ci.py; then
python3 -B scorpiofs/tests/mst2-e2e/commit_update_ci.py --cleanup --run-root "$MST2_OWNED_ROOT" \
--session-deadline-utc "$MST2_SESSION_DEADLINE" --rounds "$ROUNDS"
fi
154 changes: 154 additions & 0 deletions .github/workflows/mst2-real-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
name: MST2 real commit update benchmark

on:
pull_request:
types: [labeled]
workflow_dispatch:
inputs:
mega_sha:
description: Immutable reviewed Mega2 server SHA
required: true
default: 37b61086288b80c10b413472e262a1bf281779eb
profile:
type: choice
description: Fixture size
options: [medium, smoke]
default: medium
rounds:
description: Repetitions (3 to 10)
required: true
default: '3'
session_deadline_utc:
description: Original shared UTC deadline when recovering a failed session
required: false
job_timeout_minutes:
description: Hard job bound; recovery must fit before the original deadline
required: true
default: '240'

permissions:
contents: read

jobs:
benchmark:
if: >-
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository &&
github.event.pull_request.head.ref == 'test/mst2-real-commit-update-runner' &&
(github.event.label.name == 'run-mst2-real-update-medium' ||
startsWith(github.event.label.name, 'resume-mst2-update:')))
runs-on: ubuntu-latest
timeout-minutes: ${{ github.event_name == 'workflow_dispatch' && fromJSON(inputs.job_timeout_minutes) || startsWith(github.event.label.name, 'resume-mst2-update:') && fromJSON(github.event.label.description).timeout_minutes || 240 }}
env:
CARGO_BUILD_JOBS: '2'
CARGO_INCREMENTAL: '0'
CARGO_PROFILE_RELEASE_DEBUG: '0'
NO_PROXY: localhost,127.0.0.1
MEGA_SHA: ${{ github.event_name == 'pull_request' && '37b61086288b80c10b413472e262a1bf281779eb' || inputs.mega_sha }}
SCORPIO_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
PROFILE: ${{ github.event_name == 'pull_request' && 'medium' || inputs.profile }}
ROUNDS: ${{ github.event_name == 'pull_request' && '3' || inputs.rounds }}
DEADLINE_INPUT: ${{ inputs.session_deadline_utc }}
TIMEOUT_INPUT: ${{ inputs.job_timeout_minutes }}
RESUME_SPEC: ${{ startsWith(github.event.label.name, 'resume-mst2-update:') && github.event.label.description || '' }}
steps:
- name: Set shared session deadline
shell: bash
run: |
python3 - <<'PY'
import json, os, time
from datetime import datetime, timedelta, timezone
now = datetime.now(timezone.utc)
spec = json.loads(os.environ['RESUME_SPEC']) if os.environ['RESUME_SPEC'] else {}
requested = spec.get('session_deadline_utc', os.environ['DEADLINE_INPUT'])
timeout = spec.get('timeout_minutes', int(os.environ['TIMEOUT_INPUT'] or '240'))
if not isinstance(timeout, int) or isinstance(timeout, bool) or not 1 <= timeout <= 240:
raise ValueError('invalid hard job timeout')
deadline = datetime.fromisoformat(requested.replace('Z', '+00:00')) if requested else now + timedelta(minutes=235)
if deadline.tzinfo is None or deadline.utcoffset().total_seconds() != 0:
raise ValueError('shared deadline must be explicit UTC')
remaining = (deadline - now).total_seconds()
if not 0 < remaining <= 235 * 60 or (requested and timeout * 60 > remaining):
raise ValueError('recovery timeout must fit the unextended shared deadline')
if spec and not requested:
raise ValueError('resume label must carry the original shared deadline')
with open(os.environ['GITHUB_ENV'], 'a') as stream:
stream.write('MST2_SESSION_DEADLINE=' + deadline.isoformat() + '\n')
stream.write('MST2_WORK_CLEANUP_DEADLINE_MONOTONIC=' + repr(time.monotonic() + remaining - 15 * 60) + '\n')
stream.write('MST2_OWNED_ROOT=' + os.environ['RUNNER_TEMP'] + '/mst2-real-' + os.environ['GITHUB_RUN_ID'] + '-' + os.environ['GITHUB_RUN_ATTEMPT'] + '\n')
PY

- uses: actions/checkout@v7
with:
ref: ${{ env.SCORPIO_SHA }}
path: scorpiofs
persist-credentials: false

- uses: actions/checkout@v7
with:
repository: gitmono-dev/mega2
ref: ${{ env.MEGA_SHA }}
path: mega2
persist-credentials: false

- uses: actions/cache@v6
with:
path: scorpiofs/target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('scorpiofs/Cargo.lock') }}

- name: Install system dependencies
timeout-minutes: 10
run: |
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev libfuse3-dev protobuf-compiler postgresql-client

- uses: dtolnay/rust-toolchain@stable

- name: Build immutable server and measurement client
shell: bash
run: |
set -euo pipefail
[[ "$MEGA_SHA" =~ ^[0-9a-f]{40}$ ]]
test "$(git -C scorpiofs rev-parse HEAD)" = "$SCORPIO_SHA"
test "$(git -C mega2 rev-parse HEAD)" = "$MEGA_SHA"
for target in server client; do
if test "$target" = server; then
python3 -B scorpiofs/tests/mst2-e2e/commit_update_budget.py --rounds "$ROUNDS" --stage server-build -- \
cargo build --manifest-path mega2/Cargo.toml --locked --release --bin mega2
else
python3 -B scorpiofs/tests/mst2-e2e/commit_update_budget.py --rounds "$ROUNDS" --stage client-build -- \
cargo build --manifest-path scorpiofs/Cargo.toml --locked --release --example mst2_update_measure
fi
done

- name: Check benchmark fences and Git oracle
shell: bash
run: |
python3 -B scorpiofs/tests/mst2-e2e/commit_update_budget.py --rounds "$ROUNDS" --stage fences -- bash -euo pipefail -c '
python3 -B scorpiofs/tests/mst2-e2e/test_commit_update_bench.py -v
python3 -B scorpiofs/tests/mst2-e2e/test_commit_update_budget.py -v
MST2_MEASURE_DRIVER="$GITHUB_WORKSPACE/scorpiofs/target/release/examples/mst2_update_measure" \
cargo test --manifest-path scorpiofs/Cargo.toml --locked --release --example mst2_update_measure
'

- name: Run real commit update benchmark on owned deployment
shell: bash
run: |
set -euo pipefail
DRIVER="$GITHUB_WORKSPACE/scorpiofs/target/release/examples/mst2_update_measure"
DRIVER_SHA=$(sha256sum "$DRIVER" | cut -d ' ' -f 1)
python3 -B scorpiofs/tests/mst2-e2e/commit_update_ci.py --execute \
--run-root "$MST2_OWNED_ROOT" --mega-source "$GITHUB_WORKSPACE/mega2" \
--mega-sha "$MEGA_SHA" --mega-binary "$GITHUB_WORKSPACE/mega2/target/release/mega2" \
--driver "$DRIVER" --driver-sha256 "$DRIVER_SHA" \
--profile "$PROFILE" --rounds "$ROUNDS" --session-deadline-utc "$MST2_SESSION_DEADLINE"

- name: Clean up owned deployment
if: always()
shell: bash
run: |
if test -f scorpiofs/tests/mst2-e2e/commit_update_ci.py; then
python3 -B scorpiofs/tests/mst2-e2e/commit_update_ci.py --cleanup --run-root "$MST2_OWNED_ROOT" \
--session-deadline-utc "$MST2_SESSION_DEADLINE" --rounds "$ROUNDS"
fi
Loading
Loading