Skip to content

S7 reference performance and release acceptance

Status: in progress. This first slice adds reproducible Linux x86_64 evidence for the installed-SDK scripted-game encounter. It does not complete the S7 production acceptance criteria in the scripting architecture. S5 owns the authoring workflow; S6 owns safety and platform qualification. No runtime API, scheduler or additional language provider is introduced here.

Workload and measurement boundaries

config/behavior_qualification.json records the reference workload: 100 ready encounters, 1,000 inactive records, 30 warm-up batches and 300 measured batches. The harness dispatches only its ready list. These are externally stored declared state records, not 1,100 scheduled tasks or proof of 10,000 waiting tasks. Each encounter re-arms after 100 interactions. Execution uses the installed production transaction and provider APIs, generated project bindings, and paired offline cooker. The native handler independently implements the same effects.

Twelve cases compare native and Luau empty, scalar and operation handlers; native, handwritten Luau and generated sequence encounters; and dormant versions of those three encounter paths. Equivalence checks include boundary input/state combinations, command contents, entity tokens and capabilities. Measured runs also validate expected aggregate state and command counts and inactive records.

The timing executable records every batch in nanoseconds using FoundationTime, with nearest-rank p50/p95/p99 and maximum. Startup, package loading and shutdown are outside the measured interval. The separate counting executable replaces only FoundationMemory's aligned, nothrow allocation boundary. It records requests and requested bytes during the same batches, without failure injection or added allocation headers. These counts do not represent every process heap allocation. VM live bytes are sampled between batches; their maximum is neither a true within-invocation heap peak nor a GC-pause distribution. Both executables require zero provider-owned live bytes after close.

The proposed 833,333 ns budget (5% of a 60 Hz tick) is report-only. Shared CI machines are not suitable for a deterministic timing gate. A report identifies its OS, architecture, CPU, SDK manifest, source hashes, paired cook identity and raw samples. A passing report means its correctness and packaging checks passed; it does not certify a game's capacity or latency target.

Run against an installed SDK

Prepare tools and dependencies explicitly; qualification never downloads them. Use the pinned compiler and a Behavior-enabled SDK. The first Release payload policy is a headless Linux x86_64 build without the Wayland dependency:

./init.sh --cli --preset-only linux-clang-release --locked --with-tests --no-system-install
./scripts/script-provider bootstrap
out/host-tools/venv/bin/cmake --preset linux-clang-release \
  -DLUDUS_USE_INIT_OPTIONS=OFF -DLUDUS_BUILD_BEHAVIOR=ON \
  -DLUDUS_BUILD_BEHAVIOR_ACCEPTANCE=OFF -DLUDUS_BUILD_TESTS=OFF \
  -DLUDUS_BUILD_EDITOR=OFF -DLUDUS_PLATFORM_ENABLE_WAYLAND=OFF \
  -DLUDUS_WARNINGS_AS_ERRORS=ON
out/host-tools/venv/bin/cmake --build --preset linux-clang-release --parallel 2
./scripts/install-sdk linux-clang-release
./scripts/script-qualification --sdk out/install/linux-clang-release \
  --output out/behavior-s7-release --check

--verify-only accepts a Development or sanitized SDK and runs the same consumer acceptance tests without publishing timing, release or iteration evidence. For example, after building a Behavior-enabled ASan/UBSan profile, install that SDK with cmake --install out/build/linux-clang-asan-ubsan and stage its prepared redistributable dependencies with the existing installer command:

out/host-tools/venv/bin/python scripts/python/engine.py bundle-sdk-dependencies \
  linux-clang-asan-ubsan --prefix out/install/linux-clang-asan-ubsan

Then pass --sdk out/install/linux-clang-asan-ubsan --verify-only. The benchmark targets inherit the installed SDK's sanitizer flags and stay exception-free.

Each invocation creates a separate run-* directory beneath the requested out/ location. It copies and relocates the SDK and project, generates local presets, lists selectable configure/build/test presets, then performs a real configure/build/test. --check also checks benchmark formatting and every consumer translation unit with the pinned clang-tidy. Successful runs publish evidence.json and atomically update current.json with its SHA-256; failed runs leave diagnostic files and preserve the previously published pointer. Reports are consistency evidence for trusted local builds, not signed attestations.

Iteration and shipping checks

A saved Luau edit changes the encounter's threshold from two interactions to three. The installed cooker publishes a new immutable package, and a fresh provider process loads it and observes the changed behavior. The reported metric is save → cook → fresh-process provider observation, with cook and observation subtimes. It is not native compilation, GameHost hot reload, or an Editor UI latency measurement. An invalid strict edit must preserve the old candidate, which is executed again. A layout-only graph edit must reuse its cook key.

The Release payload contains the statically dispatched GameHost player, a shipping-source acceptance executable, notices and runtime licenses. The latter executes the sample's actual src/game.cpp, sends two rising input events, checks the door effect and declared state, and restores that state into a new generation. The GameHost player independently proves headless startup.

Packaging strips native debug sections, checks all ELF dependencies against the existing closed Linux system-library policy, and audits unstripped executable symbols for unselected compiler, AST, CodeGen and Qt dependencies. The ZIP is extracted and checked against the file/hash/mode inventory. Both executables run from the extracted directory while copied SDK/project directories are hidden and loader override variables are removed. This proves the declared system ABI plus payload is sufficient on the qualification machine. The paired cook retains its current S4 debug profile; this slice does not claim stripped Luau debug metadata.

Remaining S7 acceptance

Production completion needs a named game's CPU and iteration budgets; actual scheduler and waiting-task scale; GC pauses and heap peaks; representative human designer author/review/debug/edit evidence; and release qualification on each selected physical device and platform. S6's unimplemented backend/device gates remain dependencies. Further language providers, JIT and VM worker pools still require measured game needs. The first reference report establishes the tool and methodology for those decisions, without turning fixture numbers into product requirements.