From 92efc14276cdc7dda63d46e19e6ea8950c2fe44b Mon Sep 17 00:00:00 2001 From: Marcel Hild Date: Mon, 31 Aug 2026 11:04:58 +0200 Subject: [PATCH 1/2] feat: add repos.yaml fleet manifest for fullsend upgrades Pin rhdh-agentic, rhdh-plugins, and overlays to v0.37.0 against the private GCP mint, and drop the deprecated customized/ overlay from the upgrade skill. Co-authored-by: Cursor --- .claude/skills/fullsend/SKILL.md | 12 +- .claude/skills/fullsend/references/upgrade.md | 196 +++++------------- .../fullsend/scripts/command-metadata.json | 2 +- README.md | 4 +- repos.yaml | 24 +++ 5 files changed, 83 insertions(+), 155 deletions(-) create mode 100644 repos.yaml diff --git a/.claude/skills/fullsend/SKILL.md b/.claude/skills/fullsend/SKILL.md index 3933536..b83538e 100644 --- a/.claude/skills/fullsend/SKILL.md +++ b/.claude/skills/fullsend/SKILL.md @@ -24,12 +24,12 @@ For user-facing fullsend commands (trigger, inspect, watch, help), use the upstr ## Essential Principles -1. **Customized files are full replacements.** When a repo places a file in `.fullsend/customized/harness/`, fullsend uses it *instead of* the scaffold version — not merged, not overlaid. Any field omitted from the customized file is silently dropped. -2. **Upstream scaffold is source of truth.** The canonical harness and env definitions live in the scaffold repo. Customizations must track upstream changes or they drift. -3. **Always diff before deploying.** Never commit a customized harness without comparing it field-by-field against the current upstream version. +1. **`base:` composition, not `customized/` overlay.** ADR 0064 removed `.fullsend/customized/`. Repo-owned agents live under `.fullsend/rhdh/` and register in `.fullsend/config.yaml`. Harnesses inherit upstream via `base:` and override only the fields that differ. +2. **`repos.yaml` is the fleet source of truth.** Version pins, mint URL, and the managed repo list live at the root of this repo. Roll a new fullsend version by bumping `github.fullsend_ref` and running `fullsend repos install -f repos.yaml` (PRs only, never `--direct`). +3. **Always diff before deploying.** Thin `base:` harnesses still need a field-by-field check against the upstream file they inherit. 4. **Docker ENV is dead at runtime.** OpenShell strips Containerfile `ENV` directives — they exist during `docker build` but not in the sandbox. All runtime env vars must go through `.env.d/` files. -5. **Path flattening.** Fullsend overlays `.fullsend/customized/env/` → `env/`, `.fullsend/customized/harness/` → `harness/`, etc. Harness `host_files.src` paths are always relative to the **flattened** working dir (e.g., `env/foo.env`, never `customized/env/foo.env`). -6. **Confirm before mutating.** Commands that write to GitHub (`comment`, `label`) must confirm with the user before acting. These are shared-state actions visible to the whole team. +5. **Harness paths are relative to `.fullsend/`.** `host_files.src` values such as `rhdh/env/yarn-proxy.env` resolve from the per-repo `.fullsend/` root, not from a flattened `customized/` overlay. +6. **Confirm before mutating.** Commands that write to GitHub (`comment`, `label`) must confirm with the user before acting. These are shared-state actions visible to the whole team. Scaffold upgrades go through PRs. @@ -91,7 +91,7 @@ To add a variable, create an env file and wire it via `host_files` in the harnes | `debug <#issue> [--repo]` | Run sandbox diagnostics (shortcut for `trigger debug`) | | `comment <#issue> [--repo]` | Post a comment on an issue or PR | | `label <#issue>