spawn_latest
Pull upstream project changes into a Spawn game project: sync saved specs or rebase git work before builds and after refused pushes, refusing dirty trees and aborting colliding rebases safely.
Instructions
Take upstream's work into your project. ON ENGINE 6.0+ (git lane) this is git pull --rebase: Savi, exec, and other clones commit to the same repo, so pull before you build and again after a refused push. A dirty tree is refused rather than stashed, and a rebase that collides is aborted with your commits intact and the colliding paths named. mode / version / updateSlug / applyLocal are document-lane concepts and are refused there. ON A PRE-6.0 WORLD (document lane) it is unchanged: pull a saved spec — head (mode=dev, default), published live (mode=live), an exact version, or a published updateSlug. Head pulls sync scripts (untouched fast-forward; both-changed → .theirs) and update the base-version rail — use after version_conflict. Non-head pulls are read-only unless applyLocal:true. version and updateSlug are mutually exclusive.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 'dev' = saved head (default); 'live' = published live version | dev |
| version | No | Exact saved spec version (mutually exclusive with updateSlug) | |
| applyLocal | No | Write pulled scripts/base-version (and game.json when saveGameJson). Defaults true for plain head pulls, false for mode=live / version / updateSlug | |
| projectDir | No | Absolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd. | |
| updateSlug | No | Published update slug → pinned spec version (mutually exclusive with version) | |
| saveGameJson | No | When applying: write pulled spec to game.json | |
| engineVersion | No | Optional engine version this call assumes: a semver ('6.0.0', '5.4') or an era name ('6.0' for a git world, 'document' for a pre-6.0 one). Omit it and the world's engine is detected from the API and cached. When passed it is CHECKED against the real pin and a mismatch fails the call without writing anything — it is an assertion, not an override. |