# pwgen — Changelog

## v1.0.0 — 2026-06-25

Initial release. Twelfth tool in the "productivity-boost" series — the
"quick win" of the queue.

### Purpose

A small, predictable password / passphrase / PIN generator that pulls
randomness from OsRng. Made to compose with the rest of the suite:
pipe into `notify`, save into a password manager, or feed to a config
generator.

### Subcommands

```
pwgen gen     [--length N] [--count K] [--no-upper] [--no-digits] [--no-symbols] [--no-ambiguous]
pwgen phrase  [--words N]  [--separator S] [--count K]
pwgen pin     [--length N] [--count K]
pwgen wifi    [--count K]
```

### Defaults

- `gen`    — 24 chars, all classes, ambiguous chars kept.
- `phrase` — 6 words, dash-separated.
- `pin`    — 6 digits.
- `wifi`   — 63 chars (max WPA2-PSK; safe printable alphabet).

### Build

- Library crate + thin CLI binary.
- 5 unit + 12 integration tests = 17 tests, all green.
- Zero compiler warnings.
- Randomness via `rand::rngs::OsRng` — no `thread_rng` fallback.
- Embedded 256-word list for `phrase` (one byte of entropy per word).

### Exit codes

```
0  ok
2  usage (clap)
3  runtime (length / count / words out of range)
```

### Deferred to v1.1

- BIP-39 mnemonic mode.
- Custom wordlist via `--wordlist <PATH>` (today: built-in 256-word list).
- Estimated entropy printout per generated password.
- `pwgen recover` from a leaked partial.
