Skip to content

Add publisher abuse signal review dashboard#2927

Merged
jesse-merhi merged 7 commits into
mainfrom
jesse/publisher-abuse-signals-dashboard
Jul 3, 2026
Merged

Add publisher abuse signal review dashboard#2927
jesse-merhi merged 7 commits into
mainfrom
jesse/publisher-abuse-signals-dashboard

Conversation

@jesse-merhi

@jesse-merhi jesse-merhi commented Jun 29, 2026

Copy link
Copy Markdown
Member

Summary

This PR keeps publisher abuse autobanning on the warning-first pressure-score path and moves temporal install/download anomalies into a staff-review Signals workflow. The management abuse view now has a bounded, paginated Signals tab with severity/status filters, compact rows, new-tab skill/publisher links, row detail actions, and skeleton loading states.

Signals can be snoozed, dismissed, or reopened with audit rows. Changed signals can emit one authenticated digest request to the configured Hermit endpoint, but temporal-only signals remain review evidence and do not feed the automatic warning/ban path.

What Changed

  • Enforcement boundary: pressure-score potential_ban_candidate nominations remain the only automatic warning/ban input; temporal anomaly evidence is archived as review-only signals.
  • Autoban safety: publisher abuse autobans remain behind the management kill switch, which defaults off when unset.
  • Signal archive: adds publisherAbuseSignals with indexed archival, bounded listing/counts, status fields, audit events, retention coverage, and local/dev seed fixtures.
  • Signal triage: staff can filter open, snoozed, and dismissed signals, then snooze for 14 days, dismiss, or reopen from the signal detail sheet.
  • Hermit digest emission: changed signals are claimed and sent as one authenticated HTTP digest request when Hermit config is present; stale claims are requeued so a failed notification does not permanently suppress future digests.
  • Hermit receiver/config: openclaw/hermit PR search broken #17 is merged at 34b654fcb707abf94b47122fa5674e3442862e8c, adding the /api/clawhub-publisher-abuse/signals/digest receiver for publisher_abuse_signals_changed. Production Discord delivery depends on deploying Hermit and matching existing ClawHub-Hermit config; no new token is required when the shared token is already present on both sides. CLAWHUB_HERMIT_TOKEN is preferred when configured, CLAWHUB_BAN_APPEALS_TOKEN is the accepted fallback, and a dedicated CLAWHUB_HERMIT_TOKEN can be added later for separation/rotation.
  • Scheduled scan: the daily temporal scan remains dryRun: true, explicitly opts into archiving staff-review signal rows, and only requests Hermit notification for changed completed cron results.
  • Management UI: adds the Signals tab under /management?view=abuse, stable tab counts before the tab is opened, server pagination, severity column, ratio evidence, skeleton rows, and skill/publisher links that open in a new tab.
  • Local manual testing: worktree dev startup now passes Vite --strictPort so the app fails fast instead of silently moving off the advertised local URL.

Workflow

Step Behavior
Daily pressure scoring Existing publisher abuse scoring can still create pressure-score potential_ban_candidate nominations.
Autoban decision If the kill switch is off, candidates stay in review. If enabled, candidates are warned first and only banned after the deadline when a newer score still confirms the candidate.
Daily temporal scan Runs as dryRun: true and archives review-only signal rows only because the scheduled job explicitly opts in.
Signal archive High install/download ratio and sustained downloads with flat installs are upserted into publisherAbuseSignals; single spike-only evidence is intentionally not archived as a durable signal row.
Hermit digest emission Only changed signals are claimed for one authenticated HTTP digest request; stale notification claims are requeued before the next claim batch.
Hermit Discord delivery Receiver route is merged in openclaw/hermit PR #17; production delivery depends on Hermit deploy plus shared token/base URL config. CLAWHUB_HERMIT_TOKEN is preferred when present; existing CLAWHUB_BAN_APPEALS_TOKEN fallback is valid, so this PR does not require minting a new token.
Staff review The Signals tab lets staff inspect linked skill/publisher evidence and move rows between open, snoozed, and dismissed.

Proof

Behavioral proof:

  • Manual local proof used dev Convex deployment admired-dodo-615: the app loaded at http://127.0.0.1:3030, /dev-auth/secret returned a usable secret, Use Admin signed in as @local-admin, Management unlocked, and Abuse -> Signals showed seeded rows demo-temporal-install-ratio and demo-temporal-download-burst.
  • Jesse manually reviewed the current Signals UI and said it looks legit.
  • The seeded fixture showed Signals 2 before staff opened the Signals tab, proving the tab count comes from the bounded dashboard query rather than from an already-loaded signal page.
  • Opening Signals showed archived temporal signals with severity, linked skill/publisher context, status filtering, and install/download ratio evidence.
  • Mocked Hermit coverage verifies claiming, digest payload construction, stale-claim requeue, snooze/dismiss/reopen audit behavior, and expired snooze reopen behavior without calling a live endpoint.
  • Local loopback Hermit proof invoked notifyPublisherAbuseSignalChangesInternalHandler with HERMIT_PUBLISHER_ABUSE_BASE_URL pointed at a one-off 127.0.0.1 receiver and CLAWHUB_HERMIT_TOKEN=local-hermit-token. The receiver captured exactly one POST /api/clawhub-publisher-abuse/signals/digest with Authorization: Bearer local-hermit-token, kind=publisher_abuse_signals_changed, changedCount=1, dashboardUrl=http://127.0.0.1:3030/management?view=abuse&tab=signals, and topSignal URLs under 127.0.0.1:3030. The handler returned { ok: true, sent: true, count: 1 } and called markSucceeded with the signal id.
  • No live Hermit staging/prod POST was performed.

Screenshot proof:

Screenshot Claim Proved URL / State Viewport / Crop
pa-tabs-desktop-initial The dashboard can show Signals 2 before staff open the Signals tab, while the other abuse tabs remain populated and not stuck in loading. Local seeded fixture, signed in as @local-admin, Potential ban tab active. Desktop 1440px wide full-page capture, because the header metrics, tabs, table, and footer prove the whole management route state.
pa-tabs-desktop-signals The Signals tab renders the severity column, linked skill/publisher cells, ratio evidence, and the two seeded archived signal rows. Local seeded fixture, signed in as @local-admin, Signals tab active. Desktop 1440px wide full-page capture, because the changed tab, table header, rows, and count are all visible together.

Verification

Reviewer-checkable behavior:

  • publisherAbuse:listReviewDashboard returns the bounded signal count used by the tab; in the seeded fixture this renders as Signals 2 before the signal page query is active.
  • publisherAbuse:listSignalsPage is skipped until the Signals tab is active, then pages archived signal rows for staff review.
  • publisher-temporal-abuse-scan remains dryRun: true and only archives dry-run signals because the cron explicitly passes archiveDryRunSignals: true.
  • Hermit proof covers the ClawHub sender and payload shape locally; the matching Hermit receiver is now merged in openclaw/hermit PR search broken #17. ClawHub sends to HERMIT_PUBLISHER_ABUSE_BASE_URL when set, otherwise HERMIT_CONTENT_RIGHTS_BASE_URL, otherwise https://forms.openclaw.ai; token auth prefers CLAWHUB_HERMIT_TOKEN and falls back to CLAWHUB_BAN_APPEALS_TOKEN. Remaining end-to-end Discord delivery proof is deployment/configuration verification.

Automated checks run on the current pushed tree:

  • bunx vitest run convex/publisherAbuse.test.ts --testNamePattern "Hermit|notification|snooz|dismiss|reopen" --reporter verbose passed: 7 tests passed / 99 skipped.
  • bunx vitest run src/routes/-management.test.tsx --reporter verbose passed: 26 tests.
  • bunx vitest run scripts/dev-worktree.test.ts --reporter verbose passed: 18 tests.

Earlier branch validation after the backend/signal changes:

  • bun run test -- convex/crons.test.ts convex/publisherAbuse.test.ts convex/publisherAbuseDevSeed.test.ts src/routes/-management.test.tsx convex/lib/publisherAbuseScoring.test.ts convex/lib/retentionPolicy.test.ts passed: 6 files / 175 tests.
  • bunx tsc --noEmit passed.
  • bunx convex dev --once --typecheck=disable passed against dev deployment admired-dodo-615.
  • bun run ci:static passed.
  • bun run ci:types-build passed.
  • bun run ci:unit passed: 326 files passed / 1 skipped, 4241 tests passed / 1 skipped, coverage threshold passed.

Readiness note:

  • ClawHub-side signal archival, UI review, triage state, and digest emission are ready for this PR. Hermit receiver support is merged in PR search broken #17; production notification delivery still needs Hermit deployment and env configuration verification. No new token is required if the existing ClawHub-Hermit shared token is present on both sides; a dedicated CLAWHUB_HERMIT_TOKEN can be added later for separation/rotation.
  • Mermaid was intentionally omitted because the local Mermaid CLI still cannot launch its configured Chrome dependency; the workflow is represented as a plain table instead of an unvalidated Mermaid block.

@jesse-merhi
jesse-merhi requested review from a team and Patrick-Erichsen as code owners June 29, 2026 14:09
@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clawhub Ready Ready Preview, Comment Jul 2, 2026 3:20pm

Request Review

@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. labels Jun 29, 2026
@clawsweeper

clawsweeper Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 2, 2026, 11:40 PM ET / 03:40 UTC.

Summary
The PR adds durable publisher abuse signal tables, review-only temporal signal archival, staff Signals dashboard triage, Hermit digest emission, related tests/specs/retention coverage, and strict-port worktree dev startup.

Reproducibility: not applicable. This PR adds a new staff moderation workflow rather than fixing a current-main bug. The PR body and inspected screenshots provide real local UI proof, and the body includes loopback Hermit digest output for the sender path.

Review metrics: 3 noteworthy metrics.

  • Changed surface: 20 files, +5547/-825. The PR spans Convex schema/backend, management UI, tests, specs, retention, and dev tooling, so maintainers should review it as a cross-surface moderation change.
  • Stored moderation tables: 2 added. publisherAbuseSignals and publisherAbuseSignalReviewEvents create durable staff-review state, making rollout and retention intent relevant before merge.
  • External digest dependency: 1 paired Hermit receiver. Production notification delivery depends on a separately deployed Hermit endpoint plus environment configuration outside this repository.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Confirm Hermit receiver deployment and token/base URL configuration before relying on production Discord delivery.

Mantis proof suggestion
The staff Signals tab, deep link, filters, and triage drawer are visible browser behavior where independent browser proof would add review value. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify /management?view=abuse&tab=signals opens the Signals tab and seeded signal rows can be filtered and triaged.

Risk before merge

  • [P1] The PR intentionally changes the moderation boundary: temporal-only publisher abuse evidence becomes durable staff-review Signals and no longer creates potential-ban nominations, so maintainers should explicitly accept that policy shift.
  • [P1] The PR adds permanent Convex moderation tables and notification claim state; schema rollout, retention intent, and operator visibility should be owned during deploy.
  • [P1] Production Discord delivery depends on the separately merged Hermit receiver plus matching Hermit deployment and token/base URL configuration; green ClawHub CI does not prove production notification delivery is ready.

Maintainer options:

  1. Accept moderation boundary and rollout (recommended)
    Maintainers can explicitly approve the review-only temporal-signal boundary and verify the Hermit deployment/config timing before landing this workflow.
  2. Split policy from dashboard
    If the enforcement boundary is still unsettled, split durable signal archiving/dashboard work from the temporal label policy change before merge.
  3. Pause for production Hermit proof
    If Discord delivery must work at launch, pause this PR until the Hermit receiver and shared token/base URL configuration are verified in the target environment.

Next step before merge

  • [P2] Member-authored moderation/data-model feature needs maintainer policy and production Hermit rollout acceptance rather than automated repair.

Security
Cleared: No concrete security or supply-chain regression was found; the diff adds staff-gated moderation functions and an authenticated Hermit sender without dependency or workflow-permission changes.

Review details

Best possible solution:

Land the Signals workflow after maintainers accept the review-only temporal-signal policy and coordinate the Convex schema plus Hermit receiver/config rollout.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this PR adds a new staff moderation workflow rather than fixing a current-main bug. The PR body and inspected screenshots provide real local UI proof, and the body includes loopback Hermit digest output for the sender path.

Is this the best way to solve the issue?

Mostly yes: a staff-gated indexed archive is a maintainable shape if maintainers accept the moderation boundary. The remaining concern is rollout and product acceptance, not a narrow code repair.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against a89bfaf61d1b.

Label changes

Label justifications:

  • P2: This is a normal-priority staff moderation feature with backend/schema impact and limited direct public-user blast radius.
  • merge-risk: 🚨 compatibility: The PR changes durable moderation state and the enforcement boundary for temporal publisher-abuse evidence, which maintainers must accept before merge.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): Sufficient: the PR body includes real local ClawHub screenshots for the Signals dashboard plus copied loopback output proving the authenticated Hermit digest POST path.
  • proof: sufficient: Contributor real behavior proof is sufficient. Sufficient: the PR body includes real local ClawHub screenshots for the Signals dashboard plus copied loopback output proving the authenticated Hermit digest POST path.
Evidence reviewed

What I checked:

  • Repository policy read: AGENTS.md was found and read fully; its Convex, retention, moderation-spec, proof, and PR review rules informed this review. (AGENTS.md:1, a89bfaf61d1b)
  • Current main does not already implement the workflow: Searching current main for the new signal table, Signals query, dry-run archive flag, Hermit signal kind, and signals tab returned no matches, so this PR is not obsolete or implemented on main. (a89bfaf61d1b)
  • Release check: The latest release tag v0.23.1 points at a230d96, and no tag contains the PR head, so the Signals workflow is not shipped in the latest release. (a230d962db64)
  • Merge result adds durable moderation tables: The potential merge commit defines publisherAbuseSignals and publisherAbuseSignalReviewEvents with review state, owner/skill snapshots, notification claim fields, and indexes. (convex/schema.ts:2774, 741d66602bd6)
  • Signals listing is staff-gated and indexed: listSignalsPage requires a publisher-abuse dashboard user and paginates signals through review-status, signal-type, or last-seen indexes. (convex/publisherAbuse.ts:401, 741d66602bd6)
  • Signal triage is staff-gated: Snooze, dismiss, and reopen derive the acting user server-side, require moderator privileges, patch review state, and insert signal review events. (convex/publisherAbuse.ts:582, 741d66602bd6)

Likely related people:

  • Patrick-Erichsen: Current-main blame on the publisher abuse dashboard/backend/schema area points to Patrick Erichsen's a230d96 commit, and the PR has a review request for Patrick-Erichsen. (role: current main area contributor; confidence: medium; commits: a230d962db64; files: convex/publisherAbuse.ts, convex/schema.ts, src/routes/management.tsx)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

Copilot AI 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.

Pull request overview

This PR adds a durable “publisher abuse Signals” archive and staff review surface, separating temporal anomaly evidence (review-only) from pressure-score nominations (the only input to warning/ban enforcement). It introduces new Convex tables and queries/mutations for signal lifecycle (open/snoozed/dismissed + Hermit digest notifications), updates the management abuse dashboard UI to display Signals with pagination, and updates the moderation spec to reflect the enforcement boundary.

Changes:

  • Added publisherAbuseSignals + publisherAbuseSignalReviewEvents tables, pagination APIs, review mutations (snooze/dismiss/reopen), and Hermit digest notification plumbing.
  • Updated temporal scan + cron to archive review-only temporal signals (while keeping the scheduled temporal scan otherwise dry-run).
  • Added a “Signals” tab to the management abuse dashboard with new table UI, counts, skeleton loading states, and client-side search filtering.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/styles.css Adds styling for Signals status toggles, signals table, skeleton shimmer rows, and link/action affordances.
src/routes/management.tsx Wires Signals tab state, paginated signals query, and signal review mutations into the management abuse view.
src/routes/-management/managementShared.ts Adds shared types for signal entries/status and a new formatPercent helper for ratio display.
src/routes/-management/AbusePage.tsx Implements the Signals tab UI (status filter, table, actions), tab badge/count logic, and skeleton rows.
src/routes/-management.test.tsx Adds UI tests ensuring Signals load is deferred until tab activation and that counts/links/rendering behave.
specs/security-moderation.md Documents the enforcement split and the review-only nature / Hermit notification rules for Signals.
convex/schema.ts Defines new Convex tables + indexes for signals, review events, and notification claim tracking.
convex/publisherAbuseDevSeed.ts Seeds demo signals (including install/download ratio + sustained downloads evidence) and clears them reliably.
convex/publisherAbuseDevSeed.test.ts Extends seed tests to cover signal fixtures and seed-clearing behavior.
convex/publisherAbuse.ts Adds dashboard signal count summary, paginated signal listing, signal review mutations, archival actions, and Hermit digest delivery.
convex/publisherAbuse.test.ts Adds extensive backend tests for signal paging, archival rules, review lifecycle, notification claiming/retry, and dashboard counts.
convex/lib/retentionPolicy.ts Marks signals and signal review events as permanent retention.
convex/lib/retentionPolicy.test.ts Adds coverage asserting signals are documented as durable evidence.
convex/lib/publisherAbuseScoring.ts Adjusts temporal near-conversion thresholds and makes temporal labels review-only (no potential-ban escalation).
convex/lib/publisherAbuseScoring.test.ts Updates scoring tests to match the new review-only boundary and ratio threshold behavior.
convex/crons.ts Updates the temporal cron invocation to explicitly archive dry-run signals.
convex/crons.test.ts Updates cron tests to assert archiveDryRunSignals: true is passed.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/routes/-management/AbusePage.tsx Outdated
<tbody>
{!loaded ? (
{tab === "signals" ? (
<div className="pa-signal-status-tabs" role="tablist" aria-label="Signal status">
Comment thread src/routes/-management/AbusePage.tsx Outdated
key={status}
type="button"
className={signalStatus === status ? "active" : ""}
aria-selected={signalStatus === status}
Comment thread src/routes/-management/AbusePage.tsx Outdated
Comment on lines +808 to +810
target="_blank"
rel="noreferrer"
aria-label={`Open skill ${item.signal.skillDisplayName}`}
Comment thread src/routes/-management/AbusePage.tsx Outdated
Comment on lines +823 to +825
target="_blank"
rel="noreferrer"
aria-label={`Open publisher ${item.signal.handleSnapshot}`}
Comment thread convex/publisherAbuse.ts
Comment on lines +2487 to +2491
kind: "publisher_abuse_signals_changed",
changedCount: signals.length,
hasMore,
dashboardUrl: `${config.siteUrl}/management?view=abuse&tab=signals`,
topSignals: signals.map((signal) => ({
@blacksmith-sh

This comment has been minimized.

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 1, 2026
@blacksmith-sh

This comment has been minimized.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 2, 2026
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper clawsweeper Bot removed the proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. label Jul 2, 2026
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

2 similar comments
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@jesse-merhi
jesse-merhi merged commit 3ce0ce4 into main Jul 3, 2026
30 of 31 checks passed
@jesse-merhi
jesse-merhi deleted the jesse/publisher-abuse-signals-dashboard branch July 3, 2026 04:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal backlog priority with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants