This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Summary
AI summaryFixed invariant condition validation bug that caused entire features to disappear on load.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Bugfix | Medium |
Prevents condition-less invariant from causing entire feature loss on load. Prevents condition-less invariant from causing entire feature loss on load. Source: llm_adapter@2026-07-15 Confidence: low |
— |
| Bugfix | Medium |
Validator rejects invariants without a condition during write. Validator rejects invariants without a condition during write. Source: granite4.1:30b@2026-07-15-audit Confidence: low |
— |
| Bugfix | Medium |
Normalizer tolerates missing or malformed invariant conditions on load. Normalizer tolerates missing or malformed invariant conditions on load. Source: granite4.1:30b@2026-07-15-audit Confidence: low |
— |
| Bugfix | Low |
Collapses duplicate navigation entries in digest's "Where you can go" section. Collapses duplicate navigation entries in digest's "Where you can go" section. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Bugfix | Low |
Loader warns to stderr when skipping an unreadable snapshot. Loader warns to stderr when skipping an unreadable snapshot. Source: granite4.1:30b@2026-07-15-audit Confidence: low |
— |
Full changelog
Two engine fixes found by dogfooding through the MCP. No breaking changes.
Fixed
- A condition-less invariant can no longer make a whole feature vanish.
apply_batch's invariant ops accepted an invariant with a description but noconditionand wrote it to disk (the standalone tools already required one). On the next cold load the expression normalizer threw and the loader silently dropped the ENTIRE feature:get_featurereturned "not found" and it disappeared fromlist_featureswith no error, unrecoverable by restart. Closed three ways: the validator rejects a condition-less invariant at write time (so the batch path fails fast), the normalizer tolerates a missing or malformed condition instead of crashing (so an already-poisoned snapshot loads and becomes fixable), and the loader warns to stderr when it skips an unreadable snapshot instead of dropping a file in silence. - The digest's "Where you can go" no longer duplicates or mislabels navigation. A surface reachable more than one way rendered one bullet per route, and edges whose target did not resolve to a surface rendered as a bare "... to another surface".
get_digest's navigation section now collapses every route from a surface to a given destination into one named entry, and drops any edge whose target is not a surface in the feature.
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
About Unspaghettit
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]