Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,58 @@

## [Unreleased]

## [0.22.2] - 2026-06-30

Theme: **Dogfooding hardening** — a focused patch from an internal bug-hunt of
rivet's own write/validate paths, plus a security-advisory bump. One P0
data-loss fix, three correctness fixes (each with a regression test proven to
fail without the fix), and a wasmtime security update.

### Fixed
- **`rivet modify --add-tag` / `--remove-tag` no longer corrupts a block-style
`tags:` list (data loss).** The new tag set renders as a flow list
(`tags: [a, b, c]`) and replaces the existing `tags:` field; the field-replace
path used a scalar-only extent helper that recognised only `|`/`>` block
scalars, so a block-style list —
```yaml
tags:
- core
- safety
```
had only its `tags:` key line rewritten, orphaning the `- item` children under
the new value. The file then failed to parse and **every** artifact in it
silently vanished from the loaded store (`rivet list` → 0 artifacts), though
`modify` reported success. The replace path now uses the same `field_block_end`
extent helper as the insert path (consuming block scalars, nested mappings, and
block lists); the scalar-only helper was deleted so it cannot be reintroduced.
Same class as #573 / #613. Found by dogfooding (#625). (REQ-034)
- **`rivet validate` no longer counts a self-satisfying link (`REQ-X → REQ-X`)
as closing a traceability rule (false PASS).** An author could pass
`validate --direct` (and the MCP `rivet_validate` tool, which shares the same
library path) by linking an artifact to itself, with zero real upstream trace.
`rivet coverage` already excluded self-links, so the two could give opposite
verdicts on the same project. `validate` now applies the same guards
(`l.target != id`, `bl.source != id`). (#627, REQ-004)
- **`rivet release status` no longer reports an empty release scope as
cuttable.** A scope with zero artifacts (a version nobody has assigned work to,
or — most commonly — a mistyped version) was vacuously cuttable: exit 0,
`"cuttable": true`. A `rivet release status vX.Y.Z || fail` CI gate therefore
greened on "ship a release containing nothing". An empty scope is now not
cuttable (exit non-zero). (#628, REQ-007)
- **`rivet add` routes new artifacts deterministically when a type spans more
than one source file.** Routing used `store.iter()` (HashMap order, seeded
per-process), so the destination file flipped run-to-run on identical input.
It now iterates in id-sorted order — the lowest-id artifact of the type decides
the file, every call. (#629, REQ-007)

### Security
- **Bumped `wasmtime` / `wasmtime-wasi` 44.0.3 → 45.0.3 for RUSTSEC-2026-0188**
(WASI hard links and renames bypass `wasmtime-wasi`'s `FilePerms` on the
destination path). rivet's only wasmtime user is the compose-witness component
runner (`rivet-core/src/wasm_runtime.rs`, `wasm` feature). The bump is
source-compatible — the WASI host code compiles unchanged and all
`wasm_runtime` tests pass. (#632, REQ-086)

## [0.22.1] - 2026-06-27

### Fixed
Expand Down
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ members = [
exclude = ["compose-witness"]

[workspace.package]
version = "0.22.1"
version = "0.22.2"
authors = ["PulseEngine <https://github.com/pulseengine>"]
edition = "2024"
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion vscode-rivet/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"displayName": "Rivet SDLC",
"description": "SDLC artifact traceability with live validation, hover info, and embedded dashboard",
"publisher": "pulseengine",
"version": "0.22.1",
"version": "0.22.2",
"license": "MIT",
"repository": {
"type": "git",
Expand Down
Loading