Skip to content

test: Wave 22 - property-based tests for 10 additional crates#45

Closed
EffortlessSteven wants to merge 1 commit intomainfrom
wave-22/prop-tests
Closed

test: Wave 22 - property-based tests for 10 additional crates#45
EffortlessSteven wants to merge 1 commit intomainfrom
wave-22/prop-tests

Conversation

@EffortlessSteven
Copy link
Copy Markdown
Member

Adds proptest suites for: core-id, core-hash, core-kid, core-cache, core-negative-pem, core-token-shape, core-jwk-shape, core-keypair-material, ring, aws-lc-rs. Total: 52 new property-based tests covering determinism, format validity, and panic safety.

Determinism impact: None
Policy impact: None

Copilot AI review requested due to automatic review settings March 1, 2026 19:10
@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!

@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@qodo-free-for-open-source-projects
Copy link
Copy Markdown

Review Summary by Qodo

Wave 22: Property-based tests for 10 additional crates

🧪 Tests

Grey Divider

Walkthroughs

Description
• Adds 52 property-based tests across 10 crates using proptest
• Tests cover determinism, format validity, and panic safety
• Validates core cryptographic operations and data structures
• Ensures no determinism or policy impacts
Diagram
flowchart LR
  A["10 Crates"] -->|"proptest suites"| B["52 Property Tests"]
  B -->|"Determinism"| C["Seed-based Reproducibility"]
  B -->|"Format Validity"| D["Output Correctness"]
  B -->|"Panic Safety"| E["No Crashes on Arbitrary Input"]
Loading

Grey Divider

File Changes

1. crates/uselesskey-aws-lc-rs/tests/aws_lc_rs_prop.rs 🧪 Tests +52/-0

Property tests for aws-lc-rs adapter determinism

crates/uselesskey-aws-lc-rs/tests/aws_lc_rs_prop.rs


2. crates/uselesskey-core-cache/tests/cache_prop.rs 🧪 Tests +94/-0

Property tests for artifact cache operations

crates/uselesskey-core-cache/tests/cache_prop.rs


3. crates/uselesskey-core-hash/tests/hash_prop.rs 🧪 Tests +50/-0

Property tests for hash determinism and collision resistance

crates/uselesskey-core-hash/tests/hash_prop.rs


View more (10)
4. crates/uselesskey-core-id/tests/id_prop.rs 🧪 Tests +75/-0

Property tests for artifact ID derivation

crates/uselesskey-core-id/tests/id_prop.rs


5. crates/uselesskey-core-jwk-shape/tests/jwk_shape_prop.rs 🧪 Tests +139/-0

Property tests for JWK serialization and accessors

crates/uselesskey-core-jwk-shape/tests/jwk_shape_prop.rs


6. crates/uselesskey-core-keypair-material/tests/material_prop.rs 🧪 Tests +105/-0

Property tests for keypair material corruption and KID

crates/uselesskey-core-keypair-material/tests/material_prop.rs


7. crates/uselesskey-core-kid/tests/kid_prop.rs 🧪 Tests +54/-0

Property tests for KID generation and encoding

crates/uselesskey-core-kid/tests/kid_prop.rs


8. crates/uselesskey-core-negative-pem/tests/pem_prop.rs 🧪 Tests +81/-0

Property tests for PEM corruption strategies

crates/uselesskey-core-negative-pem/tests/pem_prop.rs


9. crates/uselesskey-core-token-shape/tests/token_shape_prop.rs 🧪 Tests +89/-0

Property tests for token generation and format

crates/uselesskey-core-token-shape/tests/token_shape_prop.rs


10. crates/uselesskey-ring/tests/ring_prop.rs 🧪 Tests +51/-0

Property tests for ring adapter determinism

crates/uselesskey-ring/tests/ring_prop.rs


11. crates/uselesskey-aws-lc-rs/Cargo.toml Dependencies +1/-0

Add proptest workspace dependency

crates/uselesskey-aws-lc-rs/Cargo.toml


12. crates/uselesskey-core-kid/Cargo.toml Dependencies +3/-0

Add proptest dev dependency

crates/uselesskey-core-kid/Cargo.toml


13. crates/uselesskey-ring/Cargo.toml Dependencies +1/-0

Add proptest workspace dependency

crates/uselesskey-ring/Cargo.toml


Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects
Copy link
Copy Markdown

qodo-free-for-open-source-projects bot commented Mar 1, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (1) 📎 Requirement gaps (0)

Grey Divider


Action required

1. PEM key blocks committed 📘 Rule violation ⛨ Security
Description
A test file introduces PEM-looking -----BEGIN PRIVATE KEY----- / -----BEGIN PUBLIC KEY-----
string literals, which can trigger secret scanners and violates the no-secret-shaped-fixtures
requirement. These markers should not be committed in test/fixture paths even if the body is dummy
data.
Code

crates/uselesskey-core-keypair-material/tests/material_prop.rs[R6-11]

+    Pkcs8SpkiKeyMaterial::new(
+        vec![0x30, 0x82, 0x01, 0x22],
+        "-----BEGIN PRIVATE KEY-----\nAAAA\n-----END PRIVATE KEY-----\n",
+        vec![0x30, 0x59, 0x30, 0x13],
+        "-----BEGIN PUBLIC KEY-----\nBBBB\n-----END PUBLIC KEY-----\n",
+    )
Evidence
PR Compliance ID 3 forbids committing secret-shaped blobs in test/fixture paths. The added test code
contains PEM private/public key block markers as string literals, which are secret-shaped and
commonly trigger secret scanning.

CLAUDE.md
crates/uselesskey-core-keypair-material/tests/material_prop.rs[6-11]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The test file commits PEM-looking private/public key block markers (e.g., `-----BEGIN PRIVATE KEY-----`), which violates the repository policy against committing secret-shaped blobs under test/fixture paths and can trigger secret scanning.

## Issue Context
These markers appear as string literals in the new property-based tests. Even with dummy bodies, scanners commonly match on the header/footer lines.

## Fix Focus Areas
- crates/uselesskey-core-keypair-material/tests/material_prop.rs[6-11]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. KID collision assertion 🐞 Bug ⛯ Reliability
Description
The new proptest asserts different inputs always produce different kid_from_bytes outputs. The
implementation truncates a BLAKE3 digest to a configurable prefix length (default 12 bytes) and
base64url-encodes it; collisions are possible in principle, so this is a false invariant and can
(rarely) create flaky CI failures.
Code

crates/uselesskey-core-kid/tests/kid_prop.rs[R33-38]

+    /// Different inputs produce different kids (collision resistance).
+    #[test]
+    fn kid_different_inputs_differ(a in any::<Vec<u8>>(), b in any::<Vec<u8>>()) {
+        prop_assume!(a != b);
+        prop_assert_ne!(kid_from_bytes(&a), kid_from_bytes(&b));
+    }
Evidence
kid_from_bytes is not an injective mapping: it hashes then truncates the digest. The test asserts
injectivity across all byte vectors, which the implementation does not guarantee.

crates/uselesskey-core-kid/tests/kid_prop.rs[33-38]
crates/uselesskey-core-kid/src/lib.rs[6-31]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`kid_different_inputs_differ` asserts collision-freedom for a truncated-hash identifier. This is not guaranteed and can theoretically fail.

### Issue Context
`kid_from_bytes_with_prefix` truncates the BLAKE3 digest to `prefix_bytes` (default 12) before base64url encoding.

### Fix Focus Areas
- crates/uselesskey-core-kid/tests/kid_prop.rs[33-38]
- crates/uselesskey-core-kid/src/lib.rs[6-31]

### Suggested change
- Remove the collision-resistance proptest.
- Add a stronger invariant test, e.g. for arbitrary `data` and `prefix_bytes`:
 - compute `digest = blake3::hash(&amp;data)`
 - compute `expected = URL_SAFE_NO_PAD.encode(&amp;digest.as_bytes()[..prefix_bytes])`
 - assert `kid_from_bytes_with_prefix(&amp;data, prefix_bytes) == expected`

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 1, 2026

Warning

Rate limit exceeded

@EffortlessSteven has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 24 minutes and 12 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 3f8ed52 and 42985d1.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (13)
  • crates/uselesskey-aws-lc-rs/Cargo.toml
  • crates/uselesskey-aws-lc-rs/tests/aws_lc_rs_prop.rs
  • crates/uselesskey-core-cache/tests/cache_prop.rs
  • crates/uselesskey-core-hash/tests/hash_prop.rs
  • crates/uselesskey-core-id/tests/id_prop.rs
  • crates/uselesskey-core-jwk-shape/tests/jwk_shape_prop.rs
  • crates/uselesskey-core-keypair-material/tests/material_prop.rs
  • crates/uselesskey-core-kid/Cargo.toml
  • crates/uselesskey-core-kid/tests/kid_prop.rs
  • crates/uselesskey-core-negative-pem/tests/pem_prop.rs
  • crates/uselesskey-core-token-shape/tests/token_shape_prop.rs
  • crates/uselesskey-ring/Cargo.toml
  • crates/uselesskey-ring/tests/ring_prop.rs
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch wave-22/prop-tests

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.

Comment on lines +6 to +11
Pkcs8SpkiKeyMaterial::new(
vec![0x30, 0x82, 0x01, 0x22],
"-----BEGIN PRIVATE KEY-----\nAAAA\n-----END PRIVATE KEY-----\n",
vec![0x30, 0x59, 0x30, 0x13],
"-----BEGIN PUBLIC KEY-----\nBBBB\n-----END PUBLIC KEY-----\n",
)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

1. Pem key blocks committed 📘 Rule violation ⛨ Security

A test file introduces PEM-looking -----BEGIN PRIVATE KEY----- / -----BEGIN PUBLIC KEY-----
string literals, which can trigger secret scanners and violates the no-secret-shaped-fixtures
requirement. These markers should not be committed in test/fixture paths even if the body is dummy
data.
Agent Prompt
## Issue description
The test file commits PEM-looking private/public key block markers (e.g., `-----BEGIN PRIVATE KEY-----`), which violates the repository policy against committing secret-shaped blobs under test/fixture paths and can trigger secret scanning.

## Issue Context
These markers appear as string literals in the new property-based tests. Even with dummy bodies, scanners commonly match on the header/footer lines.

## Fix Focus Areas
- crates/uselesskey-core-keypair-material/tests/material_prop.rs[6-11]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds new property-based test suites across multiple crates to validate determinism, output shape/format invariants, and panic-safety.

Changes:

  • Introduces new proptest-based test modules for 10 crates (52 tests total).
  • Adds proptest as a dev dependency where needed.
  • Adds determinism checks for ring and aws-lc-rs keypair generation under feature gates.

Reviewed changes

Copilot reviewed 13 out of 14 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
crates/uselesskey-ring/tests/ring_prop.rs New proptest suite for ring-backed RSA/ECDSA/Ed25519 determinism
crates/uselesskey-ring/Cargo.toml Adds proptest workspace dev dependency for tests
crates/uselesskey-core-token-shape/tests/token_shape_prop.rs New proptest suite for token generation determinism and format validation
crates/uselesskey-core-negative-pem/tests/pem_prop.rs New proptest suite validating negative PEM corruption behaviors
crates/uselesskey-core-kid/tests/kid_prop.rs New proptest suite for KID determinism, base64url shape, and length properties
crates/uselesskey-core-kid/Cargo.toml Adds proptest dev dependency for the new tests
crates/uselesskey-core-keypair-material/tests/material_prop.rs New proptest suite for key material KID behavior and corruption helpers
crates/uselesskey-core-jwk-shape/tests/jwk_shape_prop.rs New proptest suite for JWK/JWKS JSON shape, accessors, and secret redaction
crates/uselesskey-core-id/tests/id_prop.rs New proptest suite for deterministic seed derivation and ID stability
crates/uselesskey-core-hash/tests/hash_prop.rs New proptest suite for hash determinism and len-prefix behavior
crates/uselesskey-core-cache/tests/cache_prop.rs New proptest suite for typed cache insert/get semantics
crates/uselesskey-aws-lc-rs/tests/aws_lc_rs_prop.rs New proptest suite for aws-lc-rs-backed keypair determinism
crates/uselesskey-aws-lc-rs/Cargo.toml Adds proptest workspace dev dependency for tests

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +14 to +16
let fx = Factory::deterministic(Seed::new(seed));
let kp1 = fx.rsa("prop-test", RsaSpec::rs256()).rsa_key_pair_ring();
let kp2 = fx.rsa("prop-test", RsaSpec::rs256()).rsa_key_pair_ring();
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

These determinism assertions are currently made by invoking generation twice on the same Factory instance. If Factory ever becomes stateful (e.g., consumes an internal counter/RNG), this test could fail even though determinism for a given seed is still satisfied when using a fresh factory. Consider constructing two factories from the same seed (or otherwise ensuring identical starting state) and generating kp1/kp2 from separate instances so the test isolates seed-based determinism.

Copilot uses AI. Check for mistakes.
Comment on lines +15 to +17
let fx = Factory::deterministic(Seed::new(seed));
let kp1 = fx.rsa("prop-test", RsaSpec::rs256()).rsa_key_pair_aws_lc_rs();
let kp2 = fx.rsa("prop-test", RsaSpec::rs256()).rsa_key_pair_aws_lc_rs();
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

Same concern as in the ring proptests: generating twice from the same Factory instance can conflate determinism with any internal state consumption. For a stronger determinism test, generate kp1 and kp2 from two separate Factory::deterministic(Seed::new(seed)) instances (or equivalent) to ensure the only variable is the seed.

Copilot uses AI. Check for mistakes.
) {
let pem = format!("-----BEGIN TEST-----\n{body}\n-----END TEST-----\n");
let corrupted = corrupt_pem(&pem, CorruptPem::BadFooter);
prop_assert!(corrupted.contains("-----END CORRUPTED KEY-----\n"));
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The test says it verifies the footer replaces the last line, but it only checks contains(...), which would pass even if the corrupted footer appears somewhere in the middle and the last line is unchanged. To match the stated behavior, assert on the actual last line (e.g., ends_with(...) or corrupted.lines().last() == ...).

Suggested change
prop_assert!(corrupted.contains("-----END CORRUPTED KEY-----\n"));
prop_assert!(corrupted.ends_with("-----END CORRUPTED KEY-----\n"));

Copilot uses AI. Check for mistakes.
Comment on lines +13 to +17
/// Different inputs produce different hashes (collision resistance).
#[test]
fn hash32_different_inputs_differ(a in any::<Vec<u8>>(), b in any::<Vec<u8>>()) {
prop_assume!(a != b);
prop_assert_ne!(hash32(&a), hash32(&b));
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

This asserts an injective property ('different inputs => different hashes') that is not strictly true for a hash function (collisions exist by definition), even if extremely unlikely. To avoid theoretical flakiness and better reflect the intended invariant, consider switching to deterministic, fixed test vectors (e.g., a small set of known distinct inputs) and asserting their hashes differ, or assert weaker properties like output length/format plus determinism.

Suggested change
/// Different inputs produce different hashes (collision resistance).
#[test]
fn hash32_different_inputs_differ(a in any::<Vec<u8>>(), b in any::<Vec<u8>>()) {
prop_assume!(a != b);
prop_assert_ne!(hash32(&a), hash32(&b));
/// Selected distinct inputs produce different hashes (basic collision check).
#[test]
fn hash32_known_distinct_inputs_differ() {
let inputs: &[&[u8]] = &[
b"",
b"a",
b"b",
b"ab",
b"abc",
b"abcd",
b"longer test input",
b"another input value",
];
for i in 0..inputs.len() {
for j in (i + 1)..inputs.len() {
let hi = hash32(inputs[i]);
let hj = hash32(inputs[j]);
prop_assert_ne!(
hi,
hj,
"hash collision between {:?} and {:?}",
inputs[i],
inputs[j]
);
}
}

Copilot uses AI. Check for mistakes.
Comment on lines +33 to +38
/// Different inputs produce different kids (collision resistance).
#[test]
fn kid_different_inputs_differ(a in any::<Vec<u8>>(), b in any::<Vec<u8>>()) {
prop_assume!(a != b);
prop_assert_ne!(kid_from_bytes(&a), kid_from_bytes(&b));
}
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

As with hashes, asserting 'different inputs always produce different KIDs' is not a guaranteed invariant if the KID is derived from a truncated hash or otherwise maps many inputs to a fixed-size output. To make this test robust and non-overspecified, consider using a fixed list of distinct, deterministic inputs and asserting their KIDs are distinct (sanity check), or focus on deterministic/format/decoded-length properties which are guaranteed.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +38
/// Different SPKI bytes produce different kids.
#[test]
fn different_spki_different_kid(
spki_a in any::<[u8; 4]>(),
spki_b in any::<[u8; 4]>(),
) {
prop_assume!(spki_a != spki_b);
let m_a = Pkcs8SpkiKeyMaterial::new(vec![0x30], "pem", spki_a.to_vec(), "pub");
let m_b = Pkcs8SpkiKeyMaterial::new(vec![0x30], "pem", spki_b.to_vec(), "pub");
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

This test assumes kid() is collision-free over all possible SPKI inputs, which generally isn't a strict guarantee if kid() is based on hashing/truncation. To avoid overspecifying behavior, consider replacing with a deterministic sanity check over a small, fixed set of distinct SPKIs (or focus on determinism + decoded-length/base64url validity), so the test only encodes guarantees the API can realistically uphold.

Suggested change
/// Different SPKI bytes produce different kids.
#[test]
fn different_spki_different_kid(
spki_a in any::<[u8; 4]>(),
spki_b in any::<[u8; 4]>(),
) {
prop_assume!(spki_a != spki_b);
let m_a = Pkcs8SpkiKeyMaterial::new(vec![0x30], "pem", spki_a.to_vec(), "pub");
let m_b = Pkcs8SpkiKeyMaterial::new(vec![0x30], "pem", spki_b.to_vec(), "pub");
/// A small set of distinct SPKI bytes produce different kids.
#[test]
fn different_spki_different_kid(
idx_a in 0usize..4,
idx_b in 0usize..4,
) {
// Use a fixed, small set of distinct SPKIs so we don't assume global collision-freedom.
let spkis: [Vec<u8>; 4] = [
vec![0x30, 0x00, 0x00, 0x00],
vec![0x30, 0x00, 0x00, 0x01],
vec![0x30, 0x00, 0x01, 0x00],
vec![0x30, 0x01, 0x00, 0x00],
];
prop_assume!(idx_a != idx_b);
let m_a = Pkcs8SpkiKeyMaterial::new(vec![0x30], "pem", spkis[idx_a].clone(), "pub");
let m_b = Pkcs8SpkiKeyMaterial::new(vec![0x30], "pem", spkis[idx_b].clone(), "pub");

Copilot uses AI. Check for mistakes.
@qodo-free-for-open-source-projects
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: pr

Failed stage: xtask pr [❌]

Failed test name: cargo mutants timeout: crates/uselesskey-core-token-shape/src/lib.rs:138:22 (random_base62)

Failure summary:

The action failed during mutation testing (cargo mutants) run by cargo xtask pr.
- cargo mutants
reported a timeout while testing a mutant in
crates/uselesskey-core-token-shape/src/lib.rs:138:22, specifically: replace == with != in
random_base62.
- Summary from the log: 25 mutants tested ... 24 caught, 1 timeouts, which caused the
overall mutants step to fail: ==> mutants [FAILED, 1037.6s].
- The failing command exited non-zero
(exit status: 3), leading to the GitHub Actions job failure (Process completed with exit code 1).

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

190:  �[36;1mecho "components=$(for c in ${components//,/ }; do echo -n ' --component' $c; done)" >> $GITHUB_OUTPUT�[0m
191:  �[36;1mecho "downgrade=" >> $GITHUB_OUTPUT�[0m
192:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
193:  env:
194:  targets: 
195:  components: rustfmt, clippy
196:  ##[endgroup]
197:  ##[group]Run : set $CARGO_HOME
198:  �[36;1m: set $CARGO_HOME�[0m
199:  �[36;1mecho CARGO_HOME=${CARGO_HOME:-"$HOME/.cargo"} >> $GITHUB_ENV�[0m
200:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
201:  ##[endgroup]
202:  ##[group]Run : install rustup if needed
203:  �[36;1m: install rustup if needed�[0m
204:  �[36;1mif ! command -v rustup &>/dev/null; then�[0m
205:  �[36;1m  curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail https://sh.rustup.rs | sh -s -- --default-toolchain none -y�[0m
206:  �[36;1m  echo "$CARGO_HOME/bin" >> $GITHUB_PATH�[0m
...

273:  �[36;1mif [ -z "${CARGO_REGISTRIES_CRATES_IO_PROTOCOL+set}" -o -f "/home/runner/work/_temp"/.implicit_cargo_registries_crates_io_protocol ]; then�[0m
274:  �[36;1m  if rustc +1.92.0 --version --verbose | grep -q '^release: 1\.6[89]\.'; then�[0m
275:  �[36;1m    touch "/home/runner/work/_temp"/.implicit_cargo_registries_crates_io_protocol || true�[0m
276:  �[36;1m    echo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse >> $GITHUB_ENV�[0m
277:  �[36;1m  elif rustc +1.92.0 --version --verbose | grep -q '^release: 1\.6[67]\.'; then�[0m
278:  �[36;1m    touch "/home/runner/work/_temp"/.implicit_cargo_registries_crates_io_protocol || true�[0m
279:  �[36;1m    echo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=git >> $GITHUB_ENV�[0m
280:  �[36;1m  fi�[0m
281:  �[36;1mfi�[0m
282:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
283:  env:
284:  CARGO_HOME: /home/runner/.cargo
285:  CARGO_INCREMENTAL: 0
286:  CARGO_TERM_COLOR: always
287:  ##[endgroup]
288:  ##[group]Run : work around spurious network errors in curl 8.0
289:  �[36;1m: work around spurious network errors in curl 8.0�[0m
290:  �[36;1m# https://rust-lang.zulipchat.com/#narrow/stream/246057-t-cargo/topic/timeout.20investigation�[0m
...

359:  targets: 
360:  components: 
361:  ##[endgroup]
362:  ##[group]Run : set $CARGO_HOME
363:  �[36;1m: set $CARGO_HOME�[0m
364:  �[36;1mecho CARGO_HOME=${CARGO_HOME:-"$HOME/.cargo"} >> $GITHUB_ENV�[0m
365:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
366:  env:
367:  CARGO_HOME: /home/runner/.cargo
368:  CARGO_INCREMENTAL: 0
369:  CARGO_TERM_COLOR: always
370:  ##[endgroup]
371:  ##[group]Run : install rustup if needed
372:  �[36;1m: install rustup if needed�[0m
373:  �[36;1mif ! command -v rustup &>/dev/null; then�[0m
374:  �[36;1m  curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail https://sh.rustup.rs | sh -s -- --default-toolchain none -y�[0m
375:  �[36;1m  echo "$CARGO_HOME/bin" >> $GITHUB_PATH�[0m
...

449:  �[36;1mif [ -z "${CARGO_REGISTRIES_CRATES_IO_PROTOCOL+set}" -o -f "/home/runner/work/_temp"/.implicit_cargo_registries_crates_io_protocol ]; then�[0m
450:  �[36;1m  if rustc +nightly --version --verbose | grep -q '^release: 1\.6[89]\.'; then�[0m
451:  �[36;1m    touch "/home/runner/work/_temp"/.implicit_cargo_registries_crates_io_protocol || true�[0m
452:  �[36;1m    echo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse >> $GITHUB_ENV�[0m
453:  �[36;1m  elif rustc +nightly --version --verbose | grep -q '^release: 1\.6[67]\.'; then�[0m
454:  �[36;1m    touch "/home/runner/work/_temp"/.implicit_cargo_registries_crates_io_protocol || true�[0m
455:  �[36;1m    echo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=git >> $GITHUB_ENV�[0m
456:  �[36;1m  fi�[0m
457:  �[36;1mfi�[0m
458:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
459:  env:
460:  CARGO_HOME: /home/runner/.cargo
461:  CARGO_INCREMENTAL: 0
462:  CARGO_TERM_COLOR: always
463:  ##[endgroup]
464:  ##[group]Run : work around spurious network errors in curl 8.0
465:  �[36;1m: work around spurious network errors in curl 8.0�[0m
466:  �[36;1m# https://rust-lang.zulipchat.com/#narrow/stream/246057-t-cargo/topic/timeout.20investigation�[0m
...

666:  - /home/runner/work/uselesskey/uselesskey/crates/uselesskey-x509/Cargo.toml
667:  - /home/runner/work/uselesskey/uselesskey/crates/uselesskey/Cargo.toml
668:  - /home/runner/work/uselesskey/uselesskey/rust-toolchain.toml
669:  - /home/runner/work/uselesskey/uselesskey/tests/Cargo.toml
670:  - /home/runner/work/uselesskey/uselesskey/xtask/Cargo.toml
671:  ##[endgroup]
672:  ... Restoring cache ...
673:  No cache found.
674:  ##[group]Run cargo install cargo-fuzz
675:  �[36;1mcargo install cargo-fuzz�[0m
676:  shell: /usr/bin/bash -e {0}
677:  env:
678:  CARGO_HOME: /home/runner/.cargo
679:  CARGO_INCREMENTAL: 0
680:  CARGO_TERM_COLOR: always
681:  CACHE_ON_FAILURE: false
682:  ##[endgroup]
...

697:  �[1m�[92m  Downloaded�[0m cargo_metadata v0.18.1
698:  �[1m�[92m  Downloaded�[0m anstream v0.6.21
699:  �[1m�[92m  Downloaded�[0m camino v1.2.2
700:  �[1m�[92m  Downloaded�[0m zmij v1.0.21
701:  �[1m�[92m  Downloaded�[0m utf8parse v0.2.2
702:  �[1m�[92m  Downloaded�[0m anyhow v1.0.102
703:  �[1m�[92m  Downloaded�[0m fastrand v2.3.0
704:  �[1m�[92m  Downloaded�[0m getrandom v0.4.1
705:  �[1m�[92m  Downloaded�[0m strsim v0.11.1
706:  �[1m�[92m  Downloaded�[0m rustc_version v0.4.1
707:  �[1m�[92m  Downloaded�[0m errno v0.3.14
708:  �[1m�[92m  Downloaded�[0m clap_lex v1.0.0
709:  �[1m�[92m  Downloaded�[0m is_terminal_polyfill v1.70.2
710:  �[1m�[92m  Downloaded�[0m cfg-if v1.0.4
711:  �[1m�[92m  Downloaded�[0m itoa v1.0.17
712:  �[1m�[92m  Downloaded�[0m thiserror v1.0.69
713:  �[1m�[92m  Downloaded�[0m unicode-ident v1.0.24
714:  �[1m�[92m  Downloaded�[0m serde_derive v1.0.228
715:  �[1m�[92m  Downloaded�[0m toml v0.5.11
716:  �[1m�[92m  Downloaded�[0m serde_json v1.0.149
717:  �[1m�[92m  Downloaded�[0m clap v4.5.60
718:  �[1m�[92m  Downloaded�[0m serde_core v1.0.228
719:  �[1m�[92m  Downloaded�[0m proc-macro2 v1.0.106
720:  �[1m�[92m  Downloaded�[0m memchr v2.8.0
721:  �[1m�[92m  Downloaded�[0m clap_builder v4.5.60
722:  �[1m�[92m  Downloaded�[0m clap_derive v4.5.55
723:  �[1m�[92m  Downloaded�[0m serde v1.0.228
724:  �[1m�[92m  Downloaded�[0m quote v1.0.44
725:  �[1m�[92m  Downloaded�[0m once_cell v1.21.3
726:  �[1m�[92m  Downloaded�[0m syn v2.0.117
727:  �[1m�[92m  Downloaded�[0m thiserror-impl v1.0.69
728:  �[1m�[92m  Downloaded�[0m tempfile v3.26.0
...

731:  �[1m�[92m  Downloaded�[0m colorchoice v1.0.4
732:  �[1m�[92m  Downloaded�[0m heck v0.5.0
733:  �[1m�[92m  Downloaded�[0m current_platform v0.2.0
734:  �[1m�[92m  Downloaded�[0m libc v0.2.182
735:  �[1m�[92m  Downloaded�[0m linux-raw-sys v0.12.1
736:  �[1m�[92m   Compiling�[0m proc-macro2 v1.0.106
737:  �[1m�[92m   Compiling�[0m quote v1.0.44
738:  �[1m�[92m   Compiling�[0m unicode-ident v1.0.24
739:  �[1m�[92m   Compiling�[0m serde_core v1.0.228
740:  �[1m�[92m   Compiling�[0m serde v1.0.228
741:  �[1m�[92m   Compiling�[0m libc v0.2.182
742:  �[1m�[92m   Compiling�[0m utf8parse v0.2.2
743:  �[1m�[92m   Compiling�[0m zmij v1.0.21
744:  �[1m�[92m   Compiling�[0m anstyle-parse v0.2.7
745:  �[1m�[92m   Compiling�[0m getrandom v0.4.1
746:  �[1m�[92m   Compiling�[0m thiserror v1.0.69
747:  �[1m�[92m   Compiling�[0m is_terminal_polyfill v1.70.2
...

754:  �[1m�[92m   Compiling�[0m serde_json v1.0.149
755:  �[1m�[92m   Compiling�[0m anstream v0.6.21
756:  �[1m�[92m   Compiling�[0m heck v0.5.0
757:  �[1m�[92m   Compiling�[0m cfg-if v1.0.4
758:  �[1m�[92m   Compiling�[0m linux-raw-sys v0.12.1
759:  �[1m�[92m   Compiling�[0m anyhow v1.0.102
760:  �[1m�[92m   Compiling�[0m bitflags v2.11.0
761:  �[1m�[92m   Compiling�[0m memchr v2.8.0
762:  �[1m�[92m   Compiling�[0m semver v1.0.27
763:  �[1m�[92m   Compiling�[0m clap_lex v1.0.0
764:  �[1m�[92m   Compiling�[0m itoa v1.0.17
765:  �[1m�[92m   Compiling�[0m strsim v0.11.1
766:  �[1m�[92m   Compiling�[0m current_platform v0.2.0
767:  �[1m�[92m   Compiling�[0m clap_builder v4.5.60
768:  �[1m�[92m   Compiling�[0m serde_derive v1.0.228
769:  �[1m�[92m   Compiling�[0m thiserror-impl v1.0.69
770:  �[1m�[92m   Compiling�[0m clap_derive v4.5.55
...

775:  �[1m�[92m   Compiling�[0m cargo_metadata v0.18.1
776:  �[1m�[92m   Compiling�[0m clap v4.5.60
777:  �[1m�[92m   Compiling�[0m tempfile v3.26.0
778:  �[1m�[92m   Compiling�[0m rustc_version v0.4.1
779:  �[1m�[92m   Compiling�[0m cargo-fuzz v0.13.1
780:  �[1m�[92m    Finished�[0m `release` profile [optimized] target(s) in 18.14s
781:  �[1m�[92m  Installing�[0m /home/runner/.cargo/bin/cargo-fuzz
782:  �[1m�[92m   Installed�[0m package `cargo-fuzz v0.13.1` (executable `cargo-fuzz`)
783:  ##[group]Run cargo install cargo-mutants
784:  �[36;1mcargo install cargo-mutants�[0m
785:  shell: /usr/bin/bash -e {0}
786:  env:
787:  CARGO_HOME: /home/runner/.cargo
788:  CARGO_INCREMENTAL: 0
789:  CARGO_TERM_COLOR: always
790:  CACHE_ON_FAILURE: false
791:  ##[endgroup]
...

803:  �[1m�[92m      Adding�[0m mutants v0.0.3 �[1m�[33m(available: v0.0.4)�[0m
804:  �[1m�[92m      Adding�[0m nextest-metadata v0.12.3 �[1m�[33m(available: v0.13.3)�[0m
805:  �[1m�[92m      Adding�[0m nix v0.30.1 �[1m�[33m(available: v0.31.2)�[0m
806:  �[1m�[92m      Adding�[0m schemars v0.9.0 �[1m�[33m(available: v1.2.1)�[0m
807:  �[1m�[92m      Adding�[0m strum v0.26.3 �[1m�[33m(available: v0.28.0)�[0m
808:  �[1m�[92m      Adding�[0m target-lexicon v0.13.3 �[1m�[33m(available: v0.13.5)�[0m
809:  �[1m�[92m      Adding�[0m toml v0.8.23 �[1m�[33m(available: v1.0.3+spec-1.1.0)�[0m
810:  �[1m�[92m      Adding�[0m whoami v1.6.1 �[1m�[33m(available: v2.1.1)�[0m
811:  �[1m�[92m Downloading�[0m crates ...
812:  �[1m�[92m  Downloaded�[0m cfg-expr v0.20.6
813:  �[1m�[92m  Downloaded�[0m atty v0.2.14
814:  �[1m�[92m  Downloaded�[0m cfg_aliases v0.2.1
815:  �[1m�[92m  Downloaded�[0m cargo_metadata v0.19.2
816:  �[1m�[92m  Downloaded�[0m bitflags v1.3.2
817:  �[1m�[92m  Downloaded�[0m console v0.15.11
818:  �[1m�[92m  Downloaded�[0m thiserror v2.0.18
819:  �[1m�[92m  Downloaded�[0m toml_write v0.1.2
820:  �[1m�[92m  Downloaded�[0m thread_local v1.1.9
821:  �[1m�[92m  Downloaded�[0m lazy_static v1.5.0
822:  �[1m�[92m  Downloaded�[0m serde_spanned v0.6.9
823:  �[1m�[92m  Downloaded�[0m walkdir v2.5.0
824:  �[1m�[92m  Downloaded�[0m aho-corasick v1.1.4
825:  �[1m�[92m  Downloaded�[0m tracing-log v0.2.0
826:  �[1m�[92m  Downloaded�[0m test-log v0.2.19
827:  �[1m�[92m  Downloaded�[0m toml v0.8.23
828:  �[1m�[92m  Downloaded�[0m thiserror-impl v2.0.18
829:  �[1m�[92m  Downloaded�[0m env_logger v0.11.9
...

926:  �[1m�[92m   Compiling�[0m linux-raw-sys v0.12.1
927:  �[1m�[92m   Compiling�[0m is_terminal_polyfill v1.70.2
928:  �[1m�[92m   Compiling�[0m anstream v0.6.21
929:  �[1m�[92m   Compiling�[0m serde_derive v1.0.228
930:  �[1m�[92m   Compiling�[0m regex-automata v0.4.14
931:  �[1m�[92m   Compiling�[0m smallvec v1.15.1
932:  �[1m�[92m   Compiling�[0m itoa v1.0.17
933:  �[1m�[92m   Compiling�[0m target-lexicon v0.13.3
934:  �[1m�[92m   Compiling�[0m heck v0.5.0
935:  �[1m�[92m   Compiling�[0m crossbeam-utils v0.8.21
936:  �[1m�[92m   Compiling�[0m io-lifetimes v1.0.11
937:  �[1m�[92m   Compiling�[0m tracing-core v0.1.36
938:  �[1m�[92m   Compiling�[0m strsim v0.11.1
939:  �[1m�[92m   Compiling�[0m guppy-workspace-hack v0.1.0
940:  �[1m�[92m   Compiling�[0m rustix v0.37.28
941:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
942:  �[1m�[92m   Compiling�[0m rustversion v1.0.22
943:  �[1m�[92m   Compiling�[0m camino v1.2.2
944:  �[1m�[92m   Compiling�[0m terminal_size v0.4.3
945:  �[1m�[92m   Compiling�[0m thiserror-impl v2.0.18
946:  �[1m�[92m   Compiling�[0m tracing-attributes v0.1.31
...

1026:  �[1m�[92m   Compiling�[0m mutants v0.0.3
1027:  �[1m�[92m   Compiling�[0m whoami v1.6.1
1028:  �[1m�[92m   Compiling�[0m similar v2.7.0
1029:  �[1m�[92m   Compiling�[0m indoc v2.0.7
1030:  �[1m�[92m   Compiling�[0m cargo-mutants v26.2.0
1031:  �[1m�[92m    Finished�[0m `release` profile [optimized] target(s) in 1m 12s
1032:  �[1m�[92m  Installing�[0m /home/runner/.cargo/bin/cargo-mutants
1033:  �[1m�[92m   Installed�[0m package `cargo-mutants v26.2.0` (executable `cargo-mutants`)
1034:  ##[group]Run git fetch origin main
1035:  �[36;1mgit fetch origin main�[0m
1036:  shell: /usr/bin/bash -e {0}
1037:  env:
1038:  CARGO_HOME: /home/runner/.cargo
1039:  CARGO_INCREMENTAL: 0
1040:  CARGO_TERM_COLOR: always
1041:  CACHE_ON_FAILURE: false
1042:  ##[endgroup]
1043:  From https://github.com/EffortlessMetrics/uselesskey
1044:  * branch            main       -> FETCH_HEAD
1045:  ##[group]Run cargo xtask pr
1046:  �[36;1mcargo xtask pr�[0m
1047:  shell: /usr/bin/bash -e {0}
1048:  env:
1049:  CARGO_HOME: /home/runner/.cargo
1050:  CARGO_INCREMENTAL: 0
1051:  CARGO_TERM_COLOR: always
1052:  CACHE_ON_FAILURE: false
1053:  ##[endgroup]
...

1203:  �[1m�[92m  Downloaded�[0m num_enum v0.7.5
1204:  �[1m�[92m  Downloaded�[0m num-integer v0.1.46
1205:  �[1m�[92m  Downloaded�[0m nom_locate v5.0.0
1206:  �[1m�[92m  Downloaded�[0m itertools v0.14.0
1207:  �[1m�[92m  Downloaded�[0m time-macros v0.2.27
1208:  �[1m�[92m  Downloaded�[0m time-core v0.1.8
1209:  �[1m�[92m  Downloaded�[0m socket2 v0.6.2
1210:  �[1m�[92m  Downloaded�[0m sha1 v0.10.6
1211:  �[1m�[92m  Downloaded�[0m serdect v0.3.0
1212:  �[1m�[92m  Downloaded�[0m scopeguard v1.2.0
1213:  �[1m�[92m  Downloaded�[0m relative-path v1.9.3
1214:  �[1m�[92m  Downloaded�[0m rand_core v0.9.5
1215:  �[1m�[92m  Downloaded�[0m ppv-lite86 v0.2.21
1216:  �[1m�[92m  Downloaded�[0m pkcs8 v0.10.2
1217:  �[1m�[92m  Downloaded�[0m opaque-debug v0.3.1
1218:  �[1m�[92m  Downloaded�[0m quick-error v1.2.3
1219:  �[1m�[92m  Downloaded�[0m tokio-stream v0.1.18
...

1391:  �[1m�[92m   Compiling�[0m generic-array v0.14.9
1392:  �[1m�[92m   Compiling�[0m blake3 v1.8.3
1393:  �[1m�[92m    Checking�[0m zeroize v1.8.2
1394:  �[1m�[92m    Checking�[0m regex-syntax v0.8.9
1395:  �[1m�[92m   Compiling�[0m serde_json v1.0.149
1396:  �[1m�[92m    Checking�[0m zmij v1.0.19
1397:  �[1m�[92m    Checking�[0m crypto-common v0.1.6
1398:  �[1m�[92m   Compiling�[0m serde_derive v1.0.228
1399:  �[1m�[92m    Checking�[0m uselesskey-core-hash v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-hash)
1400:  �[1m�[92m    Checking�[0m subtle v2.6.1
1401:  �[1m�[92m   Compiling�[0m serde v1.0.228
1402:  �[1m�[92m    Checking�[0m rand_chacha v0.3.1
1403:  �[1m�[92m    Checking�[0m smallvec v1.15.1
1404:  �[1m�[92m    Checking�[0m base64 v0.22.1
1405:  �[1m�[92m   Compiling�[0m crossbeam-utils v0.8.21
1406:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
1407:  �[1m�[92m    Checking�[0m uselesskey-core-seed v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-seed)
1408:  �[1m�[92m    Checking�[0m spin v0.9.8
1409:  �[1m�[92m   Compiling�[0m thiserror-impl v2.0.18
1410:  �[1m�[92m    Checking�[0m const-oid v0.9.6
...

1414:  �[1m�[92m    Checking�[0m scopeguard v1.2.0
1415:  �[1m�[92m    Checking�[0m lock_api v0.4.14
1416:  �[1m�[92m    Checking�[0m block-buffer v0.10.4
1417:  �[1m�[92m    Checking�[0m hashbrown v0.14.5
1418:  �[1m�[92m    Checking�[0m digest v0.10.7
1419:  �[1m�[92m    Checking�[0m uselesskey-core-negative-pem v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-negative-pem)
1420:  �[1m�[92m   Compiling�[0m semver v1.0.27
1421:  �[1m�[92m    Checking�[0m dashmap v6.1.0
1422:  �[1m�[92m   Compiling�[0m rustc_version v0.4.1
1423:  �[1m�[92m    Checking�[0m rand_core v0.9.5
1424:  �[1m�[92m    Checking�[0m uselesskey-core-cache v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-cache)
1425:  �[1m�[92m    Checking�[0m uselesskey-core-negative v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-negative)
1426:  �[1m�[92m    Checking�[0m uselesskey-core-sink v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-sink)
1427:  �[1m�[92m    Checking�[0m uselesskey-core-factory v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-factory)
1428:  �[1m�[92m    Checking�[0m wait-timeout v0.2.1
1429:  �[1m�[92m    Checking�[0m quick-error v1.2.3
1430:  �[1m�[92m    Checking�[0m bit-vec v0.8.0
...

1749:  �[1m�[92m   Compiling�[0m pem-rfc7468 v0.7.0
1750:  �[1m�[92m   Compiling�[0m blake3 v1.8.3
1751:  �[1m�[92m   Compiling�[0m serde_json v1.0.149
1752:  �[1m�[92m   Compiling�[0m arrayvec v0.7.6
1753:  �[1m�[92m   Compiling�[0m constant_time_eq v0.4.2
1754:  �[1m�[92m   Compiling�[0m arrayref v0.3.9
1755:  �[1m�[92m   Compiling�[0m zerocopy v0.8.39
1756:  �[1m�[92m   Compiling�[0m zeroize_derive v1.4.3
1757:  �[1m�[92m   Compiling�[0m serde_derive v1.0.228
1758:  �[1m�[92m   Compiling�[0m zeroize v1.8.2
1759:  �[1m�[92m   Compiling�[0m generic-array v0.14.9
1760:  �[1m�[92m   Compiling�[0m crypto-common v0.1.6
1761:  �[1m�[92m   Compiling�[0m block-buffer v0.10.4
1762:  �[1m�[92m   Compiling�[0m digest v0.10.7
1763:  �[1m�[92m   Compiling�[0m der v0.7.10
1764:  �[1m�[92m   Compiling�[0m thiserror-impl v2.0.18
1765:  �[1m�[92m   Compiling�[0m spki v0.7.3
...

1772:  �[1m�[92m   Compiling�[0m ppv-lite86 v0.2.21
1773:  �[1m�[92m   Compiling�[0m signature v2.2.0
1774:  �[1m�[92m   Compiling�[0m uselesskey-core-hash v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-hash)
1775:  �[1m�[92m   Compiling�[0m once_cell v1.21.3
1776:  �[1m�[92m   Compiling�[0m base64 v0.22.1
1777:  �[1m�[92m   Compiling�[0m rand_chacha v0.3.1
1778:  �[1m�[92m   Compiling�[0m libm v0.2.16
1779:  �[1m�[92m   Compiling�[0m tap v1.0.1
1780:  �[1m�[92m   Compiling�[0m wyz v0.5.1
1781:  �[1m�[92m   Compiling�[0m radium v0.7.0
1782:  �[1m�[92m   Compiling�[0m hmac v0.12.1
1783:  �[1m�[92m   Compiling�[0m funty v2.0.0
1784:  �[1m�[92m   Compiling�[0m base16ct v0.2.0
1785:  �[1m�[92m   Compiling�[0m num-traits v0.2.19
1786:  �[1m�[92m   Compiling�[0m bitvec v1.0.1
1787:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
1788:  �[1m�[92m   Compiling�[0m getrandom v0.3.4
...

1930:  �[1m�[92m   Compiling�[0m x509-parser v0.18.1
1931:  �[1m�[92m   Compiling�[0m pgp v0.19.0
1932:  �[1m�[92m   Compiling�[0m uselesskey-core-token v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-token)
1933:  �[1m�[92m   Compiling�[0m uselesskey-core-x509 v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-x509)
1934:  �[1m�[92m   Compiling�[0m uselesskey-rsa v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-rsa)
1935:  �[1m�[92m   Compiling�[0m uselesskey-x509 v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-x509)
1936:  �[1m�[92m   Compiling�[0m uselesskey-token v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-token)
1937:  �[1m�[92m   Compiling�[0m uselesskey-ecdsa v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-ecdsa)
1938:  �[1m�[92m   Compiling�[0m uselesskey-ed25519 v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-ed25519)
1939:  �[1m�[92m   Compiling�[0m uselesskey-hmac v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-hmac)
1940:  �[1m�[92m   Compiling�[0m uselesskey-pgp v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-pgp)
1941:  �[1m�[92m   Compiling�[0m uselesskey v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey)
1942:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 1m 36s
1943:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey-49a051263e64d597)
1944:  running 0 tests
1945:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
1946:  �[1m�[92m     Running�[0m tests/facade.rs (target/debug/deps/facade-4914e88aa60f7e73)
1947:  running 8 tests
1948:  test hmac_reexport_works ... ok
1949:  test ed25519_reexport_works ... ok
1950:  test jwk_module_reexports_work ... ok
1951:  test prelude_exposes_core_items ... ok
1952:  test pgp_reexport_works ... ok
1953:  test token_reexport_works ... ok
1954:  test ecdsa_reexport_works ... ok
1955:  test rsa_reexport_works ... ok
1956:  test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.52s
1957:  �[1m�[92m     Running�[0m tests/testutil.rs (target/debug/deps/testutil-511eb1b7e7a9dff0)
1958:  running 0 tests
1959:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
1960:  �[1m�[92m   Doc-tests�[0m uselesskey
1961:  running 7 tests
1962:  test crates/uselesskey/src/lib.rs - (line 19) ... ok
1963:  test crates/uselesskey/src/lib.rs - (line 67) ... ok
1964:  test crates/uselesskey/src/lib.rs - (line 133) ... ok
1965:  test crates/uselesskey/src/lib.rs - prelude (line 199) ... ok
1966:  test crates/uselesskey/src/lib.rs - (line 110) ... ok
1967:  test crates/uselesskey/src/lib.rs - (line 44) ... ok
1968:  test crates/uselesskey/src/lib.rs - (line 81) ... ok
1969:  test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.06s
1970:  all doctests ran in 1.40s; merged doctests compilation took 0.33s
...

1982:  �[1m�[92m   Compiling�[0m der v0.7.10
1983:  �[1m�[92m   Compiling�[0m block-buffer v0.10.4
1984:  �[1m�[92m   Compiling�[0m crypto-common v0.1.6
1985:  �[1m�[92m   Compiling�[0m digest v0.10.7
1986:  �[1m�[92m   Compiling�[0m tempfile v3.26.0
1987:  �[1m�[92m   Compiling�[0m signature v2.2.0
1988:  �[1m�[92m   Compiling�[0m num-traits v0.2.19
1989:  �[1m�[92m   Compiling�[0m parking_lot_core v0.9.12
1990:  �[1m�[92m   Compiling�[0m hmac v0.12.1
1991:  �[1m�[92m   Compiling�[0m uselesskey-core-seed v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-seed)
1992:  �[1m�[92m   Compiling�[0m spki v0.7.3
1993:  �[1m�[92m   Compiling�[0m dashmap v6.1.0
1994:  �[1m�[92m   Compiling�[0m pkcs8 v0.10.2
1995:  �[1m�[92m   Compiling�[0m uselesskey-core-id v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-id)
1996:  �[1m�[92m   Compiling�[0m ff v0.13.1
1997:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
1998:  �[1m�[92m   Compiling�[0m sec1 v0.7.3
1999:  �[1m�[92m   Compiling�[0m group v0.13.0
2000:  �[1m�[92m   Compiling�[0m uselesskey-core-cache v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-cache)
2001:  �[1m�[92m   Compiling�[0m hkdf v0.12.4
2002:  �[1m�[92m   Compiling�[0m crypto-bigint v0.5.5
2003:  �[1m�[92m   Compiling�[0m uselesskey-core-negative-pem v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-negative-pem)
2004:  �[1m�[92m   Compiling�[0m thiserror-impl v2.0.18
2005:  �[1m�[92m   Compiling�[0m aws-lc-sys v0.37.0
...

2026:  �[1m�[92m   Compiling�[0m curve25519-dalek v4.1.3
2027:  �[1m�[92m   Compiling�[0m pest_meta v2.8.6
2028:  �[1m�[92m   Compiling�[0m ed25519 v2.2.3
2029:  �[1m�[92m   Compiling�[0m pkcs1 v0.7.5
2030:  �[1m�[92m   Compiling�[0m rsa v0.9.10
2031:  �[1m�[92m   Compiling�[0m ed25519-dalek v2.2.0
2032:  �[1m�[92m   Compiling�[0m pest_generator v2.8.6
2033:  �[1m�[92m   Compiling�[0m p384 v0.13.1
2034:  �[1m�[92m   Compiling�[0m p256 v0.13.2
2035:  �[1m�[92m   Compiling�[0m wait-timeout v0.2.1
2036:  �[1m�[92m   Compiling�[0m fnv v1.0.7
2037:  �[1m�[92m   Compiling�[0m bit-vec v0.8.0
2038:  �[1m�[92m   Compiling�[0m ucd-trie v0.1.7
2039:  �[1m�[92m   Compiling�[0m untrusted v0.7.1
2040:  �[1m�[92m   Compiling�[0m uselesskey-aws-lc-rs v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-aws-lc-rs)
2041:  �[1m�[92m   Compiling�[0m quick-error v1.2.3
2042:  �[1m�[92m   Compiling�[0m rusty-fork v0.3.1
...

2049:  �[1m�[92m   Compiling�[0m rand_chacha v0.9.0
2050:  �[1m�[92m   Compiling�[0m rand v0.9.2
2051:  �[1m�[92m   Compiling�[0m console v0.15.11
2052:  �[1m�[92m   Compiling�[0m similar v2.7.0
2053:  �[1m�[92m   Compiling�[0m unarray v0.1.4
2054:  �[1m�[92m   Compiling�[0m proptest v1.10.0
2055:  �[1m�[92m   Compiling�[0m insta v1.46.3
2056:  �[1m�[33mwarning�[0m: uselesskey-aws-lc-rs@0.3.0: NASM found
2057:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 56.93s
2058:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_aws_lc_rs-9fa028e5ada98569)
2059:  running 4 tests
2060:  test tests::ed25519_tests::test_ed25519_sign_verify ... ok
2061:  test tests::ecdsa_tests::test_ecdsa_p256_sign_verify ... ok
2062:  test tests::ecdsa_tests::test_ecdsa_p384_sign_verify ... ok
2063:  test tests::rsa_tests::test_rsa_sign_verify ... ok
2064:  test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
2065:  �[1m�[92m     Running�[0m tests/aws_lc_rs_comprehensive.rs (target/debug/deps/aws_lc_rs_comprehensive-d7d08b23503502ce)
2066:  running 26 tests
2067:  test digest_tests::test_sha256_digest ... ok
2068:  test digest_tests::test_sha384_digest ... ok
2069:  test digest_tests::test_sha512_digest ... ok
2070:  test ecdsa_aws_lc_rs_tests::test_ecdsa_conversion_matches_fixture_material ... ok
2071:  test ecdsa_aws_lc_rs_tests::test_ecdsa_cross_key_verification_fails ... ok
2072:  test ecdsa_aws_lc_rs_tests::test_ecdsa_message_tampering_fails ... ok
2073:  test ecdsa_aws_lc_rs_tests::test_ecdsa_deterministic_keys ... ok
2074:  test ecdsa_aws_lc_rs_tests::test_ecdsa_p256_key_pair_conversion ... ok
2075:  test ed25519_aws_lc_rs_tests::test_ed25519_conversion_matches_fixture_material ... ok
2076:  test ed25519_aws_lc_rs_tests::test_ed25519_cross_key_verification_fails ... ok
2077:  test ed25519_aws_lc_rs_tests::test_ed25519_deterministic_keys ... ok
2078:  test ed25519_aws_lc_rs_tests::test_ed25519_key_pair_conversion ... ok
2079:  test ed25519_aws_lc_rs_tests::test_ed25519_message_tampering_fails ... ok
2080:  test hmac_tests::test_hmac_sha256 ... ok
2081:  test hmac_tests::test_hmac_sha384 ... ok
2082:  test hmac_tests::test_hmac_sha512 ... ok
2083:  test hmac_tests::test_hmac_verification_fails_with_tampered_message ... ok
2084:  test hmac_tests::test_hmac_verification_fails_with_wrong_key ... ok
2085:  test ecdsa_aws_lc_rs_tests::test_ecdsa_p384_key_pair_conversion ... ok
2086:  test cross_algorithm_tests::test_cross_algorithm_signature_verification_fails ... ok
2087:  test rsa_aws_lc_rs_tests::test_rsa_conversion_matches_fixture_material ... ok
2088:  test rsa_aws_lc_rs_tests::test_rsa_key_pair_conversion ... ok
2089:  test rsa_aws_lc_rs_tests::test_rsa_deterministic_keys ... ok
2090:  test rsa_aws_lc_rs_tests::test_rsa_signature_tampering_fails ... ok
2091:  test rsa_aws_lc_rs_tests::test_rsa_cross_key_verification_fails ... ok
2092:  test rsa_aws_lc_rs_tests::test_rsa_different_key_sizes ... ok
2093:  test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.35s
2094:  �[1m�[92m     Running�[0m tests/aws_lc_rs_prop.rs (target/debug/deps/aws_lc_rs_prop-35bc4d298cf92128)
2095:  running 3 tests
2096:  test ed25519_aws_lc_rs_deterministic ... ok
2097:  test ecdsa_aws_lc_rs_deterministic ... ok
2098:  test rsa_aws_lc_rs_deterministic ... ok
2099:  test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.96s
2100:  �[1m�[92m     Running�[0m tests/snapshots_aws_lc_rs.rs (target/debug/deps/snapshots_aws_lc_rs-327d4b9e53270f78)
2101:  running 5 tests
2102:  test snapshot_tests::ecdsa_snapshots::snapshot_aws_lc_ecdsa_p256_public_key ... ok
2103:  test snapshot_tests::ecdsa_snapshots::snapshot_aws_lc_ecdsa_p384_public_key ... ok
2104:  test snapshot_tests::ed25519_snapshots::snapshot_aws_lc_ed25519_public_key ... ok
2105:  test snapshot_tests::rsa_snapshots::snapshot_aws_lc_rsa_2048_public_key ... ok
2106:  test snapshot_tests::rsa_snapshots::snapshot_aws_lc_rsa_modulus_len ... ok
2107:  test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.39s
2108:  �[1m�[92m     Running�[0m tests/testutil.rs (target/debug/deps/testutil-880f09a20da40857)
2109:  running 0 tests
2110:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2111:  �[1m�[92m   Doc-tests�[0m uselesskey_aws_lc_rs
2112:  running 1 test
2113:  test crates/uselesskey-aws-lc-rs/src/lib.rs - (line 21) ... ok
2114:  test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.18s
2115:  all doctests ran in 0.45s; merged doctests compilation took 0.26s
2116:  ==> test:uselesskey-aws-lc-rs [ok, 65.3s]
2117:  ==> test:uselesskey-core
2118:  + "cargo" "test" "-p" "uselesskey-core" "--all-features"
2119:  �[1m�[92m   Compiling�[0m memchr v2.7.6
2120:  �[1m�[92m   Compiling�[0m num-traits v0.2.19
2121:  �[1m�[92m   Compiling�[0m spin v0.9.8
2122:  �[1m�[92m   Compiling�[0m futures-core v0.3.31
2123:  �[1m�[92m   Compiling�[0m uselesskey-core-cache v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-cache)
2124:  �[1m�[92m   Compiling�[0m slab v0.4.12
2125:  �[1m�[92m   Compiling�[0m pin-project-lite v0.2.16
2126:  �[1m�[92m   Compiling�[0m pin-utils v0.1.0
2127:  �[1m�[92m   Compiling�[0m futures-task v0.3.31
2128:  �[1m�[92m   Compiling�[0m futures-util v0.3.31
2129:  �[1m�[92m   Compiling�[0m aho-corasick v1.1.4
2130:  �[1m�[92m   Compiling�[0m uselesskey-core-factory v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-factory)
2131:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
2132:  �[1m�[92m   Compiling�[0m futures-timer v3.0.3
2133:  �[1m�[92m   Compiling�[0m proptest v1.10.0
2134:  �[1m�[92m   Compiling�[0m regex-automata v0.4.14
2135:  �[1m�[92m   Compiling�[0m uselesskey-core v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core)
2136:  �[1m�[92m   Compiling�[0m regex v1.12.3
2137:  �[1m�[92m   Compiling�[0m rstest_macros v0.26.1
2138:  �[1m�[92m   Compiling�[0m rstest v0.26.1
2139:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 13.03s
2140:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core-b4141c43b45e6d24)
2141:  running 3 tests
2142:  test error::tests::error_messages_are_readable ... ok
2143:  test sink::tests::temp_artifact_bytes_round_trip ... ok
2144:  test sink::tests::temp_artifact_string_round_trips_and_debug_mentions_path ... ok
2145:  test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2146:  �[1m�[92m     Running�[0m tests/core_prop.rs (target/debug/deps/core_prop-aa727aa4eff67ff2)
2147:  running 12 tests
2148:  test deterministic_is_order_independent_for_cache_keys ... ok
2149:  test deterministic_factory_returns_same_value_for_same_id ... ok
2150:  test different_seeds_produce_different_derived_seeds ... ok
2151:  test seed_from_env_value_handles_arbitrary_strings ... ok
2152:  test different_labels_produce_different_derived_seeds ... ok
2153:  test seed_from_env_value_valid_hex_produces_valid_seeds ... ok
2154:  test different_variants_produce_different_derived_seeds ... ok
2155:  test seed_from_env_value_valid_hex_with_prefix ... ok
2156:  test truncate_der_with_length_gte_original_returns_original ... ok
2157:  test truncate_der_with_length_lt_original_returns_truncated ... ok
2158:  test corrupt_pem_all_variants_differ_from_input ... ok
2159:  test seed_from_env_value_non_64_byte_ascii_strings_always_ok ... ok
2160:  test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
2161:  �[1m�[92m     Running�[0m tests/factory_env.rs (target/debug/deps/factory_env-bb9dd0078d4d058b)
2162:  running 3 tests
2163:  test deterministic_from_env_missing_var_is_error ... ok
2164:  test deterministic_from_env_invalid_seed_is_error ... ok
2165:  test deterministic_from_env_reads_seed ... ok
2166:  test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2167:  �[1m�[92m     Running�[0m tests/factory_mutants.rs (target/debug/deps/factory_mutants-6e6157dd002106ba)
2168:  running 3 tests
2169:  test debug_deterministic_factory_contains_expected_text ... ok
2170:  test clear_cache_actually_clears ... ok
2171:  test debug_random_factory_contains_expected_text ... ok
2172:  test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2173:  �[1m�[92m     Running�[0m tests/negative_prop.rs (target/debug/deps/negative_prop-a2329d52fed7def6)
2174:  running 10 tests
2175:  test corrupt_pem_extra_blank_line_adds_blank ... ok
2176:  test corrupt_pem_bad_base64_contains_marker ... ok
2177:  test corrupt_pem_bad_footer_contains_marker ... ok
2178:  test corrupt_pem_bad_header_contains_marker ... ok
2179:  test flip_byte_changes_exactly_one_byte ... ok
2180:  test flip_byte_is_self_inverse ... ok
2181:  test flip_byte_out_of_range_returns_original ... ok
2182:  test truncate_der_preserves_prefix ... ok
2183:  test truncate_der_zero_returns_empty ... ok
2184:  test corrupt_pem_truncate_produces_correct_length ... ok
2185:  test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
2186:  �[1m�[92m   Doc-tests�[0m uselesskey_core
2187:  running 2 tests
2188:  test crates/uselesskey-core/src/factory.rs - factory::Factory (line 12) ... ok
2189:  test crates/uselesskey-core/src/lib.rs - (line 28) ... ok
2190:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2191:  all doctests ran in 0.20s; merged doctests compilation took 0.20s
...

2194:  + "cargo" "test" "-p" "uselesskey-core-cache" "--all-features"
2195:  �[1m�[92m   Compiling�[0m ppv-lite86 v0.2.21
2196:  �[1m�[92m   Compiling�[0m uselesskey-core-cache v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-cache)
2197:  �[1m�[92m   Compiling�[0m rand_chacha v0.9.0
2198:  �[1m�[92m   Compiling�[0m proptest v1.10.0
2199:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 7.65s
2200:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_cache-a5e1e903abb51688)
2201:  running 7 tests
2202:  test tests::clear_empties_cache ... ok
2203:  test tests::debug_includes_type_name_and_len ... ok
2204:  test tests::downcast_or_panic_ok_returns_value ... ok
2205:  test tests::downcast_or_panic_type_mismatch_panics ... ok
2206:  test tests::get_typed_type_mismatch_panics ... ok
2207:  test tests::typed_round_trip ... ok
2208:  test tests::insert_if_absent_keeps_first_value ... ok
2209:  test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2210:  �[1m�[92m     Running�[0m tests/cache_prop.rs (target/debug/deps/cache_prop-72c2fc2b2e5f59ee)
2211:  running 5 tests
2212:  test clear_empties ... ok
2213:  test insert_and_get_round_trip ... ok
2214:  test first_value_wins ... ok
2215:  test distinct_labels_no_collision ... ok
2216:  test len_tracks_insertions ... ok
2217:  test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2218:  �[1m�[92m   Doc-tests�[0m uselesskey_core_cache
2219:  running 0 tests
2220:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2221:  ==> test:uselesskey-core-cache [ok, 7.8s]
2222:  ==> test:uselesskey-core-hash
2223:  + "cargo" "test" "-p" "uselesskey-core-hash" "--all-features"
2224:  �[1m�[92m   Compiling�[0m once_cell v1.21.3
2225:  �[1m�[92m   Compiling�[0m uselesskey-core-hash v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-hash)
2226:  �[1m�[92m   Compiling�[0m tempfile v3.26.0
2227:  �[1m�[92m   Compiling�[0m rusty-fork v0.3.1
2228:  �[1m�[92m   Compiling�[0m proptest v1.10.0
2229:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 8.54s
2230:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_hash-62ca612eb52bd494)
2231:  running 5 tests
2232:  test tests::hash32_matches_blake3_hash ... ok
2233:  test tests::len_prefix_changes_on_boundary_change ... ok
2234:  test tests::write_len_prefixed_uses_big_endian_length ... ok
2235:  test tests::hash32_is_deterministic_for_random_inputs ... ok
2236:  test tests::write_len_prefixed_matches_direct_length_encoding ... ok
2237:  test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2238:  �[1m�[92m     Running�[0m tests/hash_integration.rs (target/debug/deps/hash_integration-c4b550813f41a3b0)
2239:  running 2 tests
2240:  test integration_keeps_direct_hash_compatibility ... ok
2241:  test integration_matches_length_prefixed_spec_behavior ... ok
2242:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2243:  �[1m�[92m     Running�[0m tests/hash_prop.rs (target/debug/deps/hash_prop-f7a3a305a5808781)
2244:  running 4 tests
2245:  test hash32_deterministic ... ok
2246:  test len_prefix_separates_fields ... ok
2247:  test write_len_prefixed_deterministic ... ok
2248:  test hash32_different_inputs_differ ... ok
2249:  test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2250:  �[1m�[92m     Running�[0m tests/hash_tests.rs (target/debug/deps/hash_tests-b31ebd6124c61a50)
...

2254:  test different_seeds_produce_different_outputs ... ok
2255:  test empty_vs_nonempty_differ ... ok
2256:  test hash32_deterministic ... ok
2257:  test hash32_known_vector ... ok
2258:  test hash32_empty_input ... ok
2259:  test hash32_output_is_32_bytes ... ok
2260:  test keyed_derivation_with_empty_domain_and_label ... ok
2261:  test keyed_derivation_output_is_32_bytes ... ok
2262:  test keyed_hasher_deterministic ... ok
2263:  test keyed_derivation_known_vector ... ok
2264:  test prop_single_bit_flip_changes_output ... ok
2265:  test write_len_prefixed_deterministic ... ok
2266:  test prop_hash32_always_32_bytes ... ok
2267:  test prop_output_always_32_bytes ... ok
2268:  test write_len_prefixed_empty_input ... ok
2269:  test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2270:  �[1m�[92m   Doc-tests�[0m uselesskey_core_hash
2271:  running 0 tests
2272:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2273:  ==> test:uselesskey-core-hash [ok, 8.6s]
2274:  ==> test:uselesskey-core-id
2275:  + "cargo" "test" "-p" "uselesskey-core-id" "--all-features"
2276:  �[1m�[92m   Compiling�[0m uselesskey-core-id v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-id)
2277:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 2.91s
2278:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_id-0d3fe563261bcace)
2279:  running 6 tests
2280:  test tests::artifact_id_fingerprints_spec_bytes ... ok
2281:  test tests::derive_seed_label_affects_output ... ok
2282:  test tests::derive_seed_unknown_version_is_deterministic ... ok
2283:  test tests::artifact_id_preserves_fields ... ok
2284:  test tests::derive_seed_version_affects_output ... ok
2285:  test tests::seed_reexport_matches_core_seed ... ok
2286:  test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2287:  �[1m�[92m     Running�[0m tests/id_prop.rs (target/debug/deps/id_prop-7ec5c0abef87bca7)
2288:  running 5 tests
2289:  test different_labels_produce_different_seeds ... ok
2290:  test different_variants_produce_different_seeds ... ok
2291:  test artifact_id_new_never_panics ... ok
2292:  test derive_seed_is_deterministic ... ok
2293:  test spec_fingerprint_matches_hash32 ... ok
2294:  test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2295:  �[1m�[92m     Running�[0m tests/id_tests.rs (target/debug/deps/id_tests-5b8e9b6611d420c7)
...

2317:  test equal_ids_produce_equal_hashes ... ok
2318:  test fingerprint_is_stable_across_calls ... ok
2319:  test new_preserves_all_fields ... ok
2320:  test ord_is_consistent_with_eq ... ok
2321:  test proptest_tests::different_version_produces_different_id ... ok
2322:  test proptest_tests::different_label_produces_different_id ... ok
2323:  test proptest_tests::different_variant_produces_different_id ... ok
2324:  test same_components_are_equal ... ok
2325:  test spec_fingerprint_is_hash_of_spec_bytes ... ok
2326:  test unicode_label_affects_derived_seed ... ok
2327:  test unicode_label_is_preserved ... ok
2328:  test unicode_variant_is_preserved ... ok
2329:  test proptest_tests::changing_any_field_changes_derived_seed ... ok
2330:  test proptest_tests::identical_ids_produce_identical_derived_seeds ... ok
2331:  test proptest_tests::identical_fields_produce_equal_ids ... ok
2332:  test result: ok. 35 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
2333:  �[1m�[92m     Running�[0m tests/seed_integration.rs (target/debug/deps/seed_integration-272c2eb224dded6e)
2334:  running 2 tests
2335:  test core_id_reexported_seed_matches_core_seed_type ... ok
2336:  test seed_from_core_seed_drives_core_id_derivation ... ok
2337:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2338:  �[1m�[92m   Doc-tests�[0m uselesskey_core_id
2339:  running 0 tests
2340:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2341:  ==> test:uselesskey-core-id [ok, 3.0s]
2342:  ==> test:uselesskey-core-jwk
2343:  + "cargo" "test" "-p" "uselesskey-core-jwk" "--all-features"
2344:  �[1m�[92m   Compiling�[0m proc-macro2 v1.0.106
2345:  �[1m�[92m   Compiling�[0m quote v1.0.44
2346:  �[1m�[92m   Compiling�[0m syn v2.0.114
2347:  �[1m�[92m   Compiling�[0m serde_derive v1.0.228
2348:  �[1m�[92m   Compiling�[0m serde v1.0.228
2349:  �[1m�[92m   Compiling�[0m uselesskey-core-jwk-shape v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-jwk-shape)
2350:  �[1m�[92m   Compiling�[0m uselesskey-core-jwk-builder v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-jwk-builder)
2351:  �[1m�[92m   Compiling�[0m uselesskey-core-jwk v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-jwk)
2352:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 4.47s
2353:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_jwk-a787d5f0f0809d68)
2354:  running 0 tests
2355:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2356:  �[1m�[92m     Running�[0m tests/facade_integration.rs (target/debug/deps/facade_integration-26e6621b8f2cb147)
2357:  running 1 test
2358:  test core_jwk_facade_exports_shape_items ... ok
2359:  test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2360:  �[1m�[92m   Doc-tests�[0m uselesskey_core_jwk
2361:  running 0 tests
2362:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2363:  ==> test:uselesskey-core-jwk [ok, 4.6s]
2364:  ==> test:uselesskey-core-jwk-builder
2365:  + "cargo" "test" "-p" "uselesskey-core-jwk-builder" "--all-features"
2366:  �[1m�[92m   Compiling�[0m uselesskey-core-jwk-builder v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-jwk-builder)
2367:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 1.49s
2368:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_jwk_builder-9150c203ddcaef18)
2369:  running 4 tests
2370:  test tests::jwks_builder_add_methods_work ... ok
2371:  test tests::jwks_builder_orders_by_kid ... ok
2372:  test tests::jwks_builder_push_methods_and_display ... ok
2373:  test tests::jwks_builder_stable_for_same_kid ... ok
2374:  test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2375:  �[1m�[92m     Running�[0m tests/jwk_prop.rs (target/debug/deps/jwk_prop-6c37af22eb665658)
2376:  running 1 test
2377:  test builder_sorts_by_kid_and_preserves_relative_order_for_duplicates ... ok
2378:  test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
2379:  �[1m�[92m     Running�[0m tests/jwks_builder_integration.rs (target/debug/deps/jwks_builder_integration-60c8723419aa27a0)
2380:  running 2 tests
2381:  test integration_orders_jwks_keys_by_kid ... ok
2382:  test integration_preserves_duplicate_kids_in_insertion_order ... ok
2383:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2384:  �[1m�[92m   Doc-tests�[0m uselesskey_core_jwk_builder
2385:  running 0 tests
2386:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2387:  ==> test:uselesskey-core-jwk-builder [ok, 1.6s]
...

2390:  �[1m�[92m   Compiling�[0m uselesskey-core-jwk-shape v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-jwk-shape)
2391:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 3.81s
2392:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_jwk_shape-f640f2e456dcee21)
2393:  running 11 tests
2394:  test tests::any_jwk_display_round_trips ... ok
2395:  test tests::any_jwk_from_conversions_work ... ok
2396:  test tests::any_jwk_to_value_round_trips ... ok
2397:  test tests::debug_omits_private_material ... ok
2398:  test tests::display_outputs_json ... ok
2399:  test tests::enum_kid_and_to_value_cover_all_variants ... ok
2400:  test tests::enum_kid_covers_all_variants ... ok
2401:  test tests::kid_helpers_return_expected_kid ... ok
2402:  test tests::private_jwk_debug_omits_private_material ... ok
2403:  test tests::private_jwk_enum_debug_uses_inner_formatters ... ok
2404:  test tests::to_string_and_to_value_are_idempotent ... ok
2405:  test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
2406:  �[1m�[92m     Running�[0m tests/integration.rs (target/debug/deps/integration-07f88a29dfab29f5)
2407:  running 1 test
2408:  test integration_builds_shape_collection_round_trip ... ok
2409:  test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2410:  �[1m�[92m     Running�[0m tests/jwk_shape_prop.rs (target/debug/deps/jwk_shape_prop-d9380960d786f0af)
2411:  running 7 tests
2412:  test any_jwk_from_preserves_kid ... ok
2413:  test debug_omits_secret ... ok
2414:  test jwks_has_keys_array ... ok
2415:  test display_equals_to_value ... ok
2416:  test public_jwk_kid_accessor ... ok
2417:  test private_oct_kid_accessor ... ok
2418:  test public_jwk_to_value_contains_kid ... ok
2419:  test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2420:  �[1m�[92m     Running�[0m tests/shape_tests.rs (target/debug/deps/shape_tests-a68390cf7a19654c)
...

2448:  test okp_private_json_roundtrip ... ok
2449:  test oct_required_fields_present ... ok
2450:  test okp_private_jwk_construction ... ok
2451:  test okp_private_required_fields_present ... ok
2452:  test okp_public_json_roundtrip ... ok
2453:  test okp_public_jwk_construction ... ok
2454:  test okp_public_required_fields_present ... ok
2455:  test qi_field_is_serialized_correctly ... ok
2456:  test rsa_private_json_roundtrip ... ok
2457:  test rsa_private_jwk_construction ... ok
2458:  test rsa_private_required_fields_present ... ok
2459:  test rsa_public_json_roundtrip ... ok
2460:  test rsa_public_jwk_construction ... ok
2461:  test use_field_is_serialized_as_use_not_use_underscore ... ok
2462:  test rsa_public_required_fields_present ... ok
2463:  test result: ok. 41 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2464:  �[1m�[92m   Doc-tests�[0m uselesskey_core_jwk_shape
2465:  running 1 test
2466:  test crates/uselesskey-core-jwk-shape/src/lib.rs - (line 12) ... ok
2467:  test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2468:  all doctests ran in 0.18s; merged doctests compilation took 0.18s
2469:  ==> test:uselesskey-core-jwk-shape [ok, 4.1s]
2470:  ==> test:uselesskey-core-keypair
2471:  + "cargo" "test" "-p" "uselesskey-core-keypair" "--all-features"
2472:  �[1m�[92m   Compiling�[0m syn v2.0.114
2473:  �[1m�[92m   Compiling�[0m thiserror-impl v2.0.18
2474:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
2475:  �[1m�[92m   Compiling�[0m uselesskey-core v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core)
2476:  �[1m�[92m   Compiling�[0m uselesskey-core-keypair-material v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-keypair-material)
2477:  �[1m�[92m   Compiling�[0m uselesskey-core-keypair v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-keypair)
2478:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 2.12s
2479:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_keypair-7a8a5f600bf6c826)
2480:  running 0 tests
2481:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2482:  �[1m�[92m   Doc-tests�[0m uselesskey_core_keypair
2483:  running 0 tests
2484:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2485:  ==> test:uselesskey-core-keypair [ok, 2.2s]
...

2490:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 4.48s
2491:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_keypair_material-58ff64aac7f854e3)
2492:  running 12 tests
2493:  test tests::accessors_expose_material ... ok
2494:  test tests::debug_does_not_include_key_pem ... ok
2495:  test tests::deterministic_corruption_is_stable ... ok
2496:  test tests::kid_is_deterministic ... ok
2497:  test tests::kid_depends_on_spki_bytes ... ok
2498:  test tests::private_key_pkcs8_der_corrupt_deterministic ... ok
2499:  test tests::private_key_pkcs8_pem_corrupt ... ok
2500:  test tests::property::deterministic_pem_corruption_is_reproducible ... ok
2501:  test tests::property::truncation_len_is_capped ... ok
2502:  test tests::tempfile_writers_round_trip_content ... ok
2503:  test tests::truncation_respects_requested_length ... ok
2504:  test tests::property::kid_stable_for_fixed_spki ... ok
2505:  test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2506:  �[1m�[92m     Running�[0m tests/material_integration.rs (target/debug/deps/material_integration-3744e9cd6896ba01)
2507:  running 1 test
2508:  test material_is_usable_from_public_api ... ok
2509:  test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2510:  �[1m�[92m     Running�[0m tests/material_prop.rs (target/debug/deps/material_prop-a514912267e32706)
2511:  running 7 tests
2512:  test bad_header_produces_corrupted_key ... ok
2513:  test deterministic_der_corruption_stable ... ok
2514:  test deterministic_pem_corruption_stable ... ok
2515:  test truncation_capped ... ok
2516:  test different_spki_different_kid ... ok
2517:  test kid_is_deterministic ... ok
2518:  test debug_no_pem_leak ... ok
2519:  test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2520:  �[1m�[92m     Running�[0m tests/material_tests.rs (target/debug/deps/material_tests-1429160a6e82c6dd)
...

2550:  test pem_private_has_begin_end_markers ... ok
2551:  test pem_public_has_begin_end_markers ... ok
2552:  test private_key_pkcs8_pem_has_private_key_markers ... ok
2553:  test property::clone_equals_original ... ok
2554:  test property::deterministic_der_corruption_reproducible ... ok
2555:  test property::debug_never_leaks_pem ... ok
2556:  test property::kid_depends_only_on_spki ... ok
2557:  test public_key_spki_der_returns_correct_bytes ... ok
2558:  test property::deterministic_pem_corruption_reproducible ... ok
2559:  test public_key_spki_pem_has_public_key_markers ... ok
2560:  test property::truncation_len_capped ... ok
2561:  test property::kid_stable ... ok
2562:  test rsa_ec_ed25519_produce_distinct_kids ... ok
2563:  test tempfile_private_key_round_trip ... ok
2564:  test tempfile_public_key_round_trip ... ok
2565:  test result: ok. 43 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2566:  �[1m�[92m   Doc-tests�[0m uselesskey_core_keypair_material
2567:  running 0 tests
2568:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2569:  ==> test:uselesskey-core-keypair-material [ok, 4.6s]
2570:  ==> test:uselesskey-core-kid
2571:  + "cargo" "test" "-p" "uselesskey-core-kid" "--all-features"
2572:  �[1m�[92m   Compiling�[0m uselesskey-core-kid v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-kid)
2573:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 1.87s
2574:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_kid-b9e0898974eee2fd)
2575:  running 5 tests
2576:  test tests::configurable_prefix_length_is_respected ... ok
2577:  test tests::default_kid_decodes_to_96_bits ... ok
2578:  test tests::kid_changes_when_input_changes ... ok
2579:  test tests::kid_is_deterministic ... ok
2580:  test tests::prefix_length_must_be_non_zero - should panic ... ok
2581:  test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2582:  �[1m�[92m     Running�[0m tests/kid_prop.rs (target/debug/deps/kid_prop-61186de29922b300)
2583:  running 5 tests
2584:  test kid_default_length ... ok
2585:  test kid_deterministic ... ok
2586:  test kid_is_valid_base64url ... ok
2587:  test kid_different_inputs_differ ... ok
2588:  test kid_with_prefix_respects_length ... ok
2589:  test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2590:  �[1m�[92m   Doc-tests�[0m uselesskey_core_kid
2591:  running 0 tests
2592:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2593:  ==> test:uselesskey-core-kid [ok, 2.0s]
...

2598:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_negative-66589d1e7abcb7bb)
2599:  running 12 tests
2600:  test tests::derived_offset_exact_arithmetic ... ok
2601:  test tests::derived_offset_zero_len_returns_zero ... ok
2602:  test tests::derived_truncate_len_bytes_exact_arithmetic ... ok
2603:  test tests::derived_truncate_len_bytes_single_returns_zero ... ok
2604:  test tests::deterministic_der_arm0_truncation ... ok
2605:  test tests::deterministic_der_arm1_flip ... ok
2606:  test tests::deterministic_der_corruption_is_stable_for_same_variant ... ok
2607:  test tests::deterministic_der_not_constant ... ok
2608:  test tests::flip_byte_changes_only_target_offset ... ok
2609:  test tests::deterministic_der_arm2_flip_truncate ... ok
2610:  test tests::flip_byte_xor_vs_or_on_set_bit ... ok
2611:  �[1m�[92m   Doc-tests�[0m uselesskey_core_negative
2612:  test tests::truncate_der_shortens_when_len_smaller ... ok
2613:  test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2614:  running 0 tests
2615:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2616:  ==> test:uselesskey-core-negative [ok, 0.4s]
...

2621:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_negative_pem-7c7961d08fe1276b)
2622:  running 13 tests
2623:  test tests::bad_base64_short_input_inserts_line ... ok
2624:  test tests::bad_footer_on_empty_input_returns_replacement ... ok
2625:  test tests::bad_footer_replaces_last_line ... ok
2626:  test tests::bad_header_replaces_first_line ... ok
2627:  test tests::deterministic_corruption_produces_multiple_shapes_across_variants ... ok
2628:  test tests::deterministic_pem_arm0_bad_header ... ok
2629:  test tests::deterministic_pem_arm1_bad_footer ... ok
2630:  test tests::deterministic_pem_arm2_bad_base64 ... ok
2631:  test tests::deterministic_pem_arm3_blank_line ... ok
2632:  test tests::deterministic_pem_arm4_truncate ... ok
2633:  test tests::extra_blank_line_short_input_appends_newlines ... ok
2634:  test tests::truncate_variant_limits_length ... ok
2635:  test tests::deterministic_corruption_is_stable_for_same_variant ... ok
2636:  test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2637:  �[1m�[92m     Running�[0m tests/integration.rs (target/debug/deps/integration-fd7df6233425b643)
2638:  running 6 tests
2639:  test bad_base64_inserts_marker ... ok
2640:  test deterministic_variants_produce_at_least_two_shapes_for_fixture ... ok
2641:  test deterministic_output_is_stable_for_same_variant ... ok
2642:  test extra_blank_line_includes_double_newline ... ok
2643:  test deterministic_corruption_is_reproducible ... ok
2644:  test truncate_length_is_capped ... ok
2645:  test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2646:  �[1m�[92m     Running�[0m tests/pem_prop.rs (target/debug/deps/pem_prop-6a3eb59ecd444b32)
2647:  running 7 tests
2648:  test bad_base64_injects_invalid_data ... ok
2649:  test corrupt_pem_never_panics_on_valid_pem ... ok
2650:  test bad_header_replaces_first_line ... ok
2651:  test deterministic_corruption_changes_output ... ok
2652:  test bad_footer_replaces_last_line ... ok
2653:  test truncate_respects_limit ... ok
2654:  test deterministic_corruption_is_stable ... ok
2655:  test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2656:  �[1m�[92m     Running�[0m tests/pem_tests.rs (target/debug/deps/pem_tests-00a2ab2cd5660025)
...

2716:  test extra_blank_line_two_line_input_uses_fallback_path ... ok
2717:  test extra_blank_line_works_on_ec_pem ... ok
2718:  test single_line_pem_bad_base64 ... ok
2719:  test single_line_pem_extra_blank_line ... ok
2720:  test truncate_is_deterministic ... ok
2721:  test truncate_produces_different_output ... ok
2722:  test truncate_works_on_ed25519_pem ... ok
2723:  test truncation_beyond_length_returns_full_input ... ok
2724:  test extra_blank_line_always_has_double_newline ... ok
2725:  test corruption_is_deterministic_for_any_input ... ok
2726:  test truncation_shortens_output ... ok
2727:  test truncation_removes_end_marker ... ok
2728:  test truncation_to_zero_gives_empty_string ... ok
2729:  test truncation_to_full_length_preserves_all_chars ... ok
2730:  test truncation_never_exceeds_original_length ... ok
2731:  test result: ok. 73 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
2732:  �[1m�[92m   Doc-tests�[0m uselesskey_core_negative_pem
2733:  running 2 tests
2734:  test crates/uselesskey-core-negative-pem/src/lib.rs - (line 12) ... ok
2735:  test crates/uselesskey-core-negative-pem/src/lib.rs - (line 29) ... ok
2736:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2737:  all doctests ran in 0.19s; merged doctests compilation took 0.18s
2738:  ==> test:uselesskey-core-negative-pem [ok, 4.9s]
2739:  ==> test:uselesskey-core-token
2740:  + "cargo" "test" "-p" "uselesskey-core-token" "--all-features"
2741:  �[1m�[92m   Compiling�[0m serde_core v1.0.228
2742:  �[1m�[92m   Compiling�[0m rand_core v0.6.4
2743:  �[1m�[92m   Compiling�[0m proptest v1.10.0
2744:  �[1m�[92m   Compiling�[0m rand_chacha v0.3.1
2745:  �[1m�[92m   Compiling�[0m serde_json v1.0.149
2746:  �[1m�[92m   Compiling�[0m uselesskey-core-token-shape v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-token-shape)
2747:  �[1m�[92m   Compiling�[0m uselesskey-core-token v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-token)
2748:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 10.16s
2749:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_token-27519dcdef7bcae8)
2750:  running 0 tests
2751:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2752:  �[1m�[92m     Running�[0m tests/integration.rs (target/debug/deps/integration-80c5109f5827431e)
2753:  running 2 tests
2754:  test facade_generators_are_stable ... ok
2755:  test facade_reexports_shape_generators ... ok
2756:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2757:  �[1m�[92m     Running�[0m tests/token_tests.rs (target/debug/deps/token_tests-98b62de95c3e9666)
...

2797:  test prop_different_seeds_different_api_keys ... ok
2798:  test prop_bearer_always_43_chars_valid_base64url ... ok
2799:  test prop_different_seeds_different_bearer_tokens ... ok
2800:  test prop_random_base62_correct_length_and_charset ... ok
2801:  test random_base62_deterministic ... ok
2802:  test random_base62_different_seeds_differ ... ok
2803:  test random_base62_large_length ... ok
2804:  test random_base62_one_char ... ok
2805:  test random_base62_zero_length ... ok
2806:  test token_kind_clone_is_equal ... ok
2807:  test token_kind_copy_semantics ... ok
2808:  test token_kind_hash_consistency ... ok
2809:  test token_kind_variants_are_distinct ... ok
2810:  test prop_oauth_always_three_segments ... ok
2811:  test prop_oauth_same_seed_same_output ... ok
2812:  test result: ok. 53 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
2813:  �[1m�[92m   Doc-tests�[0m uselesskey_core_token
2814:  running 0 tests
2815:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2816:  ==> test:uselesskey-core-token [ok, 10.3s]
...

2819:  �[1m�[92m   Compiling�[0m uselesskey-core-token-shape v0.3.0 (/home/runner/work/uselesskey/uselesskey/crates/uselesskey-core-token-shape)
2820:  �[1m�[92m    Finished�[0m `test` profile [optimized + debuginfo] target(s) in 6.26s
2821:  �[1m�[92m     Running�[0m unittests src/lib.rs (target/debug/deps/uselesskey_core_token_shape-5f13a4b67816564d)
2822:  running 11 tests
2823:  test tests::authorization_scheme_matches_kind ... ok
2824:  test tests::api_key_shape_is_stable ... ok
2825:  test tests::bearer_shape_decodes_to_32_bytes ... ok
2826:  test tests::bearer_token_always_43_chars ... ok
2827:  test tests::oauth_shape_has_three_segments_and_subject ... ok
2828:  test tests::api_key_same_seed_stable ... ok
2829:  test tests::random_base62_constant_rng_terminates ... ok
2830:  test tests::random_base62_length_and_charset ... ok
2831:  test tests::generate_token_varies_by_kind ... ok
2832:  test tests::random_base62_rejects_biased_bytes ... ok
2833:  test tests::oauth_has_three_segments ... ok
2834:  test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2835:  �[1m�[92m     Running�[0m tests/integration.rs (target/debug/deps/integration-d6b5d54aa2fdde78)
2836:  running 2 tests
2837:  test integration_api_key_prefix_is_stable ... ok
2838:  test integration_generate_token_all_kinds ... ok
2839:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2840:  �[1m�[92m     Running�[0m tests/shape_tests.rs (target/debug/deps/shape_tests-b6e5bc29e095525a)
...

2867:  test prop_api_key_deterministic ... ok
2868:  test oauth_token_deterministic ... ok
2869:  test prop_api_key_suffix_is_alphanumeric ... ok
2870:  test prop_bearer_token_is_valid_base64url ... ok
2871:  test prop_bearer_decodes_to_32_bytes ... ok
2872:  test prop_bearer_token_length_is_43 ... ok
2873:  test prop_random_base62_exact_length ... ok
2874:  test prop_generate_token_deterministic ... ok
2875:  test prop_random_base62_valid_charset ... ok
2876:  test random_base62_large_length_is_exact ... ok
2877:  test random_base62_only_alphanumeric ... ok
2878:  test random_base62_zero_length ... ok
2879:  test random_base62_distribution_roughly_uniform ... ok
2880:  test prop_oauth_has_three_segments ... ok
2881:  test prop_oauth_payload_sub_matches_label ... ok
2882:  tes...

Adds proptest suites covering determinism, format validity, and
panic safety for 10 additional crates.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@EffortlessSteven
Copy link
Copy Markdown
Member Author

Closing: Corrupted Cargo.lock (TOML parse error at line 3476) makes this branch unsalvageable without full rebuild. The 52 property tests it aimed to add are being superseded by wave-49 (core prop tests). [Class E: unsavable]

@EffortlessSteven EffortlessSteven deleted the wave-22/prop-tests branch March 5, 2026 15:27
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.

2 participants