Skip to content

Unspaghettit

v0.11.0 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

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

✓ No known CVEs patched in this version

ReleasePort's take

Light signal
editorial:auto 7d

Dashboard and MCP now listen on port 43171 instead of the legacy port 3000. Vite defaults to any free development port rather than enforcing port 8173.

Why it matters: Port changes affect connection strings; Vite’s auto‑port selection removes hard‑coded dependency, simplifying dev setups.

Summary

AI summary

Canonical project state variables become first-class with dashboard enhancements.

Changes in this release

Feature Low

Dashboard and MCP default port changes from 3000 to 43171.

Dashboard and MCP default port changes from 3000 to 43171.

Source: llm_adapter@2026-07-19

Confidence: high

Feature Low

Entity enum fields can reference reusable value sets via `valueSetId`.

Entity enum fields can reference reusable value sets via `valueSetId`.

Source: llm_adapter@2026-07-19

Confidence: high

Feature Low

Dashboard can run cleanly embedded in a Lyriks host with `?embed=1`.

Dashboard can run cleanly embedded in a Lyriks host with `?embed=1`.

Source: llm_adapter@2026-07-19

Confidence: high

Feature Low

`outline_repo` tool provides a bounded map of the source tree structure.

`outline_repo` tool provides a bounded map of the source tree structure.

Source: llm_adapter@2026-07-19

Confidence: high

Feature Low

Behavior inventories now roll up actions to features and projects with searchable views.

Behavior inventories now roll up actions to features and projects with searchable views.

Source: llm_adapter@2026-07-19

Confidence: high

Feature Low

Canonical project state variables connect behavior across features with explicit owners and diagnostics.

Canonical project state variables connect behavior across features with explicit owners and diagnostics.

Source: llm_adapter@2026-07-19

Confidence: high

Feature Low

Dashboard publishes its bound URL to `~/.unspa-hub/.dashboard.json` for MCP sync-notifier consumption.

Dashboard publishes its bound URL to `~/.unspa-hub/.dashboard.json` for MCP sync-notifier consumption.

Source: granite4.1:30b@2026-07-19-audit

Confidence: low

Dependency Low

Vite now selects the first available development port instead of requiring port 8173.

Vite now selects the first available development port instead of requiring port 8173.

Source: llm_adapter@2026-07-19

Confidence: high

Refactor Low

Codebase adoption steers taxonomy and hard‑vs‑soft split more faithfully.

Codebase adoption steers taxonomy and hard‑vs‑soft split more faithfully.

Source: llm_adapter@2026-07-19

Confidence: high

Full changelog

Canonical project state variables become first-class. A project can own stable state identities, now authored directly in the dashboard's state registry and referenced from surfaces by id, with coherence diagnostics flagging stale or incompatible links across features. The dashboard also gains searchable behavior inventories, agrees a port with the MCP automatically (the default moves off 3000 to 43171), runs cleanly embedded in a Lyriks host, and lets entity enum fields reference reusable value sets. Codebase adoption now steers an extractor toward the right taxonomy and an honest hard-vs-soft split, and gains outline_repo, a bounded map of the source tree so a feature split starts from real structure. No breaking changes: legacy surface state stays readable and no snapshots are rewritten.

Added

  • Canonical project state variables connect behavior across features. Projects can now own stable state identities with explicit owners, readers, writers, and optional links to entity fields or Builder nodes. New MCP tools create, update, link, list, and remove them; add_state_definition can project a canonical variable onto a surface by id; project aggregates and spec-gap diagnostics report stale or incompatible data-field links. Legacy surface state remains readable and is grouped by path without rewriting snapshots.
  • Behavior inventories now roll up from actions to features and projects. The dashboard exposes searchable project and feature views for actions, surfaces, states, surface rules, and personas, with shared context sidebars and compact action statistics. Action rollups preserve feature/surface provenance and identify reusable cross-feature concepts such as state paths, events, resources, roles, parameters, value sets, and effect types.
  • outline_repo gives codebase adoption a map of the source. A new MCP tool returns a bounded outline of the repository's source tree - directories, a file count per directory, and a file-type histogram - with node_modules, build output, caches, and dot-directories skipped and the walk capped by depth and maxEntries. The server reads the tree from disk itself (the same access behind attach_source_path), so an LLM can ground a feature split in real structure even on a host that gives it no filesystem tools of its own. It surfaces structure only and never decides the taxonomy - you still name the features and confirm the split. Scope a monorepo package with subPath. The bundled unspa-adopt skill and the unspa adopt prompt now point at it.

Changed

  • The dashboard and MCP now agree on a port automatically, and the default moved off 3000. unspa dashboard (and npm run dev) start on the uncommon default 43171 - so they no longer fight the usual 3000 / 5173 / 8080 - and advance to the next free port if it's taken, printing the URL they bound. The running dashboard publishes that URL to ~/.unspa-hub/.dashboard.json, and the MCP sync-notifier reads it before falling back to probing loopback ports, so live edit refresh (and activity toasts) work with zero config even when a WSL2 / Docker relay squats the old ports. Pin a specific port with a loopback UNSPA_SYNC_URL if you run the dashboard somewhere unusual.
  • Entity enum fields can reference reusable value sets. Entity and entity-field MCP tools now accept valueSetId, allowing canonical state and data-field coherence checks to compare shared enum vocabularies.
  • The dashboard can run cleanly inside a Lyriks host. ?embed=1 hides the complete header and other standalone chrome, suppresses onboarding, toasts, and floating widgets, and applies the Lyriks skin without overwriting the browser's saved theme. Global host context (embed, optional user history attribution, and brand) now persists automatically across every same-origin navigation, while page-local deep-link state remains scoped to its page. Independently, ?brand=lyriks keeps the header visible but replaces its Unspaghettit lockup with the official Lyriks v3 logo, wordmark, and a "Behavior editor" product label. Vite now selects the first available development port instead of requiring port 8173.
  • Codebase adoption steers taxonomy and hard-vs-soft faithfully. The unspa adopt prompt and the bundled unspa-adopt skill now tell the extractor to record the product's pillars as the project's core features (declare_core_feature + set_feature_core) instead of re-deriving the taxonomy from folder names on every pass, and to model a constraint as an invariant only when the code truly enforces it (it rejects or throws). An advisory check that merely warns and proceeds becomes a non-blocking rule, not a hard invariant that would claim a guarantee the code never made. Both fixes close the fidelity gaps that a real code-to-spec extraction surfaced.

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]