Skip to content

docs(adr): amend ADR 48 for dispatch version-skew and migration#2453

Open
rh-hemartin wants to merge 1 commit into
mainfrom
docs/automatic-updates-amendments
Open

docs(adr): amend ADR 48 for dispatch version-skew and migration#2453
rh-hemartin wants to merge 1 commit into
mainfrom
docs/automatic-updates-amendments

Conversation

@rh-hemartin

Copy link
Copy Markdown
Member

Summary

  • Documents the overlooked reusable-dispatch.yml hardcoded @v0 problem for per-repo version pinning
  • Adds the release-branch solution: stamp version refs into dispatch at release time via yq
  • Documents the backwards-compatible input alias strategy for migrating fullsend_ai_ref/fullsend_version to new names
  • Annotates ADR 48 consequences with the transition period reality

Test plan

  • Plan doc reads coherently with the original implementation section
  • ADR annotation follows the "minor annotations welcome" guideline

🤖 Generated with Claude Code

Document the reusable-dispatch.yml hardcoded @v0 gap, the release-branch
solution, and the backwards-compatible input alias strategy for
transitioning from fullsend_ai_ref/fullsend_version to the new names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Hector Martinez <hemartin@redhat.com>
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Amend ADR 48 with dispatch version-skew notes and migration strategy
📝 Documentation 🕐 10-20 Minutes

Grey Divider

Description

• Annotate ADR 48 to reflect a real transition period before breaking workflow changes.
• Document the per-repo reusable-dispatch.yml@v0 hardcoding issue and accepted release-branch fix.
• Describe a backwards-compatible input-alias approach for migrating to new input names.
Diagram

graph TD
  A["ADR 48"] --> B["Automatic Updates plan"] --> C["Per-repo mode"] --> D["reusable-dispatch.yml"] --> E["reusable-<stage>.yml"]
  B --> F(["Release branch tagging"])
  F --> D
  B --> G["Input alias fallback"]
  G --> E
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Create a new ADR to supersede ADR 48
  • ➕ Keeps ADR 48 as a strict point-in-time record
  • ➕ Captures the migration/transition decision more formally
  • ➕ Avoids strikethrough edits in Consequences
  • ➖ More process overhead for what is mostly an implementation-discovered constraint
  • ➖ Splits context across ADRs unless carefully cross-referenced
2. Keep all updates only in the design doc (no ADR annotation)
  • ➕ Minimizes churn in the accepted ADR
  • ➕ Keeps evolving narrative in the plan where details belong
  • ➖ Reviewers may miss that ADR 48’s consequence assumptions changed in practice
  • ➖ Less discoverable for decision tracking

Recommendation: The current approach (minor annotation to ADR 48 plus detailed plan amendments) is appropriate given the ADR’s explicit allowance for clarifying notes and cross-references. If the transition period becomes a materially new decision (e.g., formal policy/timeline for breaking changes), follow up with a superseding ADR and keep this annotation as the pointer.

Files changed (2) +80 / -2

Documentation (2) +80 / -2
0048-automatic-updates.mdAnnotate ADR 48 consequences with transition-period reality +6/-2

Annotate ADR 48 consequences with transition-period reality

• Replaces the prior assumption of automatic migration with an explicit transition period before breaking workflow changes. Adds a dated note pointing readers to the amended Automatic Updates plan for dispatch version-skew and the release-branch solution.

docs/ADRs/0048-automatic-updates.md

automatic-updates.mdAdd 2026-06-19 amendments: dispatch version-skew, release stamping, migration aliases +74/-0

Add 2026-06-19 amendments: dispatch version-skew, release stamping, migration aliases

• Documents the per-repo 'reusable-dispatch.yml' hardcoded '@v0' limitation and evaluates options, selecting a release-branch/tagging approach that stamps version refs into dispatch at release time. Adds guidance for 'main' to use '@main' and describes a backwards-compatible input-alias strategy for migrating from 'fullsend_ai_ref'/'fullsend_version' to the new input names during a transition window.

docs/plans/automatic-updates.md

@github-actions

Copy link
Copy Markdown

Site preview

Preview: https://a2ace8bd-site.fullsend-ai.workers.dev

Commit: f2810f194598ef6437d5c3913fb3fa1d01e5fbea

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (0) 📜 Skill insights (1)

Context used
✅ Compliance rules (platform): 51 rules
✅ Skills: writing-user-docs, writing-adrs

Grey Divider


Action required

1. ADR 0048 Consequences rewritten 📜 Skill insight § Compliance
Description
docs/ADRs/0048-automatic-updates.md is an already Accepted ADR, but the PR changes the meaning
of a Consequences bullet (replacing the original outcome with a new transition/breaking-changes
statement). Accepted ADR sections should only receive minor annotations/cross-references, not
substantive content rewrites.
Code

docs/ADRs/0048-automatic-updates.md[R58-61]

* `v0` should be migrated to the new moving tag and deleted.
-* Current users track the new floating tag automatically to keep behavior consistent.
+* ~~Current users track the new floating tag automatically to keep behavior consistent.~~
+* Current users have a period of transition in which version to track, after a while we introduce
+breaking changes to the workflows.
Evidence
PR Compliance IDs 1062057 and 1062103 require that accepted ADRs are not substantively rewritten.
The changed Consequences bullets in docs/ADRs/0048-automatic-updates.md strike the original
consequence and introduce new behavior/impact language (transition period + breaking workflow
changes), which alters the recorded consequences rather than adding a brief note/cross-reference.

Rule 1062057: Restrict modifications to accepted ADRs on main
docs/ADRs/0048-automatic-updates.md[58-61]
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
ADR 0048 is `Accepted`, but the PR substantively changes the Consequences section by striking the original consequence and adding a new one that changes the historical record.

## Issue Context
The ADR file explicitly states that accepted ADRs should not have their Context/Decision/Consequences substantially rewritten; only minor annotations (cross-references, short notes, clarifications) are allowed.

## Fix Focus Areas
- docs/ADRs/0048-automatic-updates.md[58-66]

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



Remediation recommended

2. Broken consequences list 🐞 Bug ⚙ Maintainability
Description
In ADR 48, the new transition bullet wraps onto an unindented line, which breaks Markdown list
continuation and renders the second line as a separate paragraph. This makes the Consequences
section display incorrectly and is easy to misread.
Code

docs/ADRs/0048-automatic-updates.md[R60-61]

+* Current users have a period of transition in which version to track, after a while we introduce
+breaking changes to the workflows.
Evidence
The Consequences bullet at line 60 is immediately followed by an unindented line 61, which
CommonMark treats as outside the list item, breaking list formatting.

docs/ADRs/0048-automatic-updates.md[56-62]

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 Consequences list item is split across two lines, but the continuation line is not indented, so Markdown parsers will terminate the list item and render the continuation as a standalone paragraph.

## Issue Context
This is in the ADR Consequences section, which is expected to be readable and well-structured.

## Fix Focus Areas
- docs/ADRs/0048-automatic-updates.md[58-62]

## Suggested fix
Indent the continuation line by at least two spaces (or rewrite the bullet onto a single line) so it remains part of the list item.

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


3. Broken bullet continuations 🐞 Bug ⚙ Maintainability
Description
In the 2026-06-19 amendments section, multiple list items have unindented continuation lines (e.g.,
the rationale lines after 'rejected/accepted'), which breaks list structure in Markdown. This makes
the options/migration sections render inconsistently and reduces readability.
Code

docs/plans/automatic-updates.md[R123-128]

+* **Re-introduce `reusable-dispatch.yml` to the user repository** - rejected
+as we already extracted it to reduce update noise in the user's repository
+* **Convert dispatch to a composite action** - rejected because actions
+can't spawn jobs naturally, and can't use `workflow_call`.
+* **Commit changes to reusable-dispatch.yml on release** - accepted, more details
+below.
Evidence
The newly added bullets show continuation lines starting at column 0 (e.g., 'as we already…', 'can't
spawn…', 'below.', and wrapped migration-solution lines), which breaks list formatting.

docs/plans/automatic-updates.md[121-128]
docs/plans/automatic-updates.md[159-163]

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

## Issue description
Several bullets in the amendments section wrap onto subsequent lines without indentation. In Markdown, unindented wrapped lines are not reliably treated as part of the list item, causing broken list rendering.

## Issue Context
This affects the newly added amendments content (options list and migration solutions list).

## Fix Focus Areas
- docs/plans/automatic-updates.md[121-128]
- docs/plans/automatic-updates.md[159-163]

## Suggested fix
For each multi-line bullet, indent the continuation lines by at least two spaces (or rewrite each bullet as a single line). For example:
- Keep the rationale lines ("as we already...", "can't spawn jobs...", "below.") indented under their bullet.
- Do the same for the migration solutions bullets so wrapped lines stay inside the list item.

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



Informational

4. YAML filename extension mismatch 🐞 Bug ⚙ Maintainability
Description
The YAML snippet comment references reusable-dispatch.yaml/dispatch.yaml, but the repository
workflows use the .yml extension (e.g., reusable-dispatch.yml). This inconsistency can confuse
readers trying to locate the referenced file(s).
Code

docs/plans/automatic-updates.md[R171-173]

+```yaml
+# reusable-dispatch.yaml/dispatch.yaml
+triage:
Evidence
The docs snippet uses .yaml in the comment, while the actual workflow file in this repo is named
reusable-dispatch.yml, demonstrating the mismatch.

docs/plans/automatic-updates.md[171-173]
.github/workflows/reusable-dispatch.yml[1-12]

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

## Issue description
A code-block comment references workflow filenames with a `.yaml` extension even though the repo uses `.yml` for these workflows.

## Issue Context
This is in an example snippet within the 2026-06-19 amendments section.

## Fix Focus Areas
- docs/plans/automatic-updates.md[171-173]

## Suggested fix
Update the comment to match actual repo filenames, e.g. `# reusable-dispatch.yml/dispatch.yml` (or name the specific real file path(s) being discussed).

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


Grey Divider

Qodo Logo

Comment on lines 58 to +61
* `v0` should be migrated to the new moving tag and deleted.
* Current users track the new floating tag automatically to keep behavior consistent.
* ~~Current users track the new floating tag automatically to keep behavior consistent.~~
* Current users have a period of transition in which version to track, after a while we introduce
breaking changes to the workflows.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

1. Adr 0048 consequences rewritten 📜 Skill insight § Compliance

docs/ADRs/0048-automatic-updates.md is an already Accepted ADR, but the PR changes the meaning
of a Consequences bullet (replacing the original outcome with a new transition/breaking-changes
statement). Accepted ADR sections should only receive minor annotations/cross-references, not
substantive content rewrites.
Agent Prompt
## Issue description
ADR 0048 is `Accepted`, but the PR substantively changes the Consequences section by striking the original consequence and adding a new one that changes the historical record.

## Issue Context
The ADR file explicitly states that accepted ADRs should not have their Context/Decision/Consequences substantially rewritten; only minor annotations (cross-references, short notes, clarifications) are allowed.

## Fix Focus Areas
- docs/ADRs/0048-automatic-updates.md[58-66]

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

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 19, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 9:25 AM UTC · Completed 9:47 AM UTC
Commit: f2810f1 · View workflow run →

@codecov

codecov Bot commented Jun 19, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

High

  • [missing-authorization] docs/ADRs/0048-automatic-updates.md — No linked issue authorizes this work. This PR adds ~80 lines of amendments to accepted architectural documentation (ADR 48 and its companion plan document) without traceable authorization. Non-trivial diffs require explicit authorization via a linked issue.
    Remediation: Link the PR to an issue that authorizes amending ADR 48, or create an issue documenting the discovered implementation gap (hardcoded @v0 in reusable-dispatch.yml) and the decision to document it via amendment rather than implementation fix.

Medium

  • [stale-doc] skills/cutting-releases/SKILL.md — The PR amendments describe a new release-branch strategy (tags created on release branches instead of main), but the cutting-releases skill documentation still describes the current main-branch release process. While the current runbook is not wrong today (the plan documents a future process), this is a forward-looking concern: once the release-branch process is implemented, the cutting-releases skill will be stale.
    Remediation: Update skills/cutting-releases/SKILL.md to reflect the new release-branch process when it is implemented, or add a note cross-referencing the planned changes.

  • [internal-consistency] docs/plans/automatic-updates.md:164 — The fallback snippet shows fullsend_cli_ref falling back to fullsend_version, but downstream stage workflows (reusable-triage.yml, reusable-code.yml, etc.) currently only accept fullsend_version and fullsend_ai_ref as input names — not fullsend_cli_ref or fullsend_actions_ref. The plan's release procedure (steps 4–5) only mentions updating reusable-dispatch.yml, not the stage workflows. If the release-branch process is followed before stage workflows are updated, the new input names will be silently ignored.
    Remediation: Add an explicit step or prerequisite noting that all reusable-{stage}.yml workflow input declarations must be updated to accept fullsend_actions_ref and fullsend_cli_ref (in addition to or replacing the old names) before the release-branch process is executed.

Low

  • [edge-case-correctness] docs/plans/automatic-updates.md:143 — The release procedure (step 7) says to tag the branch with ${VERSION} and latest, but does not mention force-pushing the latest tag. On subsequent releases, latest already exists remotely and a plain push will be rejected. The existing cutting-releases SKILL.md already handles this for v0 with git tag -f and --force.

  • [internal-consistency] docs/ADRs/0048-automatic-updates.md:59 — The original ADR consequence is struck through and replaced with materially different text. The ADR policy comment (lines 19–24) says "do not substantially rewrite the Context, Decision, or Consequences sections." This is a borderline case.

  • [amendment-annotation-style] docs/ADRs/0048-automatic-updates.md:59 — The (added 2026-06-19) annotation format and strikethrough markdown are novel in this codebase's ADR corpus. No other ADR uses either pattern.

  • [adr-amendment-scope] docs/plans/automatic-updates.md:110 — 74 lines of new content with design decisions and rejected alternatives. While plan documents have no immutability policy, the volume and ADR-style language ("rejected"/"accepted") suggest these decisions could warrant a separate ADR.

  • [design-coherence] docs/plans/automatic-updates.md:110 — The amendments use ADR-style rejected/accepted language for options, which is stylistically unusual for a plan document.

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

See the review comment for full details.

their shims. Rejected.
* Update `v0` a last time to these changes. This would mean that workflows would
need to preserve behaviour. Accepted, more details below.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] internal-consistency

The fallback snippet uses fullsend_cli_ref and fullsend_actions_ref as primary input names, but downstream stage workflows only accept fullsend_version and fullsend_ai_ref. The plan does not document updating stage workflow input declarations.

Suggested fix: Add an explicit step noting that all reusable-{stage}.yml workflow input declarations must be updated to accept the new input names before the release-branch process is executed.

1. Make changes to `reusable-dispatch.yml` to change defaults values for `fullsend_actions_ref`,
`fullsend_cli_ref`, `fullsend_ai_ref` and `fullsend_version` from `v0` to `${VERSION}`.
1. Commit the changes to the branch.
1. Tag the branch with `${VERSION}` and `latest`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] edge-case-correctness

The release procedure does not mention force-pushing the latest tag, which will fail on subsequent releases because latest already exists on the remote.

Suggested fix: Clarify step 7/8 to specify that the latest tag must be force-pushed.


* `v0` should be migrated to the new moving tag and deleted.
* Current users track the new floating tag automatically to keep behavior consistent.
* ~~Current users track the new floating tag automatically to keep behavior consistent.~~

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] internal-consistency

The original ADR consequence is struck through and replaced with materially different text, which is borderline with the ADR policy of not substantially rewriting Consequences sections.


* `v0` should be migrated to the new moving tag and deleted.
* Current users track the new floating tag automatically to keep behavior consistent.
* ~~Current users track the new floating tag automatically to keep behavior consistent.~~

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] amendment-annotation-style

The (added 2026-06-19) annotation format and strikethrough markdown are novel in this codebase's ADR corpus. No other ADR uses either pattern.

fullsend_cli_ref: v0.15.0
```

## 2026-06-19 amendments

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] adr-amendment-scope

74 lines of new content with design decisions and rejected alternatives added to a plan document. The volume and ADR-style language suggest these decisions could warrant a separate ADR.

fullsend_cli_ref: v0.15.0
```

## 2026-06-19 amendments

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] design-coherence

The amendments use ADR-style rejected/accepted language for options, which is stylistically unusual for a plan document.

@rh-hemartin rh-hemartin self-assigned this Jun 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant