A version written into a manifest is written into every manifest that wants it, which is how eslint came to exist in a hundred and four forms across this estate and how a package came to resolve twice at run time. The catalog moves the number out of the manifest: a manifest names the package, the workspace names the version. Four are held below their latest because the newer release cannot be used, and the reason is recorded rather than the version alone: @noble/hashes 2 renamed every subpath the web3 stack imports, @splinetool/runtime 2 depends on a package that was never published, @dynamic-labs 5.4.1 the same, and react-resizable-panels 3 points its types condition at the bundle.
hanzoai/migration
Migration & decommission plan of record for Hanzo V8 "Open Cloud" — one
unified Go binary (ghcr.io/hanzoai/cloud) that go:embeds the console2 SPA,
every capability in the FE (console2) or BE (cloud), all-SQLite (no internal
Postgres), collapsed to one Service / one origin, all live in production.
What's here
| File | Role |
|---|---|
migration.yaml |
The chart (single source of truth): the migration matrix, the ordered execution list, and the Postgres decommission runbook. |
LLM.md |
The narrative — what V8 is, where we are (~40%), the four load-bearing gaps, how to read the chart. |
scripts/pg-export.sh |
The safe first step — pg_dump every internal DB to the operator desktop before any migration. |
Status: ~40%
The unified binary is live and healthy (api.cloud.hanzo.ai/v1/health → ok,
SQLite-backed, Postgres refused at boot). The go:embed mechanism is wired and
tested. Still ahead: the real SPA embed, the RED cloud build, the Postgres
shutdown (code-ready, not executed in GitOps), and the FE→BE contract fixes.
The rule that protects customers
All-SQLite is about internal storage. The customer-facing managed-Postgres
product (the pgx provisioner + Neon cloud-sql) stays. The sql StatefulSet is
both — carve out the product role before any shutdown (see keep_postgres_product
and step 2 of the decommission runbook). Nothing is killed before a verified
replacement and a verified backup.
Order of operations
migration.yaml:execution, rank 1 first. Export before flip; shutdown dead last.