Skip to content

Re-onboarding with fullsend v0.37 removes custom agent configuration #6678

Description

@redhat-chai-bot

Summary

Re-onboarding a project to fullsend (v0.37) removes existing custom agent configuration. The onboarding scaffold overwrites .fullsend/config.yaml without preserving user customizations.

Evidence

Root Cause

The scaffold install path (BuildScaffoldFilesNewPerRepoConfig) bakes all defaults into config.yaml. This means:

  1. User customizations and scaffold-generated defaults are mixed in the same file
  2. Re-onboarding must choose between overwriting (losing customizations) or preserving (missing new defaults)
  3. Neither approach handles agents added or removed in a new fullsend version

Proposed Solution: Leverage the Existing Three-Tier Layered Config (ADR 0069)

Fullsend already has a three-tier configuration hierarchy designed for exactly this scenario:

config.yaml (overlay, user-owned)  →  config.base.yaml (base, scaffold-managed)  →  code defaults

From the layered-config-reference:

"Upgrading a base layer (e.g., refreshing config.base.yaml) does not require editing config.yaml — the overlay inherits new defaults automatically."

The existing merge semantics already support this:

  • Agents use keyed merge by DerivedName() — overlay entries merge with parent entries
  • Marshal only emits locally-set values (no leaking of inherited defaults)
  • loadExistingPerRepoConfig already reads both config.yaml and config.base.yaml

Required Changes

On initial install (admin install / github setup):

  1. Generate config.base.yaml with scaffold defaults (roles, agents, runtime defaults)
  2. Generate config.yaml as a minimal overlay — only version: "1" or truly user-specific overrides
  3. Users customize agents/settings by editing config.yaml (overlay)

On re-onboarding (re-running install/setup on an existing repo):

  1. Regenerate config.base.yaml with the new version's defaults
  2. Never touch config.yaml — it is user-owned
  3. The layered resolution handles the rest automatically

How This Solves Each Scenario

Scenario Behavior
New agent added in fullsend upgrade Appears in regenerated config.base.yaml, automatically visible via fallthrough
Agent removed in fullsend upgrade Removed from config.base.yaml, no longer in effective config (unless user explicitly added it in overlay)
User customizes an agent (model, effort, runtime) Override lives in config.yaml overlay, untouched during upgrade
User adds a custom agent Defined in config.yaml overlay, persists across upgrades
User removes a default agent Can override with enabled: false in overlay (if supported) or just not reference it in roles

Migration Path

For repos already onboarded with defaults baked into config.yaml:

  1. On next re-onboarding, generate config.base.yaml from the new version's defaults
  2. Diff the existing config.yaml against config.base.yaml to produce a minimal overlay containing only user customizations
  3. Replace config.yaml with the minimal overlay
  4. Present this as a clear PR diff showing the split

Environment

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugcomponent/installCLI install and app setupcustom/tsd-blockerA collection of issues that block further adoption by "tsd" users.pr-openAn open PR already addresses this issuepriority/highSignificant impact, address soontype/bugConfirmed defect in existing behavior

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions