feat(web): BeadPanel babysit badge + metadata (chunk 4)#3581
Merged
jrf0110 merged 1 commit intoMay 28, 2026
Conversation
- Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic
Contributor
Code Review SummaryStatus: 1 Issue Found | Recommendation: Address before merge Executive Summary
Overview
Issue Details (click to expand)CRITICAL
Files Reviewed (7 files)
Fix these issues in Kilo Cloud Reviewed by claude-sonnet-4.6 · 751,792 tokens Review guidance: REVIEW.md from base branch |
jrf0110
merged commit May 28, 2026
e262de4
into
convoy/babysit-existing-pr-feature-re-staged/254a4b7e/head
2 checks passed
jrf0110
deleted the
convoy/babysit-existing-pr-feature-re-staged/254a4b7e/gt/maple/4ef457eb
branch
May 28, 2026 20:29
jrf0110
added a commit
that referenced
this pull request
May 29, 2026
feat(web): BeadPanel babysit badge + metadata surfacing (chunk 4) - Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic Co-authored-by: John Fawcett <john@kilcoode.ai>
jrf0110
added a commit
that referenced
this pull request
May 29, 2026
* feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) (#3576) * feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) * fix(gastown): address PR review feedback on slingExistingPr - Remove async from submitExternalPrToReviewQueue (no awaits inside) - Add GitLab host validation in slingExistingPr URL parsing to prevent non-GitLab URLs (e.g. Bitbucket) from matching the GitLab regex - Replace vacuous state validation tests with meaningful checkPRStatus integration tests that exercise the actual status resolution path --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): tRPC + HTTP for babysit PR (chunk 1) Add gastown.babysitPr tRPC mutation, gastown.previewPr tRPC query, mayor-tools babysit-pr HTTP route, refinery bypass for babysat beads, and reconciler fast-track extension for babysat MR beads. * feat(web): BeadPanel babysit badge + metadata (chunk 4) (#3581) feat(web): BeadPanel babysit badge + metadata surfacing (chunk 4) - Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) (#3582) * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) Add gt_babysit_pr mayor tool registration and client method, update mayor and polecat system prompts with babysit PR guidance and force-push policy, surface force_push_allowed in polecat prime context, and add corresponding unit tests. * fix(gastown): address PR review warnings on babysit PR feature - Rewrite PR Conflict Resolution Workflow in polecat-system.prompt.ts to choose strategy upfront (rebase vs merge) based on force_push_allowed, instead of rebase-then-abort which discarded conflict resolution work. - Extract resolveForcePushAllowed() from agents.ts prime() so tests exercise the actual function instead of inlining the logic. --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(web): SlingDialog babysit-PR mode (chunk 3) Add tabbed SlingDialog with 'Sling work' and 'Babysit existing PR' tabs. The Babysit tab includes PR URL input with debounced preview, repo mismatch and closed PR validation, title/body overrides, force-push checkbox, and calls babysitPr mutation on submit. Also updates generated tRPC type declarations for the new previewPr and babysitPr procedures. * fix: address review feedback on PR #3583 - Fix CRITICAL: move isBabysit declaration above relatedBeads in BeadPanel.tsx (temporal dead zone caused ReferenceError on babysit bead renders) - Fix WARNING: wire up userEditedTitle/userEditedBody in BabysitPrPanel.tsx (auto-populate title/body from preview unless user has manually edited) - Fix WARNING: add babysit_started_at to bead metadata in submitExternalPrToReviewQueue so UI timestamps render correctly * fix(web): move defaultTitle/defaultBody after preview declaration to fix TDZ bug The defaultTitle and defaultBody const declarations referenced preview before it was declared (temporal dead zone), causing ReferenceError on every render. Moved them after the preview declaration. --------- Co-authored-by: John Fawcett <john@kilcoode.ai>
jrf0110
added a commit
that referenced
this pull request
May 30, 2026
feat(web): BeadPanel babysit badge + metadata surfacing (chunk 4) - Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic Co-authored-by: John Fawcett <john@kilcoode.ai>
jrf0110
added a commit
that referenced
this pull request
May 30, 2026
* feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) (#3576) * feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) * fix(gastown): address PR review feedback on slingExistingPr - Remove async from submitExternalPrToReviewQueue (no awaits inside) - Add GitLab host validation in slingExistingPr URL parsing to prevent non-GitLab URLs (e.g. Bitbucket) from matching the GitLab regex - Replace vacuous state validation tests with meaningful checkPRStatus integration tests that exercise the actual status resolution path --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): tRPC + HTTP for babysit PR (chunk 1) Add gastown.babysitPr tRPC mutation, gastown.previewPr tRPC query, mayor-tools babysit-pr HTTP route, refinery bypass for babysat beads, and reconciler fast-track extension for babysat MR beads. * feat(web): BeadPanel babysit badge + metadata (chunk 4) (#3581) feat(web): BeadPanel babysit badge + metadata surfacing (chunk 4) - Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) (#3582) * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) Add gt_babysit_pr mayor tool registration and client method, update mayor and polecat system prompts with babysit PR guidance and force-push policy, surface force_push_allowed in polecat prime context, and add corresponding unit tests. * fix(gastown): address PR review warnings on babysit PR feature - Rewrite PR Conflict Resolution Workflow in polecat-system.prompt.ts to choose strategy upfront (rebase vs merge) based on force_push_allowed, instead of rebase-then-abort which discarded conflict resolution work. - Extract resolveForcePushAllowed() from agents.ts prime() so tests exercise the actual function instead of inlining the logic. --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * fix(gastown): address rework feedback for babysit PR feature - Fix GitLab MR head SHA link in BeadPanel.tsx (regex now handles /-/merge_requests/ URLs) - Extract shared test helpers into babysit-pr-helpers.ts to eliminate ~400 lines of duplication - babysit_started_at already present from staging (confirmed) * fix(web): remove duplicate isBabysit declaration in BeadPanel --------- Co-authored-by: John Fawcett <john@kilcoode.ai>
jrf0110
added a commit
that referenced
this pull request
Jul 22, 2026
* feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) (#3576) * feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) * fix(gastown): address PR review feedback on slingExistingPr - Remove async from submitExternalPrToReviewQueue (no awaits inside) - Add GitLab host validation in slingExistingPr URL parsing to prevent non-GitLab URLs (e.g. Bitbucket) from matching the GitLab regex - Replace vacuous state validation tests with meaningful checkPRStatus integration tests that exercise the actual status resolution path --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): tRPC + HTTP for babysit PR (chunk 1) Add gastown.babysitPr tRPC mutation, gastown.previewPr tRPC query, mayor-tools babysit-pr HTTP route, refinery bypass for babysat beads, and reconciler fast-track extension for babysat MR beads. * feat(web): BeadPanel babysit badge + metadata (chunk 4) (#3581) feat(web): BeadPanel babysit badge + metadata surfacing (chunk 4) - Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) (#3582) * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) Add gt_babysit_pr mayor tool registration and client method, update mayor and polecat system prompts with babysit PR guidance and force-push policy, surface force_push_allowed in polecat prime context, and add corresponding unit tests. * fix(gastown): address PR review warnings on babysit PR feature - Rewrite PR Conflict Resolution Workflow in polecat-system.prompt.ts to choose strategy upfront (rebase vs merge) based on force_push_allowed, instead of rebase-then-abort which discarded conflict resolution work. - Extract resolveForcePushAllowed() from agents.ts prime() so tests exercise the actual function instead of inlining the logic. --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(web): SlingDialog babysit-PR mode (chunk 3) Add tabbed SlingDialog with 'Sling work' and 'Babysit existing PR' tabs. The Babysit tab includes PR URL input with debounced preview, repo mismatch and closed PR validation, title/body overrides, force-push checkbox, and calls babysitPr mutation on submit. Also updates generated tRPC type declarations for the new previewPr and babysitPr procedures. * fix: address review feedback on PR #3583 - Fix CRITICAL: move isBabysit declaration above relatedBeads in BeadPanel.tsx (temporal dead zone caused ReferenceError on babysit bead renders) - Fix WARNING: wire up userEditedTitle/userEditedBody in BabysitPrPanel.tsx (auto-populate title/body from preview unless user has manually edited) - Fix WARNING: add babysit_started_at to bead metadata in submitExternalPrToReviewQueue so UI timestamps render correctly * fix(web): move defaultTitle/defaultBody after preview declaration to fix TDZ bug The defaultTitle and defaultBody const declarations referenced preview before it was declared (temporal dead zone), causing ReferenceError on every render. Moved them after the preview declaration. --------- Co-authored-by: John Fawcett <john@kilcoode.ai>
jrf0110
added a commit
that referenced
this pull request
Jul 22, 2026
* feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) (#3576) * feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) * fix(gastown): address PR review feedback on slingExistingPr - Remove async from submitExternalPrToReviewQueue (no awaits inside) - Add GitLab host validation in slingExistingPr URL parsing to prevent non-GitLab URLs (e.g. Bitbucket) from matching the GitLab regex - Replace vacuous state validation tests with meaningful checkPRStatus integration tests that exercise the actual status resolution path --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): tRPC + HTTP for babysit PR (chunk 1) Add gastown.babysitPr tRPC mutation, gastown.previewPr tRPC query, mayor-tools babysit-pr HTTP route, refinery bypass for babysat beads, and reconciler fast-track extension for babysat MR beads. * feat(web): BeadPanel babysit badge + metadata (chunk 4) (#3581) feat(web): BeadPanel babysit badge + metadata surfacing (chunk 4) - Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) (#3582) * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) Add gt_babysit_pr mayor tool registration and client method, update mayor and polecat system prompts with babysit PR guidance and force-push policy, surface force_push_allowed in polecat prime context, and add corresponding unit tests. * fix(gastown): address PR review warnings on babysit PR feature - Rewrite PR Conflict Resolution Workflow in polecat-system.prompt.ts to choose strategy upfront (rebase vs merge) based on force_push_allowed, instead of rebase-then-abort which discarded conflict resolution work. - Extract resolveForcePushAllowed() from agents.ts prime() so tests exercise the actual function instead of inlining the logic. --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * fix(gastown): address rework feedback for babysit PR feature - Fix GitLab MR head SHA link in BeadPanel.tsx (regex now handles /-/merge_requests/ URLs) - Extract shared test helpers into babysit-pr-helpers.ts to eliminate ~400 lines of duplication - babysit_started_at already present from staging (confirmed) * fix(web): remove duplicate isBabysit declaration in BeadPanel --------- Co-authored-by: John Fawcett <john@kilcoode.ai>
jrf0110
added a commit
that referenced
this pull request
Jul 22, 2026
* feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) (#3576) * feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) * fix(gastown): address PR review feedback on slingExistingPr - Remove async from submitExternalPrToReviewQueue (no awaits inside) - Add GitLab host validation in slingExistingPr URL parsing to prevent non-GitLab URLs (e.g. Bitbucket) from matching the GitLab regex - Replace vacuous state validation tests with meaningful checkPRStatus integration tests that exercise the actual status resolution path --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): tRPC + HTTP for babysit PR (chunk 1) Add gastown.babysitPr tRPC mutation, gastown.previewPr tRPC query, mayor-tools babysit-pr HTTP route, refinery bypass for babysat beads, and reconciler fast-track extension for babysat MR beads. * feat(web): BeadPanel babysit badge + metadata (chunk 4) (#3581) feat(web): BeadPanel babysit badge + metadata surfacing (chunk 4) - Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) (#3582) * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) Add gt_babysit_pr mayor tool registration and client method, update mayor and polecat system prompts with babysit PR guidance and force-push policy, surface force_push_allowed in polecat prime context, and add corresponding unit tests. * fix(gastown): address PR review warnings on babysit PR feature - Rewrite PR Conflict Resolution Workflow in polecat-system.prompt.ts to choose strategy upfront (rebase vs merge) based on force_push_allowed, instead of rebase-then-abort which discarded conflict resolution work. - Extract resolveForcePushAllowed() from agents.ts prime() so tests exercise the actual function instead of inlining the logic. --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(web): SlingDialog babysit-PR mode (chunk 3) Add tabbed SlingDialog with 'Sling work' and 'Babysit existing PR' tabs. The Babysit tab includes PR URL input with debounced preview, repo mismatch and closed PR validation, title/body overrides, force-push checkbox, and calls babysitPr mutation on submit. Also updates generated tRPC type declarations for the new previewPr and babysitPr procedures. * fix: address review feedback on PR #3583 - Fix CRITICAL: move isBabysit declaration above relatedBeads in BeadPanel.tsx (temporal dead zone caused ReferenceError on babysit bead renders) - Fix WARNING: wire up userEditedTitle/userEditedBody in BabysitPrPanel.tsx (auto-populate title/body from preview unless user has manually edited) - Fix WARNING: add babysit_started_at to bead metadata in submitExternalPrToReviewQueue so UI timestamps render correctly * fix(web): move defaultTitle/defaultBody after preview declaration to fix TDZ bug The defaultTitle and defaultBody const declarations referenced preview before it was declared (temporal dead zone), causing ReferenceError on every render. Moved them after the preview declaration. --------- Co-authored-by: John Fawcett <john@kilcoode.ai>
jrf0110
added a commit
that referenced
this pull request
Jul 22, 2026
* feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) (#3576) * feat(gastown): Town DO slingExistingPr method (babysit PR feature, chunk 0) * fix(gastown): address PR review feedback on slingExistingPr - Remove async from submitExternalPrToReviewQueue (no awaits inside) - Add GitLab host validation in slingExistingPr URL parsing to prevent non-GitLab URLs (e.g. Bitbucket) from matching the GitLab regex - Replace vacuous state validation tests with meaningful checkPRStatus integration tests that exercise the actual status resolution path --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): tRPC + HTTP for babysit PR (chunk 1) Add gastown.babysitPr tRPC mutation, gastown.previewPr tRPC query, mayor-tools babysit-pr HTTP route, refinery bypass for babysat beads, and reconciler fast-track extension for babysat MR beads. * feat(web): BeadPanel babysit badge + metadata (chunk 4) (#3581) feat(web): BeadPanel babysit badge + metadata surfacing (chunk 4) - Add 'Babysat external PR' badge (cyan) when gt:babysit label present - Hide source bead link for babysit beads (no source_bead_id) - Add babysit metadata panel: head_sha (7-char, linked), force_push_allowed (Lock/Unlock icons), babysit_started_at (relative time) - Add event formatters for babysit_started, pr_feedback_detected, pr_conflict_detected, pr_auto_merge, pr_status_changed - Mirror babysit badge + metadata in BeadInspectorDashboard - Extract buildRelatedBeads and eventDescription into separate files for testability - Add unit tests for eventDescription and buildRelatedBeads babysit logic Co-authored-by: John Fawcett <john@kilcoode.ai> * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) (#3582) * feat(gastown): gt_babysit_pr mayor tool + force-push gate (chunk 2) Add gt_babysit_pr mayor tool registration and client method, update mayor and polecat system prompts with babysit PR guidance and force-push policy, surface force_push_allowed in polecat prime context, and add corresponding unit tests. * fix(gastown): address PR review warnings on babysit PR feature - Rewrite PR Conflict Resolution Workflow in polecat-system.prompt.ts to choose strategy upfront (rebase vs merge) based on force_push_allowed, instead of rebase-then-abort which discarded conflict resolution work. - Extract resolveForcePushAllowed() from agents.ts prime() so tests exercise the actual function instead of inlining the logic. --------- Co-authored-by: John Fawcett <john@kilcoode.ai> * fix(gastown): address rework feedback for babysit PR feature - Fix GitLab MR head SHA link in BeadPanel.tsx (regex now handles /-/merge_requests/ URLs) - Extract shared test helpers into babysit-pr-helpers.ts to eliminate ~400 lines of duplication - babysit_started_at already present from staging (confirmed) * fix(web): remove duplicate isBabysit declaration in BeadPanel --------- Co-authored-by: John Fawcett <john@kilcoode.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Chunk 4 of 6 for the "Babysit existing PR" feature. Adds babysit-specific UI to the BeadPanel drawer and the admin BeadInspectorDashboard.
gt:babysitis in the bead's labels. Distinct from the ambergt:heldbadge and the defaultgt:merge-requesttype badge.source_bead_id), the "Source Work" related bead link is filtered out.head_sha(7-char abbreviated, linked to commit URL when PR URL is available),force_push_allowed(Lock/Unlock icons with "Allowed"/"Blocked" text), andbabysit_started_at(relative time).babysit_started,pr_feedback_detected,pr_conflict_detected,pr_auto_merge, andpr_status_changedevents.buildRelatedBeadsandeventDescriptioninto separate files for testability without React/motion/DB dependencies.Verification
Manual verification: inspected BeadPanel rendering logic for babysit badge visibility, metadata panel conditional rendering, and source bead filtering. Typecheck passes.
Visual Changes
Reviewer Notes
buildRelatedBeads.tsandeventDescription.tsare extractions from existing code, not new logic — they're identical to what was previously inline in BeadPanel.tsx and ActivityFeed.tsx respectively, plus the new babysit event types ineventDescription.MetaCellcomponent'svalueprop was widened fromstringtoReactNodeto support the linked SHA rendering.