Skip to content

docs(updates): add ADR discussing automatic versioning - #2079

Merged
rh-hemartin merged 1 commit into
mainfrom
feat/adr-versioning
Jun 17, 2026
Merged

rh-hemartin merged 1 commit into
mainfrom
feat/adr-versioning

Conversation

@rh-hemartin

@rh-hemartin rh-hemartin commented Jun 9, 2026

Copy link
Copy Markdown
Member

ADR for discussion about automatic versioning

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown

Site preview

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

Commit: 8dc0b93bd6be20a1bb5c533f635d37acab971f60

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 9, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 3:13 PM UTC · Completed 3:26 PM UTC
Commit: ba204cb · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 9, 2026

Copy link
Copy Markdown

Review

Findings

Critical

  • [adr-number-collision] docs/ADRs/0043-automatic-updates.md:1 — ADR number 43 is already allocated on main branch to "managed-file-headers" (accepted 2026-06-06). This PR introduces a second ADR 43 for "automatic-updates", creating a numbering collision. ADR 44 is the next available number.
    Remediation: Renumber this ADR to 0044. Update the filename to 0044-automatic-updates.md, change the title frontmatter to "44. Automatic Updates", update the heading, and update the reference in docs/plans/automatic-updates.md from "ADR 43" to "ADR 44".

Medium

  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:55 — The Consequences state "Current users track the new floating tag automatically to keep behavior consistent" but the Decision (line 47) states "By default Fullsend should be installed in a way that it tracks the binary version... Users should explicitly change something to track a new version tag or the moving tag." These contradict: one says current users automatically track the floating tag, the other says users must explicitly opt in.

  • [design-implementation-mismatch] docs/plans/automatic-updates.md:45 — ADR 47 (vendored-installs-with-vendor-flag, accepted) explicitly lists --upstream-ref CLI flags under "What this PR removes." This design proposes reintroducing --upstream-ref to both admin install and github setup, directly contradicting an accepted ADR.
    Remediation: Reconcile with ADR 47's architecture, or explicitly note that this ADR supersedes portions of ADR 47.

  • [design-document-alignment] docs/plans/automatic-updates.md:42 — The design proposes __FULLSEND_REF__ as a new template placeholder, but internal/scaffold/render.go already uses __REUSABLE_DISPATCH__ and __REUSABLE_WORKFLOW__ placeholders driven by config.DefaultUpstreamRef. The design does not mention these existing placeholders or how __FULLSEND_REF__ interacts with or replaces them.

  • [edge-case-correctness] docs/plans/automatic-updates.md:73 — The design uses a single __FULLSEND_REF__ value for three distinct purposes: (1) git ref in uses: lines, (2) fullsend_actions_ref for action checkout, and (3) fullsend_cli_ref for CLI binary version. These resolve through fundamentally different mechanisms. The example --upstream-ref main would produce fullsend_cli_ref: main, which is not a valid CLI binary version.

  • [design-document-alignment] docs/plans/automatic-updates.md:50 — The design proposes renaming fullsend_version to fullsend_cli_ref in per-org scaffold workflows, but per-org scaffolds currently pass fullsend_ai_ref and do NOT pass fullsend_version at all. This is a new parameter addition, not a rename.

Low

  • [missing-authorization] docs/ADRs/0043-automatic-updates.md — No linked issue for this ADR introducing a versioning policy change. The roadmap mentions related work under "Versioning and pinning" with issue Installation should pin workflows to version being installed #1933.
  • [internal-consistency] docs/plans/automatic-updates.md:29 — Typo: vMAJOR.MINOR.PACTH should be vMAJOR.MINOR.PATCH.
  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:46 — Typo: "which area already created" should be "which are already created."
  • [terminology-consistency] docs/ADRs/0043-automatic-updates.md:44 — Tentative language ("probably called latest") is inconsistent with Accepted status.
  • [terminology-consistency] docs/ADRs/0043-automatic-updates.md:59 — Uses "floating tag" while the document and codebase consistently use "moving tag."
  • [ADR-frontmatter] docs/ADRs/0043-automatic-updates.md:3 — The relates_to field is empty. Should reference ADR 0031 (reusable workflows) and ADR 0047 (vendored installs).
  • [variable-naming] docs/plans/automatic-updates.md:64fullsend_cli_ref is misleading — it's not a git ref to the CLI, it's a version/tag specifier. See also: [scope-alignment] finding.
  • [scope-alignment] docs/plans/automatic-updates.md:62 — Variable renaming (fullsend_ai_reffullsend_actions_ref, fullsend_versionfullsend_cli_ref) is proposed in the design but not authorized in the ADR. See also: [variable-naming] finding.
  • [incomplete-context] docs/ADRs/0043-automatic-updates.md:26 — The ADR does not reference the existing versioning architecture in ADR 31, ADR 47, or config.DefaultUpstreamRef.
  • [missing-architecture-update] docs/ADRs/0043-automatic-updates.md:17 — Per the writing-adrs skill, Accepted ADRs require a corresponding update to docs/architecture.md.
  • [design-completeness] docs/plans/automatic-updates.md:109 — Sandbox images are identified as unversioned in "Some Future Problems" but the ADR claims unified version control for "all the components."
  • [stale-doc] docs/reference/installation.md:277 — References v0 as the current moving tag; will need updating when this ADR is implemented.
  • [stale-doc] skills/cutting-releases/SKILL.md:112 — Release process references moving the v0 tag; will need updating when implemented.
  • [stale-doc] docs/guides/user/building-custom-agents.md:387 — User guide examples use ref: v0; will need updating when implemented.

Info

  • [stale-doc] docs/ADRs/0031-reusable-workflows-for-action-installed-distribution.md:45 — References v0 in historical context; ADRs are point-in-time records.
  • [stale-doc] docs/ADRs/0035-layered-content-resolution.md:63 — References v0 in historical context.
  • [stale-doc] docs/ADRs/0047-vendored-installs-with-vendor-flag.md — References v0 describing current behavior; point-in-time record.
  • [ADR-structure] docs/ADRs/0043-automatic-updates.md — Omits the optional Options section used by recent ADRs (0040–0042) to document evaluated alternatives.
Previous run

Review

Findings

Medium

  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:55 — The Consequences state "Current users track the new floating tag automatically to keep behavior consistent" but the Decision (line 47) states "By default Fullsend should be installed in a way that it tracks the binary version... Users should explicitly change something to track a new version tag or the moving tag." These contradict: if existing users automatically track the floating tag, the default is NOT the binary version for them.
    Remediation: Rewrite the Consequences bullet to explicitly state that existing users are migrated from v0 to the new floating tag (preserving their current auto-update behavior), while only new installations default to the pinned binary version.

  • [edge-case-correctness] docs/plans/automatic-updates.md:73 — The design uses a single __FULLSEND_REF__ value for both fullsend_cli_ref (CLI binary version) and fullsend_actions_ref (git ref for actions). These resolve through fundamentally different mechanisms. The plan explicitly shows --upstream-ref main as a valid example (line 84), but branch names would fail for CLI binary resolution since action.yml constructs download URLs from the version string.
    Remediation: Add a section documenting valid values for --upstream-ref and noting that branch names will only work if CLI binary resolution is updated, or restrict --upstream-ref to tag values only.

  • [design-document-alignment] docs/plans/automatic-updates.md:50 — The design proposes renaming fullsend_version to fullsend_cli_ref in per-org scaffold workflows, but per-org scaffolds currently do NOT pass fullsend_version at all — they only pass fullsend_ai_ref. This is not a rename but a new parameter addition. The design should acknowledge this gap.
    Remediation: Note that per-org scaffold workflows currently omit fullsend_version and the implementation must add the new fullsend_cli_ref parameter, not just rename an existing one.

Low

  • [missing-authorization] docs/ADRs/0043-automatic-updates.md — No linked issue for this ADR introducing a versioning policy change. The PR description says "ADR for discussion," suggesting this is a discussion-stage document. Consider creating a linked issue documenting the problem statement.
  • [internal-consistency] docs/plans/automatic-updates.md:29 — Typo: vMAJOR.MINOR.PACTH should be vMAJOR.MINOR.PATCH.
  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:46 — Typo: "which area already created" should be "which are already created."
  • [naming-convention] docs/ADRs/0043-automatic-updates.md:44 — Tentative language ("probably called latest") is inconsistent with Accepted status. An accepted ADR should use definitive language.
  • [ADR-frontmatter] docs/ADRs/0043-automatic-updates.md:3 — The relates_to field is empty. Consider populating with relevant topic tags.
  • [terminology-consistency] docs/ADRs/0043-automatic-updates.md:59 — Uses "floating tag" while the project (and this ADR on line 29) consistently uses "moving tag."
  • [variable-naming] docs/plans/automatic-updates.md:64 — The proposed renames (fullsend_ai_reffullsend_actions_ref, fullsend_versionfullsend_cli_ref) have clarity issues. fullsend_actions_ref could be confused with GitHub Actions specifically when the variable covers both workflows and actions. Consider fullsend_upstream_ref or fullsend_repo_ref.
  • [scope-alignment] docs/plans/automatic-updates.md — The ADR deliberately links to the plan ("See Automatic Updates for the design details"), establishing a two-tier structure. The separation is intentional, though the relationship could be documented more explicitly.
  • [architectural-coherence] docs/plans/automatic-updates.md:63 — Renaming established interfaces (fullsend_ai_ref, fullsend_version) as a side effect of a versioning change conflates two separate concerns and increases migration complexity. Consider deferring the rename to a separate change.

Info

  • [ADR-structure] docs/ADRs/0043-automatic-updates.md — The ADR omits the optional Options section used by recent ADRs (0040–0042) to document evaluated alternatives.
  • [architectural-coherence] docs/plans/automatic-updates.md — The plan identifies sandbox images as unversioned under "Some Future Problems" but the design document claims a unified versioning model ("uses a single tag to control all the components"). 3 of 4 components are addressed; images are deferred without explanation.
  • [implementation-detail] docs/plans/automatic-updates.md:86 — Example shows fullsend_cli_ref: latest but semantics of latest as a git ref are unclear — could be a moving tag, docker tag, or special value. See also: [edge-case-correctness] finding.
Previous run (2)

Review

Findings

Medium

  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:55 — The Consequences state "Current users track the new floating tag automatically to keep behavior consistent" but the Decision states "By default Fullsend should be installed in a way that it tracks the binary version... Users should explicitly change something to track a new version tag or the moving tag." These contradict each other — auto-migrating existing users to the floating tag conflicts with the decision to default to pinned versions.

  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:29 — The Context section conflates two distinct distribution channels without distinguishing them: (1) the CLI binary, downloaded via action.yml which defaults to latest (resolving the latest GitHub Release), and (2) workflow/action refs, which use @v0 (a mutable git tag). The Decision then proposes latest as the new moving tag name, which collides with the existing binary resolution mechanism in action.yml. See also: [contradictory-documentation] finding for action.yml.

  • [design-document-alignment] docs/ADRs/0043-automatic-updates.md:57 — "v0 should be migrated to the new moving tag and deleted" understates the migration scope. v0 is referenced in 17+ scaffold workflow files (code.yml, fix.yml, review.yml, etc.), the release process (cutting-releases SKILL.md step 8 force-pushes v0), and ADR 0031 (which established @v0 as the thin-caller contract). No migration plan, timeline, deprecation strategy, or downstream communication plan is specified. See also: [contradictory-documentation] findings for downstream references.
    Remediation: Add consequences acknowledging the full migration scope: scaffold template updates, release process changes, coordinated downstream org migration, and a deprecation period where both tags coexist.

  • [edge-case-correctness] docs/ADRs/0043-automatic-updates.md:46 — "Version tags that track releases (vMAJOR.MINOR.PATCH which area already created)" has a typo ("area" → "are") and the "already created" claim is misleading. While GoReleaser creates semver tags as release artifacts, no scaffold workflow mechanism can consume them — all workflows hardcode @v0. The tags exist but are not usable without manual workflow edits.

  • [implementation-ambiguity] docs/ADRs/0043-automatic-updates.md:47 — "By default Fullsend should be installed in a way that it tracks the binary version (fullsend --version)" does not specify the mechanism for each distribution channel. Does fullsend admin install write @vX.Y.Z refs into scaffolded workflows? Does action.yml change its default from latest? Is there a config.yaml field? The mechanism is undefined, making implementation ambiguous.

  • [contradictory-documentation] action.yml:19 — action.yml uses latest as the default binary version input (resolving to the latest GitHub Release). This ADR proposes latest as the new moving git tag name for workflow references. Using the same name for semantically different resolution mechanisms (GitHub Releases API vs. git ref) creates confusion, especially since the Context section already discusses both channels.

Low

  • [missing-authorization] docs/ADRs/0043-automatic-updates.md — No linked issue for this non-trivial ADR introducing a versioning policy change affecting all downstream users.
  • [ADR-frontmatter] docs/ADRs/0043-automatic-updates.md:3 — The relates_to field is empty. This ADR should reference ADR 0031 (reusable workflows, which established the @v0 contract) and ADR 0035 (layered content resolution).
  • [architectural-inconsistency] docs/ADRs/0043-automatic-updates.md:59 — Uses "floating tag" while the project (ADR 0031, cutting-releases skill) consistently uses "moving tag."
  • [naming-convention] docs/ADRs/0043-automatic-updates.md:44 — Tentative language ("probably called latest") is inconsistent with Accepted status. An accepted ADR should use definitive language.

Info

  • [ADR-structure] docs/ADRs/0043-automatic-updates.md — The ADR omits the optional Options section used by recent ADRs (0040–0042) to document evaluated alternatives.
  • [user-communication-gap] docs/ADRs/0043-automatic-updates.md:51 — "Fullsend must make users aware of the implications" without specifying the communication mechanism (CLI warning, install-time prompt, documentation, YAML comment).
Previous run (3)

Review

Findings

Medium

  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:55 — The Consequences state "Current users track the new floating tag automatically to keep behavior consistent" but the Decision states "By default Fullsend should be installed in a way that it tracks the binary version... Users should explicitly change something to track a new version tag or the moving tag." These contradict each other — auto-migrating existing users to the floating tag conflicts with the decision to default to pinned versions.

  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:29 — The Context section conflates two distinct distribution channels without distinguishing them: (1) the CLI binary, downloaded via action.yml which defaults to latest (resolving the latest GitHub Release), and (2) workflow/action refs, which use @v0 (a mutable git tag). The Decision then proposes latest as the new moving tag name, which collides with the existing binary resolution mechanism in action.yml. See also: [contradictory-documentation] finding for action.yml.

  • [design-document-alignment] docs/ADRs/0043-automatic-updates.md:57 — "v0 should be migrated to the new moving tag and deleted" understates the migration scope. v0 is referenced in 17+ scaffold workflow files (code.yml, fix.yml, review.yml, etc.), the release process (cutting-releases SKILL.md step 8 force-pushes v0), and ADR 0031 (which established @v0 as the thin-caller contract). No migration plan, timeline, deprecation strategy, or downstream communication plan is specified. See also: [contradictory-documentation] findings for downstream references.
    Remediation: Add consequences acknowledging the full migration scope: scaffold template updates, release process changes, coordinated downstream org migration, and a deprecation period where both tags coexist.

  • [edge-case-correctness] docs/ADRs/0043-automatic-updates.md:46 — "Version tags that track releases (vMAJOR.MINOR.PATCH which area already created)" has a typo ("area" → "are") and the "already created" claim is misleading. While GoReleaser creates semver tags as release artifacts, no scaffold workflow mechanism can consume them — all workflows hardcode @v0. The tags exist but are not usable without manual workflow edits.

  • [implementation-ambiguity] docs/ADRs/0043-automatic-updates.md:47 — "By default Fullsend should be installed in a way that it tracks the binary version (fullsend --version)" does not specify the mechanism for each distribution channel. Does fullsend admin install write @vX.Y.Z refs into scaffolded workflows? Does action.yml change its default from latest? Is there a config.yaml field? The mechanism is undefined, making implementation ambiguous.

  • [contradictory-documentation] action.yml:19 — action.yml uses latest as the default binary version input (resolving to the latest GitHub Release). This ADR proposes latest as the new moving git tag name for workflow references. Using the same name for semantically different resolution mechanisms (GitHub Releases API vs. git ref) creates confusion, especially since the Context section already discusses both channels.

Low

  • [missing-authorization] docs/ADRs/0043-automatic-updates.md — No linked issue for this non-trivial ADR introducing a versioning policy change affecting all downstream users.
  • [ADR-frontmatter] docs/ADRs/0043-automatic-updates.md:3 — The relates_to field is empty. This ADR should reference ADR 0031 (reusable workflows, which established the @v0 contract) and ADR 0035 (layered content resolution).
  • [architectural-inconsistency] docs/ADRs/0043-automatic-updates.md:59 — Uses "floating tag" while the project (ADR 0031, cutting-releases skill) consistently uses "moving tag."
  • [naming-convention] docs/ADRs/0043-automatic-updates.md:44 — Tentative language ("probably called latest") is inconsistent with Accepted status. An accepted ADR should use definitive language.

Info

  • [ADR-structure] docs/ADRs/0043-automatic-updates.md — The ADR omits the optional Options section used by recent ADRs (0040–0042) to document evaluated alternatives.
  • [user-communication-gap] docs/ADRs/0043-automatic-updates.md:51 — "Fullsend must make users aware of the implications" without specifying the communication mechanism (CLI warning, install-time prompt, documentation, YAML comment).
Previous run (4)

Review

Findings

Medium

  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:29 — The ADR states the current mechanism uses a floating tag v0, but the codebase has two distinct distribution mechanisms: (1) the CLI binary version (action.yml defaults to latest) and (2) workflow/action refs (scaffold workflows hardcode @v0). The Context section conflates these without distinguishing which distribution channel uses which tag.
    Remediation: Clarify in the Context section that v0 refers specifically to the workflow/action git ref, distinct from the CLI binary download version which already defaults to latest.

  • [internal-consistency] docs/ADRs/0043-automatic-updates.md:55 — The Consequences section says "Current users track the new floating tag automatically" but the Decision section says the default should pin to "the version the binary is from" with explicit opt-in for the floating tag. These statements contradict each other — auto-migrating current users to the floating tag conflicts with the decision to default to pinned versions.

  • [design-document-alignment] docs/ADRs/0043-automatic-updates.md:43 — ADR 0031 established that thin callers pin upstream by tag (@v0) or SHA, and scaffold workflows hardcode @v0. This ADR proposes a latest floating tag and states "v0 should be migrated" but does not address whether v0 continues to exist, is deprecated, or becomes an alias. Since v0 is hardcoded in workflow uses: directives (which do not support expressions), the migration path is non-trivial and unaddressed.

  • [stale-reference] docs/ADRs/0043-automatic-updates.md:43 — ADR claims "Version tags that track releases (vMAJOR.MINOR.PATCH, already implemented)" — while GoReleaser does create version tags as release artifacts, scaffold workflows have no mechanism to consume them (they hardcode @v0). The "already implemented" claim is misleading: the tags exist but are not usable without manual workflow edits.
    Remediation: Clarify that version tags exist as release artifacts but are not yet consumed by scaffold workflows, and describe how users would switch from @v0 to a version tag.

Low

  • [ADR-frontmatter] docs/ADRs/0043-automatic-updates.md:3 — The relates_to field is empty. This ADR should reference ADR 0031 (reusable workflows) and ADR 0035 (layered content resolution).
  • [writing-quality] docs/ADRs/0043-automatic-updates.md:30 — Typo: "updgrade" → "upgrade".
  • [writing-quality] docs/ADRs/0043-automatic-updates.md:27 — Grammatical error: "In one hand" → "On the one hand".
  • [documentation-clarity] docs/ADRs/0043-automatic-updates.md:47 — The Decision describes default behavior without specifying the mechanism, and it is unclear whether "version the binary is from" refers to CLI binary version, workflow ref, or both.
  • [implementation-gap] docs/ADRs/0043-automatic-updates.md:58 — Consequences describe future migration work but reference no tracking issue or migration plan.
  • [inconsistent-terminology] docs/ADRs/0043-automatic-updates.md:28 — ADR uses "floating tag" while existing docs (ADR 0031, cutting-releases skill) use "moving tag" or "mutable tag".
  • [missing-documentation-update] docs/ADRs/0043-automatic-updates.md:48 — No user-facing documentation explains how to pin to a specific version or opt into the floating tag.

Info

  • [ADR-structure] The ADR omits the optional Options section used by recent ADRs (0040-0042) to document evaluated alternatives.
  • [naming-convention] docs/ADRs/0043-automatic-updates.md:44 — Uses tentative language ("probably called latest") inconsistent with Accepted status. Inconsistent product name capitalization.
  • [user-communication-gap] docs/ADRs/0043-automatic-updates.md:51 — ADR states users must be made aware of implications but does not specify the communication mechanism.
  • [implementation-gap] docs/ADRs/0043-automatic-updates.md:58 — No code implements the migration logic described in consequences (expected for an ADR).

@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.

Comment thread docs/ADRs/0043-automatic-updates.md Outdated
Comment thread docs/ADRs/0048-automatic-updates.md
## Decision

Our decision is to provide two tags:

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] design-document-alignment

ADR 0031 established that thin callers pin upstream by tag (@v0) or SHA, and scaffold workflows hardcode @v0 references. This ADR proposes a 'latest' floating tag and states 'v0 should be migrated to the new floating tag' but does not address whether v0 continues to exist, is deprecated, or becomes an alias for latest. Since v0 is hardcoded in workflow uses: directives (which do not support expressions), the migration path is non-trivial and unaddressed.

Comment thread docs/ADRs/0048-automatic-updates.md
@@ -0,0 +1,60 @@
---
title: "43. Automatic Updates"
status: Accepted

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-frontmatter

The relates_to field is empty ([]). This ADR should reference ADR 0031 (reusable workflows) and ADR 0035 (layered content resolution) which are the mechanisms enabling automatic updates.

Comment thread docs/ADRs/0043-automatic-updates.md Outdated
Comment thread docs/ADRs/0043-automatic-updates.md Outdated
* Version tags that track releases (`vMAJOR.MINOR.PATCH`, already implemented).

By default Fullsend should be installed in a way that it tracks the version the binary
is from. Users should explicitly change something to track a new version tag or the

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] missing-documentation-update

No user-facing documentation explains how to pin to a specific version, opt into the floating tag, or upgrade between versions. This is expected at the ADR stage but should be tracked for implementation.

Comment thread docs/ADRs/0043-automatic-updates.md Outdated
Comment thread docs/ADRs/0043-automatic-updates.md Outdated
is from. Users should explicitly change something to track a new version tag or the
floating tag.

Fullsend must make users aware of the implications of choosing a floating tag:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[info] user-communication-gap

ADR states 'Fullsend must make users aware of the implications' but does not specify where this communication will happen (installation docs, action.yml descriptions, release announcements).

Comment thread docs/ADRs/0043-automatic-updates.md Outdated

## Consequences

* `v0` should be migrated to the new floating tag.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[info] implementation-gap

No code in the codebase implements the migration logic described in consequences. Scaffold generation has no version-aware migration. This is expected for an ADR.

@ralphbean ralphbean 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.

Two things I think need sorting out before this lands — see inline.

Comment thread docs/ADRs/0048-automatic-updates.md
Comment thread docs/ADRs/0043-automatic-updates.md Outdated
@rh-hemartin
rh-hemartin force-pushed the feat/adr-versioning branch from 9b8237e to cef3a81 Compare June 10, 2026 07:40
@fullsend-ai-review

fullsend-ai-review Bot commented Jun 10, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:42 AM UTC · Completed 7:54 AM UTC
Commit: 4ed6da4 · View workflow run →

@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.


* Broken releases.
* Infrastructure changes required.

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 Consequences state "Current users track the new floating tag automatically" but the Decision states default should pin to binary version with explicit opt-in for the moving tag. These contradict each other.

## Context

Currently Fullsend uses a moving tag (`v0`) so users pick up the latest changes. When a release happens
a new tag `vMAJOR.MINOR.PATCH` gets created and the moving tag gets moved to the same SHA. New Fullsend

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 Context section conflates two distinct distribution channels (binary via action.yml latest and workflow refs via @v0) without distinguishing them. The Decision then proposes latest as the new moving tag name, colliding with the existing binary resolution mechanism.

* Infrastructure changes required.

## Consequences

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] design-document-alignment

v0 deletion understated: referenced in 17+ scaffold workflows, release process, and ADR 0031. No migration plan, timeline, or deprecation strategy specified.

Suggested fix: Add consequences acknowledging full migration scope: scaffold template updates, release process changes, coordinated downstream org migration, and deprecation period.

Our decision is to provide two tags:

* Moving tag that tracks the latest release (probably called `latest`).
* Version tags that track releases (`vMAJOR.MINOR.PATCH` which area already created).

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] edge-case-correctness

Typo (area -> are) and misleading already created claim: semver tags exist but no scaffold workflow mechanism can consume them.


* Moving tag that tracks the latest release (probably called `latest`).
* Version tags that track releases (`vMAJOR.MINOR.PATCH` which area already created).

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] implementation-ambiguity

Default to binary version does not specify the mechanism for each distribution channel. Implementation is ambiguous.

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 10, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:23 AM UTC · Completed 8:39 AM UTC
Commit: 4ed6da4 · View workflow run →

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Jun 10, 2026
@rh-hemartin rh-hemartin self-assigned this Jun 10, 2026

@ralphbean ralphbean 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.

LGTM. One non-blocking note inline.

---
title: "43. Automatic Updates"
status: Accepted
relates_to: []

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.

[nit] relates_to is empty — other ADRs in the repo populate this with problem doc filenames. agent-infrastructure seems like a fit here, since this is about the platform's own distribution mechanism.

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 17, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:56 AM UTC · Completed 9:13 AM UTC
Commit: 129e5ab · View workflow run →

@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.

@@ -0,0 +1,62 @@
---

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[critical] adr-number-collision

ADR number 43 is already allocated on main branch to 'managed-file-headers' (accepted 2026-06-06). This PR introduces a second ADR 43 for 'automatic-updates', creating a numbering collision. ADR 44 is the next available number.

Suggested fix: Renumber this ADR to 0044. Update the filename to 0044-automatic-updates.md, change the title frontmatter to '44. Automatic Updates', update the heading, and update the reference in docs/plans/automatic-updates.md from 'ADR 43' to 'ADR 44'.


* Broken releases.
* Infrastructure changes required.

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 Consequences state 'Current users track the new floating tag automatically' but the Decision states users must 'explicitly change something to track a new version tag or the moving tag.' These statements contradict each other regarding migration behavior for existing users.

from the `config.yaml` and will pass it around. However the reusable workflows can't
benefit from this.

So the version pinning should happen another way. We will introduce a new parameter

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] design-implementation-mismatch

ADR 47 (vendored-installs-with-vendor-flag, accepted) explicitly lists '--upstream-ref CLI flags' under 'What this PR removes.' This design proposes reintroducing --upstream-ref, contradicting an accepted ADR.

Suggested fix: Reconcile with ADR 47's architecture, or explicitly note that this ADR supersedes portions of ADR 47.


With `fullsend_ai_ref` and `fullsend_version` it is easy to control from a single
place which version should be use. A step in the shim would pull the version
from the `config.yaml` and will pass it around. However the reusable workflows can't

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] design-document-alignment

The design proposes FULLSEND_REF as a new template placeholder, but internal/scaffold/render.go already uses REUSABLE_DISPATCH and REUSABLE_WORKFLOW placeholders driven by config.DefaultUpstreamRef. No reconciliation plan is provided.

# fullsend.yaml or <stage>.yml
uses: fullsend-ai/fullsend/.../reusable-*.yml@__FULLSEND_REF__
with:
fullsend_actions_ref: __FULLSEND_REF__

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] edge-case-correctness

A single FULLSEND_REF value is used for git refs, action checkout refs, and CLI binary versions, but these resolve through fundamentally different mechanisms. The example '--upstream-ref main' would produce fullsend_cli_ref: main, which is not a valid CLI binary version.

Given that we are changing this code, we may as well update the variable names to reflect
better their real usage:

* `fullsend_ai_ref` -> `fullsend_actions_ref`

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] variable-naming

fullsend_cli_ref is misleading — it is not a git ref to the CLI, it is a version/tag specifier.

The template string will be `__FULLSEND_REF__`.

Given that we are changing this code, we may as well update the variable names to reflect
better their real usage:

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] scope-alignment

Variable renaming proposed in the design but not authorized in the ADR itself.

the decision itself needs to change, write a new ADR that supersedes this
one. For evolving design narrative, use docs/architecture.md. -->

## Context

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] incomplete-context

The ADR does not reference the existing versioning architecture in ADR 31, ADR 47, or config.DefaultUpstreamRef.


## Status

Accepted

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] missing-architecture-update

Accepted ADRs require a corresponding update to docs/architecture.md per the writing-adrs skill.

fullsend_actions_ref: v0.15.0
fullsend_cli_ref: v0.15.0
```

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-completeness

Sandbox images are identified as unversioned but the ADR claims unified version control for all components.

@fullsend-ai-review fullsend-ai-review Bot removed the requires-manual-review Review requires human judgment label Jun 17, 2026
@rh-hemartin
rh-hemartin enabled auto-merge June 17, 2026 13:11
Signed-off-by: Hector Martinez <hemartin@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Jun 17, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:17 PM UTC · Completed 1:32 PM UTC
Commit: 8dc0b93 · View workflow run →

@rh-hemartin
rh-hemartin added this pull request to the merge queue Jun 17, 2026
@codecov

codecov Bot commented Jun 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Merged via the queue into main with commit 33084f7 Jun 17, 2026
8 checks passed
@rh-hemartin
rh-hemartin deleted the feat/adr-versioning branch June 17, 2026 13:30
@fullsend-ai-review

Copy link
Copy Markdown

Review skipped — this PR is already merged.

The /fs-review command only reviews open pull requests.

Posted by fullsend post-review check

@fullsend-ai-retro

fullsend-ai-retro Bot commented Jun 17, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 1:35 PM UTC · Completed 1:44 PM UTC
Commit: 8dc0b93 · View workflow run →

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #2079 — ADR for automatic versioning

Timeline: A human-authored docs PR (2 new files: ADR + plan document) went through 5 review agent runs over 8 days before merging. The review agent correctly caught a critical ADR number collision (ADR 43 was already allocated), which was a genuine value-add. However, the review cycle was expensive relative to the change size.

What went well:

Inefficiencies observed (all covered by existing issues):

  • 5 review runs for a 2-file docs PR — existing issues #1900 (fast path for docs changes) and #893 (reduce non-code dispatches) cover this.
  • Duplicate dispatch on same commit#1452 (deduplicate for same HEAD SHA) and #1014 (debounce rapid events) cover this.
  • Review agent kept CHANGES_REQUESTED after human approval#1922 (don't override human approval with stale findings) and #2029 (use COMMENT for low-severity re-reviews) cover this.
  • Review agent re-flagged findings the author had already addressed in comments#956 (resolve prior inline comments on re-review) and #1285 (don't regenerate unchanged inline comments) cover this.

No new proposals filed. All identified improvement opportunities are already tracked by existing open issues. Resolving the above issues (particularly #1900 and #1452) would have reduced this workflow from 5 review runs to ~2, saving significant token cost and review noise.

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.

2 participants