refactor(#96)!: K0 — convert to workspace + keri-rs sibling crate#126
Merged
Conversation
Symmetric cesr/ + keri/ workspace; keri-rs already reserved (owned). K0 is pure infra: git-mv cesr into cesr/, empty keri crate under the god-level harness, workspace-shared lints, flake covers both, compiler+grep API gate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ayout) Adopt nexus's [workspace.dependencies]/[workspace.package]/[workspace.lints]/ [workspace.metadata.crane] and whole-workspace clippy+nextest. Keep the top-level cesr/ + keri/ layout (not nexus's crates/); no workspace-hack. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Four tasks: workspace + git-mv cesr into cesr/; empty keri skeleton with public-API link test; flake covers both (per-crate wasm/nostd); release-plz + boundary grep-gate + docs. Placeholder-free; verified public API paths. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Root becomes a virtual [workspace] manifest (members = ["cesr"]) with workspace-shared package/deps/lints/crane metadata (nexus patterns, top-level layout). cesr's source moves via git mv with a byte-identical public surface; lints inherited via [lints] workspace = true. Fuzz path deps re-pointed to ../cesr. BREAKING: repo layout only — the cesr-rs crate surface is unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
resolver 3 is the edition-2024 default (MSRV-aware) — preserves standalone cesr's resolution. The git-mv of README into cesr/ left 7 relative links pointing at root-level files; prepend ../ so they resolve. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
keri-rs (lib name keri) joins the workspace as an infrastructure-only skeleton: no_std scaffolding, std/alloc features forwarding to cesr, a public re-export of cesr, and a test proving it links cesr's PUBLIC API. No KERI logic (that is K1+). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
cesr's core feature requires alloc unconditionally, so keri has no no-alloc mode: request core+alloc from the dep and drop keri's misleading optional alloc feature (only std stays optional). Remove pub use cesr — premature public API that coupled keri-rs's semver to cesr-rs churn; the link test resolves cesr via the extern prelude, not the re-export. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…asm/nostd Whole-workspace clippy; wasm/nostd checks build both cesr-rs and keri-rs by package (--features is illegal at a virtual root). keri now rides the full gate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…I boundary release-plz gains the keri-rs package (independent versioning). A flake check fails if keri/Cargo.toml enables cesr's internals/test-utils features (the only back-door past the compiler's per-crate visibility). CLAUDE.md notes the workspace. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The workspace move left three workflows pointing at the old root layout — invisible to nix flake check, they'd fail silently in CI: - release-plz paths: src/** never matched cesr/src/** → releases stalled; now cesr/** + keri/**. - keripy-diff regenerated corpus into root tests/ (false-green parity vs the real cesr/tests/corpus/keripy) → both paths now cesr/tests/corpus/keripy. - keripy-sync --cesr . skipped all relocated files (bogus zero-codes report) → --cesr ./cesr. Also hash cesr/keri Cargo.toml in the nix cache keys. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Merging this PR will create unknown performance changes
Performance Changes
Comparing Footnotes
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #96 (K0 · KERI sans-io core). Converts the single-crate repo into a two-crate Cargo workspace so the KERI sans-io core (K1–K9) can develop in a sibling crate that versions independently — protecting
cesr-rs's frozen surface (STABILITY.md #86) from KERI-state churn.BREAKING (repo layout only): the
cesrsource moved from repo root intocesr/. The publishedcesr-rscrate surface is byte-for-byte unchanged (verified: spec review hashed every moved file).What changed
cesr/— the entire crate, moved viagit mv(100% renames, history preserved). Now inherits[workspace.package]/[workspace.lints]; only manifest metadata changed.keri/— newkeri-rs(lib namekeri), an empty K0 skeleton: no_std,stdoptional (alloc is a floor), public-API-only dep oncesr, and a link-test proving it binds cesr's public surface. No KERI logic (that's K1+).Cargo.toml— pure virtual[workspace](members = ["cesr","keri"],resolver = "3"), with nexus-style[workspace.package]/[workspace.dependencies]/[workspace.lints]/[workspace.metadata.crane]. Top-level layout (not nexus'scrates/), no workspace-hack.flake.nix— whole-workspace clippy;wasm/nostdbuild both crates by package; newcesr-keri-boundarycheck.keri-rspackage added (independent versioning).cesr/(see below).The API boundary is (mostly) free
Rust's per-crate visibility already forbids
kerifrom reachingcesr's non-pubitems — it won't compile. The only back-door is enabling cesr'sinternals/test-utilsfeatures, socesr-keri-boundaryis a one-line grep. Bug-probe verified it fails wheninternalsis injected and passes after revert.Modeled on nexus
Adopted
[workspace.dependencies]/[workspace.package]/[workspace.lints]/[workspace.metadata.crane]and whole-workspace clippy+nextest. Diverged deliberately: top-level layout, no workspace-hack.Prerequisite already done
keri-rs@0.0.1is reserved + owned on crates.io (via #97's reserve-crate workflow).Test plan
nix flake checkGREEN — all checks across BOTH crates (clippy--workspace, nextest 1777 tests, wasm, no_std, doctest, fuzz-replay, andcesr-keri-boundary).cargo publish --dry-runclean for bothcesr-rsandkeri-rs(independent releases).internals, passes on revert.release-plz.ymlpaths:→cesr/**+keri/**(wassrc/**, which would have stalled releases)keripy-diff.yml/keripy-sync.yml→ repointed tocesr/(were false-green / bogus-report)Review discipline caught (each invisible to the layer below)
resolver = "3"(edition-2024 default) — code-quality reviewalloc-floor + dropped prematurepub use cesr(semver coupling) — code-quality reviewDesign + plan:
docs/superpowers/specs/2026-07-05-96-...anddocs/superpowers/plans/2026-07-05-96-....🤖 Generated with Claude Code