Skip to content

πŸ¦‹ New version release - #10

Merged
brentrager merged 1 commit into
mainfrom
changeset-release/main
Aug 20, 2026
Merged

brentrager merged 1 commit into
mainfrom
changeset-release/main

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@smooai/audit@0.3.0

Minor Changes

  • a6a0293: Ship chain verification in all five languages, and prove it with corrupted-chain
    corpus vectors.

    verifyChain β€” the function that actually DETECTS a broken hash chain β€” existed
    only in TypeScript. Python carried a docstring describing how one would verify;
    Rust, Go, and .NET had nothing. A service in four of five languages could seal a
    chain it could never audit, which makes "tamper-evident" a claim rather than a
    capability.

    • New: verify_chain (Python, Rust), VerifyChain (Go), HashChain.Verify
      (.NET). All five return the same verdict shape: ok, brokenAt, and a shared
      failure code β€” hash_previous_mismatch (the link is wrong) or
      hash_current_mismatch (the event body was edited after sealing).
    • verifyChain gains an optional genesisPreviousHash, so a slice continuing an
      existing chain can be verified at all. Without it, only a first-of-day chain
      was verifiable. TypeScript additionally gains a code field alongside the
      existing human-readable reason (additive; reason is unchanged).
    • spec/parity-corpus.json gains chainFixtures: 11 real chains, sealed by the
      builder and then genuinely tampered with, each with the verdict every language
      must return. All five suites load them. The corpus previously proved sealing
      only, which is what let the asymmetry hide.
    • One fixture asserts the honest limit: deleting events from the TAIL of a chain
      still verifies. Replay cannot see it; catching it needs an external anchor.

@brentrager
brentrager merged commit 156422d into main Aug 20, 2026
brentrager pushed a commit that referenced this pull request Aug 20, 2026
The new format:check gate immediately caught its own motivating case: release
#10 appended a changesets-generated 0.3.0 entry to CHANGELOG.md, and that
output is not oxfmt-clean. Exactly what the `pnpm run version` change in this
PR prevents from recurring β€” this commit clears the one already on main.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0152bbE1veqfG1SVJdyLCBxC
brentrager added a commit that referenced this pull request Aug 20, 2026
…tead (#11)

* Stop the release job formatting its own tree, and gate formatting instead

The 0.2.1 release published to npm and PyPI and then FAILED on crates.io:

    error: 1 files in the working directory contain changes that were not
    yet committed into git: rust/audit/Cargo.toml

Cause: release.yml ran `pnpm format` β€” WRITE mode β€” as a step, and nothing
committed the result. main was not format-clean, so the formatter dirtied the
tree, and `cargo publish` refused. That is the only thing `--allow-dirty` was
ever masking, and it was masking it blindly: the flag would have shipped
whatever the formatter happened to change.

Because that job aborted, the Go tag and the NuGet push never ran either, so
0.2.1 exists on npm + PyPI only. The next release restores lockstep across all
five; nothing is published by hand here.

- release.yml formats nothing. It runs `pnpm format:check`.
- pr-checks.yml gains the same gate β€” the repo had NO format check at all,
  which is how main drifted out of format in the first place.
- New `format:check` (oxfmt --check + ruff format --check + the existing
  rust/go check scripts) and `python:format-check`.
- The repo is formatted once, so the gate is green from the start.
- `pnpm run version` now ends with `pnpm format`. Verified necessary, not
  decorative: a changesets-generated CHANGELOG.md is NOT oxfmt-clean, so
  format:check would have redded every release PR β€” the same self-inflicted
  break in a new place. Simulated the full lifecycle (`changeset version` ->
  sync -> format) and confirmed both format:check and version:check pass on
  the resulting tree at 0.3.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0152bbE1veqfG1SVJdyLCBxC

* Format the 0.3.0 CHANGELOG entry the release wrote unformatted

The new format:check gate immediately caught its own motivating case: release
#10 appended a changesets-generated 0.3.0 entry to CHANGELOG.md, and that
output is not oxfmt-clean. Exactly what the `pnpm run version` change in this
PR prevents from recurring β€” this commit clears the one already on main.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0152bbE1veqfG1SVJdyLCBxC

---------

Co-authored-by: Brent <brent@smoo.ai>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant