Skip to content

Fix agent's review-body lookups miss the shared fullsend-ai-review[bot] identity #802

Description

@guyoron1

Upstream: fullsend-ai#5550

What happens

Four call sites that need to recognize fullsend's own review-bot reviews all hardcode a single identity, ${ORG_NAME}-review[bot], instead of also matching the shared vendor App identity, fullsend-ai-review[bot]:

  • .github/workflows/reusable-fix.yml:354-356 ("Pre-fetch review body" step)
  • .github/workflows/reusable-dispatch.yml:291-292 (pull_request_review changes_requested → fix auto-dispatch gate)
  • .github/workflows/reusable-dispatch.yml:1094-1096 ("Pre-fetch review body" step, fix job)
  • internal/scaffold/fullsend-repo/scripts/pre-fetch-prior-review.sh:14,20-22
  • internal/scaffold/fullsend-repo/.github/workflows/dispatch.yml:223-224 (same fix-dispatch gate, per-org scaffold copy)

All five construct REVIEW_BOT="${ORG_NAME}-review[bot]" and compare .user.login/REVIEW_USER_LOGIN against only that string.

Per ADR 0029/0059/0068, fullsend's default deployment model is a shared, vendor-owned fullsend-ai-review[bot] App — every adopting org installs the same public App, so the reviewing bot's login does not vary with ORG_NAME (github.repository_owner). ${ORG_NAME}-review[bot] only coincidentally matches on fullsend-ai/fullsend itself, where the org name and the vendor-App prefix happen to be identical. For every other adopting org running the standard shared-app deployment, REVIEW_USER_LOGIN is fullsend-ai-review[bot], which never equals ${ORG_NAME}-review[bot] for that org — so all five checks silently fail closed.

Concrete consequences on any org other than fullsend-ai/fullsend using the default (shared-app) deployment:

  1. The pull_request_review → fix auto-dispatch gate never fires — a changes_requested review from the shared bot never triggers the fix agent automatically.
  2. The "Pre-fetch review body" steps (reusable-fix.yml, reusable-dispatch.yml) return an empty review body, which causes the fix agent to report "nothing to fix" even though a real review with real feedback exists.
  3. pre-fetch-prior-review.sh silently treats every review-agent dispatch as a first review (no prior comment found), losing delta-review context and prior-SHA anchoring, even on the second, third, etc. review of the same PR.

What should happen

Each of these five checks should match either identity — the shared vendor App (fullsend-ai-review[bot]) or a self-managed org's own exact ${ORG_NAME}-review[bot] — not just the latter.

Context

Found by @waynesun09 during review of PR fullsend-ai#5415, which attempted to fix this (among other things) as part of a broader is_org_bot() bot-actor-recognition mechanism. fullsend-ai#5415 is being closed and replaced with a narrower PR scoped only to fullsend-ai#5188 (review not re-dispatching after a fix-agent push, fixed via label re-triggering instead of actor-identity checks) — that narrower fix does not touch any of these five call sites, so this bug is being split out to be tracked and fixed independently. It is unrelated to the actor-identity-vs-label-based-authorization question raised during fullsend-ai#5415's review: these five checks are about content attribution ("whose review text do I trust as canonical feedback"), not dispatch authorization, so they aren't affected by that debate.

fullsend-ai#5463 (pinning review-bot identity checks to performed_via_github_app.id instead of a login string, to close a separate self-managed-org identity-squatting risk) is a natural follow-up hardening step once this dual-identity fix lands — it isn't a substitute for it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    duplicateThis issue or pull request already exists

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions