Linked repository document
Adoption journey record — store add-on to first native build
docs/store/adoption-journey.md
This document retains its design, example or evidence context. References outside this guide show their repository paths.
Recorded 2026-09-26 on the macOS recording host (Apple silicon, macOS 26,
Godot 4.8.dev6.official.8898c2b3d, SDK gododin-devx-2026-09-26.1). This is
the acceptance record the onboarding findings
ask for: the commands run, the manually edited files, the setup steps, and the
first-success experience — with the friction against the gdext/Rust Tools
ambition named explicitly rather than papered over.
Steps that were executed
Pack the store ZIP from maintained source
shtools/release/pack_store_zip.sh --project-root <gododin-checkout> \ --release-from-lock --out /tmp/store-pack/gododin-editor-addon.zip # GODODIN_STORE_ADDON_INVENTORY_VERIFIED files=5 # GODODIN_STORE_ZIP_PACKED release=gododin-devx-2026-09-26.1 bytes=15253 # sha256=9649c926f9bec81152893481f8ba904d80be47176553ed24f7a1f6b08f0cdfc5Two consecutive packs are byte-identical (cmp).
Install into a clean ordinary Godot project. Unzip;
addons/gododin/lands where the engine expects it. Enable Project Settings → Plugins → Gododin Build and Recovery. (In the automated verification this enabling was recorded the same way the editor records it — the additiveeditor_plugins/enabledproject setting — and the file inventory was compared before/after to prove nothing else in the project changed.)Open the editor ordinarily — no Gododin launcher environment, no
--headless, no CLI child:sh/absolute/Godot_4.8-dev6.app/Contents/MacOS/Godot --path /absolute/clean_projectObserved in the session log:
GODODIN_SETUP_DOCK_READY release=gododin-devx-2026-09-26.1, no script errors. The Gododin dock shows its release, an SDK executable field with a file picker, and Connect/Check actions.--headless,--import,--export, and--quit-style sessions stay fully inert (verified separately: the dock is never created there, so build/export subprocesses never become interactive sessions).Connect and validate run on public CLI paths — click-verified. The dock's Connect invokes
<sdk>/bin/gododin init --project-root <root> --project-key <key>; Check invokes<sdk>/bin/gododin sdk validate --project-lock <lock> --sdk-root <sdk>and reports add-on/SDK release mismatch explicitly. The setup dock gate (repository:fixtures/setup_dock/README.md) presses these real buttons inside a live ordinary editor (GODODIN_SETUP_DOCK_PASS connect=1 repeat_guard=1 validate=1), and its first run caught two real add-on defects that shell-level checks could never see: the dock passedProjectSettings.globalize_path("res://")with its trailing slash, which the CLI's canonical-root admission refuses, so Connect could never succeed; and the check flow parsed the SDK release from captured child stdout, whichOS.executedoes not reliably return on this engine/host. Both are fixed: every CLI invocation uses the trimmed canonical root, and the dock reads the SDK release and the lock-mismatch relation from the SDK's own files instead of parsed stdout.First native build and the ordinary loop (CLI-first journey, unchanged by the store path):
sh<sdk>/bin/gododin build --project-root <root> --profile debug <sdk>/bin/gododin editor --project-root <root> # live reload session <sdk>/bin/gododin run --project-root <root> --headless \ --env MY_GAME_SEED=7 -- --players 2 --demo # GODODIN_RUN_IDENTITY engine_target=4.8.0 engine_sha256=… native_profile=debug # build_id=… source_revision=… publication=… sdk_release=gododin-devx-2026-09-26.1 # GAME_SEED=7 GAME_USER_ARGS=["--players", "2", "--demo"] # GODODIN_RUN_PASS target=4.8.0 build_id=… owners=0The launcher matrix verified this release:
--scene/--scriptselection, script exit status propagated as the CLI's own (exit 7 observed),--quit-afterbounding a non-quitting MainLoop,--profile release,--last-known-goodwith its profile-mismatch refusal, and the reserved-name--envrefusals. Debug and release exports remain the SDK'sgododin exportpath with their existing evidence.
Manual steps a consumer performs
- Install the add-on from the store (one click in the engine's AssetLib / store browser, or unzip into the project).
- Enable it in Project Settings → Plugins.
- Install a Gododin SDK release once (external download with a checksum; the add-on never downloads anything).
- Select the SDK's
bin/gododinin the dock; Connect; reopen throughgododin editorfor the live build/reload workflow.
Everything after step 4 is the same CLI-first journey an SDK-first user has,
which is deliberate: the store path and the documented getting-started path
converge on one adoption flow and one ownership model (addons/gododin is
owned by the same inventory in both channels).
Friction against the stated ambition (honest list)
- A separate SDK download remains the biggest step. gdext leans on Cargo:
cargo add godothas no installer at all. Gododin needs an immutable SDK (compiler included) installed and selected. Mitigation, not parity: one checksum-verified download, explicit selection, validation with actionable mismatch reporting — but it is still a second artifact a Rust user does not need. - The engine pin is a dev snapshot. Gododin targets exactly 4.8-dev6; a consumer on Godot 4.x stable cannot adopt this entry today. gdext tracks stable releases. Until the target advances to a stable, this alone makes the journeys non-comparable for most consumers.
- The dock's relocation/upgrade recovery is guidance, not buttons.
Connect, repeated-connect guarding, and Check connection are click-verified
in a live editor (the setup dock gate), and
gododin attachre-links a moved SDK whilegododin attach --adopt-lockadopts a new same-engine SDK release (previous lock preserved under.gododin/previous-lock.toml, engine-target changes refused); the Check-connection message names these commands when it meets a mismatch. The dock itself offers no dedicated relocate/upgrade button yet. - Single qualified host. macOS arm64 only, this release. Windows/Linux are active main-line targets but make no listing claim until their gates pass.
- What does reach parity or better, with evidence rather than buttons: the ownership contract (identical inventory across store and CLI channels, so store-install then SDK-upgrade cannot conflict), inert-by-default editor sessions, untouched adoption of existing games, and the launcher's identity report and exit-status contract for application tests.