unoverse 0.1.193 → 0.1.195

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -76,17 +76,14 @@
76
76
  debug:
77
77
  msg: "{{ pull_result.stdout_lines[-8:] | default(['done']) }}"
78
78
 
79
- # A DEPLOY TAKES THE NEWEST NODE RUNTIME. The entrypoint installs
80
- # @unoverse-platform/base within the range the image declares, but it only goes to the
81
- # registry when the volume is cold or the range moved otherwise a restart would be a
82
- # network call, and a restart must be instant and offline. A DEPLOY is the moment the
83
- # operator asked for "make this current" (MARKETPLACE.md §5a), so it says so explicitly.
84
- # Scoped to this one `up`, never written into .env: a later `docker restart` must not
85
- # inherit it.
86
- - name: "[3/4] Restart on the new images (and take the newest base in range)"
79
+ # THE NODE RUNTIME CAME WITH THE IMAGE. base is baked in, not installed
80
+ # (MARKETPLACE.md §5a, reversed 2026-09-03), so the pull above already moved it and
81
+ # this step has nothing extra to ask for. It used to run with `UNOVERSE_BASE_REFRESH=1`
82
+ # to mean "take the newest base in range"; there is no range and no install any more.
83
+ - name: "[3/4] Restart on the new images"
87
84
  shell: |
88
85
  cd {{ gravity_dir }}
89
- UNOVERSE_BASE_REFRESH=1 docker compose up -d 2>&1 | tail -6
86
+ docker compose up -d 2>&1 | tail -6
90
87
  register: up_result
91
88
 
92
89
  # `up -d` RECREATES ON CONFIG CHANGE, NOT ON IMAGE CHANGE — not reliably, and not on
@@ -275,20 +275,12 @@ services:
275
275
  # copy carrying a built dist. Without this the runtime hits MODULE_NOT_FOUND and
276
276
  # the nodes show "Package not installed".
277
277
  - NODE_PATH=/app/host_node_modules:/app/plugins/node_modules
278
- # PASSTHROUGH, not a setting. `unoverse deploy` runs `UNOVERSE_BASE_REFRESH=1 docker
279
- # compose up -d` to mean "take the newest node runtime in range"; without this line
280
- # that variable would reach the compose CLI and stop there, never the container.
281
- # Defaults to 0, so an ordinary restart stays offline and instant.
282
- - UNOVERSE_BASE_REFRESH=${UNOVERSE_BASE_REFRESH:-0}
283
278
  volumes:
284
279
  - unoverse_plugins:/app/plugins
285
- # THE NODE RUNTIME, which this image does not carry (MARKETPLACE.md §5a). The
286
- # entrypoint installs @unoverse-platform/base here at startup, within the range
287
- # apps/unoverse/package.json declares, and symlinks it into
288
- # /app/node_modules/@unoverse-platform/base. A volume rather than a layer so a plain
289
- # restart is offline and instant: the fetch happens on a cold volume, or when the
290
- # declared range changes, or when a deploy sets UNOVERSE_BASE_REFRESH=1.
291
- - unoverse_base:/app/base
280
+ # THE NODE RUNTIME IS IN THE IMAGE (MARKETPLACE.md §5a, reversed 2026-09-03). There was
281
+ # a `unoverse_base:/app/base` volume here between 2026-08-30 and 2026-09-03, holding a
282
+ # base the entrypoint installed from npm at startup. Both are gone: base is compiled in
283
+ # from the workspace, so the image and its runtime cannot disagree.
292
284
  # ── Platform-dev mounts (monorepo only; sync-starter strips these three
293
285
  # lines from the starter's copy — a customer universe serves what the DB
294
286
  # says). Local edits are picked up on restart; design/prompts are data, no build.
@@ -407,4 +399,3 @@ services:
407
399
  volumes:
408
400
  umap_models:
409
401
  unoverse_plugins: # Marketplace-installed node packages (persisted across restarts)
410
- unoverse_base: # @unoverse-platform/base, installed at startup (MARKETPLACE.md §5a)
@@ -79,27 +79,18 @@ cmd_check() {
79
79
 
80
80
  # 1b. THE NODE RUNTIME THIS UNIVERSE IS ACTUALLY RUNNING.
81
81
  #
82
- # base is installed at startup, not baked into the image (MARKETPLACE.md §5a), so a
83
- # universe's platform version and its runtime version are two different numbers that move
84
- # independently. Nobody updates what they cannot see: this is the line that turns "which
85
- # base am I on?" into something answerable, and shows the gap when the registry has newer.
82
+ # base ships INSIDE the image (MARKETPLACE.md §5a, reversed 2026-09-03), so this number
83
+ # cannot disagree with the platform version above and printing it is how you can tell.
84
+ # It used to be installed from npm at startup and compared against the registry here,
85
+ # because the two moved independently; they do not any more, and a line that still
86
+ # offered "npm has newer" would be advertising a lane that no longer exists.
86
87
  # Read out of the RUNNING container rather than off this machine's disk, because the
87
88
  # container is the only thing whose answer counts.
88
- local base_installed base_range base_latest
89
+ local base_installed
89
90
  base_installed=$(docker compose -f "$ROOT/docker-compose.yml" exec -T unoverse \
90
91
  node -p "require('/app/node_modules/@unoverse-platform/base/package.json').version" 2>/dev/null | tr -d '\r')
91
92
  if [ -n "$base_installed" ]; then
92
- base_range=$(docker compose -f "$ROOT/docker-compose.yml" exec -T unoverse \
93
- node -p "require('/app/apps/unoverse/package.json').dependencies['@unoverse-platform/base']" 2>/dev/null | tr -d '\r')
94
- base_latest=$(curl -s --max-time 5 "https://registry.npmjs.org/-/package/@unoverse-platform%2Fbase/dist-tags" 2>/dev/null \
95
- | node -pe 'try{JSON.parse(require("fs").readFileSync(0,"utf8")).latest ?? ""}catch(e){""}' 2>/dev/null)
96
- if [ -n "$base_latest" ] && [ "$base_latest" != "$base_installed" ]; then
97
- # NOT a failure. A universe is entitled to sit on an older runtime; it is not entitled
98
- # to be unable to find out. `deploy` and `update` are what take the newer one.
99
- warn "node runtime ${BOLD}$base_installed${NC} ${DIM}(range $base_range · npm has $base_latest — 'unoverse deploy' takes it)${NC}"
100
- else
101
- ok "node runtime ${BOLD}$base_installed${NC} ${DIM}(range ${base_range:-unknown})${NC}"
102
- fi
93
+ ok "node runtime ${BOLD}$base_installed${NC} ${DIM}(in the image)${NC}"
103
94
  echo ""
104
95
  fi
105
96
 
@@ -155,12 +155,10 @@ case "${1:-}" in
155
155
  exit 1
156
156
  fi
157
157
  if [ -n "$(docker compose -f "$ROOT/docker-compose.yml" ps -q 2>/dev/null)" ]; then
158
- # THE NODE RUNTIME UPDATES LIKE THE IMAGES DO. base is installed at startup, not
159
- # baked (MARKETPLACE.md §5a), and the entrypoint only goes to the registry on a cold
160
- # volume or a changed range otherwise every restart would be a network call. An
161
- # UPDATE is exactly the moment the operator asked for the newest of everything, so
162
- # it says so. Scoped to this command; nothing is written to .env.
163
- UNOVERSE_BASE_REFRESH=1 \
158
+ # THE NODE RUNTIME ARRIVES WITH THE IMAGE. base is baked in, not installed
159
+ # (MARKETPLACE.md §5a, reversed 2026-09-03), so pulling the image IS updating the
160
+ # runtime and there is nothing extra to ask for. `UNOVERSE_BASE_REFRESH=1` used to
161
+ # ride this line to mean "take the newest base in range"; the range is gone with it.
164
162
  docker compose -f "$ROOT/docker-compose.yml" --env-file "$ROOT/.env" up -d --remove-orphans >/dev/null 2>&1 \
165
163
  && ok "Running services moved to the new images"
166
164
  # MIGRATIONS RUN ON UPDATE, same as deploy and start. An update is exactly when a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unoverse",
3
- "version": "0.1.193",
3
+ "version": "0.1.195",
4
4
  "description": "The Unoverse front door — create a Studio project, a universe, or a client app, and launch Studio.",
5
5
  "license": "SEE LICENSE IN README.md",
6
6
  "type": "module",