Skip to content

chore(deps): bump pulseengine/rivet from 0.40.0 to 0.41.0 - #312

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/pulseengine/rivet-0.41.0
Closed

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/pulseengine/rivet-0.41.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Bumps pulseengine/rivet from 0.40.0 to 0.41.0.

Release notes

Sourced from pulseengine/rivet's releases.

Rivet v0.41.0

Release note — v0.41.0

7 artifact(s) in scope: 7 delivered, 0 withheld.

Functionalities provided

requirement

  • REQ-346 (verified) — serde_yaml is unmaintained and reads every artifact in every PulseEngine repo — the parser under the assessor evidence chain has no upstream (#930)
  • REQ-391 (verified) — Kani Proofs dies with exit 143 before any proof runs; find and fix the cause instead of merging past it (#839)
  • REQ-400 (verified) — the MCP validate tool and the serve diagnostics give a different verdict than rivet validate on the same project (#956 item 3 and lower tier)
  • REQ-401 (verified) — documented behaviour the code does not have, remaining items: link-type restrictions, ignored export flags, non-recursive document scanning, and the vendoring claim for bridges (#958 items 1-4)
  • REQ-402 (verified) — wasmtime 48.0.3 (rivet-core's wasm feature) is affected by RUSTSEC-2026-0321 to RUSTSEC-2026-0327, and no required check could catch it
  • REQ-403 (verified) — the release's test evidence cannot be built: the pinned spar v0.10.0 doesn't build spar-wasm for wasm32-wasip2 (#1028)
  • REQ-404 (verified) — rivet verify promotes on a verifies link from an artifact that is not itself verified (#1037)

Limitations in relation to the committed scope

None — every artifact committed to v0.41.0 is release-ready.

Result of verification measures

Each delivered artifact is judged by the traceability rules its schema declares for its type. A verifies link or source marker is evidence for any type.

Every delivered artifact carries evidence.

  • REQ-346 — 0 link(s), 7 source marker(s); requirement-coverage exempt, requirement-verification met
  • REQ-391 — 0 link(s), 1 source marker(s); requirement-coverage exempt, requirement-verification met
  • REQ-400 — 0 link(s), 13 source marker(s); requirement-coverage exempt, requirement-verification met
  • REQ-401 — 0 link(s), 10 source marker(s); requirement-coverage exempt, requirement-verification met
  • REQ-402 — 0 link(s), 1 source marker(s); requirement-coverage exempt, requirement-verification met
  • REQ-403 — 0 link(s), 1 source marker(s); requirement-coverage exempt, requirement-verification met
  • REQ-404 — 0 link(s), 3 source marker(s); requirement-coverage exempt, requirement-verification met

Approval

0 of 7 delivered artifact(s) carry a reviewed-by record.

Changes since v0.40.0

  • c15754a3 chore(release): v0.41.0 (#1092) — refs #1092
  • 555bd59f ci: nightly mutation sweep as 64 rivet-core shards plus 16 rivet-yaml shards that can finish (#1083) — refs #1083
  • b24baa68 build(deps): wasmtime 48.0.6 clears RUSTSEC-2026-0353..0364 (#1091) — refs #1091
  • 734cad01 feat(yaml)!: rivet owns its YAML parser and emitter; serde_yaml removed (REQ-346) (#1085) — refs #1085
  • 6cd75d3d plan(v0.41): REQ-400 verified — MCP validate parity and #956's lower tier shipped with tests (#1065) — refs #956, #1065
  • cd55f4c7 refactor(render): delete the drifted render/components.rs fork (REQ-400, #956 lower tier) (#1064) — refs #956, #1064
  • 85cfc4c9 fix(export): the HTML export carries the dashboard's static sections; doc-linkage source nodes stop linking to non-documents (REQ-400, #956) (#1062) — refs #956, #1062
  • 43d250eb test(json): validate --format json outputs against their schemas in full; fix the stale coverage contract (REQ-400, #956) (#1061) — refs #956, #1061
  • 223f66c3 fix(snapshot): record an empty scope as null, not 100% — snapshot format v2; version 0.41.0 (REQ-400) (#1060) — refs #1060

... (truncated)

Changelog

Sourced from pulseengine/rivet's changelog.

[0.41.0] - 2026-10-15

v0.41.0 is about owning what rivet reads and proving what it claims. Every artifact rivet loads used to pass through serde_yaml, an archived crate whose unmaintained C port failed the advisory gate on every pull request; rivet now reads and writes YAML with its own parser and emitter, judged against the official yaml-test-suite.

  • Its own YAML. The lossless CST that already backed editing now feeds a serde deserializer and a libyaml-compatible emitter. Before serde_yaml was removed the two agreed byte for byte on every YAML file and docs block in this repository; after, the pinned yaml-test-suite is the oracle in CI: 402 cases, none read silently wrong. Tags are refused rather than guessed, and anchors expand under a copy cap.
  • Surfaces that agree. The static export, MCP, snapshots and the coverage JSON now give the same answer as rivet validate (REQ-400), and link-type source and target restrictions are enforced instead of documented (REQ-401).
  • Gates that can fail. A pull request that adds a traceability finding on implemented work now fails; a link with an empty target fails validation on both paths; Kani runs only the proofs that verify instead of dying before any ran; and rivet verify --dry-run shows the evidence before it is written.
  • Supply chain. wasmtime and rustls advisories are cleared, and the advisory gate now sees dependencies behind features.

Added

  • musl Linux release assets (#980) — rivet-<tag>-x86_64-unknown-linux-musl.tar.gz and the aarch64 equivalent now ship alongside the gnu archives, built with cross and verified statically linked at release time. The gnu assets still carry a glibc floor that excludes Alpine, distroless-static, and older LTS distros; the musl archives pick up those targets without regressing anyone on the gnu triple. varve resolves a Linux host to the gnu triple pulseengine/varve#175 ingests for its Linux platform keys.
  • corrective: true on a requirement (dev schema 0.5.0) — a requirement that fixes a defect or closes a gap is satisfied by its fix, not by a feature or design decision, so it is exempt from requirement-coverage (through the existing exempt-when-field, #848). It still needs verification.
  • CI traceability ratchet (part of REQ-389, which continues in the next release) — a pull request now fails when it adds a traceability-rule warning or error on an artifact at implemented, verified, accepted or released that its base did not have, for example a requirement promoted to implemented with no verifying test. The existing backlog does not fail; only what a change adds does. Both trees are judged by the pull request's own binary (tools/ci/traceability-ratchet.py).
  • rivet verify --dry-run (REQ-404, #1037) — reports the evidence and whether the artifact would be advanced, without writing; a refusal still exits non-zero, so a traceability sweep can preview its effect.

Security

  • serde_yaml and unsafe-libyaml are removed (REQ-346) — rivet now

... (truncated)

Commits
  • c15754a chore(release): v0.41.0 (#1092)
  • 555bd59 ci: nightly mutation sweep as 64 rivet-core shards plus 16 rivet-yaml shards ...
  • 7b8dc5f ci(release): publish musl Linux assets beside the gnu archives (#1086)
  • 28f3146 fix(cli): rivet add --field coerces mapping/sequence values; validate catches...
  • b24baa6 build(deps): wasmtime 48.0.6 clears RUSTSEC-2026-0353..0364 (#1091)
  • 27c8c33 test(yaml): the lexer's document-end marker arm is tested (#1082)
  • 9cd0858 build(deps): rustls 0.23.46 clears RUSTSEC-2026-0346..0349 (#1089)
  • 734cad0 feat(yaml)!: rivet owns its YAML parser and emitter; serde_yaml removed (REQ-...
  • 2c83276 fuzz: a null HIR link target is a finding only when serde accepts the input (...
  • 81dfc30 fix(yaml): an empty link target fails validate on both paths, not only --dire...
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [pulseengine/rivet](https://github.com/pulseengine/rivet) from 0.40.0 to 0.41.0.
- [Release notes](https://github.com/pulseengine/rivet/releases)
- [Changelog](https://github.com/pulseengine/rivet/blob/main/CHANGELOG.md)
- [Commits](pulseengine/rivet@v0.40.0...v0.41.0)

---
updated-dependencies:
- dependency-name: pulseengine/rivet
  dependency-version: 0.41.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added the dependencies Dependency updates label Oct 20, 2026
@temper-pulseengine

Copy link
Copy Markdown
Contributor

temper did not enable auto-merge: breaking update pulseengine/rivet 0.40.0 -> 0.41.0 needs a human review.

avrabe added a commit that referenced this pull request Oct 21, 2026
#284's compliance job has failed every run since 2026-09-08. The cause in
the first failing run's log (run 34174312781, job 101900580327) is not what
the issue and the earlier PR body claimed:

    thread 'main' panicked at rivet-core/src/export.rs:1700:45:
    byte index 26 is not a char boundary; it is inside '—' (bytes 24..27) of
    `Lightweight DSSE verify — extract dsse off the 179-crate wsc tree`

rivet 0.3.0 byte-slices a title to truncate it during HTML export, and
artifacts/dev/features.yaml:669 gained an em dash. The step that dies is
**Export HTML report** — Install Rivet succeeded ("rivet 0.3.0 (ec747593
HEAD 2026-03-22)") and Validate passed, because 0.3.0 does not enforce the
status enum. So the correlation with dependabot's 2026-09-01 action bump
(0.32 -> 0.35) was spurious: the trigger was a new artifact title, landing
on a binary frozen since March.

`rivet-version:` is the rivet BINARY the compliance action downloads, and it
sat at v0.3.0 while the action tag advanced to v0.40.0. Both pins now move
to v0.41.0, which supersedes #312. Verified locally against this store:
`rivet 0.41.0 export --format html` -> "Exported 553 pages", exit 0, no
panic. The input cannot simply be dropped so dependabot moves both together:
its default is "source", which runs `cargo build --release -p rivet-cli` in
the CALLER's workspace — correct inside rivet, fatal here.

The pin froze for six months because nothing watched it, so the second half
of this commit is a watcher. `claim-check` gains a `captures-agree` evidence
kind — N hand-kept copies of one value, each the first capture group of a
pattern, must be equal — and claims.yaml binds it to the four pin sites.
Three negative controls, each run and recorded:

  * drifted pins (action v0.40.0 vs binary v0.39.0, this branch's state
    before the fix) -> RED, naming both values and both files, exit 1;
  * one copy deleted -> RED via `min-captures` (3 < 4), so the gate cannot
    go quietly vacuous when the string it watches disappears;
  * glob matching no files -> RED ("measures nothing").

Positive control: all four sites at v0.41.0 -> 5/5 claims hold, exit 0. It
runs in Claim Check, the only PR workflow with no paths filter. Every future
dependabot rivet bump will now go red there until `rivet-version:` is edited
to match. That is the intent.

What this does NOT fix, stated plainly:

  * The compliance job will still be red, now at Validate instead of Export.
    `rivet validate` exits 1 on this store — 22 errors locally, and 31 in CI
    because `../synth` cannot exist in a single-repo checkout, so cross-ref
    checking is skipped there and 9 synth links are counted as broken. The
    action's run_validate.sh (rivet #953) propagates that exit code. Closing
    those 22 is separate work.
  * No release was ever blocked by this. `build-and-release` needs only
    `build-native-cli`; nothing in release.yml depends on `build-compliance`.
    That is why v0.11.0 shipped from a red release run. What #284 cost us is
    the compliance *evidence*, not the artifacts.
  * This gate, like every other check here, is advisory: main's
    `required_status_checks.contexts` is empty and the repo has no rulesets,
    so nothing stops a merge over a red board.

Also drops `.claude/settings.json`: enabling a plugin for the repo is a real
change but not this PR's, and an unrelated file riding along inside a CI fix
is how REQ-27's 1,721 insertions landed under a 13-line commit title.

Refs #284

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aR3Md1h46K9wAUWMQiESH
avrabe added a commit that referenced this pull request Oct 21, 2026
…ICAL (REQ-31), lands #307

Lands #307 and REQ-31 together, as a merge commit so each of the six commits
keeps its own message. Squashing a stack is what buried #301's security fix
inside #305 and REQ-27's 1,721 insertions under #273's 13-line title.

## The 9.3 CRITICAL is retired, not excepted

`cargo audit` measured today with a freshly fetched advisory database and the
workflow's own ignore list:

    main                                   31 vulnerabilities, exit 1
    wasmtime 47.0.4 (the MSRV-1.94 ceiling) 18 vulnerabilities, exit 1
    this merge                               0,                 exit 0

wasmtime alone was 20 of the 31, quinn-proto 5, rustls 4. Eight advisories
stood against 47.0.4 — RUSTSEC-2026-0327 (9.3 CRITICAL) plus -0353, -0354,
-0356, -0357, -0361, -0378 and -0316, most published mid-cycle — all fixed only
in 48.0.4+/49.0.x. Staying inside MSRV 1.94 could clear nine of 31 and no more,
which is why the toolchain bump stopped being deferrable cleanup.

NOTE: the first commit's message says "cargo audit goes 12 -> 3". That was a
week-old DB snapshot and is wrong in both directions; the table above is the
measurement. Corrected on #284 and in the v0.12.0 CHANGELOG.

Shipping under a documented exception was available — wasmtime is optional and
not in `default` — and was declined. The two `--ignore` lines are deleted
rather than re-justified, and `Cargo Audit` is green in CI for the first time
this cycle.

Also cleared: RUSTSEC-2026-0382 (rustls-webpki) and -0381 (webpki-roots), both
certificate-verification, both published within 48 hours of the release, both
landing on step 1 of `PinnedCertVerifier::verify_server_cert`.

## What re-qualifying the gates actually found

The scope said "record each masked gate's status before/after". The before was
the finding: measured from pre-mask exit codes in the run logs rather than API
conclusions, **four of five Kani modules were masked and seven harnesses were
failing behind a green board** — while `formal-verification.yml`'s own summary
comment claimed three ran unmasked, contradicting the matrix three lines below
it. That false claim had already propagated into the rivet store and the
v0.12.0 CHANGELOG. All three corrected; `claims.yaml` gains
`KANI-MASK-RATCHET` so the masked count can shrink but not grow.

Then the bump turned `Witness MC/DC gate` red, and reading the gap rows instead
of re-pinning the number found that on macOS/1.96.1 **the gate measured nothing
and reported OK** — the `^src/` scope collapsed to zero decisions, so the
"below baseline" branch printed a notice and exited 0. Empty scope is now a
hard error. The +2 on linux is `wasm_module/mod.rs:455` becoming visible, not
lost coverage: witness's own suggested row is infeasible for a short-circuit
`&&`. Baseline recalibrated 3 -> 4 with all four host/toolchain measurements
recorded, and a 6-case verdict table proves a further regression still trips
it, so the recalibration did not buy green by disarming the gate (#318).

Fixing that gate then exposed `.gitignore`'s `*.sh`, which had silently
dropped the new gate script — `git add -A` skipped it without a word and CI
failed with exit 127. `bash foo.sh || true` would have been green. The
vacuous-oracle gate now asserts every `bash <path>.sh` a workflow runs is a
tracked file, and `rust.yml` finally lists `verification/**`, so the gate is no
longer scoped to everything except itself.

## Re-qualification: before and after, from the logs

Pre-mask exit codes and harness counts, read from the run logs because the API
reports a masked step as success. Before: main @74665d9b, run 38971394138, rustc
1.94.0. After: this branch @35b8316c, run 39607181505, rustc 1.96.1.

    gate                 before (1.94.0)          after (1.96.1)
    Kani varint          5/5, exit 0  UNMASKED    5/5, exit 0
    Kani merkle          2 ok / 3 fail of 5       2 / 3 of 5   identical
    Kani dsse            0 / 1                    0 / 1        identical
    Kani format          2 / 2 of 4               2 / 2 of 4   identical
    Kani wasm_module     0 / 1                    0 / 1        identical
    Verus (both steps)   exit 1                   exit 1       identical
    Rocq                 exit 1                   exit 1       identical
    Witness MC/DC        2 gaps, baseline 3       4 gaps, baseline 4
                         UNMASKED                 3 decisions in scope

**The bump changed nothing behind any mask.** Every masked module carries the
same pass/fail counts on both toolchains, so the seven failing harnesses
predate it and none is new. That is the result the masked-gate accounting
existed to produce — "green before, green after" could not have shown it.

The calibration comment in witness-gate.sh lists two in-scope decisions for
linux/1.96.1; the log counts three. The third is `varint.rs:29`, FullMcdc,
0 gaps — the count and the verdict are unaffected. Recorded here rather than
fixed by another push, which would have restarted the full board.

## Also

`RUST_VERSION: "1.90.0"` deleted from three workflows — nothing ever read it.
`examples/wasmtime-loader/Cargo.lock` is now committed (#274), without which
raising the example to wasmtime 49.0.4 would not stay fixed.

**MSRV for consumers: the `runtime` feature now requires rustc >= 1.96.**

Closes #274 · Implements REQ-31 · Refs #284, #302, #312, #316, #318

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aR3Md1h46K9wAUWMQiESH
@dependabot @github

dependabot Bot commented on behalf of github Oct 21, 2026

Copy link
Copy Markdown
Contributor Author

Looks like pulseengine/rivet is up-to-date now, so this is no longer needed.

@dependabot dependabot Bot closed this Oct 21, 2026
@dependabot
dependabot Bot deleted the dependabot/github_actions/pulseengine/rivet-0.41.0 branch October 21, 2026 22:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants