Repository navigation
🐛 fix: apply initial focus and support bounded static fades - #146
Conversation
Mega ReviewStatus: Two Warnings remain. Review-clean is separate from tests and CI. Blocking
Non-blocking observations
CaveatsSource review only; no actual video-playback reproduction or cost measurement in this round. Four independent Codex passes, one outside Claude pass, a fresh scheduler skeptic and the orchestrator's pass returned. The outside pass covered changed regions but did not finish three complete test/public-guide files; the four Codex passes read all ten changed files. This review makes no ticket-compliance claim. Required CI is assessed separately. Review LedgerOpen findings
Prior key statuses
Unresolved prior open findings
Deliberate tradeoffs
Refuted
Implausible
Pre-existing
|
Mega ReviewStatus: The atomic-present clock reads and automatic-render bypass are repaired. Two Warnings remain before this head is ready:
Non-blocking observations:
Coverage and limitsTwo isolated Codex lanes, one outside Claude lane, a separate carried-key verifier and the parent pass completed. All three search lanes read the nine narrowed files in full and applied all thirteen lenses; relevant baseline guidance and all four pinned review doctrines were covered. Matching installed Pixi 8.20.1 confirms callback ownership, priority and ticker startup behavior. Canonical guidance links reach changed presentation policy, so CLI isolation was used. Independent scratch probes confirmed the default-alpha regression and held-overlay observation. Actual generated-video browser checks passed ordinary default playback, explicit 150 ms playback and paused fades on WebGPU, with paint counts matching scheduler counts and idle counts stable. Those successful paths do not cover the missing-detection or visibility regressions and are not cost measurements. Full local verification passed 3,594 tests, but clean CI exposed the self-import failure. No private ticket-compliance claim is made. This is an incremental repair review, not a repeat of unrelated full-PR scope. Review LedgerOpen findings
Prior key statuses
Unresolved prior open findings
Deliberate tradeoffs
Refuted
Implausible
Pre-existing
|
Mega ReviewStatus: Both carried Warnings are resolved. Default pushed-video alpha survives content/visibility redraws; ordinary interaction settlement remains at its existing owner. The new test imports its source type without requiring a prior web build. The earlier scheduler repair remains intact. Verification and limitsOne isolated Codex search, two separate carried-key verifiers, one outside Claude search and the orchestrator pass completed. Codex read all four changed files in full; Claude read the full scene, test and public guide, and the changed internal-policy section with its full baseline. Both families applied all thirteen lenses and all four pinned doctrines. Canonical guidance points at changed presentation policy, so isolated CLI review was required. The host verified the review checkout clean; one CLI status command was blocked by its LFS filter. Full local verification passes 3,594 tests, including a clean web typecheck without generated output. Removal experiments fail their intended assertions. Current CI is green at this head. Actual current-build WebGL still-image and engine-backed WebGPU video checks cover initial dimming, configured fades, scheduler paint accounting, settled idle and teardown. They do not measure rendering cost or prove missing-detection recovery. Ticket compliance: NOT REQUESTED for this public SDK review. The outside pass identified a rare, recoverable held-focus difference: the base's synthetic 10-second settlement also expired a paused missing-detection hold. Direct settlement no longer advances that hold clock. Accepted as a Minor tradeoff here: preserve actual media-time semantics and avoid broadening static fades into a missing-frame lifecycle redesign. The existing explicit-duration hold-expiry caveat remains disclosed. The prose's interaction list gives examples, not an exhaustive list of every Review LedgerOpen findings
Prior key statuses
Unresolved prior open findings
Deliberate tradeoffs
Refuted
Implausible
Pre-existing
|
|
Additional consumer validation confirms that configured focus appears automatically once the render artifacts are ready, without an unrelated display interaction. The earlier bare frame is the documented opening state while preparation is pending; it is separate from the persistent missing-focus problem fixed here. No additional opening gate or production change is needed. This PR remains at the reviewed |
Mega ReviewStatus: One Warning blocks convergence: Three Minor corrections are also warranted:
Verification and limitsThe merge itself changes only four release metadata/docs files; dependency resolutions and feature source are unchanged. The current review protocol requires a full round because that integration touches a package manifest and lockfile. Four isolated Codex searches, one outside Claude search and the orchestrator pass completed over all eleven feature files and all thirteen lenses. Both families used the pinned review doctrines. Canonical guidance points at changed presentation policy, requiring isolated CLI review. Installed Pixi source was checked by the orchestrator; the outside lane could not inspect installed dependencies in its detached checkout. Required CI Review LedgerOpen findings
Prior key statuses
Unresolved prior open findings
Deliberate tradeoffs
Refuted
Implausible
Pre-existing
|
Mega ReviewStatus: The TypeScript Warning is resolved, as are the option-text and Pixi-priority Minors. The review is clean by the Critical/Warning bar, but the duration-change Minor is only partially addressed and keeps this repair loop open. The layer now preserves visible alpha when a resolved duration changes. A separate actual public-renderer check found a remaining path: change a partially faded engine-backed video from the default duration to an explicit 300 ms duration with the same target. During preparation reconfiguration the overlay reaches its target roughly 10 ms later, with no animation-ticker start. The result repeats with playback continuing, so it is not explained by pausing. The layer-only regression does not exercise those preparation notifications. Default settlement currently consults the layer's cached duration, which can remain A second Minor needs one documentation clarification: changing the resolved duration restarts from the current alpha. A resolver that changes repeatedly can therefore extend the overall transition; the duration bound assumes a stable resolved value. No additional runtime policy is proposed. Verification and limitsOne fresh native Codex search, four separate carried-key verifiers, one outside Claude search and the orchestrator pass completed. Both search families applied all thirteen lenses and the pinned review doctrines; all six changed files were read in full. The outside lane's architecture/Pixi baseline-document reads were incomplete, while the native lane covered those contracts. The repair delta changes no applicable project instruction, permitting the native search route. The detached review checkout remained clean. This round covered the repair delta and carried keys; untouched feature code was reviewed earlier. Focused verification passes 60 tests, and removing the layer origin reset makes both new continuity cases fail. Core/web builds, lint and formatting pass. A freshly built portable tarball passes the clean external TypeScript consumer with Fresh visible WebGL still checks at this head pass positive-duration retiming, immediate focus, settled idle and teardown. The visible WebGPU public-video check exposes the remaining style-update failure above. These are correctness observations, not performance measurements. The outside review also noted that the unit test does not separately prove unchanged-duration redraws retain their origin; current source has the correct guard. This is a coverage limitation, not another demonstrated runtime failure. No hold policy changed. Ticket compliance: NOT REQUESTED for this public SDK review. Review LedgerOpen findings
Prior key statuses
Unresolved prior open findings
Deliberate tradeoffs
Refuted
Implausible
Pre-existing
|
Mega ReviewStatus: Both remaining Minors are resolved. Default settlement now reads the current style configuration, so a newly explicit duration is not mistaken for the default while preparation leaves the layer's duration unresolved. The existing layer transition state remains the interpolation owner. The guide now explains that changing a resolved duration restarts from the current alpha. Verification and limitsOne fresh native Codex search, two separate carried-key verifiers, one outside Claude search and the orchestrator pass completed. Both search families applied all thirteen lenses and the pinned review doctrines. All three changed files were read in full. The repair changes no applicable project instruction, permitting the native search route; the disposable checkout remained clean. The native search read the baseline contracts; the outside lane used partial spans/searches. Its source-only question about the test’s asynchronous preparation path is resolved by the executed predicate-removal failure below. Focused runtime verification passes 61 tests. Restoring the old settlement predicate makes the public-factory 300 ms case fail with zero ticker starts; its omitted-duration case still passes. The repaired test requires preserved starting alpha, intermediate progress, final settlement, ticker shutdown and matching application/scheduler paint counts. Web build, lint and formatting pass. A freshly rebuilt portable package also passes the clean external TypeScript consumer with This narrowed round covers the repair and carried keys; unchanged feature source was reviewed earlier. Review LedgerOpen findings
Prior key statuses
Unresolved prior open findings
Deliberate tradeoffs
Refuted
Implausible
Pre-existing
|
Mega ReviewStatus: No new blocking findings. Review-clean does not replace tests or CI. Fixed since last round
Non-blockingThree documentation/naming nits and six carried Minor tradeoffs
These low-risk documentation and naming nits are accepted for this conflict reconciliation. The existing initial-frame boundary, missing-frame hold behavior, duration-classifier comment nit, and bounded extra paints also remain accepted. Conditions and evidence are retained in the ledger below. CaveatsFull review of the current base-to-head PR delta: 12 files, 864 changed lines. The base moved since round 6 and the shared test harness needed a manual resolution, so the mechanical base-refresh exception does not apply. Applicable changed guidance was reviewed as source through isolated reviewer processes. The focused focus-transition, still-image, ordered-mask, prepared-window and atomic-present suites pass 106 tests, with scoped lint and formatting passing. Required CI Review LedgerOpen findings
Prior key statuses
Unresolved prior open findings
Deliberate tradeoffs
Refuted
Implausible
Pre-existing
|
Description
On still images, focus drawn after annotations become ready could remain transparent until another display change. Apply it before rendering the ready image, and add optional
transitionDurationMstoFocusStyle/BaseFocusStylefor subsequent focus changes.Actual WebGL media session at
fc6dab4. The marked background pixel is RGB 112,96,80 at darkness 0.5; the undimmed source is 224,192,160. Selection and clearing fade, then rendering stops.0The duration also accepts a focus-context resolver. Default
srcvideo retains its continuous pull ticker. See the presentation styles guide.Type of Change
Validation
Full
npm run verifyatfc6dab4: formatting, lint, typechecks, 3,594 tests, documentation/contracts, package smoke and builds. Clean build-order regression also passes without pre-existing web output.Focused removal checks distinguish initial settlement, default visibility redraws, explicit settlement, ticker scheduling and cleanup. Installed Pixi 8.20.1 and Vitest 4.1.11 match the lockfile.
Real ANGLE WebGL still-image checks at
fc6dab4: first ready dimming; 150 ms selection/clear fades; settled idle counters; explicit 0 ms changes without ticker starts; focus removal and destruction. Application paints match scheduler counts.Real engine-backed WebGPU video at
fc6dab4: default playback, explicit 150 ms playback, and explicit paused fades. Paint counts match scheduler counts, geometry follows the presented frame, and settled counters remain unchanged.At
9e77637: 61 focused runtime tests, web build, lint and formatting pass. The public-factory default-to-explicit duration case fails with zero ticker starts when the scene repair is removed; the omitted-duration case preserves immediate interaction settlement.A fresh portable package at
9e77637supports both public focus assignments in a clean external TypeScript consumer withstrictandexactOptionalPropertyTypes.Fresh visible GPU checks at
9e77637: WebGL still-image 150→300 ms retiming preserves fade direction; explicit zero stays immediate. Engine-backed WebGPU video, paused and playing, preserves partial alpha when changing from the default to an explicit 300 ms duration, then fades and stops. Settled idle and destruction cleanup pass.Required CI
verifypasses at9e77637.Notes For Reviewers
The browser fixture uses generated images, shapes and video. GPU readbacks are behavioral checks, not rendering-cost benchmarks. A consuming application's annotation-count policy and saved data need their own validation.
Direct settlement no longer expires a paused missing-detection hold as the previous synthetic clock advance did. A paused gap can retain dimming until detections arrive, a seek, or media-time advancement clears it. This recoverable difference is accepted here without redesigning the hold lifecycle. No version bump or publication is included.