Porting · porting/2026-05-05-local-runtime-assembly.md Docs Home

Local Runtime Assembly

Date: 2026-05-05

Objective

Turn the individual verified local slices into a single local runtime map for the Hetzner rebuild.

This is not a production deployment yet. It is the local assembly checklist that shows which services exist, which commands start them, which artifacts are currently generated, and which blockers remain.

What Was Added

  • scripts/local-runtime-assembly.mjs Read-only runtime map for infrastructure, backend services, frontend surfaces, and Python services.
  • package.json scripts:
    • legacy:runtime:plan
    • legacy:runtime:status
    • legacy:runtime:missing
    • legacy:runtime:smoke:non-python

The assembly map script intentionally does not start blocking dev servers. The smoke script starts the non-Python app services, proves health, and then shuts down only the app processes it started.

Local Commands

Print the intended local start order:

npm run legacy:runtime:plan

Show current env template, artifact, container, and health status:

npm run legacy:runtime:status

Show required runtime files that are not currently generated:

npm run legacy:runtime:missing

Run the repeatable non-Python smoke:

npm run legacy:runtime:smoke:non-python

Assembly Order

  1. Start base infrastructure:
npm run legacy:infra:up
  1. Start verified backend services:
npm run studio-api:start
npm run zweistein-server:start
  1. Start verified frontend surfaces:
npm run zweistein-admin:dev
npm run zweistein-widget:dev
npm run picasso-houston:dev
npm run picasso-editor:dev
npm run picasso-widget:dev
  1. Continue Python service verification:
npm run zweistein-query:docker-torch-probe
npm run zweistein-query:docker-build
npm run zweistein-ingestion:docker-build

Current Status Evidence

Latest coordinated non-Python runtime smoke:

  • npm run legacy:runtime:smoke:non-python now repeats this proof in one command.
  • Studio API, Zweistein Server, Zweistein Admin, Zweistein Embedding Widget, Picasso Houston, Picasso Editor, and Picasso Widget were running together.
  • npm run legacy:runtime:status reported HTTP 200 for all of those non-Python services.
  • npm run zweistein-server:db-status reported Zweistein public tables: 39.
  • The smoke is documented in porting/2026-05-05-local-non-python-runtime-smoke.md.

Latest npm run legacy:runtime:status result:

  • Postgres container: up.
  • Redis container: up.
  • MinIO container: up.
  • Weaviate container: not created because the optional AI infra profile is not currently running.
  • Studio API env template and runtime artifact: present.
  • Studio API was rebuilt with npm run studio-api:build, started with npm run studio-api:start, and npm run studio-api:health returned HTTP 200 with data.status set to Ok. The local process was stopped after the health proof.
  • Zweistein Server env template and runtime artifact: present, but service is not currently running.
  • Zweistein Admin env template and runtime artifact: present.
  • Zweistein Admin was rebuilt with npm run zweistein-admin:build, started with npm run zweistein-admin:dev, and npm run zweistein-admin:health returned HTTP 200 on http://127.0.0.1:5176/ai/. The local process was stopped after the health proof.
  • Zweistein Embedding Widget env template and build artifact: present, but dev server is not currently running.
  • Picasso Houston env template and build artifact: present, but dev server is not currently running.
  • Picasso Editor env template and build artifact: present, but dev server is not currently running.
  • Picasso Widget env template and build artifact: present, but dev server is not currently running.
  • Zweistein Query Engine env template and local Python environment: present, but HTTP runtime is not currently running.
  • Zweistein Ingestion Worker env template and local Python environment: present, but worker processing is not verified.

Latest npm run legacy:runtime:missing result:

No required runtime assembly files are missing.

Interpretation

The local rebuild is now mapped and the non-Python platform can run together.

The remaining local runtime gap is Python:

npm run zweistein-query:docker-torch-probe
npm run zweistein-query:docker-build
npm run zweistein-ingestion:docker-build

The next Python/Hetzner step should run the Query Engine Docker build on native Linux amd64 or a Hetzner staging box, because Docker Desktop amd64 emulation on this Mac became unreliable during native spider-rs wheel build.

Not Yet Done

  • No complete all-service local runtime is currently running because Python services are still excluded.
  • Python Query Engine is not fully built or running.
  • Python Ingestion Worker is not fully built or running.
  • End-to-end flow from Studio Editor to published Houston App to Zweistein Agent/AI runtime is not verified yet.
  • The local disk is very tight after regenerating Node artifacts, so the Python Docker build should move to native Linux amd64 or a Hetzner staging box.