plugin/install/fetch-and-wire.sh — the hybrid seam (I9)
The bridge behind /getff:install-enforcement: fetches the project's OWN official installer instead of bundling ~2MB into the plugin, runs it dry-run by default, and never wires anything on its own — --apply plus the command's consent does the real run.
plugin/install/fetch-and-wire.sh — the hybrid seam (I9)
Status: shipped-beta · Ships to: plugin (marketplace install of getff@getff; the plugin payload's install/ directory) · Fires at: only when the /getff:install-enforcement command invokes it — it is never on any automatic path
What it is
An 81-line script implementing the packaging decision the plugin made in June 2026 ("Option C"): rather than bundle a ~2MB copy of the installer into the plugin, the plugin FETCHES the project's own official install.sh at wiring time and runs it against the consumer repo. It is the mechanical half of the hard-layer opt-in; the consent half lives in the command (I3).
How it works
- The safety posture is stated in the header and enforced by flags: the script NEVER wires anything on its own — dry-run is the default and writes nothing to the consumer;
--applydoes the real run; consent is orchestrated by the command, not assumed here. - Source resolution is env-driven and auditable:
RAT_INSTALL_SOURCEmay be a local directory containing install.sh (forks/tests — used in place) or a git URL to clone (default: the official repo);RAT_INSTALL_REFis the ref to clone. - The fetch REF is deliberately DECOUPLED from the plugin's own version: framework release tags lag staging by weeks, so pinning the fetch to
v<plugin-version>would ship a stale install.sh missing hardening fixes — the script tracksmainby default, with the override documented for pinning a reproducible release tag once one is cut for the plugin. - The stack argument passes straight through to install.sh (default
ts-server), so the consumer gets the same lane/profile choices a direct install offers. - Lane honesty: plugin-path only, opt-in only. Everything the plugin does WITHOUT this script is soft-layer; this file is the single seam where the hard layer becomes reachable, and its default state is inert.
Satellites & companions
Invoked by the /getff:install-enforcement command (I3); explained by the installing-enforcement skill (I6); fetches and runs the official install.sh (A2) — the same installer the clone/npm path runs directly. Implements the companion-install principle the framework states for companions: install via the official top-level installer.
Anchors
At framework pin aa87d0a47a6d8502f983cc9fe7284bd5dcb3d650:
plugin/install/fetch-and-wire.sh:2-4— «# fetch-and-wire.sh — the rules-as-tests "hybrid seam": reach the HARD enforcement layer» «# (git hooks + CI) by fetching the project's OWN official installer and running it against» «# the consumer repo. Option C (maintainer decision 2026-06-22) — fetch-the-official-installer»plugin/install/fetch-and-wire.sh:9-12— «# The plugin already delivers the SOFT layer (skills/agents/session hooks). This script is the» «# opt-in bridge to the HARD layer, invoked by /getff:install-enforcement. It NEVER» «# wires anything on its own: dry-run is the default; --apply does the real run; consent is» «# orchestrated by the command (plugin/commands/install-enforcement.md), not assumed here.»plugin/install/fetch-and-wire.sh:14-16— «# Usage: fetch-and-wire.sh [stack] [--apply]» «# stack install.sh stack arg (default: ts-server)» «# --apply run the real install (default: --dry-run, writes nothing to the consumer)»plugin/install/fetch-and-wire.sh:22-24— «# RAT_INSTALL_REF git ref to clone when SOURCE is a URL (default: the stablemainbranch,» «# which carries the current hardened install.sh). Override to pin a»plugin/install/fetch-and-wire.sh:28-30— «# deliberately DECOUPLED from RAT_INSTALL_REF below: the framework's own release tags (v0.2.0,» «# v0.3.0) lag staging by weeks, so pinning the fetch tov<plugin-version>would ship a stale» «# install.sh missing the hardening fixes (#531/#551/#635/#636). We trackmaininstead; a»
plugin agent twins — compliance-verifier, living-docs-auditor, review-sidecar (I8)
Three plugin/agents/*.md files byte-identical to their in-repo agents/ sources, generated by scripts/generate-plugin-twins.sh under a no-marker, no-header contract enforced by principle 24(d) — the marketplace audience gets the same reviewers the clone repo ships.
Join the beta
What the getff beta covers, what each layer's maturity label means, how to enter today, and where to send feedback so it reaches the people who can act on it.