Skip to content

docs(adr): add ADR 0164, run the shim on pull_request for same-repo PRs - #9227

Open
waynesun09 wants to merge 3 commits into
mainfrom
adr-9221-pull-request-shim
Open

waynesun09 wants to merge 3 commits into
mainfrom
adr-9221-pull-request-shim

Conversation

@waynesun09

@waynesun09 waynesun09 commented Nov 9, 2026 •

Copy link
Copy Markdown
Member

Summary

New ADR 0164 supersedes ADR 0009 for #9221. GitHub blocks pull_request_target by default on public repositories from 2026-12-02 (brownouts on 2026-11-09 and 2026-11-16). The shim's PR events move to pull_request, limited to same-repo PRs:

  • Same-repo guard, enforced twice: in the shim (head.repo.id == github.repository_id) and again in the dispatch workflow, because a fork PR runs its own copy of the shim.
  • Fork PRs: a maintainer comments /fs-review (issue_comment, ADR 0054 authorization unchanged). Fork PRs no longer get automatic retro.
  • Base checkout: dispatch checks out the base commit for pull_request, as it already does for pull_request_target and pull_request_review.
  • Old callers: pull_request_target is still accepted, with a warning.
  • Rollout: a required change in the next release.

ADR 0009 is not edited: no status flip, no notes. Living docs updated: docs/architecture.md (shim security bullet, marked target state; code agent runtime) and docs/problems/gitlab-implementation.md (an annotation on the GitHub line).

The implementation is in a separate PR (follows).

Evidence for current behaviour (fullsend 96e0c4338)

  • internal/scaffold/fullsend-repo/templates/shim-per-repo.yaml: the shim triggers on issues, issue_comment, pull_request_target, pull_request_review, and passes repository secrets to reusable-dispatch.yml via workflow_call.
  • .github/workflows/reusable-dispatch.yml: the checkout ref is base.sha for pull_request_target and pull_request_review, and github.sha otherwise.
  • internal/mintcore/claims.go ValidateWorkflowRef: job_workflow_ref must name an allowed workflow host repository.
  • internal/harnessdispatch/auth.go IsLifecycleCloseAuthorized: checks RawType == "pull_request_target".

External references

  • GitHub changelog, 2026-11-02: pull_request_target blocked by default December 2. The first notice was the 2026-09-17 post on workflow execution protections; its date was edited from 2026-11-02 to 2026-12-02 on 2026-10-21.
  • GitHub docs: Securely using pull_request_target.
  • gh-aw at 62ddc3a8: on: pull_request compiles to a job guard head.repo.id == github.repository_id (pkg/workflow/filters.go). forks: defaults to same-repo (#72579). Both pull_request and pull_request_target are limited to same-repo PRs by default (BuildNotFromFork, pkg/workflow/expression_builder.go); fork PRs are admitted through a forks: allowlist or author association.

Review

  • Decision check, Gemini 4 Argon: PROCEED, no changes.
  • Prose check, Gemini 3.8 Flash: defined "shim", "brownout", "mint" and "retro" on first use, fixed the table caption, and cut Consequences to 5 bullets. Each edit was verified before it was applied.
  • make lint passes.

Refs #9221

🤖 Generated with Claude Code

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Document same-repo pull_request dispatch in ADR 0164

📝 Documentation 🕐 10-20 Minutes

Grey Divider

AI Description

• Supersede ADR 0009 with a plan to preserve automatic review after GitHub restricts
 pull_request_target.
• Specify two same-repo guards, base-commit checkout, and maintainer-triggered review for fork PRs.
• Update living documentation; the workflow and CLI implementation will follow separately.
Diagram

graph TD
  A["PR event"] --> B{"Same repo?"} -->|Yes| C["Shim dispatch"] --> D{"Dispatch guard"} -->|Allowed| E["Base checkout"] --> F["Review and retro"]
  B -->|Fork: manual review| G["Maintainer comment"] -->|Authorized| D
  D -->|Fork PR event| H["No stage"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Allow pull_request_target by event policy
  • ➕ Preserves automatic review of fork PRs.
  • ➕ Requires less change to the existing trigger model.
  • ➖ Requires every adopting repository or organization to maintain a policy exception.
2. Authorize through a hosted webhook receiver
  • ➕ Could restore automatic fork review without relying on pull_request_target.
  • ➖ Requires a new hosted service and cannot meet the stated rollout deadline.

Recommendation: The ADR’s same-repo trigger and independently enforced dispatch guard are the pragmatic choice for the deadline, provided the base checkout and dispatch changes ship together with the shim. Consider a webhook receiver separately if automatic fork review becomes a requirement.

Files changed (3) +137 / -3

Documentation (3) +137 / -3
0164-run-the-shim-on-pull-request-for-same-repo-prs.mdRecord the replacement PR-trigger security decision +134/-0

Record the replacement PR-trigger security decision

• Adds accepted ADR 0164, superseding but not editing ADR 0009. It documents the planned same-repo guards, manual fork-review path, base checkout, legacy-caller warning, rollout, alternatives, and consequences.

docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md

architecture.mdDescribe the target shim security model +2/-2

Describe the target shim security model

• Replaces the architecture overview’s pull_request_target security description with ADR 0164’s explicitly marked target state. It also changes the code-agent runtime description to identify same-repo pull_request events as the planned automatic review trigger.

docs/architecture.md

gitlab-implementation.mdMark the GitHub shim comparison as superseded +1/-1

Mark the GitHub shim comparison as superseded

• Annotates the historical pull_request_target description with a link to ADR 0164 and its same-repo pull_request decision. The GitLab security discussion remains unchanged.

docs/problems/gitlab-implementation.md

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 8:37 PM UTC · Ended 8:48 PM UTC

Commit: 9fdf0ec · View workflow run →

This review was superseded by a newer commit. Check the current pull request HEAD's review status before merging.

@qodo-code-review

qodo-code-review Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (2)

Grey Divider


Action required

1. Docs call an unshipped trigger live ✓ Resolved

Resolving commit: 093558f

Resolution reason
At PR head, docs/architecture.md line 797 now reads "Review dispatch is triggered automatically by
pull_request_target events today; the decided target state is same-repo pull_request events (ADR
0164)." This explicitly keeps the current pull_request_target trigger as current behavior and labels
pull_request as target state. The gitlab-implementation.md shim note (line 1273) is likewise marked
"Superseded by ADR 0164, target state". The shim-security bullet in architecture.md (line 59) also
labels the change "target state". The issue is resolved in the current content.
Description
The code agent runtime entry in docs/architecture.md and the shim note in
docs/problems/gitlab-implementation.md describe same-repo pull_request review dispatch as
already active rather than as a target state. Until the separate implementation PR lands, the
installed shim still listens on pull_request_target, so readers checking the current review
trigger and security posture are given the wrong workflow.


Remediation recommended

2. Upgrade guide skips credential effects 📎 Requirement gap ⚙ Maintainability
Description
The Consequences section describes fork-PR, retro, and Dependabot effects but says nothing about how
inference credentials or review publication change once the shim moves to pull_request. Consumers
planning the upgrade therefore cannot tell whether their inference setup or where reviews appear
will change.
Code

docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[R120-122]

+- Repositories that take the release keep automatic review and retro for
+  same-repo PRs after 2026-12-02; public repositories that do not upgrade lose
+  both, while `/fs-*` commands, triage and the fix loop keep working.
Relevance

●● Moderate

Migration-guidance gap is rule-based; no close precedent found for credential or review-publication
effects.

PR-#8158

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 4444013 requires migration guidance that covers fork PRs, inference credentials, and review
publication. The Consequences bullets cover retro, /fs-review, and Dependabot only.

Deliver changes and consumer migration guidance
docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[118-131]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The migration guidance in the ADR's Consequences does not cover inference credentials or review publication, which rule 4444013 requires alongside fork PR effects.

## Fix Focus Areas
- docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[118-122]

## Recommended Fix
Add bullets stating whether same-repo `pull_request` runs get the inference credentials used today, and where automatic review comments are published for same-repo and fork PRs.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


3. ADR background runs long before options 📜 Skill insight ⚙ Maintainability
Description
The Context section has a long opening paragraph, a two-bullet change list, a table introduction,
and two further paragraphs, well beyond three short paragraphs. It also restates permission and
secret analysis inline rather than linking to the problem docs, which delays the rationale before
Options.
Code

docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[R58-61]

+gh-aw, GitHub's own agentic workflow tooling, made the same move: plain
+`pull_request` limited to same-repo PRs by default, with fork PRs handled only
+after a maintainer's slash command
+([github/gh-aw#72579](https://github.com/github/gh-aw/pull/72579)).
Relevance

●● Moderate

Earlier ADR Context-length findings were rejected (PR 2582), but that precedent is older than three
months and only loosely matches.

PR-#2582
PR-#2650

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The Context section contains more than three paragraphs plus bulleted and tabular blocks, which the
rule does not allow.

docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[23-66]
Skill: writing-adrs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The Context section of ADR 0164 has far more than three short paragraphs and restates the permission and secret analysis inline. The rule requires 1-3 short paragraphs that link to problem docs.

## Fix Focus Areas
- docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[23-66]

## Recommended Fix
Reduce Context to at most three short paragraphs. Move the per-author permission table and the gh-aw detail into a linked reference or the Options section, and keep the bullets on what changed, linking to the relevant ADRs.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


4. Old ADR 0009 lacks a superseded pointer ✗ Dismissed
Description
Supersedes in ADR 0164 points at ADR 0009, but ADR 0009 is left unedited with no Superseded by
reference. A reader of ADR 0009 still sees its decision as Accepted and has no link to the
replacement, which the supersession rule requires.

View medium (3)
5. A behaviour claim has no source link ✓ Resolved

Resolving commit: 001f3c2

Resolution reason
The PR head content now cites "(since [#264](https://github.com/fullsend-ai/fullsend/pull/264))"
directly after the pull_request_review trigger claim in the same-repo row, providing the
provenance link the finding requested.
Description
The same-repo row of the Options table states that the shim's pull_request_review trigger already
runs the PR branch's copy today, with no link to the ADR or PR that introduced that trigger. The
shim template confirms the trigger exists, but a file path is not a provenance link to the
introducing change.

6. Upgrade readiness is claimed, not shown ✗ Dismissed
Description
The Options table marks option B as working by 2026-12-02, but the ADR records no validation of the
new trigger under the restriction and no readiness check for the 2026-11-16 brownout. The PR's `make
lint` and model review checks do not establish runtime behaviour under the restriction.

7. Affected automation has no owner list 📎 Requirement gap ⚙ Maintainability
Description
The ADR's Rollout section names only the shim re-render through fullsend repos install and
identifies no shared workflows, generated callers, or automatic review paths that depend on
pull_request_target, nor their responsible maintainers. Maintainers cannot tell which consumers
must upgrade, and the Dependabot case noted in Consequences is left without an owner.
Code

docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[R104-107]

+6. **Rollout.** The new shim ships as a required change in the next fullsend
+   release, together with the dispatch and CLI changes, so no repository can
+   run the new shim against a dispatch that would check out PR code.
+   Repositories receive it through their normal upgrade (`fullsend repos
Relevance

●● Moderate

Requested owner/inventory section is rule-driven; no close precedent in history to decide either
way.

PR-#8158

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 4444010 requires an inventory of affected automation and owners. The Rollout section lists no
such inventory, and the Dependabot effect appears only as a runtime consequence.

Inventory affected PR automation and owners
docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[104-107]
docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[129-131]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The ADR does not inventory the shared workflows, generated caller shims, and automatic review paths that depend on `pull_request_target`, and it names no responsible maintainers for them.

## Fix Focus Areas
- docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[104-107]
- docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[129-131]

## Recommended Fix
Add a section listing each affected shim, generated caller, and automatic review path, with its owning maintainer or administrator and its migration step. Include the Dependabot case explicitly.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗



Informational

8. One ADR records six separate decisions 📜 Skill insight ⚙ Maintainability
Description
The Decision section lists six numbered items, including the old-caller warning and the release
rollout, which are independent choices that could be accepted or reversed separately. The rule
requires one decision per ADR, so these items would need to be split into separate ADRs.
Code

docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[R83-85]

+1. **Trigger.** The shim listens to `pull_request` with the types it uses
+   today (`opened`, `synchronize`, `ready_for_review`, `closed`, `labeled`,
+   `unlabeled`). It no longer lists `pull_request_target`.
Relevance

● Weak

The author explicitly dismissed the same finding type (one ADR bundling multiple decisions) as
intentional in a very recent PR.

PR-#8679

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The Decision section has six numbered items that each state a separate decision, including backward
compatibility for pull_request_target and release sequencing, which the rule treats as more than
one decision.

docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md[83-108]
Skill: writing-adrs

Dismiss ↗ | View ↗


Grey Divider

Context sources
❌ Tickets: failed to load — Ticket collection could not establish complete evidence
✅ Compliance rules (platform): 96 rules
✅ Skills: 5 invoked
  writing-user-docs
  writing-adrs
  check-patch-coverage
  cutting-releases
  adr-corner
✅ Web pages:
  +7 more
✅ Cross-repo context — repo relationships
  Explored: repo: fullsend-ai/experiments (sha: d4292120) — View relationship
  Explored: repo: fullsend-ai/.fullsend (sha: 5e159214) — View relationship
  Explored: repo: fullsend-ai/metrics (sha: def2a969) — View relationship
  Explored: repo: fullsend-ai/agents (sha: 82226d2a) — View relationship
  Explored: repo: fullsend-ai/mlflow-assessments (sha: 0058f877) — View relationship
  Explored: repo: fullsend-ai/test-creator (sha: a5082d20) — View relationship
  Explored: repo: fullsend-ai/pi-anthropic-vertex (sha: d2ecd039) — View relationship
  Explored: repo: fullsend-ai/pi-xai-vertex (sha: a86139bf) — View relationship
  Explored: repo: fullsend-ai/org (sha: b5735c32) — View relationship
  Explored: repo: fullsend-ai/devlake (sha: ba0670f2) — View relationship
✅ REVIEW.md
Review mode: Auto: ⚖️ Balanced: Markdown-only, but it defines a security-sensitive shim authorization design; not skip, not extended.

Grey Divider

Tip of the day
💡 Did you know, you can move or hide resolved findings to focus on what still needs action

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread docs/architecture.md Resolved
@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ⚠️ Cancelled · Started 8:37 PM UTC · Completed 8:47 PM UTC

Commit: 9fdf0ec · View workflow run →

Runtime: pi · Model: sonnet → claude-sonnet-5-5 · Effort: high · Cost: $2.03

This review was superseded by a newer commit. Check the current pull request HEAD's review status before merging.

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 8:49 PM UTC · Ended 8:51 PM UTC

Commit: 5b211d1 · View workflow run →

This review was superseded by a newer commit. Check the current pull request HEAD's review status before merging.

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:53 PM UTC · Completed 9:03 PM UTC

Commit: 093558f · View workflow run →

Runtime: pi · Model: sonnet → claude-sonnet-5-5 · Effort: high · Cost: $1.94

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Site preview

Preview: https://4baa435f-site.fullsend-ai.workers.dev

Commit: 030c52080bd9944644d8c1d7e8226b8bcf1bab68

@fullsend-ai-review fullsend-ai-review Bot added the risk/moderate PR risk: moderate label Nov 9, 2026
@fullsend-ai-review

fullsend-ai-review Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Documentation-only ADR addition with low metadata risk and aligned issue scope, elevated to moderate risk by high recent churn and author contention on docs/architecture.md.

Previous run

Risk Assessment: moderate (2/5)

Details

Documentation-only ADR addition with low metadata risk and aligned issue scope, elevated to moderate risk by high recent churn and author contention on docs/architecture.md.

Previous run (2)

Risk Assessment: moderate (2/5)

Details

Documentation-only ADR addition with low metadata risk and aligned issue scope, elevated to moderate risk by high recent churn and author contention on docs/architecture.md.

Previous run (3)

Risk Assessment: moderate (2/5)

Details

Documentation-only ADR addition with low metadata risk and aligned issue scope, elevated to moderate risk by high recent churn and author contention on docs/architecture.md.

Previous run (4)

Risk Assessment: moderate (2/5)

Details

Documentation-only ADR addition with low metadata risk and aligned issue scope, elevated to moderate risk by high recent churn and multi-author contention on docs/architecture.md.

Previous run (5)

Risk Assessment: moderate (2/5)

Details

Documentation-only ADR addition with low metadata risk and aligned issue scope, elevated to moderate risk by high recent churn and author contention on docs/architecture.md.

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Review

Findings

Low

  • [stale-doc] docs/ADRs/0009-pull-request-target-in-shim-workflows.md:3 — ADR 0009 (status Accepted) is superseded by the new ADR 0164, but the PR deliberately leaves it unedited, so it still reads as the live decision. docs/contributing/adrs.md permits a status-only change to Superseded as a minor annotation. Advisory only.
    Remediation: Optionally mark ADR 0009 Superseded by ADR 0164, or leave as-is.

Earlier findings

  • docs/problems/security-threat-model.md:432, stale-doc, reclassified to info: the passage covers ADR 0054 actor-trust gating and does not mention pull_request_target, so ADR 0164 does not contradict it.

1 finding(s) below the low severity threshold were not posted.

Previous run

<!-- fullsend:review-findings-v2:eyJ2ZXJzaW9uIjoyLCJhY3Rpb24iOiJhcHByb3ZlIiwiZmluZGluZ3MiOlt7InNldmVyaXR5IjoibG93IiwiY2F0ZWdvcnkiOiJzdGFsZS1kb2MiLCJmaWxlIjoiZG9jcy9BRFJzLzAwMDktcHVsbC1yZXF1ZXN0LXRhcmdldC1pbi1zaGltLXdvcmtmbG93cy5tZCIsImlkIjoiZl8yZDgzZGRhNzY3YzFhMTgzIiwibGluZSI6MywiYWN0aW9uYWJsZSI6ZmFsc2UsImRpbWVuc2lvbiI6ImRvY3MtY3VycmVuY3kifSx7InNldmVyaXR5IjoiaW5mbyIsImNhdGVnb3J5Ijoic3RhbGUtZG9jIiwiZmlsZSI6ImRvY3MvcHJvYmxlbXMvc2VjdXJpdHktdGhyZWF0LW1vZGVsLm1kIiwiaWQiOiJmX2VmNDdkZWYxYzVjYjQyOWEiLCJsaW5lIjo0MzIsImFjdGlvbmFibGUiOmZhbHNlLCJkaW1lbnNpb24iOiJkb2NzLWN1cnJlbmN5In0seyJzZXZlcml0eSI6Im1lZGl1bSIsImNhdGVnb3J5Ijoic2VjcmV0LWV4cG9zdXJlIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfNWYyZDBkZjdjNzY2MGJkNCIsImxpbmUiOjEwMiwiYWN0aW9uYWJsZSI6dHJ1ZSwiZGltZW5zaW9uIjoic2VjdXJpdHkifSx7InNldmVyaXR5IjoibWVkaXVtIiwiY2F0ZWdvcnkiOiJlZGdlLWNhc2UiLCJmaWxlIjoiZG9jcy9BRFJzLzAxNjQtcnVuLXRoZS1zaGltLW9uLXB1bGwtcmVxdWVzdC1mb3Itc2FtZS1yZXBvLXBycy5tZCIsImlkIjoiZl8wMTcwM2ZiOTZjZDNmODMyIiwibGluZSI6MTIyLCJhY3Rpb25hYmxlIjp0cnVlLCJkaW1lbnNpb24iOiJjb3JyZWN0bmVzcyJ9LHsic2V2ZXJpdHkiOiJsb3ciLCJjYXRlZ29yeSI6ImF1dGgtYnlwYXNzIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfOWI0NjNmNTgwZjY1YmRkYiIsImxpbmUiOjQ5LCJhY3Rpb25hYmxlIjp0cnVlLCJkaW1lbnNpb24iOiJzZWN1cml0eSJ9LHsic2V2ZXJpdHkiOiJtZWRpdW0iLCJjYXRlZ29yeSI6InByaXZpbGVnZS1lc2NhbGF0aW9uIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfYzkzZDczNjkyZWRjOTg0YSIsImxpbmUiOjk3LCJhY3Rpb25hYmxlIjp0cnVlLCJkaW1lbnNpb24iOiJzZWN1cml0eSJ9XSwiZGlzcG9zaXRpb25zIjpbeyJpZCI6ImZfMmQ4M2RkYTc2N2MxYTE4MyIsInN0YXR1cyI6Im9wZW4ifSx7ImlkIjoiZl9lZjQ3ZGVmMWM1Y2I0MjlhIiwic3RhdHVzIjoicmVjbGFzc2lmaWVkIn0seyJpZCI6ImZfNWYyZDBkZjdjNzY2MGJkNCIsInN0YXR1cyI6InJlc29sdmVkX2J5X2NoYW5nZSJ9LHsiaWQiOiJmXzAxNzAzZmI5NmNkM2Y4MzIiLCJzdGF0dXMiOiJyZXNvbHZlZF9ieV9jaGFuZ2UifSx7ImlkIjoiZl85YjQ2M2Y1ODBmNjViZGRiIiwic3RhdHVzIjoicmVzb2x2ZWRfYnlfY2hhbmdlIn0seyJpZCI6ImZfYzkzZDczNjkyZWRjOTg0YSIsInN0YXR1cyI6InJlc29sdmVkX2J5X2NoYW5nZSJ9XX0= -->

Review

Findings

Low

  • [stale-doc] docs/ADRs/0009-pull-request-target-in-shim-workflows.md:3 — ADR 0009 still reads status: Accepted and describes the pull_request_target shim, while ADR 0164 supersedes it. The PR leaves ADR 0009 unedited on purpose, to keep the accepted ADR as a point-in-time record. The change since the last review did not touch the file, so this stays open as an advisory note. Consider a minimal status/pointer annotation if the ADR process allows one.

Earlier findings

  • docs/problems/security-threat-model.md:432, stale-doc — reclassified (advisory, info). The docs-currency re-check found no statement there that ADR 0164 contradicts.

1 finding(s) below the low severity threshold were not posted.

Previous run (2)

<!-- fullsend:review-findings-v2:eyJ2ZXJzaW9uIjoyLCJhY3Rpb24iOiJhcHByb3ZlIiwiZmluZGluZ3MiOlt7InNldmVyaXR5IjoibG93IiwiY2F0ZWdvcnkiOiJzdGFsZS1kb2MiLCJmaWxlIjoiZG9jcy9BRFJzLzAwMDktcHVsbC1yZXF1ZXN0LXRhcmdldC1pbi1zaGltLXdvcmtmbG93cy5tZCIsImlkIjoiZl8yZDgzZGRhNzY3YzFhMTgzIiwibGluZSI6MywiYWN0aW9uYWJsZSI6ZmFsc2UsImRpbWVuc2lvbiI6ImRvY3MtY3VycmVuY3kifSx7InNldmVyaXR5IjoiaW5mbyIsImNhdGVnb3J5Ijoic3RhbGUtZG9jIiwiZmlsZSI6ImRvY3MvcHJvYmxlbXMvc2VjdXJpdHktdGhyZWF0LW1vZGVsLm1kIiwiaWQiOiJmX2VmNDdkZWYxYzVjYjQyOWEiLCJsaW5lIjo0MzIsImFjdGlvbmFibGUiOmZhbHNlLCJkaW1lbnNpb24iOiJkb2NzLWN1cnJlbmN5In0seyJzZXZlcml0eSI6Im1lZGl1bSIsImNhdGVnb3J5Ijoic2VjcmV0LWV4cG9zdXJlIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfNWYyZDBkZjdjNzY2MGJkNCIsImxpbmUiOjEwMiwiYWN0aW9uYWJsZSI6dHJ1ZSwiZGltZW5zaW9uIjoic2VjdXJpdHkifSx7InNldmVyaXR5IjoibWVkaXVtIiwiY2F0ZWdvcnkiOiJlZGdlLWNhc2UiLCJmaWxlIjoiZG9jcy9BRFJzLzAxNjQtcnVuLXRoZS1zaGltLW9uLXB1bGwtcmVxdWVzdC1mb3Itc2FtZS1yZXBvLXBycy5tZCIsImlkIjoiZl8wMTcwM2ZiOTZjZDNmODMyIiwibGluZSI6MTIyLCJhY3Rpb25hYmxlIjp0cnVlLCJkaW1lbnNpb24iOiJjb3JyZWN0bmVzcyJ9LHsic2V2ZXJpdHkiOiJsb3ciLCJjYXRlZ29yeSI6ImF1dGgtYnlwYXNzIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfOWI0NjNmNTgwZjY1YmRkYiIsImxpbmUiOjQ5LCJhY3Rpb25hYmxlIjp0cnVlLCJkaW1lbnNpb24iOiJzZWN1cml0eSJ9LHsic2V2ZXJpdHkiOiJtZWRpdW0iLCJjYXRlZ29yeSI6InByaXZpbGVnZS1lc2NhbGF0aW9uIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfYzkzZDczNjkyZWRjOTg0YSIsImxpbmUiOjk3LCJhY3Rpb25hYmxlIjp0cnVlLCJkaW1lbnNpb24iOiJzZWN1cml0eSJ9XSwiZGlzcG9zaXRpb25zIjpbeyJpZCI6ImZfMmQ4M2RkYTc2N2MxYTE4MyIsInN0YXR1cyI6Im9wZW4ifSx7ImlkIjoiZl9lZjQ3ZGVmMWM1Y2I0MjlhIiwic3RhdHVzIjoicmVjbGFzc2lmaWVkIn0seyJpZCI6ImZfNWYyZDBkZjdjNzY2MGJkNCIsInN0YXR1cyI6InJlc29sdmVkX2J5X2NoYW5nZSJ9LHsiaWQiOiJmXzAxNzAzZmI5NmNkM2Y4MzIiLCJzdGF0dXMiOiJyZXNvbHZlZF9ieV9jaGFuZ2UifSx7ImlkIjoiZl85YjQ2M2Y1ODBmNjViZGRiIiwic3RhdHVzIjoicmVzb2x2ZWRfYnlfY2hhbmdlIn0seyJpZCI6ImZfYzkzZDczNjkyZWRjOTg0YSIsInN0YXR1cyI6InJlc29sdmVkX2J5X2NoYW5nZSJ9XX0= -->

Review

Findings

Low

  • [stale-doc] docs/ADRs/0009-pull-request-target-in-shim-workflows.md:3 — ADR 0009 still says status: Accepted (frontmatter and Status section) and has no link to ADR 0164, which this PR adds and which declares that it supersedes ADR 0009. The repo's ADR guidance (docs/contributing/adrs.md, skills/writing-adrs/SKILL.md) allows a status flip to Superseded and back-links to superseding ADRs, but does not require them. The PR description says leaving ADR 0009 unedited is deliberate, so this is advisory. A reader who lands on ADR 0009 has no signal that it has been replaced.
    Remediation: Optionally mark ADR 0009 Superseded with a pointer to ADR 0164, either in this PR or together with the implementation PR.

Earlier findings

  • docs/problems/security-threat-model.md:432, stale-doc — reclassified (low to info). The passage only states that PR-close retro dispatch requires write-level access, which ADR 0164 keeps. ADR 0164 narrows when retro runs, but the passage is not wrong. A backlink is optional.

1 finding(s) below the low severity threshold were not posted.

Previous run (3)

<!-- fullsend:review-findings-v2:eyJ2ZXJzaW9uIjoyLCJhY3Rpb24iOiJhcHByb3ZlIiwiZmluZGluZ3MiOlt7InNldmVyaXR5IjoibG93IiwiY2F0ZWdvcnkiOiJzdGFsZS1kb2MiLCJmaWxlIjoiZG9jcy9BRFJzLzAwMDktcHVsbC1yZXF1ZXN0LXRhcmdldC1pbi1zaGltLXdvcmtmbG93cy5tZCIsImlkIjoiZl8yZDgzZGRhNzY3YzFhMTgzIiwibGluZSI6MywiYWN0aW9uYWJsZSI6ZmFsc2UsImRpbWVuc2lvbiI6ImRvY3MtY3VycmVuY3kifSx7InNldmVyaXR5IjoibG93IiwiY2F0ZWdvcnkiOiJzdGFsZS1kb2MiLCJmaWxlIjoiZG9jcy9wcm9ibGVtcy9zZWN1cml0eS10aHJlYXQtbW9kZWwubWQiLCJpZCI6ImZfZWY0N2RlZjFjNWNiNDI5YSIsImxpbmUiOjQzMiwiYWN0aW9uYWJsZSI6ZmFsc2UsImRpbWVuc2lvbiI6ImRvY3MtY3VycmVuY3kifSx7InNldmVyaXR5IjoibWVkaXVtIiwiY2F0ZWdvcnkiOiJzZWNyZXQtZXhwb3N1cmUiLCJmaWxlIjoiZG9jcy9BRFJzLzAxNjQtcnVuLXRoZS1zaGltLW9uLXB1bGwtcmVxdWVzdC1mb3Itc2FtZS1yZXBvLXBycy5tZCIsImlkIjoiZl81ZjJkMGRmN2M3NjYwYmQ0IiwibGluZSI6MTAyLCJhY3Rpb25hYmxlIjp0cnVlLCJkaW1lbnNpb24iOiJzZWN1cml0eSJ9LHsic2V2ZXJpdHkiOiJtZWRpdW0iLCJjYXRlZ29yeSI6ImVkZ2UtY2FzZSIsImZpbGUiOiJkb2NzL0FEUnMvMDE2NC1ydW4tdGhlLXNoaW0tb24tcHVsbC1yZXF1ZXN0LWZvci1zYW1lLXJlcG8tcHJzLm1kIiwiaWQiOiJmXzAxNzAzZmI5NmNkM2Y4MzIiLCJsaW5lIjoxMjIsImFjdGlvbmFibGUiOnRydWUsImRpbWVuc2lvbiI6ImNvcnJlY3RuZXNzIn0seyJzZXZlcml0eSI6ImxvdyIsImNhdGVnb3J5IjoiYXV0aC1ieXBhc3MiLCJmaWxlIjoiZG9jcy9BRFJzLzAxNjQtcnVuLXRoZS1zaGltLW9uLXB1bGwtcmVxdWVzdC1mb3Itc2FtZS1yZXBvLXBycy5tZCIsImlkIjoiZl85YjQ2M2Y1ODBmNjViZGRiIiwibGluZSI6NDksImFjdGlvbmFibGUiOnRydWUsImRpbWVuc2lvbiI6InNlY3VyaXR5In0seyJzZXZlcml0eSI6Im1lZGl1bSIsImNhdGVnb3J5IjoicHJpdmlsZWdlLWVzY2FsYXRpb24iLCJmaWxlIjoiZG9jcy9BRFJzLzAxNjQtcnVuLXRoZS1zaGltLW9uLXB1bGwtcmVxdWVzdC1mb3Itc2FtZS1yZXBvLXBycy5tZCIsImlkIjoiZl9jOTNkNzM2OTJlZGM5ODRhIiwibGluZSI6OTcsImFjdGlvbmFibGUiOnRydWUsImRpbWVuc2lvbiI6InNlY3VyaXR5In1dLCJkaXNwb3NpdGlvbnMiOlt7ImlkIjoiZl9jOTNkNzM2OTJlZGM5ODRhIiwic3RhdHVzIjoicmVzb2x2ZWRfYnlfY2hhbmdlIn0seyJpZCI6ImZfNWYyZDBkZjdjNzY2MGJkNCIsInN0YXR1cyI6InJlc29sdmVkX2J5X2NoYW5nZSJ9LHsiaWQiOiJmXzAxNzAzZmI5NmNkM2Y4MzIiLCJzdGF0dXMiOiJyZXNvbHZlZF9ieV9jaGFuZ2UifSx7ImlkIjoiZl85YjQ2M2Y1ODBmNjViZGRiIiwic3RhdHVzIjoicmVzb2x2ZWRfYnlfY2hhbmdlIn1dfQ== -->

Review

Findings

Low

  • [stale-doc] docs/ADRs/0009-pull-request-target-in-shim-workflows.md:3 — ADR 0164 says it supersedes ADR 0009, but ADR 0009 still reads status: Accepted and has no pointer to ADR 0164, so a reader of ADR 0009 alone cannot tell a newer decision exists. The repo rules allow, but do not require, a status flip or supersession note, and the PR description says ADR 0009 was left alone on purpose. Because ADR 0164 is a target state whose implementation is a follow-up PR, ADR 0009 still matches current behavior.
    Remediation: Optionally add a short note under ## Status in ADR 0009 ("Superseded by ADR 0164"), and flip the status now or when the implementation lands. If you edit it, mention that in the PR description.

  • [stale-doc] docs/problems/security-threat-model.md:432 — Lines 432 and 506 describe the ungated pull_request_target.closed → retro path as a residual risk. ADR 0164's Consequences say fork-PR closures will no longer trigger retro. Both passages are still accurate for current behavior, so this is incomplete rather than wrong.
    Remediation: Optionally add a short target-state parenthetical at both passages pointing to ADR 0164, phrased like the annotation added in docs/problems/gitlab-implementation.md.

Earlier findings

  • docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md:97, privilege-escalation — resolved. Decision rule 2 now requires the dispatch workflow to refuse fork pull_request events. It names the vendored-install trust boundary and requires private repositories to turn off both fork-secret and fork-write-token settings.
Previous run (4)

<!-- fullsend:review-findings-v2:eyJ2ZXJzaW9uIjoyLCJhY3Rpb24iOiJyZXF1ZXN0LWNoYW5nZXMiLCJmaW5kaW5ncyI6W3sic2V2ZXJpdHkiOiJtZWRpdW0iLCJjYXRlZ29yeSI6InByaXZpbGVnZS1lc2NhbGF0aW9uIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfYzkzZDczNjkyZWRjOTg0YSIsImxpbmUiOjk3LCJhY3Rpb25hYmxlIjp0cnVlLCJkaW1lbnNpb24iOiJzZWN1cml0eSJ9LHsic2V2ZXJpdHkiOiJtZWRpdW0iLCJjYXRlZ29yeSI6InNlY3JldC1leHBvc3VyZSIsImZpbGUiOiJkb2NzL0FEUnMvMDE2NC1ydW4tdGhlLXNoaW0tb24tcHVsbC1yZXF1ZXN0LWZvci1zYW1lLXJlcG8tcHJzLm1kIiwiaWQiOiJmXzVmMmQwZGY3Yzc2NjBiZDQiLCJsaW5lIjoxMDIsImFjdGlvbmFibGUiOnRydWUsImRpbWVuc2lvbiI6InNlY3VyaXR5In0seyJzZXZlcml0eSI6Im1lZGl1bSIsImNhdGVnb3J5IjoiZWRnZS1jYXNlIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfMDE3MDNmYjk2Y2QzZjgzMiIsImxpbmUiOjEyMiwiYWN0aW9uYWJsZSI6dHJ1ZSwiZGltZW5zaW9uIjoiY29ycmVjdG5lc3MifSx7InNldmVyaXR5IjoibG93IiwiY2F0ZWdvcnkiOiJhdXRoLWJ5cGFzcyIsImZpbGUiOiJkb2NzL0FEUnMvMDE2NC1ydW4tdGhlLXNoaW0tb24tcHVsbC1yZXF1ZXN0LWZvci1zYW1lLXJlcG8tcHJzLm1kIiwiaWQiOiJmXzliNDYzZjU4MGY2NWJkZGIiLCJsaW5lIjo0OSwiYWN0aW9uYWJsZSI6dHJ1ZSwiZGltZW5zaW9uIjoic2VjdXJpdHkifV0sImRpc3Bvc2l0aW9ucyI6W3siaWQiOiJmXzVmMmQwZGY3Yzc2NjBiZDQiLCJzdGF0dXMiOiJyZXNvbHZlZF9ieV9jaGFuZ2UifSx7ImlkIjoiZl8wMTcwM2ZiOTZjZDNmODMyIiwic3RhdHVzIjoicmVzb2x2ZWRfYnlfY2hhbmdlIn0seyJpZCI6ImZfOWI0NjNmNTgwZjY1YmRkYiIsInN0YXR1cyI6InJlc29sdmVkX2J5X2NoYW5nZSJ9XX0= -->

Review

Findings

Medium

  • [privilege-escalation] docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md:97 — The fork boundary covers repository secrets but not credentials the workflow itself is issued. Decision §2 says that in vendored installs "the only fork control is that GitHub sends no secrets to fork PR runs" and requires private repositories to turn off only "send secrets to workflows from fork pull requests"; the Context table says fork runs get "a read-only token". Both hold only under GitHub's defaults. A private repository can separately enable "Send write tokens to workflows from pull requests". With that on, a fork PR in a vendored install can rewrite the shim and the dispatch workflow, drop both same-repo guards, and obtain a write-capable GITHUB_TOKEN and id-token: write. In vendored installs the consumer repository is its own workflow host, and the ADR admits the mint does not check the ref of that workflow; internal/mintcore/claims.go (AuthorizeToken, ValidateWorkflowRef) checks enrollment, owner, host prefix and basename, not the ref or fork origin. A fork-triggered run could then pass the mint's checks without any repository secret. Severity is medium because it needs a non-default private-repo setting, this PR is documentation only, and the pull_request_review PR-branch exposure already exists.
    Remediation: Require private repositories to turn off both "send secrets" and "send write tokens" to fork pull-request workflows, and check both at rollout. Qualify the Context table's read-only-token claim as default-only. If write-token fork workflows must be supported, enforce fork and ref restrictions where a PR cannot rewrite them, for example at the mint.

Earlier findings

  • docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md:102, secret-exposure — resolved. Decision §4 now states that the PR-branch shim receives repository secrets and that base checkout does not cover this writer-trust boundary.
  • docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md:122, edge-case — resolved. Consequences now state that GitHub runs no pull_request workflow for PRs with merge conflicts and that dispatch skips Dependabot runs with a notice.
  • docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md:49, auth-bypass — resolved. Context now says writers to a workflow host repository are trusted already because the mint does not check the ref of that workflow.

Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (5)

<!-- fullsend:review-findings-v2:eyJ2ZXJzaW9uIjoyLCJhY3Rpb24iOiJyZXF1ZXN0LWNoYW5nZXMiLCJmaW5kaW5ncyI6W3sic2V2ZXJpdHkiOiJtZWRpdW0iLCJjYXRlZ29yeSI6InNlY3JldC1leHBvc3VyZSIsImZpbGUiOiJkb2NzL0FEUnMvMDE2NC1ydW4tdGhlLXNoaW0tb24tcHVsbC1yZXF1ZXN0LWZvci1zYW1lLXJlcG8tcHJzLm1kIiwiaWQiOiJmXzVmMmQwZGY3Yzc2NjBiZDQiLCJsaW5lIjoxMDIsImFjdGlvbmFibGUiOnRydWUsImRpbWVuc2lvbiI6InNlY3VyaXR5In0seyJzZXZlcml0eSI6Im1lZGl1bSIsImNhdGVnb3J5IjoiZWRnZS1jYXNlIiwiZmlsZSI6ImRvY3MvQURScy8wMTY0LXJ1bi10aGUtc2hpbS1vbi1wdWxsLXJlcXVlc3QtZm9yLXNhbWUtcmVwby1wcnMubWQiLCJpZCI6ImZfMDE3MDNmYjk2Y2QzZjgzMiIsImxpbmUiOjEyMiwiYWN0aW9uYWJsZSI6dHJ1ZSwiZGltZW5zaW9uIjoiY29ycmVjdG5lc3MifSx7InNldmVyaXR5IjoibG93IiwiY2F0ZWdvcnkiOiJhdXRoLWJ5cGFzcyIsImZpbGUiOiJkb2NzL0FEUnMvMDE2NC1ydW4tdGhlLXNoaW0tb24tcHVsbC1yZXF1ZXN0LWZvci1zYW1lLXJlcG8tcHJzLm1kIiwiaWQiOiJmXzliNDYzZjU4MGY2NWJkZGIiLCJsaW5lIjo0OSwiYWN0aW9uYWJsZSI6dHJ1ZSwiZGltZW5zaW9uIjoic2VjdXJpdHkifV19 -->

Review

Findings

Medium

  • [secret-exposure] docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md:102 — Decision item 4 says the agent "never runs PR code in a job that holds secrets", but under pull_request the shim workflow itself is PR-controlled code that receives repository secrets (the scaffold forwards inference, Jira, telemetry and GCP WIF secrets). A same-repo PR can replace the reusable-workflow call with arbitrary steps, and neither same-repo guard stops that. The Context table accepts this as existing writer-level risk (writers can already push workflows that read secrets, and pull_request_review already runs the PR branch's shim), but the invariant wording in item 4 and the final Consequences bullet presents base checkout as the full secret boundary. That conflicts with the accepted trust relaxation and with the isolation issue Prepare PR automation for GitHub’s December 2 pull_request_target default block #9221 asks for.
    Remediation: State in Decision item 4 and in the security-invariants consequence that, for same-repo PRs, the shim itself is PR-controlled and runs with repository secrets, and that this is an accepted writer-trust boundary that base checkout does not protect. Otherwise, keep secret-bearing execution behind a workflow definition taken from a trusted ref.
  • [edge-case] docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md:122 — The promise that same-repo PRs retain automatic review omits a functional difference between the events: GitHub does not run pull_request workflows while a PR has merge conflicts, whereas pull_request_target workflows can run in that state. The same-repo guard and base checkout cannot address this because GitHub suppresses the workflow before either executes. Conflicting same-repo PRs therefore lose automatic review under this decision.
    Remediation: Record merge-conflicting same-repo PRs as another limitation of the chosen approach, and name the authorized issue_comment /fs-review path as the fallback until conflicts are resolved.

Low

  • [auth-bypass] docs/ADRs/0164-run-the-shim-on-pull-request-for-same-repo-prs.md:49 — The claim that a rewritten shim cannot point the mint at its own workflow is too broad for workflow-host repositories (upstream fullsend-ai/fullsend, or vendored hosts in WORKFLOW_HOST_REPOS). ValidateWorkflowRef in internal/mintcore/claims.go checks the host prefix and workflow basename but strips the @ref suffix without validating it, so a same-repo PR in such a repository could call a PR-modified reusable workflow and still pass the mint's host and filename checks. This is not new exposure from the ADR, but the sentence is inaccurate.
    Remediation: Limit the mint guarantee in the ADR to non-host consumer repositories, or note that the workflow ref is not validated and that host-repo writers are trusted.

Labels: New ADR about workflow dispatch triggers and shim security for the pull_request_target change.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review

fullsend-ai-review Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 9:28 PM UTC · Completed 9:41 PM UTC

Commit: 1de8d4e · View workflow run →

Runtime: pi · Model: sonnet → claude-sonnet-5-5 · Effort: high · Cost: $2.50

GitHub blocks pull_request_target by default on public repositories
from 2026-12-02. ADR 0164 supersedes ADR 0009: the shim's PR events move
to pull_request with a same-repo guard (also enforced in dispatch), fork
PRs are reviewed via /fs-review, and dispatch checks out the base commit
for pull_request. ADR 0009 is left unchanged.

Updates docs/architecture.md and the GitLab problem doc to point at the
new decision.

Refs #9221

Assisted-by: Claude (author), Gemini (decision + prose checks)
Signed-off-by: Wayne Sun <gsun@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:22 PM UTC · Completed 1:30 PM UTC

Commit: 237d5ff · View workflow run →

Runtime: pi · Model: sonnet → claude-sonnet-5-5 · Effort: high · Cost: $2.15

@fullsend-ai-review fullsend-ai-review Bot removed the ready-for-merge All reviewers approved — ready to merge label Nov 10, 2026
fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review
fullsend-ai-review Bot dismissed their stale review November 10, 2026 13:30

Superseded by updated review

@fullsend-ai-review fullsend-ai-review Bot added the ready-for-merge All reviewers approved — ready to merge label Nov 10, 2026
Fork PRs lose automatic review whoever the author is, including members
and maintainers working from forks. Name who can comment /fs-review
(triage or higher, or an OWNERS approver or reviewer) instead of "a
maintainer", and keep option D as the route back.

Refs #9221

Assisted-by: Claude (author), Gemini (prose check)
Signed-off-by: Wayne Sun <gsun@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 2:17 PM UTC · Completed 2:25 PM UTC

Commit: 761abb1 · View workflow run →

Runtime: pi · Model: sonnet → claude-sonnet-5-5 · Effort: high · Cost: $1.54

@fullsend-ai-review fullsend-ai-review Bot removed the ready-for-merge All reviewers approved — ready to merge label Nov 10, 2026
fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review
fullsend-ai-review Bot dismissed their stale review November 10, 2026 14:25

Superseded by updated review

@fullsend-ai-review fullsend-ai-review Bot added the ready-for-merge All reviewers approved — ready to merge label Nov 10, 2026
Scope section now names both decisions ADR 0164 does not make:
restoring automatic review for authorized fork authors, and keeping
secrets out of PR-modifiable code entirely.

Refs #9221

Assisted-by: Claude
Signed-off-by: Wayne Sun <gsun@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 3:19 PM UTC · Completed 3:27 PM UTC

Commit: 030c520 · View workflow run →

Runtime: pi · Model: sonnet → claude-sonnet-5-5 · Effort: high · Cost: $1.24

@fullsend-ai-review fullsend-ai-review Bot removed the ready-for-merge All reviewers approved — ready to merge label Nov 10, 2026
@fullsend-ai-review
fullsend-ai-review Bot dismissed their stale review November 10, 2026 15:27

Superseded by updated review

This branch was successfully deployed

1 active and 1 inactive deployments
site-preview — 030c5208 Deployed Nov 10, 2026 by github-actions[bot]
dev — 030c5208 Deployed Nov 10, 2026 by waynesun09 via playback #19522
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/dispatch Workflow dispatch and triggers ready-for-merge All reviewers approved — ready to merge risk/moderate PR risk: moderate type/adr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants