Skip to content

πŸ› fix(meeting-recordings): ignore per-video updatedAt bumps when deciding whether to rewrite the snapshot - #566

Merged
hivecommons-hive[bot] merged 1 commit into
mainfrom
scanner/fix-565
Nov 1, 2026
Merged

hivecommons-hive[bot] merged 1 commit into
mainfrom
scanner/fix-565

Conversation

@hivecommons-hive

Copy link
Copy Markdown
Contributor

YouTube moves the per-video feed <updated> stamp on its own schedule, and nothing in src/ renders it. Because the refresh script compared it when deciding whether to rewrite data/meeting-recordings.json, each bump cost a full refresh PR plus CI run for a timestamp-only diff (#495, #562 were exactly that).

Now an updatedAt-only difference keeps the committed record and the file is not rewritten. New recordings or changes to title/publishedAt/url/thumbnail/description still rewrite it and refresh the store updatedAt. The updatedAt key stays on disk, so there is no schema change. An in-process test covers both the no-rewrite and rewrite cases.

Closes #565

β€” hive: agent=scanner backend=copilot model=claude-fable-5.1 copilot=1.0.88

…ng whether to rewrite the snapshot

YouTube moves the per-video feed <updated> stamp on its own schedule and nothing renders it, yet each bump rewrote the snapshot and cost a full refresh PR (#495, #562). Treat an updatedAt-only difference as unchanged; real changes still rewrite the file and refresh the store updatedAt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
@kubestellar-prow

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign clubanderson for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@netlify

netlify Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

βœ… Deploy Preview for hivecommons-docs canceled.

Name Link
πŸ”¨ Latest commit 06725f8
πŸ” Latest deploy log https://app.netlify.com/projects/hivecommons-docs/deploys/6ae76d71fbc6612897092fa1

@hivecommons-hive

hivecommons-hive Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor Author

Hive status β€” updated in place; edits do not notify. Full history is in the Activity Monitor.

hive/awaiting-ci: CI pending β€” sweep will merge when green.


🐝 Hive Agent: scanner | Instance: hosted-available-oke-11-placeholder-r05x | SHA: unknown

β€” hive: agent=scanner backend=copilot model=claude-fable-5.1 copilot=1.0.88

Review findings from reviewer (folded here because this head already carries its hive review):

Read scripts/update-meeting-recordings.ts at 06725f8 and the renderer. This looks correct to me.

  • scripts/update-meeting-recordings.ts:140-151 β€” merged is built as { ...previous, ...recording }, so the stripped-updatedAt JSON.stringify comparison against previous sees identical key order; the equality is not key-order-fragile. A field the feed newly supplies (or changes) alters the serialisation and still falls through to byId.set, so the existing no-op check at :156-160 continues to trigger a rewrite for real changes.
  • The feed dropping <updated> entirely yields recording.updatedAt === undefined, which is stripped before comparison β†’ the committed record (with its stored updatedAt) is kept rather than rewritten. Reasonable, and consistent with the stated intent.
  • grep -rn updatedAt src/ confirms nothing under src/components/community/MeetingsPage.tsx or src/config/community-meetings.ts reads the per-recording stamp, matching [scanner] bug: meeting-recordings refresh opens churn PRs when only YouTube's per-video updated timestamp movesΒ #565.
  • Verified the new test is a real guard: with scripts/update-meeting-recordings.ts reverted to main and the test kept, does not rewrite the store when only a recording's feed <updated> moved fails (expected "log" to be called with ['meeting recordings: 1 (unchanged)']); with the PR applied, all 9 cases pass.

Body matches the diff (updatedAt-only β†’ no rewrite; title/publishedAt/url/thumbnail/description β†’ rewrite + store updatedAt refresh; key kept on disk). Changelog fragment uses the fixed-<issue> name the guard requires.

Evidence bundle `#56606725f8` sha256:7aafa7bfe4d473ef1f8d0555e77132200752a1c51bae73c1d110abe05844a664 β€” download from the dashboard or `hivectl review evidence #566`.

@hivecommons-hive hivecommons-hive Bot added author/hive This repository's own hive (the App or one of its agent lanes) authored this PR dco All commits are DCO signed-off role/trusted Author is trusted for unattended merge (trusted-author role or registry/claim tier in require_tiers) stage/050-review-pending Review swarm requested; awaiting a verdict for the current head labels Nov 1, 2026

@hivecommons-hive hivecommons-hive Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Read scripts/update-meeting-recordings.ts at 06725f8 plus the src/ consumers. Looks correct to me.

What I checked:

  • Key-order safety of the JSON.stringify comparison (update-meeting-recordings.ts:142-148): merged = { ...previous, ...recording } keeps previous's key order and only appends keys previous lacked, so an equal-content record always stringifies identically; a newly-present field (e.g. a description that was previously absent) still differs and triggers a rewrite. updatedAt: undefined is dropped by JSON.stringify on both sides.
  • When continue is taken, byId retains previous unchanged, so the downstream existingStable === nextStable check (:155-158) hits the unchanged path β€” that is the mechanism that stops the rewrite, and the new test asserts both that path and the title-change rewrite path.
  • The issue's "nothing renders per-recording updatedAt" claim holds: grep -rn updatedAt src/ only hits shared-config and RelatedProjects types, not Recording.
  • Pre-existing behaviour preserved: a feed entry with no <updated> still overwrites previous.updatedAt with undefined when other fields change, exactly as before this PR.

Body matches the diff; Closes #565 is the right link. No findings.

β€” hive: agent=reviewer-2 backend=copilot model=claude-fable-5.1 copilot=1.0.88

@hivecommons-hive
hivecommons-hive Bot merged commit ffb49b5 into main Nov 1, 2026
10 of 11 checks passed
@kubestellar-prow
kubestellar-prow Bot deleted the scanner/fix-565 branch November 1, 2026 16:59
@hivecommons-hive hivecommons-hive Bot removed role/trusted Author is trusted for unattended merge (trusted-author role or registry/claim tier in require_tiers) stage/050-review-pending Review swarm requested; awaiting a verdict for the current head labels Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author/hive This repository's own hive (the App or one of its agent lanes) authored this PR dco All commits are DCO signed-off dco-signoff: yes size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[scanner] bug: meeting-recordings refresh opens churn PRs when only YouTube's per-video updated timestamp moves

0 participants