[AGENT] Add event performer links and automatic live lineup playback - #342
Conversation
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. |
Greptile SummaryThis PR adds visibility-filtered performer links and stream choices to event projections and API/MCP contracts, adds organizer authoring for event-stream versus performer-sequence modes, and implements browser-local lineup playback with source preparation, observed silence/failure handoffs, retries, and reactive invalidation.
Confidence Score: 3/5The PR is not yet safe to merge because reactive source edits can resume playback without the required viewer action, and a later simultaneous-start pair can stall otherwise valid earlier lineup transitions. Two lifecycle and scheduling defects remain: source invalidation does not cancel a pending Play continuation, and next-slot selection applies schedule ambiguity globally instead of at the relevant transition. Files Needing Attention: apps/web/src/lib/event-lineup-runtime.ts, apps/web/src/lib/event-lineup-session.ts Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Published event projection] --> B{Watch mode}
B -->|Event stream| C[Existing event stream player]
B -->|Performer sequence| D[Viewer presses Play]
D --> E[Select scheduled slot]
E --> F[Current performer source]
F --> G[Prepare immediate next source near boundary]
G --> H{Current source evidence}
H -->|Healthy or brief interruption| F
H -->|Sustained silence or failure| I{Next source ready?}
I -->|No| F
I -->|Yes| J[Release current and promote next]
J --> F
K[Event or source projection update] --> L[Reconcile or invalidate playback]
L --> F
Prompt To Fix All With AI### Issue 1
apps/web/src/lib/event-lineup-runtime.ts:58-62
**Revoked source restarts playback**
If a source changes while `play()` is waiting for `AudioContext.resume()`, this update pauses the session and releases the old source but leaves the pending play request valid. When the resume finishes, that stale request clears the paused state and can connect the replacement automatically, even though a revoked source is supposed to require another viewer action. Invalidate the pending play request when reconciliation fails.
### Issue 2
apps/web/src/lib/event-lineup-session.ts:16
**Later ambiguity stalls playback**
This check rejects traversal when any pair anywhere in the schedule has equal or descending start times. Equal starts are valid and retained in the public projection, so an ambiguous pair late in an event prevents an established earlier slot from advancing to its otherwise unambiguous next performer. Limit this check to the transition currently being considered so playback only stops when it reaches the ambiguous part of the lineup.
```suggestion
if (slots[index + 1]?.startAt <= current.startAt) return undefined;
```
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "fix(events): preserve overlap handoffs a..." | Re-trigger Greptile |
|
[AGENT] Claude ReviewClaude review for commit This is not a current review or approval. |
PR verification reportAll configured preview and verification checks passed.
Changed visual baselines (8)Updated from Baseline Checks run 35824727357, attempt 1 for |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: da35850272
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 34c6fe222d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b04aaf8756
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".








[AGENT] Community events now collect each performer's public links, including PC and Quest stream URLs, in one roster. Organizers can choose an event stream or a performer sequence and select among a performer's public live sources.
After Play, the event page follows the lineup by default. It prepares only the next slot near the scheduled transition, then advances after sustained source silence or playback failure. Healthy overtime continues, manual selection offers Return to live, and event or source edits invalidate playback.
Validation includes a captured browser-editor submission through real backend update/publication/discovery, rendering of that same returned event, and HTTP/hosted/stdio MCP serialization. Desktop/mobile editor and roster checks passed16/16. Controlled Chromium/Firefox media tests cover handoffs, overtime, cancellation and a two-connection limit. A reproduced mpegts cancellation rejection is handled by a shared loader with explicit resource ownership.
Browser tests use guarded query transport and loopback or intercepted media. Native hidden-window/OS resume, Safari/iOS and live-provider compatibility remain unverified. Detailed local evidence is in docs/engineering/event-lineup-verification.md. Merge and deployment are separate.