Skip to content

chore(#5824): remove CUSTOM_BASE overlay loop from reusable workflows - #5836

Merged
ggallen merged 1 commit into
fullsend-ai:mainfrom
ggallen:worktree-5824-remove-custom-base-overlay
Aug 4, 2026
Merged

chore(#5824): remove CUSTOM_BASE overlay loop from reusable workflows#5836
ggallen merged 1 commit into
fullsend-ai:mainfrom
ggallen:worktree-5824-remove-custom-base-overlay

Conversation

@ggallen

@ggallen ggallen commented Aug 2, 2026

Copy link
Copy Markdown
Member

Summary

  • Remove the CUSTOM_BASE overlay loop from all 6 reusable workflows (triage, code, review, fix, retro, prioritize) and the prepare-workspace composite action
  • Remove the customized/scripts overlay from the scaffold repo-maintenance.yml template
  • Update scaffold test to assert the overlay is absent
  • Update implementation plan to reflect PR 2 completion
  • The overlay ran every agent invocation but copied zero files — all customized/ directories contain only .gitkeep placeholders

Test plan

  • grep -r 'CUSTOM_BASE' .github/workflows/reusable-*.yml .github/actions/prepare-workspace/action.yml returns no matches
  • grep -r 'customized/' internal/scaffold/fullsend-repo/.github/workflows/repo-maintenance.yml returns no matches
  • All pre-commit hooks pass (YAML lint, actionlint, workflow file size)
  • TestRepoMaintenanceWorkflowContent updated to assert overlay is removed
  • CI passes on this PR

Part of #5824

🤖 Generated with Claude Code

@ggallen
ggallen requested a review from a team as a code owner August 2, 2026 11:45
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Remove unused customized/ overlay logic from GitHub workflows and scaffolds

⚙️ Configuration changes ✨ Enhancement 🕐 10-20 Minutes

Grey Divider

AI Description

• Remove CUSTOM_BASE overlay loop from reusable workflows and prepare-workspace action.
• Drop customized/scripts overlay from the scaffold repo-maintenance.yml template.
• Simplify agent/workspace setup per ADR-0064 (overlay copied no real files).
Diagram

graph TD
  A["Reusable workflows"] --> B["prepare-workspace action"] --> C["Prepared workspace"]
  E["Scaffold template"] --> F["repo-maintenance workflow"] --> C
  B -. "overlay removed" .-> D["customized/ dirs"]
  F -. "overlay removed" .-> D
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep overlay support but gate on non-.gitkeep content
  • ➕ Preserves a customization hook for future use without always paying the cost
  • ➕ Avoids reintroducing logic if overlays become needed again
  • ➖ Still carries extra complexity and filesystem traversal in critical setup paths
  • ➖ Encourages an undocumented/rarely-used extension point rather than a supported mechanism
2. Replace overlays with a single explicit hook step (e.g., run script if present)
  • ➕ Clearer contract: one optional entrypoint rather than directory mirroring
  • ➕ Less error-prone than copying arbitrary trees into the workspace
  • ➖ Requires designing and documenting a new customization interface
  • ➖ May not cover file-overlay use cases if they later become real

Recommendation: Proceed with the PR’s approach. Given ADR-0064 and the fact that current customized/ trees contain only .gitkeep, removing the overlay loops reduces repeated filesystem work and configuration surface area across all agent entrypoints. If customization is needed later, prefer an explicit, documented hook (script/step) rather than implicit directory overlays.

Files changed (8) +0 / -106

Other (8) +0 / -106
action.ymlRemove CUSTOM_BASE overlay copy loop from workspace preparation +0/-14

Remove CUSTOM_BASE overlay copy loop from workspace preparation

• Deletes the per-invocation logic that searched 'customized/' or '.fullsend/customized/' for overlay files and copied them into the destination workspace. Keeps the layered directory copy and script setup intact.

.github/actions/prepare-workspace/action.yml

reusable-code.ymlDrop customized overlay step from reusable code workflow setup +0/-14

Drop customized overlay step from reusable code workflow setup

• Removes the 'CUSTOM_BASE' overlay traversal and copy logic from the workflow’s workspace preparation script block. The workflow continues to copy layered directories and install setup scripts without overlay behavior.

.github/workflows/reusable-code.yml

reusable-fix.ymlDrop customized overlay step from reusable fix workflow setup +0/-14

Drop customized overlay step from reusable fix workflow setup

• Eliminates the overlay copy loop that attempted to merge files from 'customized/' into the working directory. Leaves the standard layered copy and script initialization flow unchanged.

.github/workflows/reusable-fix.yml

reusable-prioritize.ymlDrop customized overlay step from reusable prioritize workflow setup +0/-14

Drop customized overlay step from reusable prioritize workflow setup

• Removes logic that conditionally copied non-'.gitkeep' files from 'customized/' overlays into the destination. The remaining setup continues to populate '.github/scripts' from the source layer.

.github/workflows/reusable-prioritize.yml

reusable-retro.ymlDrop customized overlay step from reusable retro workflow setup +0/-14

Drop customized overlay step from reusable retro workflow setup

• Deletes the block that iterated layered dirs under 'CUSTOM_BASE' and copied discovered files into the workspace. Retains the baseline layered copy behavior and setup script installation.

.github/workflows/reusable-retro.yml

reusable-review.ymlDrop customized overlay step from reusable review workflow setup +0/-14

Drop customized overlay step from reusable review workflow setup

• Removes the 'CUSTOM_BASE' selection and 'find | cp' loop used to apply overlays. The workflow now only performs the standard layered directory copy and script setup.

.github/workflows/reusable-review.yml

reusable-triage.ymlDrop customized overlay step from reusable triage workflow setup +0/-14

Drop customized overlay step from reusable triage workflow setup

• Removes the overlay file-copy logic that previously ran after copying layered directories. Keeps the rest of the workspace preparation steps as-is.

.github/workflows/reusable-triage.yml

repo-maintenance.ymlRemove customized/scripts overlay from scaffold repo-maintenance template +0/-8

Remove customized/scripts overlay from scaffold repo-maintenance template

• Deletes the conditional copy of 'customized/scripts' into the generated repo during scaffold setup. The template now only copies scripts from the scaffold defaults and cleans up '.defaults'.

internal/scaffold/fullsend-repo/.github/workflows/repo-maintenance.yml

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 2, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 11:46 AM UTC · Completed 12:03 PM UTC
Commit: 557808e · View workflow run →

@ggallen ggallen changed the title chore(#5824): remove customized/ directory overlay mechanism (ADR-0064) chore(#5824): remove CUSTOM_BASE overlay loop from reusable workflows Aug 2, 2026
@qodo-code-review

qodo-code-review Bot commented Aug 2, 2026

Copy link
Copy Markdown

Code Review by Qodo

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

Grey Divider


Action required

1. Stale scaffold test assertion ✓ Resolved 🐞 Bug ≡ Correctness
Description
TestRepoMaintenanceWorkflowContent still asserts repo-maintenance.yml contains "customized/scripts",
but this PR removes that overlay block so the test will fail deterministically. This breaks CI/unit
tests and leaves scaffold expectations out of sync with the template.
Code

internal/scaffold/fullsend-repo/.github/workflows/repo-maintenance.yml[L57-60]

-          if [[ -d "customized/scripts" ]]; then
-            find "customized/scripts" -type f ! -name '.gitkeep' -print0 \
-              | while IFS= read -r -d '' f; do
-                  rel="${f#customized/}"
Relevance

●●● Strong

Scaffold/template changes are typically paired with updating scaffold tests to match; similar
test-sync fixes accepted.

PR-#5555
PR-#792

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The embedded scaffold workflow no longer contains any customized/scripts overlay logic, but the
scaffold test still requires that substring to exist in the workflow content.

internal/scaffold/fullsend-repo/.github/workflows/repo-maintenance.yml[51-58]
internal/scaffold/scaffold_test.go[772-790]

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 scaffolded `repo-maintenance.yml` template no longer contains the `customized/scripts` overlay, but `internal/scaffold/scaffold_test.go` still asserts that string is present, causing unit tests to fail.

### Issue Context
This PR intentionally removes the overlay logic; the corresponding scaffold content test needs to be updated to match the new template behavior.

### Fix Focus Areas
- internal/scaffold/scaffold_test.go[772-790]

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



Remediation recommended

2. Docs still promise overlay ✗ Dismissed 🐞 Bug ⚙ Maintainability
Description
User docs and embedded comments still state that reusable workflows copy/overlay customized/ files
at runtime, but this PR removes that overlay logic so those instructions are now incorrect. This can
lead users to place overrides in customized/ that will be silently ignored.
Code

.github/actions/prepare-workspace/action.yml[L46-49]

-        CUSTOM_BASE="customized"
-        if [[ "${INSTALL_MODE}" == "per-repo" ]]; then
-          CUSTOM_BASE=".fullsend/customized"
-        fi
Relevance

●●● Strong

Team commonly fixes doc drift when behavior/ADR changes; customized/ deprecation/docs updates
previously accepted.

PR-#5462

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The prepare-workspace action no longer performs any customized overlay copying, while docs and
comments explicitly describe that overlay as part of runtime behavior and customization layering.

.github/actions/prepare-workspace/action.yml[24-47]
docs/guides/user/customizing-agents.md[250-298]
internal/scaffold/fullsend-repo/scripts/.pre-commit-tools.yaml[35-45]
docs/guides/user/building-custom-agents.md[160-178]

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 PR removes the `CUSTOM_BASE`/`customized/` runtime overlay mechanism, but several docs and scaffold comments still describe it as active behavior and recommend paths under `customized/` / `.fullsend/customized/`.

### Issue Context
Now that the overlay loops are removed, documentation should either (a) remove these instructions, or (b) clearly mark them as historical/deprecated and point to the replacement mechanisms (e.g., `base:` harness composition, URL references, config-based agent registration, L2 `.pre-commit-tools.yaml` merge).

### Fix Focus Areas
- docs/guides/user/customizing-agents.md[250-298]
- docs/guides/user/building-custom-agents.md[160-178]
- internal/scaffold/fullsend-repo/scripts/.pre-commit-tools.yaml[35-45]
- .github/actions/prepare-workspace/action.yml[24-47]

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


Grey Divider

Context used
✅ Compliance rules (platform): 61 rules

To customize comments, go to the Qodo configuration screen, or learn more in the docs.

Qodo Logo

Comment thread .github/actions/prepare-workspace/action.yml
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 2, 2026

Copy link
Copy Markdown

Review

Findings

Medium

  • [protected-path] This PR modifies 7 files under .github/ (actions/prepare-workspace/action.yml and 6 reusable workflows). These are governance/infrastructure files that require human approval. The PR links to issue Remove customized/ directory overlay mechanism (ADR-0064) #5824 and provides rationale (removal of deprecated CUSTOM_BASE overlay per ADR-0064). Human approval is always required for protected-path changes.
Previous run

Review

Findings

High

Medium

Low

  • [stale-implementation-plan] docs/plans/deprecate-customized-directory-overlay.md:95 — Plan describes PR 2 as future work; update to reflect completion after merge.

  • [misleading-instructions] docs/guides/user/customizing-with-skills.md:124 — Describes customized/ overlay; deprecation notice at lines 119-121. Scheduled for PR 4.

  • [stale-example] docs/guides/user/building-custom-agents.md:484 — Example shows CUSTOM_BASE overlay loop code. Guide deprecated per lines 2-7. Scheduled for PR 4.

  • [stale-cross-reference] docs/guides/user/customizing-with-agents-md.md:122 — Links to customized/skills/ with "(deprecated)" annotation. Scheduled for PR 4.


Labels: PR modifies CI workflows and actions under .github/, title uses chore() prefix per ADR-0064 deprecation work


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/ci CI pipelines and checks type/chore Maintenance and housekeeping tasks labels Aug 2, 2026
…e workflows

Remove the CUSTOM_BASE overlay loop from all reusable workflows,
the prepare-workspace composite action, and the scaffold
repo-maintenance workflow template. The overlay copies zero files —
all customized/ directories contain only .gitkeep placeholders.

Update scaffold test to assert the overlay is absent and mark PR 2
as complete in the implementation plan.

Signed-off-by: Greg Allen <gallen@redhat.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Greg Allen <gallen@redhat.com>
@ggallen
ggallen force-pushed the worktree-5824-remove-custom-base-overlay branch from 557808e to 3d1c982 Compare August 2, 2026 12:16
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 2, 2026

Copy link
Copy Markdown

🤖 Review · ❌ Terminated · Started 12:17 PM UTC · Ended 12:30 PM UTC
Commit: 3d1c982 · View workflow run →

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown

Site preview

Preview: https://3d04ac8d-site.fullsend-ai.workers.dev

Commit: 3d1c982b3c56c0dfb0ecb141766c5c8a7f1688c9

@codecov

codecov Bot commented Aug 2, 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
fullsend-ai-review Bot dismissed their stale review August 2, 2026 12:30

Superseded by updated review

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Aug 2, 2026
@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 12:17 PM UTC · Completed 12:30 PM UTC
Commit: 3d1c982 · View workflow run →

@ggallen

ggallen commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

@rh-hemartin, you reviewed #5697 which is the first part of the removal. This is the second and final part. Do you want to review this as well.

Comment thread docs/plans/deprecate-customized-directory-overlay.md
@ggallen
ggallen added this pull request to the merge queue Aug 4, 2026
Merged via the queue into fullsend-ai:main with commit f2cfdf7 Aug 4, 2026
26 checks passed
@ggallen
ggallen deleted the worktree-5824-remove-custom-base-overlay branch August 4, 2026 18:45
@fullsend-ai-retro

fullsend-ai-retro Bot commented Aug 4, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 6:47 PM UTC · Completed 7:02 PM UTC
Commit: 3d1c982 · View workflow run →

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #5836 — Remove CUSTOM_BASE overlay loop

Timeline: PR opened 2026-08-02 by ggallen (human-authored, Claude Opus 4.6 co-author). Review bot ran twice (on open and after force push). Two human approvals (rh-hemartin, ascerra). Merged 2026-08-04 via merge queue. 2 review dispatches + 1 retro dispatch — efficient workflow with no wasted fix/code runs.

What went well:

Key gap — plan prerequisite validation:
Human reviewer waynesun09 identified the most substantive issue: the implementation plan (docs/plans/deprecate-customized-directory-overlay.md) defines a dependency chain where PR 1 (add deprecation warnings) must land before PR 2 (remove overlay). PR 1 was never implemented, but this PR (PR 2) proceeded to hard removal. The review bot read the plan (proved by its LOW stale-implementation-plan finding on line 95) but treated it as passive documentation rather than an active contract with enforceable prerequisites. The author responded that users were notified via Slack on July 20, which the human approvers accepted.

Existing issue notes:

Proposals filed

ggallen pushed a commit that referenced this pull request Aug 4, 2026
Remove the fullsend agent migrate-customizations command, which became
dead code after the customized/ directory overlay mechanism was fully
removed (PRs #5697 and #5836). With no overlay to migrate from, the
command has nothing meaningful to do.

- Delete internal/cli/migrate.go and internal/cli/migrate_test.go
- Remove subcommand registration from internal/cli/agent.go
- Update agent_test.go assertion and add negative assertion
- Remove CLI reference documentation and migration guidance
- Remove stale migrate.go references from docs
- Annotate cross-references in ADRs to note the command's removal

BREAKING CHANGE: The `fullsend agent migrate-customizations` CLI command
has been removed. Users who have already migrated to config-driven agents
are unaffected.

Closes #5864

Signed-off-by: Claude <noreply@anthropic.com>
Signed-off-by: Greg Allen <gallen@redhat.com>
ggallen pushed a commit that referenced this pull request Aug 4, 2026
Remove the fullsend agent migrate-customizations command, which became
dead code after the customized/ directory overlay mechanism was fully
removed (PRs #5697 and #5836). With no overlay to migrate from, the
command has nothing meaningful to do.

- Delete internal/cli/migrate.go and internal/cli/migrate_test.go
- Remove subcommand registration from internal/cli/agent.go
- Update agent_test.go assertion and add negative assertion
- Remove CLI reference documentation and migration guidance
- Remove stale migrate.go references from docs
- Annotate cross-references in ADRs to note the command's removal

BREAKING CHANGE: The `fullsend agent migrate-customizations` CLI command
has been removed. Users who have already migrated to config-driven agents
are unaffected.

Closes #5864

Signed-off-by: Claude <noreply@anthropic.com>
Signed-off-by: Greg Allen <gallen@redhat.com>
ggallen pushed a commit that referenced this pull request Aug 4, 2026
Remove the fullsend agent migrate-customizations command, which became
dead code after the customized/ directory overlay mechanism was fully
removed (PRs #5697 and #5836). With no overlay to migrate from, the
command has nothing meaningful to do.

- Delete internal/cli/migrate.go and internal/cli/migrate_test.go
- Remove subcommand registration from internal/cli/agent.go
- Update agent_test.go assertion and add negative assertion
- Remove CLI reference documentation and migration guidance
- Remove stale migrate.go references from docs
- Annotate cross-references in ADRs to note the command's removal

BREAKING CHANGE: The `fullsend agent migrate-customizations` CLI command
has been removed. Users who have already migrated to config-driven agents
are unaffected.

Closes #5864

Signed-off-by: Claude <noreply@anthropic.com>
Signed-off-by: Greg Allen <gallen@redhat.com>
ggallen pushed a commit that referenced this pull request Aug 5, 2026
Remove the fullsend agent migrate-customizations command, which became
dead code after the customized/ directory overlay mechanism was fully
removed (PRs #5697 and #5836). With no overlay to migrate from, the
command has nothing meaningful to do.

- Delete internal/cli/migrate.go and internal/cli/migrate_test.go
- Remove subcommand registration from internal/cli/agent.go
- Update agent_test.go assertion and add negative assertion
- Remove CLI reference documentation and migration guidance
- Remove stale migrate.go references from docs
- Annotate cross-references in ADRs to note the command's removal

BREAKING CHANGE: The `fullsend agent migrate-customizations` CLI command
has been removed. Users who have already migrated to config-driven agents
are unaffected.

Closes #5864

Signed-off-by: Claude <noreply@anthropic.com>
Signed-off-by: Greg Allen <gallen@redhat.com>
ggallen pushed a commit that referenced this pull request Aug 5, 2026
Remove the fullsend agent migrate-customizations command, which became
dead code after the customized/ directory overlay mechanism was fully
removed (PRs #5697 and #5836). With no overlay to migrate from, the
command has nothing meaningful to do.

- Delete internal/cli/migrate.go and internal/cli/migrate_test.go
- Remove subcommand registration from internal/cli/agent.go
- Update agent_test.go assertion and add negative assertion
- Remove CLI reference documentation and migration guidance
- Remove stale migrate.go references from docs
- Annotate cross-references in ADRs to note the command's removal

BREAKING CHANGE: The `fullsend agent migrate-customizations` CLI command
has been removed. Users who have already migrated to config-driven agents
are unaffected.

Closes #5864

Signed-off-by: Claude <noreply@anthropic.com>
Signed-off-by: Greg Allen <gallen@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/ci CI pipelines and checks requires-manual-review Review requires human judgment type/chore Maintenance and housekeeping tasks

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants