Skip to content

chore(dispatch): provide FULLSEND_WORK_ITEM_URL in addition to GITHUB_ISSUE_URL - #6611

Merged
ralphbean merged 2 commits into
mainfrom
provide-issue-url
Aug 26, 2026
Merged

chore(dispatch): provide FULLSEND_WORK_ITEM_URL in addition to GITHUB_ISSUE_URL#6611
ralphbean merged 2 commits into
mainfrom
provide-issue-url

Conversation

@ralphbean

@ralphbean ralphbean commented Aug 25, 2026

Copy link
Copy Markdown
Member

As part of the CEL overlays work, it is now possible for generic dispatch to run either in response to a jira event or a github event. This means we cannot assume that the issue url is a github issue.

All of the default agents today depend on that GITHUB_ISSUE_URL var. We need to keep this as a backwards-compatible thing for a while.

Add a new FULLSEND_WORK_ITEM_URL that exposes the entity.url of the triggering normalized event for agents to use.

For a moment, the proposed var here was TRIGGER_ENTITY_URL based off some old issue about it. @waynesun09 pointed out in review that we already have a normative spec doc merged that defines FULLSEND_WORK_ITEM_URL as the correct var to use here - so, I've switched to that.

Fixes #6609

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Expose ISSUE_URL alongside the legacy GitHub issue URL

✨ Enhancement ⚙️ Configuration changes 🕐 Less than 10 minutes

Grey Divider

AI Description

• Exposes ISSUE_URL to triage, code, review, prioritize, and harness agents.
• Retains GITHUB_ISSUE_URL for compatibility with existing default agent configurations.
Diagram

graph TD
  A["Event payload"] --> B["Dispatch jobs"] --> C["GITHUB_ISSUE_URL"] --> E["Agent runtime"]
  B --> D["ISSUE_URL"] --> E
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Normalized trigger URL
  • ➕ Matches the stated TRIGGER_ENTITY_URL contract
  • ➕ Supports non-GitHub entities through normalized entity.url
  • ➕ Clearly distinguishes trigger context from GitHub issue context
  • ➖ Requires normalized entity data to reach every dispatch path
  • ➖ Requires consumers to migrate to the new variable

Recommendation: Prefer exposing TRIGGER_ENTITY_URL from the normalized event's entity.url while retaining GITHUB_ISSUE_URL during migration. The current diff instead adds ISSUE_URL and continues resolving GitHub issue or pull-request fields, so it does not fully match the PR title and stated Jira-compatible intent.

Files changed (1) +5 / -0

Other (1) +5 / -0
reusable-dispatch.ymlExpose a generic issue URL alias to dispatched agents +5/-0

Expose a generic issue URL alias to dispatched agents

• Adds 'ISSUE_URL' beside 'GITHUB_ISSUE_URL' for triage, code, review, prioritize, and harness agent invocations. Existing URL resolution and the legacy variable remain unchanged for backward compatibility.

.github/workflows/reusable-dispatch.yml

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 25, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:09 PM UTC · Completed 8:23 PM UTC

Commit: cd4b558 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $3.15

@codecov

codecov Bot commented Aug 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@qodo-code-review

qodo-code-review Bot commented Aug 25, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Per-org agents miss variable 🐞 Bug ≡ Correctness
Description
The PR adds the new URL only to inlined jobs in reusable-dispatch.yml, while the retained per-org
reusable-{stage}.yml jobs still export only GITHUB_ISSUE_URL. Per-org triage, code, review, and
prioritize agents therefore cannot receive the new trigger URL even after callers migrate to it.
Code

.github/workflows/reusable-dispatch.yml[685]

+          ISSUE_URL: ${{ fromJSON(needs.route.outputs.event_payload).issue.html_url }}
Relevance

●●● Strong

Accepted precedent shows team fixes reusable+scaffold workflows consistently; per-org path must
match new contract too.

PR-#1688
PR-#6455

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The dispatch workflow documents that its inlined stages serve per-repo mode and the standalone stage
workflows are still used for per-org mode. Each standalone action invocation exports
GITHUB_ISSUE_URL without any new neutral URL variable, proving the new contract is absent on that
supported path.

.github/workflows/reusable-dispatch.yml[1-9]
.github/workflows/reusable-triage.yml[163-167]
.github/workflows/reusable-code.yml[177-181]
.github/workflows/reusable-review.yml[171-175]
.github/workflows/reusable-prioritize.yml[149-153]

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 new trigger URL environment variable is added only to the inlined per-repo stage implementations. The retained per-org reusable stage workflows do not expose it, producing install-mode-dependent agent behavior.

## Issue Context
`reusable-dispatch.yml` explicitly states that the standalone stage workflows remain active for per-org mode. Mirror the new `TRIGGER_ENTITY_URL` environment entry in each applicable standalone stage action invocation while retaining `GITHUB_ISSUE_URL` for compatibility.

## Fix Focus Areas
- .github/workflows/reusable-dispatch.yml[5-9]
- .github/workflows/reusable-triage.yml[163-167]
- .github/workflows/reusable-code.yml[177-181]
- .github/workflows/reusable-review.yml[171-175]
- .github/workflows/reusable-prioritize.yml[149-153]

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


2. Wrong trigger variable name 🐞 Bug ≡ Correctness
Description
All five additions export ISSUE_URL, so agents that adopt the PR's promised TRIGGER_ENTITY_URL
contract receive an unset value. This makes the change ineffective on both native stage jobs and
generic harness dispatch.
Code

.github/workflows/reusable-dispatch.yml[685]

+          ISSUE_URL: ${{ fromJSON(needs.route.outputs.event_payload).issue.html_url }}
Relevance

●●● Strong

Recent workflow precedent accepts correcting env-variable naming mismatches; PR explicitly promises
TRIGGER_ENTITY_URL contract.

PR-#2473
PR-#6455

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Each added environment entry is named ISSUE_URL; repository-wide search finds no
TRIGGER_ENTITY_URL, while the harness execution projection carries normalized work-item
entity.url in event_payload.issue.html_url. Thus the URL may be available internally, but it is
never exported under the contract introduced by this PR.

.github/workflows/reusable-dispatch.yml[681-686]
.github/workflows/reusable-dispatch.yml[802-807]
.github/workflows/reusable-dispatch.yml[930-935]
.github/workflows/reusable-dispatch.yml[1402-1407]
.github/workflows/reusable-dispatch.yml[1729-1734]
docs/normative/normalized-event/v1/README.md[205-218]

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 workflow exports `ISSUE_URL`, but the new public contract is `TRIGGER_ENTITY_URL`. Consumers using the documented variable therefore receive no trigger entity URL.

## Issue Context
The same incorrect name was added to each inlined stage and to `harness-run`. Keep `GITHUB_ISSUE_URL` for compatibility, but rename the newly added variable consistently; for the generic path, preserve the URL projected from the normalized event entity.

## Fix Focus Areas
- .github/workflows/reusable-dispatch.yml[685-685]
- .github/workflows/reusable-dispatch.yml[806-806]
- .github/workflows/reusable-dispatch.yml[934-934]
- .github/workflows/reusable-dispatch.yml[1406-1406]
- .github/workflows/reusable-dispatch.yml[1733-1733]

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


Grey Divider

Context sources
✅ Compliance rules (platform): 61 rules
Review mode: ⚖️ Balanced: This is a localized workflow behavior change exposing an event URL across several dispatch paths; it is not dense enough for extended review, but runtime configuration correctness warrants more than lite.

Grey Divider

Tip of the day
💡 Did you know, you can start a comment with 'qodo' or '@qodo' to chat about any finding

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread .github/workflows/reusable-dispatch.yml Outdated
Comment thread .github/workflows/reusable-dispatch.yml Outdated
@fullsend-ai-review fullsend-ai-review Bot added the risk/moderate PR risk: moderate label Aug 25, 2026
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 25, 2026

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Tiny additive change (11 lines) to a high-churn CI workflow file with 35 commits in 30d from 12 authors; the low intrinsic complexity and exact scope match to the linked issue keep the composite at moderate.

Previous run

Risk Assessment: moderate (2/5)

Details

Tiny additive change (5 lines) to a high-churn CI workflow file with 35 commits in 30d from 16 authors; the low intrinsic complexity and exact scope match to the linked issue keep the composite at moderate.

Previous run (2)

Risk Assessment: moderate (2/5)

Details

Small additive CI workflow change (5 lines, 1 file) with matched issue scope, offset by the file being a high-churn hotspot with many authors and frequent fix commits.

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 25, 2026

Copy link
Copy Markdown

Review

Findings

Medium

Low

  • [intent-mismatch] PR title says "provide TRIGGER_ENTITY_URL" but the code and linked issue (Add FULLSEND_WORK_ITEM_URL to dispatch workflows alongside GITHUB_ISSUE_URL for backwards compatibility #6609) both use FULLSEND_WORK_ITEM_URL. The title was never updated after the variable was renamed per reviewer feedback. This matters for release notes since GoReleaser uses PR titles.

  • [incomplete-docs] docs/guides/user/running-agents-locally.md — The triage and code agent env-file examples show only GITHUB_ISSUE_URL. Now that FULLSEND_WORK_ITEM_URL is injected by the dispatch workflow as the forge-agnostic alternative, users running agents locally against non-GitHub work items have no guidance on setting this variable.

  • [incomplete-docs] docs/guides/user/bring-your-own-agent.md — The overlay example passes only GITHUB_ISSUE_URL. Agent authors following this guide will not know to forward FULLSEND_WORK_ITEM_URL in their overlays.

Previous run

Review

Findings

Medium

Previous run (2)

Review

Findings

High

Medium

Low

  • [incomplete-change] .github/workflows/reusable-code.yml:180 — Issue Add FULLSEND_WORK_ITEM_URL to dispatch workflows alongside GITHUB_ISSUE_URL for backwards compatibility #6609 mentions "Similar patterns" in reusable-code.yml, reusable-triage.yml, reusable-review.yml, and reusable-prioritize.yml. These are standalone stage workflows for per-org installation mode, which is deprecated (ADR 0044). Per AGENTS.md, per-org mode content should not be extended. Confirm whether updating these files is planned separately or is unnecessary given the deprecation.

Labels: PR modifies dispatch workflow infrastructure (.github/workflows/reusable-dispatch.yml), adding env var plumbing for forge-agnostic entity URLs


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 added component/dispatch Workflow dispatch and triggers type/chore Maintenance and housekeeping tasks labels Aug 25, 2026
…UE_URL

As part of the CEL overlays work, it is now possible for generic
dispatch to run either in response to a jira event or a github event.
This means we cannot assume that the issue url is a github issue.

All of the default agents today depend on that GITHUB_ISSUE_URL var.
We need to keep this as a backwards-compatible thing for a while.

Add a new TRIGGER_ENTITY_URL that exposes the entity.url of the
triggering normalized event for agents to use.

Fixes #6609

Signed-off-by: Ralph Bean <rbean@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 25, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:27 PM UTC · Completed 8:41 PM UTC

Commit: 662eacc · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $3.30

@waynesun09 waynesun09 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review-only pass at head 662eacc. Two inline findings: one HIGH (the review job's new variable has no pull_request fallback, so it is empty on PR-triggered runs) and one MEDIUM (the normative Jira-poll-adapter doc already assigns entity.url to a different env-var name and is not updated here).

Comment thread .github/workflows/reusable-dispatch.yml Outdated
Comment thread .github/workflows/reusable-dispatch.yml Outdated
…d fix review stage fallback

Addresses review feedback on #6611:

1. Rename TRIGGER_ENTITY_URL to FULLSEND_WORK_ITEM_URL to match the
   normative spec in docs/normative/normalized-event/v1/jira-poll-adapter.md
   and ADR 0063. The FULLSEND_WORK_ITEM_* variables are the canonical
   forge-agnostic names for entity metadata.

2. Fix FULLSEND_WORK_ITEM_URL for the review stage to include a fallback
   to .pull_request.html_url, since review's primary trigger is
   pull_request_target which has no .issue field. Without this fallback,
   the variable was empty on every PR-triggered review run.

3. Update jira-poll-adapter.md to clarify that FULLSEND_WORK_ITEM_URL is
   set for both GitHub and Jira events, making it truly forge-agnostic.

Assisted-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Signed-off-by: Ralph Bean <rbean@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

🤖 Review · ❌ Terminated · Started 6:27 PM UTC · Ended 6:45 PM UTC

Commit: 412a0c5 · View workflow run →

@github-actions

Copy link
Copy Markdown

Site preview

Preview: https://39d61534-site.fullsend-ai.workers.dev

Commit: 412a0c543c7ca348ff2e71269f93de2c3aeab3ba

@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 6:27 PM UTC · Completed 6:45 PM UTC

Commit: 412a0c5 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $5.04

@ralphbean ralphbean changed the title chore(dispatch): provide TRIGGER_ENTITY_URL in addition to GITHUB_ISSUE_URL chore(dispatch): provide FULLSEND_WORK_ITEM_URL in addition to GITHUB_ISSUE_URL Aug 26, 2026
@ralphbean
ralphbean enabled auto-merge August 26, 2026 19:27
@ggallen

ggallen commented Aug 26, 2026

Copy link
Copy Markdown
Member

@rbean, sorry, I misunderstood. I think you should use TRIGGER_ENTITY_URL then.

@ralphbean
ralphbean added this pull request to the merge queue Aug 26, 2026
Merged via the queue into main with commit 26e4dab Aug 26, 2026
56 of 58 checks passed
@ralphbean
ralphbean deleted the provide-issue-url branch August 26, 2026 20:01
@fullsend-ai-retro

fullsend-ai-retro Bot commented Aug 26, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 8:03 PM UTC · Completed 8:17 PM UTC

Commit: 412a0c5 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $4.50

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #6611FULLSEND_WORK_ITEM_URL dispatch variable

Timeline: Human-authored PR adding FULLSEND_WORK_ITEM_URL to dispatch workflow env blocks. Two commits over ~22 hours. First commit (662eacc) used TRIGGER_ENTITY_URL; second commit (412a0c5) renamed to match the normative spec and added pull_request fallback for the review stage. Review agent ran 3 successful times (on commits cd4b558, 662eacc, 412a0c5; ~$11.49 total). Two human reviewers (ggallen, waynesun09) provided substantive feedback.

What the review agent did well:

  • Caught intent mismatch between PR title/body and code on first commit (HIGH) — independently identified the naming discrepancy
  • Identified per-org workflow gap (LOW), correctly noting ADR 44 deprecation context
  • Caught PR title drift after rename — valid GoReleaser release-notes concern no human flagged (LOW)
  • Identified doc gaps in running-agents-locally and BYOA guides (LOW)

Critical gap — functional bug missed: Human reviewer waynesun09 caught that the review stage's FULLSEND_WORK_ITEM_URL expression (fromJSON(...).issue.html_url) resolves to empty on pull_request_target events because the payload builder emits issue: null for those events. The review stage's primary triggers (opened, synchronize, ready_for_review, labeled) are all pull_request_target events, making this the dominant path — not an edge case. Neither the fullsend review agent nor qodo caught this. The human traced four reasoning steps: event type → route step → payload builder → env expression → empty string.

Secondary gap — normative spec missed: The agent caught the surface-level naming mismatch but not the deeper issue: docs/normative/normalized-event/v1/jira-poll-adapter.md already defines FULLSEND_WORK_ITEM_URL as the canonical name with MUST-level language. waynesun09 caught this, preventing a third name for the same concept.

Noise observation: The protected-path finding (MEDIUM) was raised on all 3 runs, restating what the requires-manual-review label already communicates. This creates review fatigue without adding information.

Existing issues with new evidence: #3285 (review agent should cross-reference governance docs) — this PR provides direct evidence: the review agent failed to discover the normative spec defining the canonical env-var name, catching a title/code mismatch symptom instead of the deeper spec-compliance issue.

No autonomy change warranted from this single PR. The agent demonstrated useful capabilities (intent-mismatch, doc gaps, title drift) but missed the highest-value finding.

Proposals filed

guyoron1 pushed a commit to guyoron1/agents that referenced this pull request Aug 27, 2026
…WORK_ITEM_URL

Rename the Jira forge env var from TRIGGER_ENTITY_URL to
FULLSEND_WORK_ITEM_URL across all references: harness config
(triage.yaml runner and sandbox env), the Jira env file
(env/jira/triage.env), documentation (docs/triage.md), and
the local testing guide (LOCAL.md).

This aligns with the decision in fullsend-ai/fullsend#6611
to standardize on FULLSEND_WORK_ITEM_URL.

Note: pre-commit could not fetch remote hook repos due to
sandbox network restrictions. Hooks were run directly
(YAML validation, trailing whitespace, end-of-file, private
key detection, gitleaks) and all passed.

Closes fullsend-ai#1053
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 requires-manual-review Review requires human judgment risk/moderate PR risk: moderate type/chore Maintenance and housekeeping tasks

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add FULLSEND_WORK_ITEM_URL to dispatch workflows alongside GITHUB_ISSUE_URL for backwards compatibility

4 participants