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-pythonpassed.- 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-statusreportedZweistein public tables: 39.npm run legacy:runtime:statusreported 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, and5178had no listeners.
Observed health results:
- Studio API returned HTTP 200 with
data.statusset toOk. - 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.