Repository navigation
Conversation
…ole rebuild Workstream H follow-up (D3, Outcome A). A console build does seven things in the host for every engine it compiles in; a prebuilt release now ships the output of each and utils/runtime-engines replays them at boot: - prepareRuntimeEngines (before boot): fetch GET ~registry/v1/engines/runtime, skip engines the console is built with, refuse engines whose required host modules are missing, append the config meta, load routes.js and host-app.js with script elements, fetch translations.json, and add the mounts by wrapping the generated router map (never a second Router.map). - registerRuntimeEngines (instance boot): push the bundles into the asset loader, add translations to ember-intl, register extension loaders that the extension manager falls back to. A standalone extension.js keeps the engine bundle lazy; without one the bundle loads before requiring <name>/extension. - loadInstalledExtensions accepts the runtime list; the extensions cache is keyed on the runtime list's signature so installs invalidate it. Tooling (Node, no new dependencies): - bin/build-engine-release.js: build (or reuse) a console dist with the engine and extract <out>/<name>/ with routes.js, host-app.js, extension.js, translations.json and manifest.json (versions built against, runtime entry, required host modules, alias list, sha256 per file). - bin/check-engine-compat.js + bin/host-modules.js: diff a release's required modules against a console build's module list and gate on the ember-ui / ember-core minor. - node-tests/: unit tests for the scanner, extractor and checks (run in CI), and an end-to-end test that boots a console dist built without Pallet in headless Chrome and mounts the captured Pallet release (needs two builds, skipped in CI). Design note: docs/runtime-engines.md.
This was referenced Oct 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Extensions Registry, Phase 3 Workstream H follow-up (decision D3, Outcome A with a version pin).
A console that was built without an engine can now mount a prebuilt release of it at boot. The design, the release layout and the API contract are in
docs/runtime-engines.md.Runtime (
addon/utils/runtime-engines.js)prepareRuntimeEngines(application)runs before boot. It:GET ~registry/v1/engines/runtime(an empty list if the endpoint is missing)<name>/config/environmentroutes.jsandhost-app.jswith script elementstranslations.jsonRouter.mapregisterRuntimeEngines(appInstance)runs afterload-asset-manifest. It pushes the bundles, adds translations to ember-intl, and registers extension loaders that the extension manager falls back to.loadInstalledExtensions(core, runtimeEngines)lists runtime engines after the build-time list. The localStorage extensions cache is keyed on the runtime list's signature, so an install or update invalidates it.Tooling (
bin/,lib/, Node, no new dependencies)fleetbase-build-engine-release --console <dir> --engine <pkg> --out <dir> [--dist <dir>]writes<out>/<pkg>/with:routes.js,host-app.js, a standaloneextension.jsandtranslations.jsonmanifest.json: versions built against, the runtime entry, required host modules and alias list, sha256 per filefleetbase-check-engine-compat --manifest … --host <dist|host-modules.json> [--policy minor|exact|modules]exits 1 when a required module is missing or ember-ui/ember-core are on a different minor.fleetbase-host-modules --dist … --console …writes a console build'shost-modules.json.Verified locally against the spike's builds (no new builds)
routes.js, the same 490host-app.jsmodules and the same translations as the hand-captured package.node-tests/runtime-engines-mount.test.jsbooted the spike's console dist built without Pallet (with this branch's sources injected) in headless Chrome:console.pallet.*routes were mounted and/palletresolved toconsole.pallet.home.loadEngine()booted Pallet.Not run locally
The QUnit suite and the lints. CI here is the first run.
Merge order
This PR first, then a release, then the console PR (fleetbase/fleetbase,
feat/runtime-engines), which adds the two initializers and bumps@fleetbase/ember-core.