- Rust 100%
|
|
||
|---|---|---|
| crates | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
hero_macros_previous
Frozen, known-good snapshots of the previous macro + OpenRPC stack (the
hero_rpc / hero_blueprint crates and the pre-rename herolib_derive).
Service repos pin these instead of the live hero_lib / hero_blueprint
repos, so the codegen/scaffolding refactor can continue there without
breaking anyone. See issue #1 for the original mandate.
Nothing here is developed. Fixes land only when a consumer needs them;
the live successors are hero_lib (runtime + new derive) and
hero_blueprint (scaffolder). Each service repo migrates onto the new
stack one at a time, on its own schedule, once that stack stabilizes.
Why multiple branches?
The fleet's committed code was generated across several incompatible
"eras" of the old stack. Generated OSIS/server code from one era is
byte-incompatible with another era's hero_rpc_osis (type-identity
errors like expected hero_rpc_osis::herolib_sid::SmartId, found herolib_sid::SmartId). A repo must therefore pin the era its committed
code was generated in. Each branch below is one such era. Consolidating
branches would require regenerating consumers' committed code — that is
exactly the per-repo migration being deferred until the new stack
stabilizes, at which point these branches get deleted wholesale.
Branch map
| Branch | Source snapshot | What it provides | Consumers (development_freeze) |
|---|---|---|---|
main |
hero_blueprint@d31c7b6 (2026-05-28) + hero_derive cut from hero_lib@9657556a |
Old-stack client crates (hero_rpc_derive, hero_rpc2, hero_rpc_openrpc, hero_rpc_client) + frozen new derive hero_derive (alias target for herolib_derive) |
~28 repos: aibroker, browser, code, codescalers, collab, db, demo, editor, gpu, indexer, matrixchat, office, orchestrator, planner, proc, proxy, redis, shrimp, skills, slides, sync_webdav, voice, wallet, zinit, … |
osis_main |
hero_blueprint@efb3a609 (2026-06-07, new-serving) |
Full OSIS cluster (hero_rpc_osis, oschema, generator, derive emitting ::herolib_openrpc::); herolib runtime pinned 9657556a, indexer b3a2f1e3 |
agent, biz, coordinator, embedder_provider, logic, osis, voice_provider |
osis_oldserving |
hero_blueprint@f6509f9c (2026-06-05, old-serving) |
OSIS cluster with vendored old-transport hero_rpc_derive |
livekit |
osis_oserver |
hero_blueprint@df2f8b1b (2026-05-18, old-serving) |
OSIS cluster made fully herolib-free (vendored frozen_osis_sid/otoml/base) — zero external git deps |
compute (pinned by rev=43a19c5) |
frozen_73ff6220 |
pristine byte-mirror of hero_blueprint@73ff6220 |
Whole-tree mirror (pre-oserver-deletion) consumed via [patch] |
drive, mycelium |
frozen_d7aa082e |
pristine byte-mirror of hero_blueprint@d7aa082e |
Whole-tree mirror | books |
frozen_d31c7b63 |
pristine byte-mirror of hero_blueprint@d31c7b63 |
Whole-tree mirror (SDK era) | books |
frozen_9b1e0d54 |
pristine byte-mirror of hero_blueprint@9b1e0d54 |
Whole-tree mirror (herolib_proc_rhai transport era) |
ledger |
frozen_8681589e |
pristine byte-mirror of hero_blueprint@8681589e |
Whole-tree mirror (hero_service/HeroUiServer era) |
auth, indexer_ui (archived; freezes local-only) |
frozen_8429b07b |
pristine byte-mirror of hero_blueprint@8429b07b |
Whole-tree mirror (hero_os era; hero_rpc_osis additionally vendored+era-fixed inside hero_os) |
os |
frozen_7b2c2abf |
pristine byte-mirror of hero_blueprint@7b2c2abf |
Whole-tree mirror | my_compute_holo |
frozen_1e11292f |
pristine byte-mirror of hero_blueprint@1e11292f |
Whole-tree mirror | projectmycelium_marketplace_backend |
frozen_1f883c00 |
pristine byte-mirror of hero_blueprint@1f883c00 |
Whole-tree mirror | znzfreezone_backend |
frozen_herolib_e519cb1 |
pristine byte-mirror of hero_lib@e519cb14 (2026-03-09) |
Contemporary herolib for no-lock mirror consumers | mycelium |
development |
main variant with hero_derive cut from hero_lib@d1383f58 |
Unused — zero consumers. Its one substantive fix (socket-dir placeholder, 3237bae) is cherry-picked to main. Do not base work here: it floats branch=development deps and deleted its Cargo.lock. |
— |
Two kinds of branches:
- Cluster branches (
main,osis_main,osis_oldserving,osis_oserver): curated, blueprint-free crate sets with upstream deps pinned byrev=. Consumers repoint individual crates here (git = …, branch = …). - Pristine mirrors (
frozen_*): unmodified single-commit byte-copies of an exact upstream rev, consumed via[patch."…/hero_rpc.git"](orhero_blueprint.git/hero_lib.git). Byte-identity is the point: the consumer's committed generated code keeps matching, with zero code changes. These must never receive commits — a commit breaks byte-identity for every consumer.
What's on main
Old-stack crates lifted verbatim from hero_blueprint@d31c7b6 (the last
self-contained pre-bridge rev: client macros emit ::hero_rpc2::,
herolib-free), workspace version 0.6.0, Rust 1.96:
| crate (path) | package | purpose |
|---|---|---|
crates/derive |
hero_rpc_derive |
openrpc_client!, openrpc_proxy!, rhai_openrpc! proc macros (old stack) |
crates/hero_rpc2 |
hero_rpc2 |
JSON-RPC 2.0 runtime over UDS; owns the OpenRPC transport (folds in the retired hero_rpc_openrpc per hero_rpc#146) |
crates/openrpc |
hero_rpc_openrpc |
Deprecated re-export shim; kept so older consumers still resolve |
crates/openrpc_http_client_lib |
hero_rpc_client |
Cross-platform OpenRPC HTTP client (native + wasm) |
crates/hero_derive |
hero_derive |
Frozen copy of the NEW derive (herolib_derive@9657556a, renamed so new-stack repos can alias it without a dup-crate clash) |
crates/herolib_oschema |
herolib_oschema |
Vendored schema parser the derives build against |
The scaffolder crates (generator, blueprinter) are intentionally not
on main — they are the "too new" parts being decoupled from. The OSIS
cluster branches carry what OSIS repos need.
How consumers use it
Old-stack client repos repoint the old dependency:
# before — moving target on hero_blueprint / hero_rpc
hero_rpc_derive = { git = "https://forge.ourworld.tf/lhumina_code/hero_rpc.git", branch = "development" }
# after — frozen, stable
hero_rpc_derive = { git = "https://forge.ourworld.tf/lhumina_code/hero_macros_previous.git", branch = "main" }
hero_rpc2 = { git = "https://forge.ourworld.tf/lhumina_code/hero_macros_previous.git", branch = "main", features = ["client", "uds-http", "openrpc-transport"] }
New-stack repos freeze only the codegen and float the runtime:
herolib_derive = { package = "hero_derive", git = "https://forge.ourworld.tf/lhumina_code/hero_macros_previous.git", branch = "main", version = "0.6.0" }
# herolib_core / herolib_openrpc / hero_lifecycle: pin hero_lib rev=9657556a
Mirror consumers use [patch]:
[patch."https://forge.ourworld.tf/lhumina_code/hero_rpc.git"]
hero_rpc_osis = { git = "https://forge.ourworld.tf/lhumina_code/hero_macros_previous.git", branch = "frozen_73ff6220" }
Freeze rules (learned the hard way)
- Pin by
rev=, neverbranch=, in any repo that other repos consume as a git dependency — cargo ignores a git dep's Cargo.lock and re-resolves itsbranch=specs at today's tip. - Commit Cargo.lock in every consumer and never delete it; plain
cargo buildhonors it. Never runcargo generate-lockfile/cargo updatewholesale on a frozen repo — targetedcargo update -p <crate>only. - The one external coupling of the cluster branches is hero_lib at
rev=9657556a— do not float it.
Build / test
cargo build --workspace
cargo test --workspace --all-features
Both are green on main. One carried-over SSE test is quarantined — see
crates/derive/tests/README.md.