Skip to content

chore(quest): plan the GStreamer, libmoq, and OBS quests - #3349

Merged
kixelated merged 2 commits into
mainfrom
quest/replan-native
Sep 2, 2026
Merged

chore(quest): plan the GStreamer, libmoq, and OBS quests#3349
kixelated merged 2 commits into
mainfrom
quest/replan-native

Conversation

@kixelated

Copy link
Copy Markdown
Collaborator

Replans the GStreamer, libmoq, and OBS quests in m0.

Part of a per-cluster replan of quest/m0: every issue-imported quest had the boilerplate "implement what the issue says" goal with the issue body pasted as the plan. Each quest now states its observable outcome and the decisions taken, and drops the pasted body.

🤖 Generated with Claude Code

(written by Claude Fable 5.1)

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-02T20:47:14.622660Z dae8c1b New commits
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 3 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 0eb9dce1-c44b-4de0-8fbd-c90bdd9c8ec8

📥 Commits

Reviewing files that changed from the base of the PR and between a28029c and dae8c1b.

📒 Files selected for processing (6)
  • quest/m0/2676-libmoq-process-exit-can-abort-in-glibcs-pthread-tpp.md
  • quest/m0/2860-cpp-obs-moq-source-cpp-has-no-test-coverage.md
  • quest/m0/2868-obs-the-plugin-targets-obs-31-1-1-while-linux-ci-links.md
  • quest/m0/3115-moqsink-the-publication-has-no-generation-so-a-flush.md
  • quest/m0/3139-moqsrc-a-rendition-nobody-answers-keeps-the-session-alive.md
  • quest/m0/README.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 240a7d4384

ℹ️ 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".

Comment on lines +29 to +30
- Wire the new binary into the `just obs test` recipe under the same TSan
build, and mention it in `doc/bin/obs.md` next to the output test.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Put the source regression test in CI

Completing this step still leaves the new test solely in just obs test, which cpp/obs/justfile explicitly marks as manual, while .github/workflows/obs.yml invokes only just obs ci. A callback-ordering regression such as #2856 would therefore still leave PR CI green, contrary to the goal's promised red build. Run the test from an automated recipe as well, possibly without TSan, or narrow the goal to manual coverage. (Written by GPT-5.6 Sol)

AGENTS.md reference: quest/AGENTS.md:L39-L45

Useful? React with 👍 / 👎.

@kixelated
kixelated enabled auto-merge (squash) September 2, 2026 20:37

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 49999495ca

ℹ️ 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".

Comment on lines +29 to +31
- moq-net: dropping or refusing an unaccepted `track::Request`, and closing a
producer that never published info, resolves every pending subscribe with
`NotFound`; verify and pin that.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep abandoned requests distinct from NotFound

If this step is implemented by making a dropped track::Request resolve as NotFound, a dynamic handler that disappears because of a publisher or transport failure will be misreported as an absent track. rs/moq-net/src/model/track.rs deliberately documents dropped requests as Error::Dropped and maps a closed state without an abort reason to that error, while callers can already use request.reject(Error::NotFound) when catalog finality proves the track is absent. Preserve the generic drop semantics and explicitly reject only the requests the hang publisher knows are unservable, which also keeps catalog meaning out of the generic moq-net layer.

AGENTS.md reference: AGENTS.md:L64-L66

Useful? React with 👍 / 👎.

kixelated and others added 2 commits September 2, 2026 13:42
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@kixelated
kixelated merged commit c44b106 into main Sep 2, 2026
2 checks passed
@kixelated
kixelated deleted the quest/replan-native branch September 2, 2026 20:46

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dae8c1bf46

ℹ️ 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".

Comment on lines +39 to +40
- Remove `_exit` from the smoke client's success path. The failure paths keep
it for the separate `user_data` lifetime reason from #2675.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Drain every callback before returning from the smoke client

When the success path is changed to return, waiting only for moq_session_connect's terminal status does not make the stack-allocated ctx_t safe to destroy. The same pointer is independently retained by moq_origin_consume_announced, moq_consume_catalog, and moq_consume_video, and each registration can use it until its own terminal callback; closing the session terminates only its status registration. A late catalog or frame callback can therefore access the stack or destroyed pthread objects after main returns, making the regression test fail for a second lifetime bug instead of isolating atexit teardown. Extend the plan to close and drain every callback registration before removing _exit.

AGENTS.md reference: AGENTS.md:L148-L152

Useful? React with 👍 / 👎.

Comment on lines +31 to +32
- Pad lifecycles reset into the new generation on join, reusing
`lifecycle.reset()` from `start_session`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Rebuild each producer before its first post-flush buffer

lifecycle.reset() replaces the pad's media state with Pad::new(), clearing both the cached caps and track producer. With the proposed lazy join on the next buffer, a normal post-FLUSH_STOP sequence may resend a segment but not CAPS because CAPS remains sticky, so Pad::push_buffer sees no track and silently drops that buffer. Preserve or replay the pad's sticky caps and reconstruct its producer before accepting the first buffer into the new generation, or the second broadcast can contain no media despite the stated test passing through the join path.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant