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:
Sylpheed port agent
2026-08-29 12:58:28 +00:00
parent f8a8d17327
commit 59fba56a0f
2 changed files with 33 additions and 2 deletions

View File

@@ -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"):