Skip to content

fix(review): scope review-nag ping cooldown to the actor, not one PR - #4021

Merged
JSONbored merged 2 commits into
mainfrom
fix/review-nag-ping-per-actor
Jul 7, 2026
Merged

fix(review): scope review-nag ping cooldown to the actor, not one PR#4021
JSONbored merged 2 commits into
mainfrom
fix/review-nag-ping-per-actor

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

maybeThrottleReviewNagPing counted @gittensory pings via a targetKey scoped to the current PR/issue only (countRecentAuditEventsForActorAndTarget(env, commenter, REVIEW_NAG_PING_EVENT_TYPE, targetKey, sinceIso)). Enforcement holds/closes the PR once the count reaches reviewNagMaxPings, but because the count was scoped per-target, a contributor who exhausted their pings on one PR got a clean 0/maxPings slate on any fresh PR — a new issue.number is a new targetKey, with zero memory of the prior PR's ping history. This is inconsistent with the contributor blacklist and moderation-rules ban tally, which correctly persist by actor login across every PR.

Adds countRecentAuditEventsForActorInRepo (src/db/repositories.ts), which counts one actor's matching audit events across every target within a repo (reusing the same literal-prefix LIKE ... ESCAPE scoping already used by findHottestReviewTargetForRepo), and wires it into maybeThrottleReviewNagPing in place of the per-target count. Because the count now spans every target the actor has pinged on within the repo, the very first ping on a brand-new PR already reflects a prior PR's exhausted count — no separate "still on cooldown" table is needed; the existing audit_events ledger read at the new repo scope already is the persistent per-actor cooldown state.

The sibling maybeThrottleMonitoredMentions (the per-maintainer @-mention nag counter) had the identical gap, via a targetKey suffixed #mention:<login>. Fixed the same way with a second new function, countRecentAuditEventsForActorInRepoWithTargetSuffix, which keeps the repo-wide carryover while still pinning to one mentioned login's own suffix, so independently-budgeted mentioned logins never bleed into each other's count (mentioning maintainer X vs. maintainer Y, and pinging @gittensory vs. mentioning a maintainer, all stay on separate budgets, per the existing design).

Closes #4020

Scope

  • The PR title follows type(scope): short summary Conventional Commit format, for example fix(api): restore profile access checks.
  • This PR is focused and does not mix unrelated backend, UI, MCP, docs, dependency, and deploy changes.
  • This follows CONTRIBUTING.md and does not reintroduce GitHub Pages, VitePress, site/, or CNAME.
  • I linked an issue, or this is small enough that the summary explains why an issue is not needed.

Validation

  • git diff --check
  • npm run actionlint
  • npm run typecheck
  • npm run test:coverage locally; codecov/patch requires ≥97% coverage of the lines AND branches you changed (aim for 98%+ on your diff so CI variance does not fail near the threshold). Global coverage is a non-blocking trend with a loose 90% backstop, not the gate.
  • npm run test:workers
  • npm run build:mcp
  • npm run test:mcp-pack
  • npm run ui:openapi:check
  • npm run ui:lint
  • npm run ui:typecheck
  • npm run ui:build
  • npm audit --audit-level=moderate
  • New or changed behavior has unit/integration tests for new branches, fallback paths, and sanitizer boundaries

Every changed line/branch in src/db/repositories.ts and src/queue/processors.ts is covered, confirmed via the v8 lcov report (DA/BRDA entries) for the exact diff ranges. Two regression tests added: one for each throttle function, seeding an exhausted PR-A ping count then confirming a single PR-B ping already crosses the threshold; a third confirms a different mentioned login on PR B keeps its own independent budget.

Note: npm run test:coverage (part of the full test:ci chain) currently has a small number of pre-existing failures on origin/main unrelated to this change (verified by running them against a clean, unmodified origin/main checkout before and after this diff, with identical results): a stale hardcoded-date assertion in test/unit/predicted-gate-engine-coverage.test.ts, a Prometheus-metrics-ordering assertion in 4 tests under test/unit/queue.test.ts's "auto-action convergence" suite, and a doc/example drift in test/unit/config-templates.test.ts (likely from the recently-merged review.shared_config / #2046). None of these touch review-nag, audit-events, or any file this PR changes.

Safety

  • No secrets, wallet details, hotkeys, coldkeys, user PATs, private keys, raw trust scores, private rankings, or private maintainer evidence are exposed.
  • Public GitHub text stays sanitized, low-noise, and does not imply compensation guarantees or optimization tactics.
  • Auth, cookie, CORS, GitHub App, Cloudflare, or session changes include negative-path tests.
  • API/OpenAPI/MCP behavior is updated and tested where needed.
  • UI changes use live API data or real empty/error/loading states, not production mock/demo fallbacks.
  • Visible UI changes include a UI Evidence section below with JPG/JPEG or PNG screenshots arranged as organized, captioned, clickable thumbnails. SVG screenshots are not used as review evidence. Review-only screenshots or recordings are not committed to the repository.
  • Public docs/changelogs are updated where needed; changelogs are only edited for release-prep PRs.

No UI/frontend files touched — this is a backend-only (src/db/repositories.ts, src/queue/processors.ts) change, so no UI Evidence section applies.

Notes

  • Separately (and unrelated to this PR): while rebasing onto fresh origin/main, I found src/queue/processors.ts currently fails npm run typecheck on origin/main HEAD due to a splicing error introduced by the just-merged fix(queue): prevent regate repair exhaustion from premature attempt counting #3998 (regate-repair-attempts fix), around the isPriorityRepair/repairHeadSha job-dispatch code — confirmed via git show origin/main:src/queue/processors.ts directly, unrelated to this diff (my changed lines don't overlap that region at all). This appears to already be tracked/being worked separately.

maybeThrottleReviewNagPing counted @gittensory pings via a targetKey scoped
to the current PR/issue only, so a contributor who exhausted their pings on
one PR got a clean 0/maxPings slate on any fresh PR (a new issue.number is a
new targetKey). Add countRecentAuditEventsForActorInRepo, which counts one
actor's matching audit events across every target in a repo, and wire it
into the throttle so the running count follows the contributor across PRs,
mirroring how the contributor blacklist and moderation-rules ban tally
already persist by login rather than by thread.

maybeThrottleMonitoredMentions had the identical gap for its per-maintainer
mention counter. Fixed the same way via a new
countRecentAuditEventsForActorInRepoWithTargetSuffix, which keeps the
repo-wide carryover while still pinning to one mentioned login's own
targetKey suffix, so independently-budgeted mentioned logins never bleed
into each other's count.
@codecov

codecov Bot commented Jul 7, 2026

Copy link
Copy Markdown

❌ 51 Tests Failed:

Tests completed Failed Passed Skipped
10424 51 10373 7
View the top 3 failed test(s) by shortest run time
test/unit/mcp-server-telemetry.test.ts > MCP server telemetry > records session-scoped MCP request errors without a tool name
Stack Traces | 0.0154s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-server-telemetry.test.ts > MCP server telemetry > falls back when Hono does not expose an execution context
Stack Traces | 0.0306s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-server-telemetry.test.ts > MCP server telemetry > records sanitized error telemetry when the MCP transport handler throws
Stack Traces | 0.268s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
View the full list of 48 ❄️ flaky test(s)
test/integration/api.test.ts > test/integration/api.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/maintainer-activation.test.ts > test/integration/maintainer-activation.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/orb-broker.test.ts > test/integration/orb-broker.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/orb-ingest.test.ts > test/integration/orb-ingest.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/orb-oauth.test.ts > test/integration/orb-oauth.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/orb-onboarding.test.ts > test/integration/orb-onboarding.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/orb-relay.test.ts > test/integration/orb-relay.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/orb-webhook.test.ts > test/integration/orb-webhook.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/public-quality-metrics-route-error.test.ts > test/integration/public-quality-metrics-route-error.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/public-stats-route-error.test.ts > test/integration/public-stats-route-error.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/public-stats-route.test.ts > test/integration/public-stats-route.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/routes-errors.test.ts > test/integration/routes-errors.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/integration/subnet-interface.test.ts > test/integration/subnet-interface.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/access-boundary.test.ts > test/unit/access-boundary.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/ai-key-byok.test.ts > test/unit/ai-key-byok.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/docs-examples-schema.test.ts > test/unit/docs-examples-schema.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/draft.test.ts > test/unit/draft.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/index.test.ts > test/unit/index.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/issue-watch.test.ts > test/unit/issue-watch.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/linear-key.test.ts > test/unit/linear-key.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-automation-state.test.ts > test/unit/mcp-automation-state.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-check-slop-risk.test.ts > test/unit/mcp-check-slop-risk.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-fleet-analytics.test.ts > test/unit/mcp-fleet-analytics.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-miner-prompts.test.ts > test/unit/mcp-miner-prompts.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-notifications.test.ts > test/unit/mcp-notifications.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-output-schemas.test.ts > test/unit/mcp-output-schemas.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-plan-dag.test.ts > test/unit/mcp-plan-dag.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-planning-elicitation.test.ts > test/unit/mcp-planning-elicitation.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-predict-gate.test.ts > test/unit/mcp-predict-gate.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-refresh-repo-docs.test.ts > test/unit/mcp-refresh-repo-docs.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-run-local-scorer.test.ts > test/unit/mcp-run-local-scorer.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-suggest-boundary-tests.test.ts > test/unit/mcp-suggest-boundary-tests.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-upstream.test.ts > test/unit/mcp-upstream.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/mcp-write-tools.test.ts > test/unit/mcp-write-tools.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/ops-wire.test.ts > test/unit/ops-wire.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/parity-wire.test.ts > test/unit/parity-wire.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/plan-templates.test.ts > test/unit/plan-templates.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/retention.test.ts > test/unit/retention.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-agent-approval.test.ts > test/unit/routes-agent-approval.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-ai-byok.test.ts > test/unit/routes-ai-byok.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-check-before-start.test.ts > test/unit/routes-check-before-start.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-contributor-issue-draft.test.ts > test/unit/routes-contributor-issue-draft.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-extension.test.ts > test/unit/routes-extension.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-focus-manifest.test.ts > test/unit/routes-focus-manifest.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-kill-switch.test.ts > test/unit/routes-kill-switch.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-remediation-plan.test.ts > test/unit/routes-remediation-plan.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-self-dogfood-registration-pack.test.ts > test/unit/routes-self-dogfood-registration-pack.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1
test/unit/routes-selfhost-dead-letter-queue.test.ts > test/unit/routes-selfhost-dead-letter-queue.test.ts

Flake rate in main: 100.00% (Passed 0 times, Failed 2 times)

Stack Traces | 0s run time
Error: Failed to resolve entry for package "@jsonbored/gittensory-engine". The package may have incorrect main/module/exports specified in its package.json.
 ❯ .../gittensory-miner/lib/opportunity-fanout.js:2:1
 ❯ src/mcp/find-opportunities.ts:11:1

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 7, 2026
@loopover-orb

loopover-orb Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Warning

🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨

⏸️ Gittensory review result - manual review recommended

Review updated: 2026-07-07 11:20:08 UTC

4 files · no blockers · readiness 100/100 · CI pending · blocked

⏸️ Suggested Action - Manual Review

Nits — 1 non-blocking
  • PR author also opened the linked issue — Link an issue that was opened by a different contributor, or provide a rationale for why this self-authored issue represents genuine discovery work.
Signal Result Evidence
Code review ✅ No blockers No AI review summary
Linked issue ✅ Linked #4020
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (1 linked issue).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 51 registered-repo PR(s), 43 merged, 570 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 51 PR(s), 570 issue(s).
Gate result ✅ Passing No configured blocker found.
Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: Python, TypeScript, JavaScript, Ruby, Go, Kotlin, MDX, Shell
  • Official Gittensor activity: 51 PR(s), 570 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Treat this as maintainer-lane context rather than normal contributor-lane activity.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.

🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed


💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →.

Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.

  • Re-run Gittensory review

@loopover-orb loopover-orb Bot added the manual-review Gittensor contributor context label Jul 7, 2026
@JSONbored
JSONbored merged commit a697e20 into main Jul 7, 2026
6 of 7 checks passed
@JSONbored
JSONbored deleted the fix/review-nag-ping-per-actor branch July 7, 2026 11:21
nghetienhiep pushed a commit to nghetienhiep/gittensory that referenced this pull request Jul 16, 2026
…imit scope

- Fetch the PR's own commit messages via a new listPullRequestCommitMessages
  helper and thread them into the live gate's buildSlopAssessment call, so
  low_quality_commit_message (weight 15) can actually fire in production
  instead of unconditionally short-circuiting on undefined commitMessages.

- Screenshot-table gate: action: "advisory" previously discarded a violation
  entirely (only "close" produced any signal). Add
  maybeAddScreenshotTableAdvisoryFinding, mirroring the lockfile-tamper-risk
  advisory pattern, so an advisory-mode violation appends a visible,
  non-blocking finding instead of silently doing nothing.

- Scope commandRateLimitPolicy's per-command counter and the intent-routing
  classifier's counter to (actor, command, repo) instead of
  (actor, command, repo#issueNumber), mirroring the JSONbored#4021 fix already applied
  to review-nag's cooldown. Opening a fresh issue/PR no longer resets an
  actor's AI-cost-bearing command budget.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. manual-review Gittensor contributor context

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(review): review-nag ping cooldown resets when a contributor opens a new PR

1 participant