From 2019cb6b2346ed8a6b2daa395d3bf48139f0ba05 Mon Sep 17 00:00:00 2001 From: Ralf Anton Beier Date: Tue, 28 Apr 2026 18:51:53 +0200 Subject: [PATCH 1/2] =?UTF-8?q?chore(release):=20v0.5.1=20=E2=80=94=20firs?= =?UTF-8?q?t-contact=20polish?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Workspace, vscode-rivet, and npm root package versions bumped to 0.5.1. Platform packages stay on the release-npm.yml override path (per the 0.5.0 convention). What's in 0.5.1 (post-0.5.0 dogfood polish): - docs(quickstart): rewrite for fresh-user clarity (#230). Two clean-room dogfood passes + three scenario-based passes surfaced six confusion points; all fixed. Wall-time wins: STPA bring-up 13min -> 36s; Polarion -> ASPICE overlay 7min -> 3.8min. - fix(aspice): seed validates clean after init (#233). Two real bugs in the shipped aspice preset (undeclared `allocated-from` link-type, missing stakeholder-req parent) — `rivet init --preset aspice && rivet validate` now returns PASS. - feat(mcp): discoverability (#231). New `rivet mcp --list-tools` and `rivet mcp --probe` flags (no JSON-RPC required to enumerate the tool catalog or smoke-test the server) plus a new ~1400-word `rivet docs mcp` topic covering wire format, handshake, tool catalog, and the response-envelope gotcha. Verified: cargo check, cargo clippy --workspace -- -D warnings, cargo test -p rivet-cli, `rivet init --preset aspice && rivet validate` returns PASS, `rivet docs mcp` prints the new topic. Trace: skip --- CHANGELOG.md | 95 +++++++++++++++++++++++++++++++++++++++ Cargo.lock | 6 +-- Cargo.toml | 2 +- npm/package.json | 2 +- vscode-rivet/package.json | 2 +- 5 files changed, 101 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97ba0d1..3bbda42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,101 @@ ## [Unreleased] +## [0.5.1] — 2026-04-28 + +Theme: post-0.5.0 first-contact polish. Three fresh-user dogfood passes +(plus three parallel scenario-based ones — safety engineer / STPA, +compliance lead / Polarion-import, AI integrator / MCP) surfaced two +real bugs and one big doc gap. All three are fixed here. + +### Fixed + +- **`rivet init --preset aspice` seed now validates clean** (#233). + Two bugs in the shipped aspice preset: the `common` schema registers + `allocated-to` with `inverse: allocated-from` but never declares + `allocated-from` as a forward token, so the seed's `SWARCH-001 -> + allocated-from -> SWREQ-001` link was rejected. And the seed's + `SYSREQ-001` had no `derives-from` target, so the + `sys2-derives-from-sys1` rule failed on the first + `rivet validate` post-init. Now: `aspice` declares `allocated-from` + as a forward link-type, and the seed grows a `STKHR-001` + stakeholder-req as the V-model root with `SYSREQ-001 -> derives-from + -> STKHR-001`. `rivet init --preset aspice && rivet validate` now + returns `Result: PASS (0 warnings)`. + +### Added + +- **`rivet mcp --list-tools` and `rivet mcp --probe`** (#231). Two + new flags for MCP discoverability — Scenario-C dogfood found that + AI integrators wiring rivet's MCP server into a custom client burned + ~30 minutes on JSON-RPC framing and writing throwaway requests just + to enumerate the tool catalog. + - `--list-tools` walks the registered tool router and prints the + catalog (15 tools today). Default output is a human table; + `--format json` emits the JSON-RPC `tools/list` payload exactly + as the wire server would. Does not start the server. + - `--probe` runs the in-process equivalent of + `tools/call rivet_list` (no args) against the current project and + prints the decoded `result.content[0].text` payload — same envelope + a real MCP client would observe — without spinning up stdio. + - Both reuse the same handlers the wire server dispatches to, so + output cannot drift from a real session. +- **`rivet docs mcp` embedded topic** (#231). New ~1400-word doc + covering: line-delimited JSON-RPC framing (NOT LSP-style + Content-Length), the 3-message handshake (`initialize` -> + `notifications/initialized` -> `tools/list`/`tools/call`), the + full 15-tool catalog with input-schema summaries, the + `result.content[0].text` envelope gotcha (tool results arrive as a + stringified JSON document, not a structured object), the + `rivet_reload`-after-mutation convention, and copy-pasteable + smoke-test recipes. + +### Changed + +- **Quickstart rewrite for fresh-user clarity** (#230). Two clean-room + dogfood passes plus three parallel scenario-based passes (safety + engineer / STPA, compliance / Polarion-import / ASPICE overlay, + AI integrator / MCP) surfaced six concrete issues that confuse a + real first-contact user, all fixed here. Highlights: + - New "What is rivet?" preamble (typed YAML + schema + graph + four + interfaces; DOORS/Polarion/Jira analogy) so readers don't have to + assemble the mental model by osmosis. + - Step 2 now branches on preset choice: for `dev`, the seed is a + placeholder (write your own in step 3); for `stpa`/`aspice`/etc., + the seed is a worked example in domain vocabulary — read it, + skip step 3, jump to step 4. + - Step 3's `rm artifacts/requirements.yaml` is gated to `dev` only + so non-`dev` seed files aren't accidentally nuked. + - Step 7's Python oracle uses the actual JSON key (`errors`, not + `error_count`); a real broken link now exits 1. + - Step 9 replaces the Mythos red-team scaffold reference (out of + scope for first contact) with "add a living document" using + markdown frontmatter + `{{stats}}` / `{{coverage}}` / + `[[REQ-001]]` embeds + an explicit `rivet serve` restart oracle. + - New "Existing-repo bring-up" appendix: explicit `rivet init` + non-destructiveness contract, complete copy-pasteable ASPICE + `sw-req` overlay (with `polarion_id` / `polarion_status` / `asil` + additions and the required `derived-from` link-field with + target-types verbatim from `rivet schema show`), and the + `sw-req -> system-req -> stakeholder-req` stub-parent chain + explained. + - New "Common gotchas" appendix G.1 - G.7: LSP overlay blindness, + overlay merge field-drop, forward/inverse link-type direction, + doc vs artifact refs, `imported-stub` honesty, lifecycle severity + scaling intent, `rivet schema show` preset locality. + - Wall-time wins (round 3 dogfood vs round 1): STPA bring-up went + from 13 min to 36 sec; Polarion -> ASPICE overlay went from 7 min + to 3.8 min. + +Workspace, vscode-rivet, and npm root package versions bumped to +0.5.1. Platform packages stay on the release-npm.yml override path. + +Verified: cargo check, cargo clippy --workspace -- -D warnings, +cargo test -p rivet-cli, `rivet init --preset aspice && rivet validate` +returns PASS, `rivet docs mcp` prints the new topic, +`rivet mcp --list-tools` produces a 15-tool catalog, +`rivet mcp --probe` returns artifacts. + ## [0.5.0] — 2026-04-27 Theme: oracle-gated agent pipelines + restored formal-method backstops + diff --git a/Cargo.lock b/Cargo.lock index ba93d0c..1c7bc23 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -972,7 +972,7 @@ dependencies = [ [[package]] name = "etch" -version = "0.5.0" +version = "0.5.1" dependencies = [ "petgraph 0.7.1", ] @@ -2698,7 +2698,7 @@ dependencies = [ [[package]] name = "rivet-cli" -version = "0.5.0" +version = "0.5.1" dependencies = [ "anyhow", "axum", @@ -2725,7 +2725,7 @@ dependencies = [ [[package]] name = "rivet-core" -version = "0.5.0" +version = "0.5.1" dependencies = [ "anyhow", "criterion", diff --git a/Cargo.toml b/Cargo.toml index 7bd5d2a..11fa386 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ ] [workspace.package] -version = "0.5.0" +version = "0.5.1" authors = ["PulseEngine "] edition = "2024" license = "Apache-2.0" diff --git a/npm/package.json b/npm/package.json index bf56e6e..19f41a4 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "@pulseengine/rivet", - "version": "0.5.0", + "version": "0.5.1", "description": "Rivet — SDLC traceability, validation, and MCP server for safety-critical systems (ISO 26262, DO-178C, ASPICE, STPA)", "main": "index.js", "bin": { diff --git a/vscode-rivet/package.json b/vscode-rivet/package.json index 81a4c08..e01aec2 100644 --- a/vscode-rivet/package.json +++ b/vscode-rivet/package.json @@ -3,7 +3,7 @@ "displayName": "Rivet SDLC", "description": "SDLC artifact traceability with live validation, hover info, and embedded dashboard", "publisher": "pulseengine", - "version": "0.5.0", + "version": "0.5.1", "license": "MIT", "repository": { "type": "git", From 47cb3acd48c88ce0a344a09ed28870cadbdc66e9 Mon Sep 17 00:00:00 2001 From: Ralf Anton Beier Date: Tue, 28 Apr 2026 19:21:27 +0200 Subject: [PATCH 2/2] chore(release): fix CHANGELOG ArtifactIdValidity false-positives PR #235's Docs Check failed because the 0.5.1 changelog mentioned aspice preset SEED artifact IDs (SWARCH-001, SWREQ-001, SYSREQ-001, STKHR-001) in prose. Those IDs live in the embedded preset string constant, not as artifacts in this repo's store, so the rivet docs check ArtifactIdValidity invariant correctly flagged them as broken references. Fix: replace the seed IDs with their artifact-type names (sw-arch-component, sw-req, system-req, stakeholder-req). Reads better as prose anyway; no information loss. Trace: skip --- CHANGELOG.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bbda42..4e03d09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,15 +17,15 @@ real bugs and one big doc gap. All three are fixed here. - **`rivet init --preset aspice` seed now validates clean** (#233). Two bugs in the shipped aspice preset: the `common` schema registers `allocated-to` with `inverse: allocated-from` but never declares - `allocated-from` as a forward token, so the seed's `SWARCH-001 -> - allocated-from -> SWREQ-001` link was rejected. And the seed's - `SYSREQ-001` had no `derives-from` target, so the + `allocated-from` as a forward token, so the seed's + `sw-arch-component -> allocated-from -> sw-req` link was rejected. + And the seed's `system-req` had no `derives-from` target, so the `sys2-derives-from-sys1` rule failed on the first `rivet validate` post-init. Now: `aspice` declares `allocated-from` - as a forward link-type, and the seed grows a `STKHR-001` - stakeholder-req as the V-model root with `SYSREQ-001 -> derives-from - -> STKHR-001`. `rivet init --preset aspice && rivet validate` now - returns `Result: PASS (0 warnings)`. + as a forward link-type, and the seed grows a `stakeholder-req` + V-model root with the `system-req -> derives-from -> stakeholder-req` + link wired up. `rivet init --preset aspice && rivet validate` + now returns `Result: PASS (0 warnings)`. ### Added