7af7c896c1
* ci(release): add source-PR demo-video table to release-post PRs The publish-changelog workflow reformats a published release into a site post that leaves a `TODO` demo placeholder under each feature, with no pointer to the source PRs that may already ship a recording. Parse the feature PR refs from the curated release body (Major new features / Breaking changes sections; bug fixes are dropped from the post, so from the table too), detect whether each PR already has a demo video attached (same detection as feature-blog.yml — uploaded asset links, bare .mp4/.mov/.webm/.m4v URLs, <video> tags; images not counted), and inject a per-section PR | Title | Demo video? table into the release-post PR body (and the dry-run preview) so reviewers can drop an existing clip into a placeholder instead of re-recording. Runs independent of the LLM reflow so it also helps the raw-body fallback; best-effort (continue-on-error), leaving the table empty on failure. Co-authored-by: Isaac Signed-off-by: Serena Ruan <serena.rxy@gmail.com> * ci(release): group demo-video table by the post's curated features The demo-video table grouped PRs by the raw release-body sections, so it listed every feature PR (e.g. all 20 under "Major new features") even though the published post is curated down to a handful of headline features, each with one demo placeholder. Reviewers saw far more PRs than the post has slots for. Have the release-post-formatter emit a RELEASE_POST_PRS map (feature title -> contributing PR refs) after the post, and build the table from that so its groups match the post's numbered features and only list the PRs behind them. Validate the map against the harvested PR set. When no map is present (raw-body fallback, where the post keeps every feature), fall back to grouping by the raw release sections as before. Co-authored-by: Isaac Signed-off-by: Serena Ruan <serena.rxy@gmail.com> * ci(release): match feature-section headings at any level The demo-table section parser matched only `## ` headings, but the release body uses `### ` (h3) section headings, so it found zero feature sections and built an empty table. Match `#{2,}` and test the heading TEXT with startswith, so "Major new features" / "Breaking changes" match at any level while "Bug fixes & hardening" and "Thanks to our community" are still excluded. Co-authored-by: Isaac Signed-off-by: Serena Ruan <serena.rxy@gmail.com> --------- Signed-off-by: Serena Ruan <serena.rxy@gmail.com>