A cached cloud setup keeps whatever devkit release was latest when the cache was built. The plugin's hooks then call verbs that binary lacks (devkit hook user-prompt-submit fails with unrecognized subcommand 'hook' and blocks every prompt). The plugin bootstrap doesn't repair it: with no stamp, it marks the binary external and never upgrades it.
cloud_setup.py --install should install the devkit and mcpls releases that match their plugin versions, not latest, and write each plugin bootstrap's bootstrap-version stamp. The bootstrap then owns the binaries and upgrades them when the plugin version moves. Installs go to DEVKIT_INSTALL_DIR / MCPLS_INSTALL_DIR, set in the cloud environment, so setup and the bootstrap write to the same place.
A cached cloud setup keeps whatever devkit release was latest when the cache was built. The plugin's hooks then call verbs that binary lacks (
devkit hook user-prompt-submitfails withunrecognized subcommand 'hook'and blocks every prompt). The plugin bootstrap doesn't repair it: with no stamp, it marks the binaryexternaland never upgrades it.cloud_setup.py --installshould install the devkit and mcpls releases that match their plugin versions, notlatest, and write each plugin bootstrap'sbootstrap-versionstamp. The bootstrap then owns the binaries and upgrades them when the plugin version moves. Installs go toDEVKIT_INSTALL_DIR/MCPLS_INSTALL_DIR, set in the cloud environment, so setup and the bootstrap write to the same place.