Repository navigation
feat(video): VideoComponent tracks failed opens so the engine can give up - #77
Conversation
…e up A `VideoComponent` whose backend can never open the clip had nowhere to record that: the video system retried the open every frame forever, so a play-once intro never finished and a broken decoder was re-created at frame rate (labelle-engine#874). `open_attempts` is the system-managed counter and `MAX_OPEN_ATTEMPTS` the budget: enough frames for a backend that is merely warming up (on Android the asset manager isn't reachable until the activity is up), far short of forever. The engine finishes the component when it runs out. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (2)
Included review availability: 7 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 10 reviews per hour. 📝 WalkthroughWalkthroughThe video component now limits consecutive failed opens, tracks open attempts, and treats unopenable clips as finished. The root module re-exports the limit as ChangesVideo open limit
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix Merge Risk: ⚪ Minimal · up to No concrete merge-blocking behavior has been established for this change. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
One feature since v1.30.0, so a minor bump: * #77 — `VideoComponent.open_attempts` (system-managed) and `MAX_OPEN_ATTEMPTS = 30`, exported as `VIDEO_MAX_OPEN_ATTEMPTS`. This is the per-component state labelle-engine#875 needs to stop retrying an open that keeps failing. `finished` now also documents that it is set when a clip could never be opened, so anything waiting on a video's end is released either way. Additive only: a new field with a default and a new constant, and no contract-version bumps.
Groundwork for labelle-engine#874.
renderVideosretriesVideo.openevery frame with no limit, so a device whose decoder can never open the clip re-creates a decoder at frame rate and the component never finishes — a play-once intro hangs the boot on a blank screen (a MediaTek tablet: 359 decoder creations in 21 s at 40 % CPU).Bounding the retry needs per-component state, which belongs next to
handleandfinished:VideoComponent.open_attempts: u8— system-managed, not authored.MAX_OPEN_ATTEMPTS = 30— enough frames for a backend that is merely warming up, far short of forever.finisheddocuments that it is also set when the clip could never be opened, so a consumer waiting on the end of a video is released either way.The engine-side give-up is labelle-engine#874; that PR depends on this one.
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.