Workshop releases need stable download URLs, and both UIs must show the real crate version instead of a hardcoded string. The release workflow now sets `make_latest: true` and uploads version-free installer copies to the rolling `promptforge-workshop-latest` release. The Workshop About dialog and the Gateway config UI tab bar read the version from the build-time `__APP_VERSION__` define.
- `build.mjs` reads the version from the workspace `Cargo.toml` and `build.rs` sets `define_app_version: true`, so both the watch workflow and `cargo build` bake `__APP_VERSION__` into the bundle.
- The evergreen names are copies staged in `dist/evergreen`, so the versioned release keeps its versioned asset names; `gh release upload` and `gh release create` now carry `dist/latest.json dist/evergreen/*`.
- Bundles built without the define fall back to `"dev"` in `about-dialog.ts` and `tab-bar.ts` instead of breaking on a free identifier.
- `tab-bar.test.mjs` pins the `.tab-version` label in the actions cluster; `window-menu.mjs` defines `__APP_VERSION__` as `"0.0.0-test"` and asserts the About dialog renders it.
- The workflow's rename-and-upload step has no test; it runs only in CI.