Split the simulation spine into leaves (P4)
What changed
SKILL.md carried the lifecycle inline and gce/gce.md (about 18,300 words) loaded whole on every task. The spine is now 8 binding rules plus one routing block per task (fires, done when, pointer), 1,283 words. gce/gce.md is deleted and its text moves, unedited, into task leaves. Loaded words across the skill fall from 48,669 to 46,576. A single omnibus search probe loads about 4,100 words where it loaded 26,600.
Leaf text is moved, not trimmed. Several leaves exceed the budgets in the merge design; trimming is P5's.
DIAGRAM: none. This is a file reorganisation with no change of path, flow or mechanism.
Split map
| Old section | New home |
|---|---|
| Choosing a base, boot image, version and nightly pins, k3s pin, CNG build, roadmap, pedigree, stay current, validation matrix | gce/bases.md |
| Teardown, default full teardown, state, prerequisites, driving, cleanup, troubleshooting, bootstrap troubleshooting, security model, cost | gce/operations.md |
| Dev base | gce/dev-base.md |
| Backing-service access, backing services not provided | gce/backing-services.md |
| Patched code (caproni, omnibus) | gce/patched-code.md |
| Reading a caproni run, policy and registry | gce/reading-runs.md |
| Advanced Search, exact code search, search probes | gce/search.md |
| HTTPS behind a private CA | gce/https-private-ca.md |
| DAP block | gce/dap.md |
| Geo block | gce/geo.md (verbatim) |
| Real-model block | gce/aigw.md § Real model (verbatim) |
| Orbit | orbit.md |
| Canonical-primitive discipline, implementation notes, caproni bootstrap internals, design decisions | MAINTENANCE.md |
airgap.md, openshift-local.md, openshift-sno.md and mcp.md gain a pointer line only. README, the AGENTS.md map, the contribution skill's environment.md and the help text and comments in justfile, simulation.sh, drift-check.sh, bootstrap-gitlab.sh, zoekt-omnibus.sh and advanced-search-omnibus.sh now name the new leaf. The description frontmatter is unchanged.
Rulings applied
- Rule 2: where lab spend is approved, provision without asking per VM; otherwise get explicit approval. Every
upraises a notification through a notifier when one is onPATH. Makingcmd_upnotify itself is a separate later change. - Rule 7 and
aigw.mdstate one generic sentence: match the lab's model family to what the target organization permits. No organization or vendor is named. - Dev base: the VM stays up until the merge request's pipeline is green, so a CI failure is fixed on the same rig. Then
down --instance <name>, never a rawgclouddelete. Rule 3 carries this one exception. - The spine is over the design's 900-word target. P5 resolves that.
Vendor patches
Both patches (gitlab-psql, gitlab-clickhouse) now name gce/backing-services.md, heading unchanged. just vendor-sync c5272c9 at the unchanged pin, with skillspector v2.2.3, reproduces the committed tree: the diff touches only the two patch files and the two patched SKILL.md files (6 lines each), the manifest is byte-identical, and the scan reports 28 matched, 0 unmatched.
Simulation verdicts
Two arms per case: origin/main skill tree (A) against this tree (B), claude-sonnet-5-5 at high effort, plan mode, project settings only, sims/, CONTRIBUTING, AGENTS, MAINTENANCE and CHANGELOG fenced out. Nothing provisioned or posted.
| Case | Catches checked | A | B | Verdict |
|---|---|---|---|---|
| 1 Seeding (stored task) | Ultimate plus runner, zero is honest; call-time stamping and rolling window | both | both | KEEP |
| 2 Real model, Vertex (stored task) | billed, real-model off ends it and down does not; Model Garden card is a human step; direct mode for the finding, proxy to attribute; @-suffixed model id |
all | all | KEEP |
| 3 Geo registry mid-migration | geo license with staging mode, never License.new; verify refuses unlicensed; SIM_GEO_PAIR and geo list first; legacy mode then registry-migrate primary; geo down |
all | all | KEEP |
| 4 Teardown, omnibus (new, run twice) | instance and owner on every command, no bare down; down after arms 1 and 3, fresh up for arm 2; --max-runtime past 90 min; completion watch with copy and down; no instances stop |
all | all, plus the stdout-only leftover count and the notification on up |
KEEP |
| 5 Teardown, dev (new) | A: down at once. B: full set validated, push, hold until green, then down naming the instance, no raw gcloud |
per ruling 3 | per ruling 3 | KEEP (ruled change) |
| 6 State file (new) | brief line verbatim; status or jq projection; token by substitution; SIM_INSTANCE=sim-dap-1 |
all | all | KEEP |
Seeding's third catch in the stored case (admin token on the VM at the path the seeding leaf names) appeared in neither arm.
Checks
just ci is green at the branch head: frontmatter, prose, vale, sims-check, yaml, vendor-tree, check, lint, test, and the sign-off and disclosure check on the commit.