Porting · porting/2026-05-05-local-non-python-runtime-smoke.md Docs Home

Local Non-Python Runtime Smoke

Date: 2026-05-05

Objective

Prove that the rebuilt non-Python platform services can run at the same time in LegacyBlinkin-2-Hetzner.

This does not complete the full platform rebuild, because the Python Query Engine and Ingestion Worker are still not running locally. It does close the previous local gap where the services had only been proven as separate slices.

Services Started Together

Infrastructure:

  • Postgres
  • Redis
  • MinIO

Backends:

  • Studio API on http://127.0.0.1:18000
  • Zweistein Server on http://127.0.0.1:3000/ai

Frontends:

  • Zweistein Admin on http://127.0.0.1:5176/ai/
  • Zweistein Embedding Widget on http://127.0.0.1:5177/
  • Picasso Houston on http://127.0.0.1:5175/
  • Picasso Editor on http://127.0.0.1:5174/studio/
  • Picasso Widget on http://127.0.0.1:5178/

Commands Run

Repeat the smoke with one command:

npm run legacy:runtime:smoke:non-python

That command checks the app ports first, starts the non-Python app services, waits for readiness, runs the existing health helpers, prints npm run legacy:runtime:status, and then stops only the app processes it started.

The coordinated smoke used the existing local helpers:

npm run studio-api:start
npm run zweistein-server:install
npm run zweistein-server:start
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

Health checks:

npm run studio-api:health
npm run zweistein-server:health
npm run zweistein-server:db-status
npm run zweistein-admin:health
npm run zweistein-widget:health
npm run picasso-houston:health
npm run picasso-editor:health
npm run picasso-widget:health
npm run legacy:runtime:status

Evidence

Latest repeatable smoke command:

  • npm run legacy:runtime:smoke:non-python passed.
  • All seven non-Python app services became ready at their local URLs.
  • The command ran every existing app health helper.
  • npm run zweistein-server:db-status reported Zweistein public tables: 39.
  • npm run legacy:runtime:status reported HTTP 200 for Studio API, Zweistein Server/Admin/Widget, and Picasso Houston/Editor/Widget while the smoke was running.
  • After the smoke stopped its own app processes, the app ports 18000, 3000, 5174, 5175, 5176, 5177, and 5178 had no listeners.

Observed health results:

  • Studio API returned HTTP 200 with data.status set to Ok.
  • Zweistein Server returned Server is healthy.
  • Zweistein database status reported Zweistein public tables: 39.
  • Zweistein Admin returned HTTP 200 on /ai/.
  • Zweistein Embedding Widget returned HTTP 200.
  • Picasso Houston returned HTTP 200.
  • Picasso Editor returned HTTP 200 on /studio/.
  • Picasso Widget returned HTTP 200.

Latest npm run legacy:runtime:status during the smoke:

Service Runtime
Postgres Up
Redis Up
MinIO Up
Studio API HTTP 200
Zweistein Server HTTP 200
Zweistein Admin HTTP 200
Zweistein Embedding Widget HTTP 200
Picasso Houston HTTP 200
Picasso Editor HTTP 200
Picasso Widget HTTP 200
Zweistein Query Engine not responding
Zweistein Ingestion Worker manual

Fix Applied During Smoke

The first coordinated start found that legacy-src/zweistein/server/node_modules was missing. Running npm run zweistein-server:install restored the Yarn dependencies, after which npm run zweistein-server:start and npm run zweistein-server:health passed.

Remaining Boundary

This is a non-Python runtime smoke only.

Still not complete:

  • Python Query Engine is not locally running because macOS/Python/Torch remains the known blocker.
  • Python Ingestion Worker processing is not verified.
  • No full Studio Editor to Houston published App to Zweistein Agent/AI flow has been verified.
  • The Hetzner Linux/amd64 image builds and health evidence are still required.