port: end the boot when BOTH builds have arrived, not when the plate lands
Moving the plate onto the shared clock moved the boot's exit with it: the run quit at the overlay's settle (t=238) while build 4's own fade-in from black runs to t=261. pteff00 is still ~7 % opaque there, so the capture came out visibly darker than the previous one -- with nothing failing, no warning, and no line in the log to say why. Caught only because there was an earlier capture beside it. The boot now ends at max(view.settle_time(), overlay.settle_time()) and prints the unit it is waiting for. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WM5XL4HfrHuxz8RiMWdCMC
This commit is contained in:
@@ -1901,3 +1901,26 @@ declared 120 units at 60 units/s = **2.000 s of port time**, which is the
|
||||
true-30 Hz value both readings agree the disc means. This is a corpus
|
||||
consistency problem, not a port one — which is why it is filed rather than
|
||||
worked around.
|
||||
|
||||
### The corrected boot ended one build too early, and the capture showed it
|
||||
|
||||
Moving the plate onto the shared clock also moved the boot's exit, and the first
|
||||
capture taken afterwards was **visibly darker** than the one before it. The cause
|
||||
is `pteff00`, the title's black fade quad: it ramps `0xff000000` → `0x00000000`
|
||||
over t=16…261, so at t=243 — where the run was quitting, `overlay.settle_time()`
|
||||
after the overlay was raised — the frame is still ~7 % black.
|
||||
|
||||
The plate arrives at t=238; **build 4 is not finished until t=261**. The boot now
|
||||
ends at the later of the two, and says which in the log:
|
||||
|
||||
```
|
||||
-> title at 145.79 s
|
||||
overlay press_start raised at 145.79 s, 1 element(s), settles at t=238
|
||||
boot ends at 150.14 s, once both builds have arrived (t=261)
|
||||
```
|
||||
|
||||
Worth recording because of how it presented: nothing failed, no warning was
|
||||
printed, and the only symptom was a frame slightly darker than the previous
|
||||
run's. A gate artifact that silently drifts is the failure mode this project
|
||||
keeps meeting — and it was caught only because there was a previous capture to
|
||||
compare against.
|
||||
|
||||
@@ -798,8 +798,16 @@ func _raise_overlay(name: String) -> void:
|
||||
120 units after build 4's last build-in ramp at t=118"
|
||||
% [int(overlay.settle_time()), visible_at])
|
||||
if not _play and _film == "":
|
||||
_overlay_quit_at = _elapsed + visible_at
|
||||
print(" boot ends at %.2f s, once the plate has arrived" % _overlay_quit_at)
|
||||
# The LATER of the two, not the overlay's alone. The plate arrives at
|
||||
# t=238 and build 4 is still fading up from black until t=261 -- its
|
||||
# `pteff00` quad is 7 % opaque at 243 -- so quitting when the plate
|
||||
# lands photographs a title that has not finished presenting. The first
|
||||
# capture taken this way was visibly darker than the one before it, and
|
||||
# nothing in the log said why.
|
||||
var ends_at := maxf(view.settle_time(), overlay.settle_time()) / view.units_per_second
|
||||
_overlay_quit_at = _elapsed - (view.time_units / view.units_per_second) + ends_at
|
||||
print(" boot ends at %.2f s, once both builds have arrived (t=%d)"
|
||||
% [_overlay_quit_at, int(maxf(view.settle_time(), overlay.settle_time()))])
|
||||
# `spec` is read only for the log; the reasoning lives in flow.json where a
|
||||
# reader looking for a decision will find it.
|
||||
if spec.has("why"):
|
||||
|
||||
Reference in New Issue
Block a user