v0.5.4 — Bounded Checkpoint QA Summaries (development)¶
Unreleased source development only. No Win64 EXE, Android APK or Unreal game verification.
Motivation¶
In v0.5.3, individual checkpoint decisions can be explained, but logging rejection events on every driven frame can produce excessive noise. v0.5.4 adds fixed-memory event counts and a separate periodic summary mode to help QA teams understand common failure categories.
Portable C++20 API¶
Racing/GateDiagnosticCounters.h defines GateDiagnosticCounters:
Observe(CheckpointTraceResult): increments one trace-category count and, forGateRejectedonly, one classified gate-rejection count. Initial baselines and teleport rebase events do not become geometry rejection counts.TotalSamples(),CountTrace(...),CountGateRejection(...): inspect the current window; unknown enum values fail closed.Merge(other): combine fixed-size snapshots with saturating 32-bit counts, including a self-merge.Reset(): clear all previous statistics before the next window.
No heap allocation, identifiers, exact player positions or network subsystems are involved. Counts never wrap around after overflow.
Development console levels (UNVERIFIED in Unreal)¶
latebrake.CheckpointDiagnostics 0: default, silent. No QA counters collected or transmitted.latebrake.CheckpointDiagnostics 1: v0.5.3 opt-in local transition/event logs. No periodic summary.latebrake.CheckpointDiagnostics 2: v0.5.4 opt-in local summary approximately every ten seconds, per checkpoint. It counts accepted gates, intentional teleport resets, invalid positions, wrong-way velocity, excessive frame travel, lateral/vertical misses and noncrossing samples. It does not print per-frame coordinates, and mode 2 does not enable mode 1 per-event logging.
The code exists only as non-shipping diagnostic logging. No claim is made that this console variable has been executed on UE 5.8, packaged Win64, or physical Android devices.
v0.5.31: separate invalid-velocity samples in mode 2¶
The trace-continuity guard introduced in v0.5.30 drops stale checkpoint baselines on NaN/infinite horizontal velocity readings. The bounded diagnostic counter already classified such rejections, but the original v0.5.4 summary text did not expose its total.
Opt-in, non-shipping latebrake.CheckpointDiagnostics 2 source now
appends invalid-velocity=<uint32> to each local window's one-line
summary. The value counts GateRejected / InvalidVelocity results
only; it is not a new game scoring category and does not contain
coordinates, personal data, or a per-frame log.
The local parser remains backward compatible: historical
v0.5.4-format summary rows have no invalid-velocity column and
their JSON output supplies zero for it, whereas new rows count it
explicitly. Malformed, duplicated, overflowing or sample-budget-
inconsistent new columns are rejected rather than silently discarded.
Python parser and C++20 counter regressions are synthetic. To certify the real runtime, run the licensed UE 5.8 game, enable diagnostics, cause controlled invalid velocity in a disposable QA level, capture an actual device log, and confirm that exactly the expected new category appears. There is currently no such real test evidence.
Summarize a captured local Unreal test log¶
python3 scripts/AnalyzeCheckpointQA.py /path/to/your/Latebrake.log --require-all-gates
The script reads only an existing file and prints a JSON summary to
standard output. It requires all four gate indices with
--require-all-gates. It rejects incomplete/oversized counter rows,
impossible category totals, invalid checkpoint indices, missing reports,
and file inputs larger than 32 MiB. Its output always records
source_authenticity_verified: false and
unreal_build_or_gameplay_verified: false: a text parser cannot
authenticate the real engine, installed hardware, source build SHA or
playability. Synthetic CI fixtures exist solely for parser regression
testing. Do not attach them as QA evidence.
The reporter intentionally aggregates counts only. Capture independent real device/build identifiers, the exact source revision, genuine runtime startup marker verification, and human race progression testing to satisfy open release blockers. Local logs can themselves contain user-sensitive paths; review before sharing them.
Required acceptance¶
- CI: strict C++20
GateDiagnosticCounterstarget on Windows, Ubuntu and macOS; preserve existingGateDiagnosticparity tests. - Genuine UE 5.8/UHT game/editor compile and a cookable source-owned circuit. Verify console mode 0, mode 1 and mode 2 on installed game.
- Test 30/60 FPS and artificial hitches, all four gates, long displacements, deliberate short recovery, restart, pawn re-possession.
- Verify per-gate window reset on controller/pawn loss and mode transitions. Check QA overhead and avoid logging personal data.
- Record actual device models, build SHA, generated log and manual results in issues #2, #13 and #31. Do not close QA blockers based only on portable tests.