Files
dev/migration/STATUS.md
T
zeekay db924855a0 feat: own the front door, consume upstream as submodules
Replaces the Rust tree. `code-rs/` was a fork of just-every/code carrying
its own copy of everything; `vendor/` held 219 MB of upstream snapshots
beside it. Both are gone.

In their place: Hanzo writes the command surface, upstream keeps the
engines. `crates/hanzo-dev/src/main.rs` is a real file that dispatches
into libraries — codex_tui::run_main, codex_exec::run_main, and the rest
— rather than an include! of upstream's 5156-line binary main. Owning the
front door is what makes a single unified command surface expressible.

Upstream arrives as submodules at upstream/codex and upstream/code, both
at latest. The gitlink is the pin, so no lockfile of hashes sits beside
it and a bump is a two-line diff instead of forty-five thousand. Crates
are consumed by ordinary path dependency; nothing is copied.

The whole Hanzo delta on upstream is sixteen anchored substitutions in
patches/codex.json, applied in place by `make prepare` and visible in one
`git -C upstream/codex status`. Each carries an exact match count, so
upstream moving the ground under one stops preparation and names the file
rather than branding the wrong line. Two are upstreamable: they publish
mcp_cmd, plugin_cmd and doctor from upstream's library instead of burying
them in its binary.

`dev` covers exec, login, logout, serve, resume, fork, review, agents,
queue, archive, unarchive, delete, cloud, mcp, plugin, doctor, features,
sandbox and completion. Auto Drive and the browser bridge are not ported
yet; migration/STATUS.md records that, and the defects the v1 patch was
already carrying, so they are fixed as features are ported rather than
copied across.

Releases build from the root after `make prepare`, with submodules
checked out. Scripts that existed only to manage a fork-diff — the
upstream-merge set and the codex path-dep check — go with the fork.
2026-09-07 18:51:26 -07:00

3.1 KiB

Migration status

dev is the upstream Codex runtime behind a command surface Hanzo writes and owns. Upstream sources are pinned submodules and are not modified.

code-v1.patch and v1-inventory.json record the v1 workspace and its regression tests against the Just Every fork. They are reference, no longer applied to anything. An archived change is not evidence that the behavior has been ported or tested.

Not finished

Behavior Where it stands What it needs
Union command surface crates/hanzo-dev/src/main.rs covers the interactive session, exec, login/logout, serve, cloud, sandbox, completion The rest of the upstream surface — agents, review, mcp, plugin, doctor, resume, fork, queue, archive, features, worktree. Their logic lives in upstream's binary rather than its library, so each needs either a library entry point upstream or an owned implementation.
Hanzo provider and Enso default hanzo-config Provider request and override integration tests
Branding and input surface hanzo-tui through 12 anchored edits Render snapshots and an interactive pass
Branding outside the island -p/--profile help still reads $CODEX_HOME The string lives in utils/cli, which most of the workspace depends on, so it cannot join the island without dragging everything in. Either upstream a product-name indirection, or own the flag.
Native Hanzo tools hanzo-mcp executable configuration Unified session integration
Hanzo account login dev login --hanzo selects the provider and reads what hanzo login stored Device flow, and tests that do not depend on a signed-in machine
Auto Drive Reference only, in code-v1.patch Rebuild against codex-core as a hanzo-* crate
Browser bridge, screenshots, UI control Reference only, in code-v1.patch Same
v1 sessions and configuration Kept in their existing home Migration and resume compatibility tests
Releases — native, npm, Homebrew, crates Existing production repository Complete release and publishing gates

The production repository stays public and active until these pass and this repository carries the release assets existing installers fetch.

Carried over from v1, still wrong

Found while diagnosing the v1 suite. None of these are caused by the migration; all of them ship in code-v1.patch and must be fixed as their features are ported, not copied across.

  • core/src/free.rs hardcodes a bearer token in plaintext. It belongs in KMS unless it is genuinely public, spend-capped, and accountless — and that claim needs verifying before the code is ported.
  • HANZO_DEFAULT_MODEL is enso-auto, but the preset catalog has no such entry and marks zen5-coder as the default. Two owned tests assert opposite answers. The picker offers a model the default is not.
  • The v1 status-line and settings snapshots contradict the source changes in the same patch: composer_status.rs renders • Working (Ns …) while thirteen snapshots still expect ✶ Responding..., and the settings snapshots predate free.rs. The v1 suite was already red when it was captured.