0.33.0
Added — prikk setup and prikk key: a first repository without inventing anything
Before this release a new user could not reach a sealed commit at all. It required two 32-byte
seeds invented by hand and a public key derived from one of them — and no command derived a public
key. There was no way to do it with prikk.
$ prikk setup ./my-repo
initialized Prikk repository at ./my-repo/.prikk
trusted maintainer key: maintainer
policy: required=1
export these before committing:
export PRIKK_AUTHOR_KEY_ID="author"
export PRIKK_AUTHOR_SEED="..."
export PRIKK_MAINTAINER_KEY_ID="maintainer"
export PRIKK_MAINTAINER_SEED="..."
note: at least one seed above is now in your terminal scrollback -- treat it as a secret
next steps:
prikk commit -m "<message>"
prikk seal --allow-no-audit # no audit trust policy is configured yet; see `prikk seal --help`Following that output word for word reaches a sealed, verified commit. Measured on a clean path,
the number of unfamiliar steps drops from eleven to five.
prikk setup [<path>] [--author-seed-out <path>] [--maintainer-seed-out <path>]— creates the
repository, generates both keys, registers the maintainer key, and prints what you need next. It
shows the trust decision it makes: registering a maintainer key is a trust act, and a one-shot
flow that performed it invisibly would teach you that the step is a formality.prikk key generate [--out <path>]— a fresh seed from the OS CSPRNG, with its public key and
the exact next commands.prikk key public --seed-env <NAME>— the public key for a seed you already hold.
How prikk handles secrets, stated because it is a deliberate limit
prikk never invents a location for key material, never reads one back, and never manages its
lifecycle. It has no keystore and will not gain one.
--outand--*-seed-outwrite a seed only to a path you name, mode0600, refusing to
overwrite an existing file and refusing any path inside.prikk/.- When you give an output path the seed is never printed — the printed
exportline reads
"$(cat <path>)", so the secret reaches neither your scrollback nor your shell history. Without a
path the seed is printed and prikk says so plainly. - A seed is never accepted as a command-line argument, only through an environment variable you
name./proc/<pid>/cmdlineis world-readable on Linux and shells record arguments in history. --outis refused on Windows, because prikk cannot set restrictive permissions there without
facilities it does not use. Useprikk key generatewithout a path and place the seed yourself.
Durable configuration for policy settings (PRIKK_ACTIVE_PATCH_LIMIT and the rest) is deliberately
not part of this — see RFC 135.
Changed — two error messages changed their classification prefix
Reported by an external front-end (stikk) matching on our error text: two refusals were reported
under the wrong error class, because each was built from whichever PrikkError variant happened to
be nearest the call site rather than one that describes the condition. Both refusals were already
correct; only the leading word was wrong, and a caller matching on it could reasonably conclude the
wrong thing about what to do next.
$ prikk commit --from-worktree --ref heads/other -m "x"
-error: lock conflict: active WAL is owned by heads/main; requested ref heads/other
+error: precondition not met: active WAL is owned by heads/main; requested ref heads/other
$ prikk commit --from-worktree -m "nothing changed"
-error: invalid name: worktree has no node-addressed changes to commit
+error: precondition not met: worktree has no node-addressed changes to commit
Neither was ever a lock (nothing is held, no other process is racing this one) or a name-validation
failure (no name is involved). Both are the caller asking for something the current state cannot
satisfy — waiting does not help, only changing the request does — the case prikk-error's new
Precondition variant (added non-breaking, since PrikkError is #[non_exhaustive]) now names
directly. Anything matching on the old lock conflict: or invalid name: prefix for either of these
two specific messages needs to match precondition not met: instead. No other error site, no exit
code, and no command's control flow changed.
Prebuilt binaries
Linux (aarch64/x86_64), Windows (x86_64), macOS (aarch64). Each archive contains the prikk binary, LICENSE, and a sibling .sha256
checksum plus .build-info.txt recording the exact toolchain and command used to build
it — reproduce with:
git checkout <tag> && cargo build -p prikk --release --target <triple> --lockedcargo install prikk remains the toolchain-based install path; these binaries are an
additional option, not a replacement.
macOS binaries are unsigned. Gatekeeper will warn on first run — right-click (or Control-click) the binary and choose Open, or clear the quarantine attribute directly with xattr -d com.apple.quarantine <path>. Notarization needs an Apple Developer identity and is a stated gap for a future increment, not an oversight.
Release authority — read before relying on this release
This release does not pass the DC-35 signer-authority audit, and does not claim to. The
committed release-signer set (release-signers.toml) is empty and fail-closed, so no release
currently satisfies that gate. A checksum published beside a binary on this page proves integrity of
transport, not authority of origin. Verify what you obtain by content, not by release authority —
see prikk verify and this project's
release-compatibility reference.