Skip to content

Unspaghettit

v0.8.0 Bugfix

This release fixes issues for SREs watching stability and regressions.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Summary

AI summary

Fixed false‑positive gap reports in get_spec_gaps and added detection for inert emittedEvents declarations.

Changes in this release

Feature Medium

Adds `get_digest` tool exposing plain-language MCP behavior summary at various scopes and detail levels.

Adds `get_digest` tool exposing plain-language MCP behavior summary at various scopes and detail levels.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Medium

Adds inclusive comparison operators `>=` (`greater_or_equal`) and `<=` (`lower_or_equal`) for rules, invariants, and scenario assertions.

Adds inclusive comparison operators `>=` (`greater_or_equal`) and `<=` (`lower_or_equal`) for rules, invariants, and scenario assertions.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

Introduces new `get_spec_gaps` recommended gap detecting inert declared emitted events.

Introduces new `get_spec_gaps` recommended gap detecting inert declared emitted events.

Source: llm_adapter@2026-07-15

Confidence: high

Bugfix Medium

Fixes `get_spec_gaps` false-positive "no effects" gap for actions with rule-carried or onBlockedEffects effects.

Fixes `get_spec_gaps` false-positive "no effects" gap for actions with rule-carried or onBlockedEffects effects.

Source: llm_adapter@2026-07-15

Confidence: high

Full changelog

Read the model in plain language, and compare against thresholds honestly: any scope of the behavior model now projects to a "what happens here" summary over MCP, and rules gained inclusive >= / <= comparisons.

Added

  • get_digest: the plain-language digest is now an MCP tool. The "what happens here" summary the dashboard renders at the top of its inspector — the things you can do here with their guards, the guardrails that always hold, and where you can navigate next — was previously dashboard-only. get_digest exposes the same projection to an agent for any scope: projectId (one clickable line per feature), featureId (a whole feature), +surfaceId (one surface), or +surfaceId+actionId (a single action). detailLevel gates depth (glance | standard | full), and format returns either the structured DigestSpec (each line carries the id of the model element it was derived from, so a caller can jump straight to it) or serialized Markdown ready to paste into a pull request or README; hasContent is false when the scope has no behavior to summarize. The prose is derived deterministically from the model — each action's intent, its block-rule reasons as guards, its effects and emitted events, invariant messages, transition labels — never LLM-generated, so it can never describe behavior that is not in the spec. Thin orchestration over the existing digest projector and Markdown exporter, so the MCP surface and the dashboard always describe behavior identically.
  • Inclusive comparison operators >= and <= (greater_or_equal / lower_or_equal). Rules, invariants, and scenario assertions can now say "at least" / "at most" directly instead of forcing a strict greater_than / lower_than with an off-by-one literal like greater_than 19 to mean >= 20 — a trick that made specs lie slightly about intent. Wired end to end: the operator union and labels, the condition evaluator (numeric and ISO-date), the scenario assertion enum, scenario test codegen (toBeGreaterThanOrEqual / toBeLessThanOrEqual), the rule and scenario MCP tools, and the operations reference. UI operator dropdowns pick them up automatically.

Changed

  • get_spec_gaps stops crying wolf, and catches an inert declaration it used to miss. The "no effects" gap no longer fires on an action whose behavior lives entirely in rule-carried effects (every Rule has a required effect) or in onBlockedEffects — correct actions were being flagged as incomplete. In exchange it gains an honest new recommended gap: an action that declares emittedEvents which no emit_event effect actually fires, so the declaration is inert at runtime (no cascade or triggeredByEvent handler runs). The operations resource now also documents the evaluation semantics the diagnostics assume (sequential effects, derived recompute after each, surface-rules-before-action-rules, block suppression, post-cascade assertions).

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Unspaghettit

Get notified when new releases ship.

Sign up free

About Unspaghettit

All releases →

Related context

Beta — feedback welcome: [email protected]