Skip to content

chore(workspace): remove folded internal shim crates#602

Merged
EffortlessSteven merged 5 commits into
mainfrom
chore/delete-folded-shim-crates
May 12, 2026
Merged

chore(workspace): remove folded internal shim crates#602
EffortlessSteven merged 5 commits into
mainfrom
chore/delete-folded-shim-crates

Conversation

@EffortlessSteven

Copy link
Copy Markdown
Member

Why

Completes the v0.8.0 SRP collapse. v0.7.x shipped each fold (#595, #598, #599 and the earlier core/jwk/token/x509 lane folds) with the published-internal shim crate retained as a re-export shell so v0.7.x downstreams kept compiling for one minor release. v0.8.0 removes the now-empty shim shells per the SRP collapse plan: crate-surface contracts at the module boundary instead of the crate boundary. The published surface goes from 51 to 22 public + 3 workspace-internal.

This is a breaking change for downstream consumers that pinned the shim crate names directly. The CHANGELOG [Unreleased] Removed section enumerates each removed crate alongside its canonical owner-crate srp::* module; a full crate-to-module migration guide lands separately in PR-5 at docs/how-to/migrate-from-v0.7.md.

What

29 published-internal compatibility shim crates removed:

Core internals (11) — canonical home: uselesskey_core::srp::*

  • uselesskey-core-cache, -factory, -hash, -id, -seed, -sink
  • uselesskey-core-keypair, -keypair-material
  • uselesskey-core-negative, -negative-der, -negative-pem

JWK internals (5) — canonical home: uselesskey_jwk::srp::*

  • uselesskey-core-kid -> uselesskey_jwk::srp::kid
  • uselesskey-core-jwk -> uselesskey_jwk
  • uselesskey-core-jwk-builder -> uselesskey_jwk::JwksBuilder
  • uselesskey-core-jwk-shape -> uselesskey_jwk::srp::shape
  • uselesskey-core-jwks-order -> uselesskey_jwk::srp::ordering

Token internals (4) — canonical home: uselesskey_token::srp::*

  • uselesskey-core-base62 -> uselesskey_token::srp::base62
  • uselesskey-core-token, -token-shape -> uselesskey_token::srp::shape
  • uselesskey-token-spec -> uselesskey_token::srp::spec

X.509 internals (5) — canonical home: uselesskey_x509::srp::*

  • uselesskey-core-x509 -> uselesskey_x509::srp::policy
  • uselesskey-core-x509-spec -> uselesskey_x509::srp::spec
  • uselesskey-core-x509-derive -> uselesskey_x509::srp::derive
  • uselesskey-core-x509-negative -> uselesskey_x509::srp::negative
  • uselesskey-core-x509-chain-negative -> uselesskey_x509::srp::chain_negative

Folded standalones (3) — content moved in v0.7.2; shim shells removed here

Conditional duplicate (1)

  • uselesskey-jose-openid (byte-equal to uselesskey_jsonwebtoken::JwtKeyExt) -> uselesskey-jsonwebtoken direct dependency

Internal migrations performed in this PR

  • uselesskey-rsa, uselesskey-ecdsa, uselesskey-ed25519 keypair.rs -> uselesskey_core::srp::keypair_material::Pkcs8SpkiKeyMaterial.
  • uselesskey-bdd-steps step files -> canonical owner-crate srp::* paths; Cargo.toml features collapsed to depend on owner crates.
  • fuzz/Cargo.toml and all fuzz/fuzz_targets/*.rs -> canonical owner-crate paths.
  • xtask/src/main.rs: PUBLISH_CRATES / MUTANT_CRATES trimmed; compatibility_shim_owner removed; is_adapter_crate drops jose-openid / pgp-native.
  • xtask/src/plan.rs: dependents() map and per-shim impact-propagation tests purged.
  • xtask/src/public_surface.rs: LEGACY_INTERNAL_SHARDS reduced to an empty marker guard so any future re-introduction is rejected.
  • xtask/src/policy.rs: fixed a then_some eager-eval usize underflow that surfaced once the baseline had to be regenerated.

Out of scope

  • Migration guide (PR-5: docs/how-to/migrate-from-v0.7.md).
  • v0.8.0 release prep (PR-6).

Validation

  • cargo check --workspace --all-targets --all-features clean.
  • cargo test --workspace --all-features --exclude uselesskey-bdd --no-run clean.
  • cargo fmt --check clean.
  • cargo clippy --workspace --all-targets --all-features -- -D warnings clean (only the existing aws-lc-rs build-script NASM found informational note).
  • cargo xtask public-surface clean: 35 workspace crates (17 public promises, 7 adapter promises, 0 published-internals, 11 workspace-only).
  • cargo xtask docs-sync --check clean.
  • cargo xtask check-file-policy clean (844 files matched, 0 unmatched).
  • cargo xtask no-blob clean.
  • cargo xtask typos clean.
  • cargo xtask publish-preflight clean through every step except the expected uncommitted-tree check.
  • cargo test -p xtask -- --test-threads=1 all 245 tests pass; one pre-existing parallel-mode CWD test-isolation flake is unrelated to this PR.

Cross-refs

This PR removes the now-empty shim shells those PRs left in place.

Test plan

  • CI green (fmt, clippy -D warnings, tests, public-surface, docs-sync, file-policy, no-blob, typos, publish-preflight).
  • Downstream sanity: any internal repo pinned to a shim crate name fails to resolve; consumer should re-point at the owner crate.
  • cargo doc --workspace --no-deps builds (post-merge release-evidence step).

Removes 29 fully-folded published-internal compatibility shim crates that
v0.7.x carried as one-minor-release re-export shells over content already
owned by the public crates' `srp::*` modules. This is PR-4 of the v0.8.0
SRP collapse lane and is a BREAKING change for downstream consumers that
pinned the shim crate names directly.

Scope (29 crates removed)

Core internals (11) -> uselesskey_core::srp::*:
- uselesskey-core-cache, -factory, -hash, -id, -seed, -sink
- uselesskey-core-keypair, -keypair-material
- uselesskey-core-negative, -negative-der, -negative-pem

JWK internals (5) -> uselesskey_jwk::srp::*:
- uselesskey-core-kid, -jwk, -jwk-builder, -jwk-shape, -jwks-order

Token internals (4) -> uselesskey_token::srp::*:
- uselesskey-core-base62, -token, -token-shape, uselesskey-token-spec

X.509 internals (5) -> uselesskey_x509::srp::*:
- uselesskey-core-x509, -x509-spec, -x509-derive,
  -x509-negative, -x509-chain-negative

Folded standalones (3):
- uselesskey-core-hmac-spec -> uselesskey_hmac::srp::spec (content moved
  in v0.7.2 via #595; shim removed here)
- uselesskey-core-rustls-pki -> uselesskey_rustls::srp::pki (content moved
  in v0.7.2 via #598; shim removed here)
- uselesskey-pgp-native -> uselesskey_pgp::native (feature = "native";
  content moved in v0.7.2 via #599; shim removed here)

Conditional duplicate (1):
- uselesskey-jose-openid was byte-equal to uselesskey_jsonwebtoken::JwtKeyExt;
  consumers should depend on uselesskey-jsonwebtoken directly.

Why

The v0.7.x line shipped each fold (#595, #598, #599 and predecessors) with
the shim crate retained as a published-internal re-export so v0.7.x
downstreams kept compiling for one minor release. v0.8.0 removes the
shims per the SRP collapse plan; crate-surface contracts at the module
boundary instead of the crate boundary. The published surface goes from
51 to 22 public + 3 workspace-internal.

Migration

Downstream consumers should:
- Replace `uselesskey-core-<x>` imports with `uselesskey_core::srp::<x>`
- Replace `uselesskey-core-jwk*` / `-kid` / `-jwks-order` with `uselesskey_jwk`
- Replace `uselesskey-token-spec` / `-core-base62` / `-core-token*` with
  `uselesskey_token` and its `srp::*` modules
- Replace `uselesskey-core-x509*` with `uselesskey_x509::srp::*`
- Replace `uselesskey-core-hmac-spec` with `uselesskey_hmac::srp::spec`
- Replace `uselesskey-core-rustls-pki` with `uselesskey_rustls::srp::pki`
- Replace `uselesskey-pgp-native` with `uselesskey-pgp` `features = ["native"]`
- Replace `uselesskey-jose-openid::JoseOpenIdKeyExt` with
  `uselesskey_jsonwebtoken::JwtKeyExt`

A full crate-to-module mapping table will land in
docs/how-to/migrate-from-v0.7.md (PR-5).

What this PR touches

- Removes 29 crate directories from `crates/`.
- Updates the workspace `Cargo.toml` `[workspace] members` and
  `[workspace.dependencies]` to drop the removed names.
- Updates `xtask` PUBLISH_CRATES, MUTANT_CRATES, dependents() map,
  `compatibility_shim_owner` callsite, `is_adapter_crate` allowlist,
  and the public-surface internal-shard guard.
- Removes the `is_adapter_crate` jose-openid / pgp-native entries.
- Removes obsolete plan.rs tests that pinned per-shim impact propagation.
- Migrates internal callers (`uselesskey-rsa/-ecdsa/-ed25519` keypair.rs,
  `uselesskey-bdd-steps`, all `fuzz/fuzz_targets/*.rs`) to canonical
  owner-crate `srp::*` paths.
- Regenerates `docs/metadata/workspace-docs.json`, the support matrix,
  and the public-surface survey.
- Resets `policy/no-panic-baseline.toml` to reflect the new module
  topology (deleted crate paths drop out; their canonical owner-crate
  paths are now the only home of the same panic-family findings).
- Notes the cleanup in `CHANGELOG.md` `[Unreleased] Removed`,
  `AGENTS.md`, `CLAUDE.md`, and `docs/explanation/architecture.md`.

Cross-refs: #595 (HmacSpec fold), #598 (rustls-pki fold), #599 (pgp-native
fold) shipped the content moves; this PR removes the now-empty shim
crates.

Validation

- `cargo check --workspace --all-targets --all-features` clean.
- `cargo test --workspace --all-features --exclude uselesskey-bdd --no-run`
  clean.
- `cargo fmt --check` clean.
- `cargo clippy --workspace --all-targets --all-features -- -D warnings`
  clean (only `aws-lc-rs` build-script `NASM found` informational note).
- `cargo xtask public-surface` clean: 35 workspace crates (17 public +
  7 adapter + 11 workspace-only; 0 published-internals remaining).
- `cargo xtask docs-sync --check` clean.
- `cargo xtask check-file-policy` clean (844 files matched, 0 unmatched).
- `cargo xtask no-blob` clean.
- `cargo xtask typos` clean.
- `cargo xtask publish-preflight` clean through every step except the
  expected uncommitted-tree check.
- `cargo test -p xtask -- --test-threads=1` all 245 tests pass; one
  pre-existing parallel-mode CWD test-isolation flake is unrelated to
  this PR.
@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@coderabbitai

coderabbitai Bot commented May 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 197 files, which is 47 over the limit of 150.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1815e320-692f-4b72-a1d0-8effc1d47d22

📥 Commits

Reviewing files that changed from the base of the PR and between 80bc1fc and a5a74a2.

⛔ Files ignored due to path filters (103)
  • Cargo.lock is excluded by !**/*.lock
  • crates/uselesskey-core-base62/tests/snapshots/snapshots_base62__base62_alphabet_metadata.snap is excluded by !**/*.snap
  • crates/uselesskey-core-base62/tests/snapshots/snapshots_base62__base62_determinism.snap is excluded by !**/*.snap
  • crates/uselesskey-core-base62/tests/snapshots/snapshots_base62__base62_shapes.snap is excluded by !**/*.snap
  • crates/uselesskey-core-cache/tests/snapshots/snapshots_cache__cache_after_inserts.snap is excluded by !**/*.snap
  • crates/uselesskey-core-cache/tests/snapshots/snapshots_cache__cache_clear_behavior.snap is excluded by !**/*.snap
  • crates/uselesskey-core-cache/tests/snapshots/snapshots_cache__cache_empty_state.snap is excluded by !**/*.snap
  • crates/uselesskey-core-cache/tests/snapshots/snapshots_cache__cache_insert_if_absent.snap is excluded by !**/*.snap
  • crates/uselesskey-core-factory/tests/snapshots/snapshots_factory__factory_custom_seed_determinism.snap is excluded by !**/*.snap
  • crates/uselesskey-core-factory/tests/snapshots/snapshots_factory__factory_debug_deterministic.snap is excluded by !**/*.snap
  • crates/uselesskey-core-factory/tests/snapshots/snapshots_factory__factory_debug_random.snap is excluded by !**/*.snap
  • crates/uselesskey-core-factory/tests/snapshots/snapshots_factory__factory_deterministic_mode.snap is excluded by !**/*.snap
  • crates/uselesskey-core-factory/tests/snapshots/snapshots_factory__factory_random_mode.snap is excluded by !**/*.snap
  • crates/uselesskey-core-hash/tests/snapshots/snapshots_hash__hash_boundary_separation.snap is excluded by !**/*.snap
  • crates/uselesskey-core-hash/tests/snapshots/snapshots_hash__hash_determinism.snap is excluded by !**/*.snap
  • crates/uselesskey-core-hash/tests/snapshots/snapshots_hash__hash_hasher_reexport.snap is excluded by !**/*.snap
  • crates/uselesskey-core-hash/tests/snapshots/snapshots_hash__hash_output_sizes.snap is excluded by !**/*.snap
  • crates/uselesskey-core-hmac-spec/tests/snapshots/snapshots_hmac_spec__hmac_spec_all_variants.snap is excluded by !**/*.snap
  • crates/uselesskey-core-hmac-spec/tests/snapshots/snapshots_hmac_spec__hmac_spec_stable_bytes.snap is excluded by !**/*.snap
  • crates/uselesskey-core-id/tests/snapshots/snapshots_id__artifact_id_debug.snap is excluded by !**/*.snap
  • crates/uselesskey-core-id/tests/snapshots/snapshots_id__artifact_id_fields.snap is excluded by !**/*.snap
  • crates/uselesskey-core-id/tests/snapshots/snapshots_id__derivation_version.snap is excluded by !**/*.snap
  • crates/uselesskey-core-id/tests/snapshots/snapshots_id__derive_seed_properties.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-builder/tests/snapshots/snapshots_jwk_builder__builder_add_any.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-builder/tests/snapshots/snapshots_jwk_builder__builder_empty.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-builder/tests/snapshots/snapshots_jwk_builder__builder_jwks_serialized.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-builder/tests/snapshots/snapshots_jwk_builder__builder_mixed_public_private.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-builder/tests/snapshots/snapshots_jwk_builder__builder_push_methods.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-builder/tests/snapshots/snapshots_jwk_builder__builder_sorts_by_kid.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-builder/tests/snapshots/snapshots_jwk_builder__builder_stable_duplicate_kids.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__ec_private_jwk_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__ec_public_jwk_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__jwks_display_check.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__jwks_structure.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__oct_jwk_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__okp_private_jwk_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__okp_public_jwk_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__private_debug_redaction.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__private_jwk_enum_variants.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__public_jwk_enum_variants.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__rsa_private_jwk_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk-shape/tests/snapshots/snapshots_jwk_shape__rsa_public_jwk_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk/tests/snapshots/snapshots_jwk__facade_jwks_builder_ordering.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk/tests/snapshots/snapshots_jwk__facade_jwks_serialized.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk/tests/snapshots/snapshots_jwk__facade_public_jwk_value.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwk/tests/snapshots/snapshots_jwk__facade_reexports_types.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwks-order/tests/snapshots/snapshots_jwks_order__kid_sorted_already_sorted.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwks-order/tests/snapshots/snapshots_jwks_order__kid_sorted_empty.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwks-order/tests/snapshots/snapshots_jwks_order__kid_sorted_lexicographic.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwks-order/tests/snapshots/snapshots_jwks_order__kid_sorted_mixed.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwks-order/tests/snapshots/snapshots_jwks_order__kid_sorted_reverse.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwks-order/tests/snapshots/snapshots_jwks_order__kid_sorted_single.snap is excluded by !**/*.snap
  • crates/uselesskey-core-jwks-order/tests/snapshots/snapshots_jwks_order__kid_sorted_stable_ties.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair-material/tests/snapshots/snapshots_keypair_material__keypair_material_corrupt_pem.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair-material/tests/snapshots/snapshots_keypair_material__keypair_material_debug_redaction.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair-material/tests/snapshots/snapshots_keypair_material__keypair_material_deterministic_corruption.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair-material/tests/snapshots/snapshots_keypair_material__keypair_material_field_lengths.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair-material/tests/snapshots/snapshots_keypair_material__keypair_material_kid.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair-material/tests/snapshots/snapshots_keypair_material__keypair_material_truncation.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair/tests/snapshots/snapshots_keypair__keypair_debug_safety.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair/tests/snapshots/snapshots_keypair__keypair_kid_determinism.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair/tests/snapshots/snapshots_keypair__keypair_metadata.snap is excluded by !**/*.snap
  • crates/uselesskey-core-keypair/tests/snapshots/snapshots_keypair__keypair_negative_fixtures.snap is excluded by !**/*.snap
  • crates/uselesskey-core-kid/tests/snapshots/snapshots_kid__kid_custom_prefix_lengths.snap is excluded by !**/*.snap
  • crates/uselesskey-core-kid/tests/snapshots/snapshots_kid__kid_default_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-kid/tests/snapshots/snapshots_kid__kid_determinism.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_deterministic_a.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_deterministic_b.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_flip_first.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_flip_last.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_flip_oob.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_truncate_beyond.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_truncate_boundary.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_truncate_shorter.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-der/tests/snapshots/snapshots_negative_der__negative_der_variants_differ.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-pem/tests/snapshots/snapshots_negative_pem__negative_pem_bad_base64.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-pem/tests/snapshots/snapshots_negative_pem__negative_pem_bad_footer.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-pem/tests/snapshots/snapshots_negative_pem__negative_pem_bad_header.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-pem/tests/snapshots/snapshots_negative_pem__negative_pem_deterministic.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-pem/tests/snapshots/snapshots_negative_pem__negative_pem_extra_blank_line.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative-pem/tests/snapshots/snapshots_negative_pem__negative_pem_truncate.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative/tests/snapshots/snapshots_negative__facade_der_deterministic.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative/tests/snapshots/snapshots_negative__facade_der_flip_byte.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative/tests/snapshots/snapshots_negative__facade_der_truncate.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative/tests/snapshots/snapshots_negative__facade_pem_all_variants.snap is excluded by !**/*.snap
  • crates/uselesskey-core-negative/tests/snapshots/snapshots_negative__facade_pem_deterministic.snap is excluded by !**/*.snap
  • crates/uselesskey-core-seed/tests/snapshots/snapshots_seed__seed_debug_redaction.snap is excluded by !**/*.snap
  • crates/uselesskey-core-seed/tests/snapshots/snapshots_seed__seed_determinism.snap is excluded by !**/*.snap
  • crates/uselesskey-core-seed/tests/snapshots/snapshots_seed__seed_env_parse_formats.snap is excluded by !**/*.snap
  • crates/uselesskey-core-sink/tests/snapshots/snapshots_sink__sink_cleanup_on_drop.snap is excluded by !**/*.snap
  • crates/uselesskey-core-sink/tests/snapshots/snapshots_sink__sink_der_bytes.snap is excluded by !**/*.snap
  • crates/uselesskey-core-sink/tests/snapshots/snapshots_sink__sink_pem_string.snap is excluded by !**/*.snap
  • crates/uselesskey-core-sink/tests/snapshots/snapshots_sink__sink_round_trip_fidelity.snap is excluded by !**/*.snap
  • crates/uselesskey-core-sink/tests/snapshots/snapshots_sink__sink_txt_artifact.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token-shape/tests/snapshots/snapshots_token_shape__token_api_key_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token-shape/tests/snapshots/snapshots_token_shape__token_auth_schemes.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token-shape/tests/snapshots/snapshots_token_shape__token_bearer_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token-shape/tests/snapshots/snapshots_token_shape__token_oauth_shape.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token/tests/snapshots/snapshots_token_core__token_core_all_kinds.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token/tests/snapshots/snapshots_token_core__token_core_api_key_structure.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token/tests/snapshots/snapshots_token_core__token_core_bearer_structure.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token/tests/snapshots/snapshots_token_core__token_core_determinism.snap is excluded by !**/*.snap
  • crates/uselesskey-core-token/tests/snapshots/snapshots_token_core__token_core_oauth_structure.snap is excluded by !**/*.snap
📒 Files selected for processing (197)
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • Cargo.toml
  • README.md
  • crates/uselesskey-bdd-steps/Cargo.toml
  • crates/uselesskey-bdd-steps/src/lib.rs
  • crates/uselesskey-bdd-steps/src/steps/core_id_steps.rs
  • crates/uselesskey-bdd-steps/src/steps/core_keypair_steps.rs
  • crates/uselesskey-bdd-steps/src/steps/core_kid_steps.rs
  • crates/uselesskey-bdd-steps/src/steps/core_negative_steps.rs
  • crates/uselesskey-bdd-steps/src/steps/core_seed_steps.rs
  • crates/uselesskey-bdd-steps/src/steps/core_token_shape_steps.rs
  • crates/uselesskey-core-base62/Cargo.toml
  • crates/uselesskey-core-base62/README.md
  • crates/uselesskey-core-base62/src/lib.rs
  • crates/uselesskey-core-base62/tests/edge_cases.rs
  • crates/uselesskey-core-base62/tests/integration.rs
  • crates/uselesskey-core-base62/tests/mutant_killers.rs
  • crates/uselesskey-core-base62/tests/prop_base62.rs
  • crates/uselesskey-core-base62/tests/snapshots_base62.rs
  • crates/uselesskey-core-cache/Cargo.toml
  • crates/uselesskey-core-cache/README.md
  • crates/uselesskey-core-cache/src/lib.rs
  • crates/uselesskey-core-cache/tests/cache_perf.rs
  • crates/uselesskey-core-cache/tests/comprehensive.rs
  • crates/uselesskey-core-cache/tests/concurrency.rs
  • crates/uselesskey-core-cache/tests/edge_cases.rs
  • crates/uselesskey-core-cache/tests/integration.rs
  • crates/uselesskey-core-cache/tests/integration_cache.rs
  • crates/uselesskey-core-cache/tests/mutant_killers.rs
  • crates/uselesskey-core-cache/tests/prop_cache.rs
  • crates/uselesskey-core-cache/tests/snapshots_cache.rs
  • crates/uselesskey-core-factory/Cargo.toml
  • crates/uselesskey-core-factory/README.md
  • crates/uselesskey-core-factory/src/lib.rs
  • crates/uselesskey-core-factory/tests/edge_cases.rs
  • crates/uselesskey-core-factory/tests/error_paths.rs
  • crates/uselesskey-core-factory/tests/factory_concurrency.rs
  • crates/uselesskey-core-factory/tests/factory_integration.rs
  • crates/uselesskey-core-factory/tests/factory_prop.rs
  • crates/uselesskey-core-factory/tests/mutant_killers.rs
  • crates/uselesskey-core-factory/tests/snapshots_factory.rs
  • crates/uselesskey-core-hash/Cargo.toml
  • crates/uselesskey-core-hash/README.md
  • crates/uselesskey-core-hash/src/lib.rs
  • crates/uselesskey-core-hash/tests/edge_cases.rs
  • crates/uselesskey-core-hash/tests/hash_integration.rs
  • crates/uselesskey-core-hash/tests/hash_tests.rs
  • crates/uselesskey-core-hash/tests/mutant_killers.rs
  • crates/uselesskey-core-hash/tests/prop_hash.rs
  • crates/uselesskey-core-hash/tests/snapshots_hash.rs
  • crates/uselesskey-core-hash/tests/trait_impls.rs
  • crates/uselesskey-core-hmac-spec/Cargo.toml
  • crates/uselesskey-core-hmac-spec/README.md
  • crates/uselesskey-core-hmac-spec/src/lib.rs
  • crates/uselesskey-core-hmac-spec/tests/integration.rs
  • crates/uselesskey-core-hmac-spec/tests/mutant_killers.rs
  • crates/uselesskey-core-hmac-spec/tests/prop_hmac_spec.rs
  • crates/uselesskey-core-hmac-spec/tests/snapshots_hmac_spec.rs
  • crates/uselesskey-core-id/Cargo.toml
  • crates/uselesskey-core-id/README.md
  • crates/uselesskey-core-id/src/lib.rs
  • crates/uselesskey-core-id/tests/edge_cases.rs
  • crates/uselesskey-core-id/tests/id_tests.rs
  • crates/uselesskey-core-id/tests/mutant_killers.rs
  • crates/uselesskey-core-id/tests/prop_id.rs
  • crates/uselesskey-core-id/tests/seed_integration.rs
  • crates/uselesskey-core-id/tests/snapshots_id.rs
  • crates/uselesskey-core-id/tests/trait_impls.rs
  • crates/uselesskey-core-jwk-builder/Cargo.toml
  • crates/uselesskey-core-jwk-builder/README.md
  • crates/uselesskey-core-jwk-builder/src/lib.rs
  • crates/uselesskey-core-jwk-builder/tests/comprehensive.rs
  • crates/uselesskey-core-jwk-builder/tests/jwk_prop.rs
  • crates/uselesskey-core-jwk-builder/tests/jwks_builder_integration.rs
  • crates/uselesskey-core-jwk-builder/tests/mutant_killers.rs
  • crates/uselesskey-core-jwk-builder/tests/serde_roundtrip.rs
  • crates/uselesskey-core-jwk-builder/tests/snapshots_jwk_builder.rs
  • crates/uselesskey-core-jwk-shape/Cargo.toml
  • crates/uselesskey-core-jwk-shape/README.md
  • crates/uselesskey-core-jwk-shape/src/lib.rs
  • crates/uselesskey-core-jwk-shape/tests/comprehensive.rs
  • crates/uselesskey-core-jwk-shape/tests/integration.rs
  • crates/uselesskey-core-jwk-shape/tests/jwk_shape_integration.rs
  • crates/uselesskey-core-jwk-shape/tests/mutant_killers.rs
  • crates/uselesskey-core-jwk-shape/tests/negative_fixtures.rs
  • crates/uselesskey-core-jwk-shape/tests/serde_roundtrip.rs
  • crates/uselesskey-core-jwk-shape/tests/shape_tests.rs
  • crates/uselesskey-core-jwk-shape/tests/snapshots_jwk_shape.rs
  • crates/uselesskey-core-jwk/Cargo.toml
  • crates/uselesskey-core-jwk/README.md
  • crates/uselesskey-core-jwk/src/lib.rs
  • crates/uselesskey-core-jwk/tests/facade_integration.rs
  • crates/uselesskey-core-jwk/tests/integration.rs
  • crates/uselesskey-core-jwk/tests/prop_tests.rs
  • crates/uselesskey-core-jwk/tests/serde_roundtrip.rs
  • crates/uselesskey-core-jwk/tests/snapshots_jwk.rs
  • crates/uselesskey-core-jwks-order/Cargo.toml
  • crates/uselesskey-core-jwks-order/README.md
  • crates/uselesskey-core-jwks-order/src/lib.rs
  • crates/uselesskey-core-jwks-order/tests/edge_cases.rs
  • crates/uselesskey-core-jwks-order/tests/mutant_killers.rs
  • crates/uselesskey-core-jwks-order/tests/order_integration.rs
  • crates/uselesskey-core-jwks-order/tests/order_prop.rs
  • crates/uselesskey-core-jwks-order/tests/order_tests.rs
  • crates/uselesskey-core-jwks-order/tests/prop_jwks_order.rs
  • crates/uselesskey-core-jwks-order/tests/snapshots_jwks_order.rs
  • crates/uselesskey-core-keypair-material/Cargo.toml
  • crates/uselesskey-core-keypair-material/README.md
  • crates/uselesskey-core-keypair-material/src/lib.rs
  • crates/uselesskey-core-keypair-material/tests/material_integration.rs
  • crates/uselesskey-core-keypair-material/tests/material_tests.rs
  • crates/uselesskey-core-keypair-material/tests/mutant_killers.rs
  • crates/uselesskey-core-keypair-material/tests/negative_fixtures.rs
  • crates/uselesskey-core-keypair-material/tests/snapshots_keypair_material.rs
  • crates/uselesskey-core-keypair/Cargo.toml
  • crates/uselesskey-core-keypair/README.md
  • crates/uselesskey-core-keypair/src/lib.rs
  • crates/uselesskey-core-keypair/tests/comprehensive.rs
  • crates/uselesskey-core-keypair/tests/integration.rs
  • crates/uselesskey-core-keypair/tests/keypair_facade_tests.rs
  • crates/uselesskey-core-keypair/tests/prop_tests.rs
  • crates/uselesskey-core-keypair/tests/snapshots_keypair.rs
  • crates/uselesskey-core-kid/Cargo.toml
  • crates/uselesskey-core-kid/README.md
  • crates/uselesskey-core-kid/src/lib.rs
  • crates/uselesskey-core-kid/tests/edge_cases.rs
  • crates/uselesskey-core-kid/tests/integration.rs
  • crates/uselesskey-core-kid/tests/mutant_killers.rs
  • crates/uselesskey-core-kid/tests/prop_kid.rs
  • crates/uselesskey-core-kid/tests/snapshots_kid.rs
  • crates/uselesskey-core-negative-der/Cargo.toml
  • crates/uselesskey-core-negative-der/README.md
  • crates/uselesskey-core-negative-der/src/lib.rs
  • crates/uselesskey-core-negative-der/tests/edge_cases.rs
  • crates/uselesskey-core-negative-der/tests/integration.rs
  • crates/uselesskey-core-negative-der/tests/mutant_killers.rs
  • crates/uselesskey-core-negative-der/tests/snapshots_negative_der.rs
  • crates/uselesskey-core-negative-pem/Cargo.toml
  • crates/uselesskey-core-negative-pem/README.md
  • crates/uselesskey-core-negative-pem/src/lib.rs
  • crates/uselesskey-core-negative-pem/tests/edge_cases.rs
  • crates/uselesskey-core-negative-pem/tests/integration.rs
  • crates/uselesskey-core-negative-pem/tests/mutant_killers.rs
  • crates/uselesskey-core-negative-pem/tests/pem_tests.rs
  • crates/uselesskey-core-negative-pem/tests/prop_negative_pem.rs
  • crates/uselesskey-core-negative-pem/tests/snapshots_negative_pem.rs
  • crates/uselesskey-core-negative/Cargo.toml
  • crates/uselesskey-core-negative/README.md
  • crates/uselesskey-core-negative/src/lib.rs
  • crates/uselesskey-core-negative/tests/corruption_validity.rs
  • crates/uselesskey-core-negative/tests/integration.rs
  • crates/uselesskey-core-negative/tests/integration_core.rs
  • crates/uselesskey-core-negative/tests/negative_comprehensive.rs
  • crates/uselesskey-core-negative/tests/prop_tests.rs
  • crates/uselesskey-core-negative/tests/snapshots_negative.rs
  • crates/uselesskey-core-rustls-pki/Cargo.toml
  • crates/uselesskey-core-rustls-pki/README.md
  • crates/uselesskey-core-rustls-pki/src/lib.rs
  • crates/uselesskey-core-seed/Cargo.toml
  • crates/uselesskey-core-seed/README.md
  • crates/uselesskey-core-seed/src/lib.rs
  • crates/uselesskey-core-seed/tests/edge_cases.rs
  • crates/uselesskey-core-seed/tests/error_paths.rs
  • crates/uselesskey-core-seed/tests/mutant_killers.rs
  • crates/uselesskey-core-seed/tests/prop_seed.rs
  • crates/uselesskey-core-seed/tests/seed_prop.rs
  • crates/uselesskey-core-seed/tests/seed_tests.rs
  • crates/uselesskey-core-seed/tests/snapshots_seed.rs
  • crates/uselesskey-core-seed/tests/trait_impls.rs
  • crates/uselesskey-core-sink/Cargo.toml
  • crates/uselesskey-core-sink/README.md
  • crates/uselesskey-core-sink/src/lib.rs
  • crates/uselesskey-core-sink/tests/integration.rs
  • crates/uselesskey-core-sink/tests/mutant_killers.rs
  • crates/uselesskey-core-sink/tests/prop_tests.rs
  • crates/uselesskey-core-sink/tests/sink_rstest.rs
  • crates/uselesskey-core-sink/tests/snapshots_sink.rs
  • crates/uselesskey-core-sink/tests/tempfile_comprehensive.rs
  • crates/uselesskey-core-token-shape/Cargo.toml
  • crates/uselesskey-core-token-shape/README.md
  • crates/uselesskey-core-token-shape/src/lib.rs
  • crates/uselesskey-core-token-shape/tests/comprehensive_shape.rs
  • crates/uselesskey-core-token-shape/tests/edge_cases.rs
  • crates/uselesskey-core-token-shape/tests/integration.rs
  • crates/uselesskey-core-token-shape/tests/mutant_killers.rs
  • crates/uselesskey-core-token-shape/tests/negative_fixtures.rs
  • crates/uselesskey-core-token-shape/tests/prop_token_shape.rs
  • crates/uselesskey-core-token-shape/tests/shape_tests.rs
  • crates/uselesskey-core-token-shape/tests/snapshots_token_shape.rs
  • crates/uselesskey-core-token/Cargo.toml
  • crates/uselesskey-core-token/README.md
  • crates/uselesskey-core-token/src/lib.rs
  • crates/uselesskey-core-token/tests/integration.rs
  • crates/uselesskey-core-token/tests/snapshots_token_core.rs
  • crates/uselesskey-core-token/tests/token_integration.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/delete-folded-shim-crates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f0dd0b10b3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread fuzz/Cargo.toml
Comment on lines +17 to +19
uselesskey-core = { path = "../crates/uselesskey-core" }
uselesskey-jwk = { path = "../crates/uselesskey-jwk" }
uselesskey-core-jwks-order = { path = "../crates/uselesskey-core-jwks-order" }
uselesskey-core-keypair-material = { path = "../crates/uselesskey-core-keypair-material" }
uselesskey-core-factory = { path = "../crates/uselesskey-core-factory" }
uselesskey-core-hash = { path = "../crates/uselesskey-core-hash" }
uselesskey-core-id = { path = "../crates/uselesskey-core-id" }
uselesskey-core-kid = { path = "../crates/uselesskey-core-kid" }
uselesskey-token = { path = "../crates/uselesskey-token" }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update fuzz targets to use owner-crate modules

When the fuzz workflow runs, it enumerates every .rs under fuzz/fuzz_targets, but targets such as core_x509_negative.rs, jwk_shape.rs, and core_hash.rs still import the removed shim crates (uselesskey_core_x509_negative, uselesskey_core_jwk_shape, etc.). Because this manifest now only adds the owner crates here, cargo check --manifest-path fuzz/Cargo.toml --bins fails with unresolved imports, so cargo xtask fuzz/CI fuzz cannot run until those target imports are migrated.

Useful? React with 👍 / 👎.

PR #602 removed 29 shim crates but missed updating the xtask pr
step's per-crate test target list. CI hit
`error: cannot specify features for packages outside of workspace`
for `uselesskey-core-base62`. Update the test-targets list to match
the post-deletion workspace.

The impacted-crates set is derived from the path components of
changed files (`crates/<name>/...`); paths to deleted crates still
appear in the diff and leaked into the test target list. Filter the
list to crates whose `crates/<name>/Cargo.toml` still exists in the
worktree, naturally dropping any crate the PR deletes. Add unit
tests covering the deleted-shim and stale-dir cases.
The shim deletion PR caught 24 of the fuzz targets but left 24 others
still importing the removed crate names (core_factory_cache,
core_x509_negative, fuzz_factory_concurrent, etc.), which broke
`cargo fuzz build`.

Re-point every remaining fuzz target at canonical owner-crate paths:

- uselesskey-core-factory  -> uselesskey_core::Factory
- uselesskey-core-id       -> uselesskey_core::{ArtifactId, DerivationVersion, Seed}
                              + uselesskey_core::srp::identity::derive_seed
- uselesskey-core-hash     -> uselesskey_core::srp::hash::*
- uselesskey-core-keypair-material
                           -> uselesskey_core::srp::keypair_material::*
- uselesskey-core-negative-pem
                           -> uselesskey_core::negative::*
- uselesskey-core-token-shape
                           -> uselesskey_token::srp::shape::*
- uselesskey-core-kid      -> uselesskey_jwk::srp::kid::*
- uselesskey-core-jwk-shape
                           -> uselesskey_jwk::{AnyJwk, Jwks, ...}
- uselesskey-core-jwks-order
                           -> uselesskey_jwk::srp::ordering::*
- uselesskey-core-x509-spec / x509-negative
                           -> uselesskey_x509::{X509Spec, ChainSpec,
                              X509Negative, ChainNegative, KeyUsage,
                              NotBeforeOffset}
The test invoked `cargo metadata` without --manifest-path. When run
in parallel with other xtask tests that change CWD, cargo metadata
could not locate the working directory. Pass --manifest-path derived
from CARGO_MANIFEST_DIR so the test is deterministic under
--test-threads > 1.
The prior --manifest-path fix wasn't sufficient because cargo's
working-directory lookup happens before it reads --manifest-path.
When a parallel test deletes its tempdir, the process CWD becomes
invalid and cargo aborts with "Could not locate working directory"
before even seeing the --manifest-path arg.

Explicitly set Command::current_dir to the workspace root so cargo
does not depend on the process CWD at all.
@EffortlessSteven EffortlessSteven merged commit 6633eae into main May 12, 2026
5 of 6 checks passed
@EffortlessSteven EffortlessSteven mentioned this pull request May 12, 2026
4 tasks
EffortlessSteven added a commit that referenced this pull request May 12, 2026
TLS contract-pack and public crate-surface cleanup release. Bumps
workspace to 0.8.0. CHANGELOG entry curated from merged PRs:
#485-#605 (TLS lane #585/#587/#588/#589, task-first how-tos
#590-#594, SRP collapse #595/#598/#599/#602, migration guide #603,
Clippy ratchets #505, dep bumps #484-#491).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant