port: verify-dwell built its target from the GAME's black gap while the port's is 0
Audited my own tools the way they audited theirs. verify-dwell built its target as oracle span + the GAME's measured black gap (0.114-0.190 s) and compared the port against it -- correct only while the port inserted that gap. It does not: black_hold_units went to 0 three iterations ago. So the port is expected to run short by the gap, and on publisher_logo it does -- 0.131 s below the unslacked target, which the 0.15 s wall-clock slack was quietly absorbing into an 'agrees'. A verdict that passes because the slack happens to exceed a known omission is not a verdict. The hold is now read from authored/timing.json so it cannot drift again, and the game's gap is printed as a separate term with the note that the slack is larger than it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -51,6 +51,20 @@ INTERVAL = float(os.environ.get("INTERVAL", "0.25"))
|
|||||||
# units = 0.114-0.190 s. HANDOFF Q7's luminance figure of 0.17-0.23 s overlaps
|
# units = 0.114-0.190 s. HANDOFF Q7's luminance figure of 0.17-0.23 s overlaps
|
||||||
# only at the top, and the draw-stream number is the one to use.
|
# only at the top, and the draw-stream number is the one to use.
|
||||||
HOLD_LO, HOLD_HI = 0.114, 0.190
|
HOLD_LO, HOLD_HI = 0.114, 0.190
|
||||||
|
# 🔴 THAT IS THE GAME'S GAP. THE PORT'S IS AUTHORED AND IS CURRENTLY 0.
|
||||||
|
#
|
||||||
|
# This tool built its target as `oracle span + the GAME's black gap` and compared
|
||||||
|
# the port against it -- correct only while the port inserted that gap. It does
|
||||||
|
# not: `black_hold_units` went to 0 (four measured gaps, 0/6/4/6 units, no rule;
|
||||||
|
# see authored/timing.json). So the port is expected to run SHORT by the gap, and
|
||||||
|
# on `publisher_logo` it does -- 0.131 s below the unslacked target, which the
|
||||||
|
# 0.15 s wall-clock slack was quietly absorbing into an "agrees".
|
||||||
|
#
|
||||||
|
# Read from the authored file so it cannot drift again, and REPORT the shortfall
|
||||||
|
# rather than hide it. A verdict that passes because the slack happens to exceed
|
||||||
|
# a known omission is not a verdict.
|
||||||
|
import json as _json
|
||||||
|
PORT_HOLD = float(_json.load(open("authored/timing.json")).get("black_hold_units", 0)) / 60.0
|
||||||
|
|
||||||
marks = []
|
marks = []
|
||||||
for line in open(os.path.join(out, "boot.log"), errors="replace"):
|
for line in open(os.path.join(out, "boot.log"), errors="replace"):
|
||||||
@@ -73,15 +87,18 @@ for k, (name, runs) in enumerate(ORACLE):
|
|||||||
if k + 1 >= len(starts):
|
if k + 1 >= len(starts):
|
||||||
print("%-20s %-14s %s" % (name, "-", "no such transition this run")); continue
|
print("%-20s %-14s %s" % (name, "-", "no such transition this run")); continue
|
||||||
d = starts[k + 1] - starts[k]
|
d = starts[k + 1] - starts[k]
|
||||||
lo, hi = min(runs) + HOLD_LO, max(runs) + HOLD_HI
|
lo, hi = min(runs) + PORT_HOLD, max(runs) + PORT_HOLD
|
||||||
|
game_lo, game_hi = min(runs) + HOLD_LO, max(runs) + HOLD_HI
|
||||||
ok = lo - 0.15 <= d <= hi + 0.15
|
ok = lo - 0.15 <= d <= hi + 0.15
|
||||||
bad += 0 if ok else 1
|
bad += 0 if ok else 1
|
||||||
print("%-20s %-14s %-26s %s"
|
print("%-20s %-14s %-26s %s"
|
||||||
% (name, "%.2f s" % d, "%.3f / %.3f / %.3f" % tuple(runs),
|
% (name, "%.2f s" % d, "%.3f / %.3f / %.3f" % tuple(runs),
|
||||||
"agrees" if ok else "DIFFERS"))
|
"agrees" if ok else "DIFFERS"))
|
||||||
print()
|
print()
|
||||||
print(" An interval is the oracle's SPAN plus the black hold (%.2f-%.2f s)," % (HOLD_LO, HOLD_HI))
|
print(" Target = oracle SPAN + the PORT's authored hold (%.3f s); the GAME's" % PORT_HOLD)
|
||||||
print(" compared against span+hold with 0.15 s of slack for wall-clock jitter.")
|
print(" measured gap is %.3f-%.3f s, so a port with hold 0 runs short by that." % (HOLD_LO, HOLD_HI))
|
||||||
|
print(" 0.15 s of slack for wall-clock jitter -- which is LARGER than the gap,")
|
||||||
|
print(" so a shortfall of that size passes unless it is reported separately:")
|
||||||
print(" transitions:", ", ".join("%s@%.2f" % m for m in marks[:4]))
|
print(" transitions:", ", ".join("%s@%.2f" % m for m in marks[:4]))
|
||||||
|
|
||||||
frames = sorted(glob.glob(os.path.join(out, "f_*.png")))[:120]
|
frames = sorted(glob.glob(os.path.join(out, "f_*.png")))[:120]
|
||||||
|
|||||||
Reference in New Issue
Block a user