All notable changes to crypto-key-classifier are documented here. Tags follow vMAJOR.MINOR.PATCH-label semantics where the label signals a ship milestone rather than strict semver breakage (pre-1.0).
- Pyodide web demo (
docs/demo/) — live in-browser classification with NEWELL branding, shareable URLs, history panel, JSON download, keyboard shortcuts, and bulk mode. --versionflag to CLI for runtime version display.- Pyproject metadata:
classifiers,[project.urls], and keywords populated for PyPI discovery. - 9 Stellar-related regression tests for edge cases in cross-chain validation.
- OSS hygiene files:
SECURITY.md,CONTRIBUTING.md,CODE_OF_CONDUCT.mdwith project-specific guidance. - GitHub repository topics: crypto, bitcoin, ethereum, solana, cosmos, bip39, key-recovery, blockchain, forensics, cli.
- Community files:
FUNDING.yml,SUPPORT.md,AUTHORS.md,DISCUSSION.md,GOVERNANCE.md. - NEWELL branding across demo and docs: neon-green brutalist styles, OG images, social meta, favicon suite.
- Playwright CI smoke test for demo deployment.
- Dependabot auto-merge workflow for dependency updates.
- Version bump
0.6.1→0.7.0. Licenseclassifier dropped frompyproject.toml(PEP 639 —license = "MIT"in[project]is canonical).- Demo refreshes with NEWELL v3 neon-border per-letter favicon design.
- README: hero banner, terminal screenshot, live Pyodide demo link at top.
- CI: demo-smoke test now required; bump-badge workflow auto-updates static release badge.
- Demo font CDN switched from Fontsource to Google Fonts (Fontsource blocked by ORB).
- Cosmos address rendering and repair trace display in demo.
- FUNDING.yml
buy_me_a_coffeekey fixed to spec.
v0.6.1-pypi — 2026-07-19
- First PyPI release.
pip install crypto-key-classifiernow works for anyone, no source clone required. - GitHub Actions release workflow (
.github/workflows/release.yml) publishes to PyPI automatically on signedv*tag push. Uses OIDC trusted publishing — no API tokens stored in repo secrets. classifiersand[project.urls]populated inpyproject.tomlso PyPI's project page shows topics, license, Python versions, and links to repo / changelog / issues.- CI workflow (
.github/workflows/ci.yml) committed. Matrix across Python 3.10 / 3.11 / 3.12 on every push and PR; Ruff + Pytest gating, Pyright advisory.
- README install section: PyPI is now the primary path; source clone moved under "Development install".
- Version bump
0.6.0→0.6.1.
v0.6.0-stranger-fixes — 2026-07-19
--chainsnow accepts case-insensitive chain codes. README documented--chains btc,eth,sol(lowercase), but the pipeline filter required uppercase (BTC,ETH,SOL), so copy-pasting from the README produced "No matches found" on valid keys. Codes are now upper-cased before the whitelist is built.--jsonnow emits a single JSON array wrapping all results. Previously each input produced a separate JSON object (concatenated), so the documentedclassify-key --json addr.txt | jq '.[] | .best_guess'pipeline failed withjqexit 5 ("Cannot index string with string"). Single-input output is now a one-element array for consistency.--filewith a missing or unreadable path now prints a one-line error to stderr and exits 2. Previously raised an uncaughtFileNotFoundErrortraceback.- Long inputs (e.g. paste-corrupted keys with thousands of trailing
characters) no longer dump the entire blob into the
INPUT:echo line. Inputs longer than 80 chars are truncated toprefix…suffixafter masking, so the recognizable head and tail stay visible. --helpdescription: "aggressive recovering" → "aggressive recovery".
render_json_array(items, mask_private_keys=...)inckc.reporterfor batch JSON emission.truncate_for_display(s, max_len=80)helper, used by rich and terse renderers.- 10 regression tests covering the five stranger-test bugs.
Discovered via a fresh-clone stranger install + adversarial CLI exercise
on 2026-07-19. Two of the five bugs (--chains case sensitivity, --json
array shape) broke the README's own examples on first use. Full report in
the session log; test scenarios reproduced in tests/test_cli.py and
tests/test_reporter.py.
v0.5.0-signature — 2026-07-17
__signature__runtime constant inckc.__init__— exports the stringjn/crypto-key-classifier@0.5.0so any consumer can verify authorship at runtime:python -c "import ckc; print(ckc.__signature__)".SIGNATURE.mdat repo root documenting the three-layer code-signature pattern (style tells,__signature__, PGP-signed commits).- Headline-first imperative docstrings across
pipeline.pyandcli.py(Layer 1 style tell).
- Version bump
0.4.0→0.5.0. The signature work is structural, not behavior-changing.
--helpno longer crashes onargparsebare-%interpolation (escaped as%%in help string). Two regression tests added to prevent recurrence. (b79e998,f70ef12)
v0.4.0-hardened — 2026-07-12
- Hypothesis property/fuzz test suite under
tests/fuzz/. - Per-validator property tests: whitespace recovery + sanity for MVP chains (BTC/EVM/SOL/Cosmos), long-tail validators (TRX/XLM/DOT/XMR), BIP-39 mnemonic generation + whitespace/case recovery.
- Aggregate fuzz recovery-rate test asserts a minimum acceptable recovery floor across all chains.
- Preprocessor now preserves internal whitespace for mnemonic inputs (was over-aggressively collapsing spaces between words, breaking Levenshtein repair).
v0.3.0-mnemonic — 2026-07-12
mnemonicvalidator — BIP-39 (12/15/18/21/24 words) and Electrum (12/13 words) with wordlist integrity check.- BIP-39 English wordlist bundled (
src/ckc/data/). - Levenshtein distance helper (
src/ckc/repairs.py) used to suggest corrections for typo'd mnemonic words. - End-to-end mnemonic tests; reporter masking correctly hides seed phrases by default.
v0.2.0-long-tail — 2026-07-12
- 12 additional chain validators: Tron, Ripple, Algorand, Tezos, Stellar, Polkadot (DOT/KSM), TON, Monero, Cardano, Sui/Aptos, Near, Kaspa.
- Long-tail crypto helpers: CRC16-XMODEM, Blake2b-512, SHA512/256, Monero block-encoded base58.
- Extended wallet compatibility database to cover new chains.
- Pipeline now exposes per-validator
chain_codesso the--chainswhitelist works for family validators (BTC/EVM/Cosmos/DOT).
v0.1.0-mvp — 2026-07-12
- Project scaffold (
pyproject.toml,src/ckc/layout, base58/pycryptodome deps). - Stage 1 preprocessor: whitespace normalization, prefix stripping (
0x), case variants. - Stage 2-4 repair primitives: OCR substitution, encoding variants (hex/base58/base64), length fixups.
- Validator protocol + shared crypto helpers (Keccak-256, base58check, bech32 reference impl).
- Four MVP validators:
- BTC family — BTC/LTC/DOGE/BCH via prefix byte, WIF private keys, legacy/segwit/bech32 addresses.
- EVM — ETH + 10 L2s (Polygon, Arbitrum, Base, Optimism, BSC, Avalanche, Gnosis, Linea, Scroll, Zora) with EIP-55 checksum and cross-chain address enumeration.
- Solana — ed25519 base58, 32-byte pubkey / 64-byte secret key.
- Cosmos — 20-chain IBC family with the headline HRP-swap cross-chain re-encoding.
- Pipeline orchestrator with ranked match output + short-circuit on valid checksum.
- Reporter: rich / terse / JSON output modes, default private-key masking.
- CLI entry point (
classify-key) supporting stdin,--file, batch, and all output modes. - Wallet compatibility database seeded for the four MVP families.
- End-to-end smoke test suite.