feat!: split the repo — zblob and zenkey graduate to their own repos #518

Merged
p13marc merged 1 commit from feat/repo-split-zblob-zenkey into master 2026-07-18 14:13:01 +00:00
p13marc commented 2026-07-18 13:47:00 +00:00 (Migrated from github.com)

Splits the monorepo three ways. Two new repos are live, extracted with full history via git filter-repo:

Repo Contents Version
p13marc/zblob the crate formerly known as in-tree zenoh-blob/, renamed zblob 0.1.0
p13marc/zenkey the convention layer: rfcs/ (keyspace-v2 RFC set), the zenkey enforcement crate (was zensight-keyspace), and zenctl 0.1.0

Stage A — zblob (closes #202, epic #193)

  • Executed the pre-existing graduation plan (scripts/extract-zenoh-blob.sh + zenoh-blob/docs/graduation.md), then renamed the crate before first publish — the zenoh- prefix wrongly implied Zenoh-team origin, and crates.io names are permanent.
  • Workspace consumes zblob = { git = … }; imports renamed zenoh_blob::zblob:: (4 crates, ~15 sites). Extraction script deleted (job done).
  • The zenoh-blob boundary guard CI step is deleted — the boundary is now enforced structurally (separate repo, own CI with cargo publish --dry-run).

Stage B — zenkey

  • zensight-keyspace/, zenctl/, docs/rfcs/keyspace-v2/ are gone; the workspace consumes zenkey = { git = … } and all imports/doc references rename zensight_keyspacezenkey (~30 files, mechanical).
  • docs/KEYSPACE.md stays — it's the deployed-profile summary — and now cites the zenkey repo as the normative spec. RFC ch. 11 (the ZenSight reference profile) moved with the RFC set, like OTel semconv reference profiles.
  • The two key CI guards drop zensight-keyspace/src from their scan lists; scripts/image-verify.sh takes zenctl from PATH (or $ZENCTL) with an install hint, instead of cargo run -p zenctl.

Verified

  • cargo test --workspace green after both switches (pipefail-checked exit 0), cargo fmt --check clean, cargo clippy -D warnings clean, all four custom CI guards re-run locally and clean.
  • zblob standalone: build + tests + cargo publish --dry-run green. zenkey standalone: build + 48 tests + fmt + clippy green.

Known state / follow-ups

  • zenctl is temporarily not built in the zenkey repo: it needs zensight-common from this PR's merge (otherwise two copies of the keyspace crate meet across the refine_full_key API and types mismatch). Re-enable tracked in zenkey#3 — I'll open that PR right after this merges.
  • The zenkey engine still bundles ZenSight's registry TOMLs + DEFAULT_BASE (zenkey#1); zenctl still compiles in the payload table (zenkey#2).
  • cargo publish for both repos is a manual owner step (crates.io token); #517 then flips the git deps to version deps.
  • The keyspace contract is still hot (v1.4 amendments were two days ago): until things cool, every wire change is a zenkey PR + a zensight bump. During development, a local [patch] zenkey = { path = "../zenkey" } avoids the dance.

🤖 Generated with Claude Code

Splits the monorepo three ways. Two new repos are live, extracted with full history via `git filter-repo`: | Repo | Contents | Version | |------|----------|---------| | [p13marc/zblob](https://github.com/p13marc/zblob) | the crate formerly known as in-tree `zenoh-blob/`, renamed **zblob** | 0.1.0 | | [p13marc/zenkey](https://github.com/p13marc/zenkey) | the convention layer: `rfcs/` (keyspace-v2 RFC set), the **zenkey** enforcement crate (was `zensight-keyspace`), and **zenctl** | 0.1.0 | ## Stage A — zblob (closes #202, epic #193) - Executed the pre-existing graduation plan (`scripts/extract-zenoh-blob.sh` + `zenoh-blob/docs/graduation.md`), then renamed the crate **before first publish** — the `zenoh-` prefix wrongly implied Zenoh-team origin, and crates.io names are permanent. - Workspace consumes `zblob = { git = … }`; imports renamed `zenoh_blob::` → `zblob::` (4 crates, ~15 sites). Extraction script deleted (job done). - The `zenoh-blob boundary guard` CI step is deleted — the boundary is now enforced structurally (separate repo, own CI with `cargo publish --dry-run`). ## Stage B — zenkey - `zensight-keyspace/`, `zenctl/`, `docs/rfcs/keyspace-v2/` are gone; the workspace consumes `zenkey = { git = … }` and all imports/doc references rename `zensight_keyspace` → `zenkey` (~30 files, mechanical). - `docs/KEYSPACE.md` **stays** — it's the deployed-profile summary — and now cites the zenkey repo as the normative spec. RFC ch. 11 (the ZenSight reference profile) moved with the RFC set, like OTel semconv reference profiles. - The two key CI guards drop `zensight-keyspace/src` from their scan lists; `scripts/image-verify.sh` takes `zenctl` from `PATH` (or `$ZENCTL`) with an install hint, instead of `cargo run -p zenctl`. ## Verified - `cargo test --workspace` green after both switches (pipefail-checked exit 0), `cargo fmt --check` clean, `cargo clippy -D warnings` clean, all four custom CI guards re-run locally and clean. - zblob standalone: build + tests + `cargo publish --dry-run` green. zenkey standalone: build + 48 tests + fmt + clippy green. ## Known state / follow-ups - **zenctl is temporarily not built** in the zenkey repo: it needs `zensight-common` from *this PR's merge* (otherwise two copies of the keyspace crate meet across the `refine_full_key` API and types mismatch). Re-enable tracked in [zenkey#3](https://github.com/p13marc/zenkey/issues/3) — I'll open that PR right after this merges. - The zenkey engine still bundles ZenSight's registry TOMLs + `DEFAULT_BASE` ([zenkey#1](https://github.com/p13marc/zenkey/issues/1)); zenctl still compiles in the payload table ([zenkey#2](https://github.com/p13marc/zenkey/issues/2)). - `cargo publish` for both repos is a manual owner step (crates.io token); #517 then flips the git deps to version deps. - The keyspace contract is still hot (v1.4 amendments were two days ago): until things cool, every wire change is a zenkey PR + a zensight bump. During development, a local `[patch] zenkey = { path = "../zenkey" }` avoids the dance. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
marcpardo/zensight!518
No description provided.