port: test the half-guard they named -- it found a real gap on first use
They flagged that my pose line reports the pins from the variables in force, never checked against a pin set but not reaching the view. I had recorded the same doubt and not acted on it. The case is the overlay: a second ScreenView with its own pins, while the announcement read view.* only -- and the plate carries a looping focus record, the clock in question, drawing from overlay.*. Extended the line to report the overlay's pins, and its first use printed overlay(loop-phase=0.0, leaf=free): overlay.loop_phase_units was wired and overlay.leaf_time_units was not. A run requesting both had one pin reach the overlay and one not, and the pre-fix announcement would have printed leaf=0.0 from the main view while the overlay drew free-running. Their half-guard precisely. Currently inert -- press_start carries no leaf, so the render is byte-identical before and after. The gap was real, live for any overlay carrying a leaf, and cost nothing today. Fourth instance of their remedy of putting the qualifier in the text rather than the reader's memory, and it caught something within a minute of existing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -869,6 +869,16 @@ func _capture(path: String) -> void:
|
||||
pins.append("frozen" if view.frozen else "running")
|
||||
pins.append("loop-phase=%s" % ("free" if view.loop_phase_units < 0.0 else str(view.loop_phase_units)))
|
||||
pins.append("leaf=%s" % ("free" if view.leaf_time_units < 0.0 else str(view.leaf_time_units)))
|
||||
# 🔴 THE OVERLAY IS A SECOND ScreenView WITH ITS OWN PINS, and this line
|
||||
# reported only the first. An unpinned overlay would have been announced as
|
||||
# pinned, because the announcement read `view.*` while the plate -- which
|
||||
# carries a looping focus record, exactly the clock in question -- draws from
|
||||
# `overlay.*`. An announcement that cannot distinguish the cases it announces
|
||||
# is only half a guard.
|
||||
if overlay != null:
|
||||
pins.append("overlay(loop-phase=%s, leaf=%s)" % [
|
||||
"free" if overlay.loop_phase_units < 0.0 else str(overlay.loop_phase_units),
|
||||
"free" if overlay.leaf_time_units < 0.0 else str(overlay.leaf_time_units)])
|
||||
print("t = %.2f units (%.3f s), pose = %s [%s]" % [
|
||||
view.time_units, view.time_units / view.units_per_second,
|
||||
"rest" if view.pose_mode == ScreenView.Pose.REST else "timeline",
|
||||
@@ -1247,6 +1257,10 @@ func _raise_overlay(name: String) -> void:
|
||||
overlay.exit_ramp_units = view.exit_ramp_units
|
||||
overlay.looping_focus = _looping_for(name)
|
||||
overlay.loop_phase_units = _loop_phase
|
||||
# The overlay's LEAF pin was missing while its loop-phase pin was wired, so a
|
||||
# run requesting both had one reach this view and one not. Found by extending
|
||||
# the announcement to cover the overlay -- the guard's first use.
|
||||
overlay.leaf_time_units = view.leaf_time_units
|
||||
overlay.draw_leaf_for = _draw_leaf_for
|
||||
overlay.loop_leaf = _loop_leaf_screens.has(name)
|
||||
overlay.holding = true
|
||||
|
||||
Reference in New Issue
Block a user