ci(next): retain exact frame pacing receipts

Merged
TE
20d ago
+223-10

Frame-pacing currently surfaces warnings but leaves no durable, source-bound measurement artifact. This change writes a machine-readable summary.json beside the raw fling data, bound to the exact resolved source SHA and workflow SHA.

The receipt records display status, per-mode median p50/p95 frame timings, dropped/total frames, thresholds, and regression annotations. Existing warning-only behavior is unchanged so unavailable GUI runners remain non-blocking while later ratchets have stable input.

Validation:

  • python3 tests/test_ci_frame_pacing_summary.py
  • python3 -m py_compile scripts/ci/frame-pacing/summarize.py
  • python3 tests/test_ci_frame_pacing_app_rpc.py
  • git diff --check

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Writes a summary.json receipt beside the raw frame-pacing fling data, bound to the exact source and workflow SHAs that produced it.

  • Records display status, per-mode median p50/p95 timings, dropped/total frames, thresholds, and regression annotations.
  • Also writes a receipt for skipped runs (GUI token not acquired or gate skip), preserving the reason so skipped nights are distinguishable from missing artifacts.
  • Keeps the job warning-only, so unavailable GUI runners still don't block the run.