Skip to content
Open
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
8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: help lint format type-check security workflow-lint license-check third-party-notices third-party-notices-check cargo-deny-licenses test pre-push pre-push-clean pre-push-preflight pre-push-fast bazel-test clean test-tck docstring-coverage test-network benchmark test-perf test-perf-xs test-perf-slow test-perf-large coverage coverage-rust coverage-python coverage-node coverage-quick coverage-report coverage-diff coverage-strict check-coverage check-coverage-rust check-coverage-python check-coverage-node check-patch-coverage test-durations test-analytics docs-serve docs-build docs-clean cargo-build codspeed-build codspeed-build-walltime codspeed-run bench-traversal bench-fixed-hop-limit bench-fixed-hop-livejournal bench-m4-entry bench-g500-scale20 bench-g500-ladder bench-adjacency-200m bench-file-backed-128m m4-entry-matrix-check durability-isolation-check native-consumers release-load-matrix-check release-load-matrix bulk-construction-conformance-check bulk-construction-conformance cargo-test cargo-check cargo-clippy cargo-fmt cargo-fmt-check clean-builds clean-builds-all pnpm-install pnpm-build pnpm-test-bdd install build release-version-check package-license-verify publish-dry-run publish-dry-run-npm publish-dry-run-docs publish-dry-run-python publish-dry-run-cargo record-release-artifacts clean-env-verify-check clean-env-verify-preflight clean-env-verify
.PHONY: help lint format type-check security workflow-lint license-check third-party-notices third-party-notices-check cargo-deny-licenses test pre-push pre-push-clean pre-push-preflight pre-push-fast bazel-test clean test-tck docstring-coverage test-network benchmark test-perf test-perf-xs test-perf-slow test-perf-large coverage coverage-rust coverage-python coverage-node coverage-quick coverage-report coverage-diff coverage-strict check-coverage check-coverage-rust check-coverage-python check-coverage-node check-patch-coverage test-durations test-analytics docs-serve docs-build docs-clean cargo-build codspeed-build codspeed-build-walltime codspeed-run bench-traversal bench-fixed-hop-limit bench-fixed-hop-livejournal bench-m4-entry bench-g500-scale20 bench-g500-s20-lifecycle bench-g500-ladder bench-adjacency-200m bench-file-backed-128m m4-entry-matrix-check durability-isolation-check native-consumers release-load-matrix-check release-load-matrix bulk-construction-conformance-check bulk-construction-conformance cargo-test cargo-check cargo-clippy cargo-fmt cargo-fmt-check clean-builds clean-builds-all pnpm-install pnpm-build pnpm-test-bdd install build release-version-check package-license-verify publish-dry-run publish-dry-run-npm publish-dry-run-docs publish-dry-run-python publish-dry-run-cargo record-release-artifacts clean-env-verify-check clean-env-verify-preflight clean-env-verify

help: ## Show this help message
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
Expand Down Expand Up @@ -319,6 +319,12 @@ bench-m4-entry: ## Emit the M4 entry large/manual evidence envelope (#334; hard
bench-g500-scale20: ## Official-parameter SCALE-20 public-facade engineering green (#710; ignored, not Official-track)
cargo test -p graphforge-api --release --test scale_g500_scale20 scale20_public_facade_engineering_green -- --ignored --nocapture --test-threads=1

bench-g500-s20-lifecycle: ## S20 full source/export/verify/clean-import/reopen lifecycle (#904; provisioned host)
@test -n "$$GF_G500_S20_WORK_ROOT" || (echo "GF_G500_S20_WORK_ROOT is required" && exit 2)
@test -n "$$GF_G500_S20_EVIDENCE_OUT" || (echo "GF_G500_S20_EVIDENCE_OUT is required" && exit 2)
@test -n "$$GF_G500_CERT_JOURNAL_OUT" || (echo "GF_G500_CERT_JOURNAL_OUT is required" && exit 2)
cargo test -p graphforge-api --release --test scale_g500_ladder s20_integrated_full_lifecycle_evidence -- --ignored --exact --nocapture --test-threads=1

bench-g500-ladder: ## Bounded billion-edge scale ladder S20-S26 first-fail evidence (#736; ignored, provisioned scale-host)
@test -n "$$GF_G500_LADDER_MAX_SCALE" || (echo "GF_G500_LADDER_MAX_SCALE is required" && exit 2)
GF_G500_LADDER_EVIDENCE_OUT="$(CURDIR)/docs/development/g500-ladder-evidence.json" \
Expand Down
10 changes: 5 additions & 5 deletions cargo-bazel-lock.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"checksum": "b21d3280c7ad6cd450e752d4bd6e74303ecf1c990af629ad88bd4f9b6fb2a933",
"checksum": "af18c24dc89f92d4a76a1ff98e3e6979374ca658c34c5e192b323712f1663e63",
"crates": {
"adler2 2.0.1": {
"name": "adler2",
Expand Down Expand Up @@ -13207,6 +13207,10 @@
{
"id": "thiserror 2.0.20",
"target": "thiserror"
},
{
"id": "tokio 1.53.1",
"target": "tokio"
}
],
"selects": {}
Expand All @@ -13224,10 +13228,6 @@
{
"id": "tempfile 3.27.0",
"target": "tempfile"
},
{
"id": "tokio 1.53.1",
"target": "tokio"
}
],
"selects": {}
Expand Down
17 changes: 17 additions & 0 deletions containers/fly-g500-s20/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
FROM rust:1.96-bookworm AS build
WORKDIR /source
COPY . .
RUN cargo test --locked --release -p graphforge-api --test scale_g500_ladder --no-run
RUN set -eu; \
binary="$(find target/release/deps -maxdepth 1 -type f -name 'scale_g500_ladder-*' ! -name '*.d' | head -n 1)"; \
test -n "$binary"; \
install -Dm755 "$binary" /out/scale-g500-ladder

FROM debian:bookworm-slim
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates coreutils \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /out/scale-g500-ladder /usr/local/bin/scale-g500-ladder
COPY containers/fly-g500-s20/run-s20.sh /usr/local/bin/run-s20
RUN chmod 0555 /usr/local/bin/scale-g500-ladder /usr/local/bin/run-s20
ENTRYPOINT ["/usr/local/bin/run-s20"]
45 changes: 45 additions & 0 deletions containers/fly-g500-s20/run-s20.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/bin/sh
set -eu

: "${GF_G500_S20_EXPECTED_SHA:?exact source SHA is required}"
case "$GF_G500_S20_EXPECTED_SHA" in
*[!0-9a-f]*|'') echo "invalid source SHA" >&2; exit 2 ;;
esac
test "${#GF_G500_S20_EXPECTED_SHA}" -eq 40
test "$(stat -c %d /work)" != "$(stat -c %d /)" || {
echo "/work is not an attached volume" >&2
exit 3
}

rm -rf /work/s20 /work/tmp
rm -f /work/s20-evidence.json /work/s20-journal.json /work/controller-ack
mkdir -p /work/tmp
export TMPDIR=/work/tmp

# Small full-lifecycle admission first. The S20 product envelope starts only
# after this bounded proof succeeds.
timeout --signal=TERM --kill-after=30s 600s \
/usr/local/bin/scale-g500-ladder \
certification_lifecycle_journals_equivalent_round_trip_and_drills \
--exact --test-threads=1

export GF_G500_S20_WORK_ROOT=/work/s20
export GF_G500_S20_EVIDENCE_OUT=/work/s20-evidence.json
export GF_G500_CERT_JOURNAL_OUT=/work/s20-journal.json

set +e
timeout --signal=TERM --kill-after=30s 14430s \
/usr/local/bin/scale-g500-ladder \
s20_integrated_full_lifecycle_evidence \
--ignored --exact --nocapture --test-threads=1
status=$?
set -e

# Preserve the Machine briefly for evidence retrieval. The controller's
# independent 4h30 deadline remains authoritative even if this loop is alive.
remaining=900
while [ ! -f /work/controller-ack ] && [ "$remaining" -gt 0 ]; do
sleep 1
remaining=$((remaining - 1))
done
exit "$status"
11 changes: 7 additions & 4 deletions crates/graphforge-api/src/belief_projection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -434,10 +434,13 @@ impl GraphForge {
.expect("runtime catalog poisoned")
.clone(),
));
projected.adjacency_provider = Arc::new(graphforge_exec::PersistentAdjacencyProvider::new(
projected.dir.clone(),
projected.ontology_mode,
));
projected.adjacency_provider = Arc::new(
graphforge_exec::PersistentAdjacencyProvider::new_with_cache(
projected.dir.clone(),
projected.adjacency_cache_guard.path(),
projected.ontology_mode,
),
);
let current = self.generation_for_read()?;
if current.generation_uuid() != source_generation_uuid {
return Err(transaction_conflict(
Expand Down
1 change: 1 addition & 0 deletions crates/graphforge-api/src/embedding_refresh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ impl GraphForge {
)),
dir: self.dir.clone(),
workspace_guard: Arc::clone(&self.workspace_guard),
adjacency_cache_guard: Arc::clone(&self.adjacency_cache_guard),
graph_open_evidence: self.graph_open_evidence.clone(),
project_open_recovery: self.project_open_recovery.clone(),
tempdir: self.tempdir.clone(),
Expand Down
Loading