diff --git a/.agents/skills/release/SKILL.md b/.agents/skills/release/SKILL.md index 57b2e89..37619a2 100644 --- a/.agents/skills/release/SKILL.md +++ b/.agents/skills/release/SKILL.md @@ -159,6 +159,23 @@ node -e 'const f="package.json",fs=require("fs");const j=JSON.parse(fs.readFileS sed -i '' 's/^version = ".*"/version = "X.Y.Z"/' herdr-plugin.toml ``` +### Refresh the harness catalog + +```bash +npm run catalog # --check: boots one throwaway box per template, ~1 min, exit 2 on drift +npm run catalog -- --write # accept what the templates' CLIs now say; commit the result +``` + +The effort words and model ids each template accepts are read off the CLI IN the template +(`docs/adr/0016`), and templates get rebuilt with newer CLIs between releases. A release +should ship the catalog of the images it will boot, so run the check here; if it exits 2, +run `--write`, read the diff of `src/harness-catalog.generated.js` and the `` +block in `config/config.example.toml` (a word gained or lost, a model added or retired, +a version bump), and commit it with the version bump. Needs the E2B key and the agent +credentials your `config.toml` already holds; the output names variables, never values, +so it is safe to paste into the release notes. Exit 1 means a probe could not be trusted: +the committed row is kept and marked stale, so it is not a blocker, but say so. + ### Preflight, then tag ```bash diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index c67c45b..e5447ab 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -70,12 +70,23 @@ Same base ref, N worktrees, N boxes — one per template on the **roster**. `fle never touches the E2B SDK; it drives **herdr** and then reuses `open` per member. 1. **herdr** invokes the `fleet` action → `bin/e2b-fleet-open` → the pickers run in - a new, focused pane below the invoking pane (`bin/e2b-fleet`, no flags), because an action has no terminal. + the **popup** (`bin/e2b-popup --render` in `pick-fleet` mode, `bin/e2b-fleet` with + no flags inside it), because an action has no terminal; once the roster is + answered the same popup becomes the dashboard while the members provision. A + herdr that cannot open a popup gets the pickers in a pane below the invoking pane. 2. Two screens (`lib/chooser.sh`): the **task slug** plus the optional **fleet task** (`ask_slug_tty`, which also carries the dirty-tree warning) and the **roster** (`ask_roster_tty`, the same menu `open` offers, `[fleet] default_roster` pre-ticked). Aborting either one creates nothing. With `--slug`, `-t` and `--task` given, both screens are skipped. + `--file PATH` (or stdin with `-`) and `--preset NAME` resolve a JSON fleet + specification through `src/fleet-spec.js` into those same arguments. Presets + live under the config directory's `presets/`; p / Shift+P fills the roster's + editable cells from a selected file. Filenames are listed with Bash so cached + paint stays immediate, and the selected JSON is read and validated on demand. + An optional preset task applies when no task was entered. CLI fields override + saved values. A preset describes a future launch, never a running fleet + (ADR 0018); the existing member naming and creation paths remain authoritative. 3. `src/fleet-name.js` turns the slug + roster into one branch and label per member (`/-