v0.7.0
Adopt what you already built, and wear the brand: code-to-spec becomes a first-class, evidence-gated flow that yields the model, its provenance, and implementation coverage in one pass; the dashboard now defaults to the Lyriks look with the Unspaghettit lockup in every theme.
Added
- Codebase adoption: code to spec is now a first-class, evidence-gated flow. Source files attach as
kind:'code'sources (named by their repo-relative path), every extracted element is traced to the exact code span it came from, and a finalize gate keeps the extraction honest. The newseed_index_from_analysisMCP tool bridges the two mapping systems: every recorded span becomes a.unspa.jsonbehavioral-index entry, so one analysis pass yields the model, its provenance (browsable in the Source Viewer), AND non-zero implementation coverage with drift detection armed from day one. Entry points:unspa adoptprints the paste-ready agent prompt, and the bundledunspa-adoptskill (installed byunspa init) encodes the whole recipe. - Adoption token costs roughly halved.
attach_source_pathtakes a repo-relative path and the MCP server reads the file from disk itself, so file content is never re-emitted through the conversation;record_element_spansstamps many elements in one call with per-item failure reporting. All the guidance now steers agents to the cheap forms. - Project source store + paste-to-analyze. Analyzed documents live as immutable, content-hash deduplicated files in the project's
sources/folder. A new Sources tab on the project page lets you paste a document straight into the dashboard; agents pull it throughlist_sources/get_source, andremove_source/reset_analysisfinally give both stores a way out. One document can feed several features, an analysis can link several documents, and the provenance viewer grew a document picker.
Changed
- The Lyriks skin is now the default theme. A fresh install boots with the Lyriks.io violet/fuchsia brand. The original teal look is one switch away as the
classictheme (unspa theme set classicor the header palette button), andunspa theme set default/unspa theme resetremain an explicit revert to the default. - The header brand is the same across every theme: the Unspaghettit logo and wordmark plus a "Powered by Lyriks.io" badge (the Lyriks three-bar mark) linking out to lyriks.io. The per-theme logo swap is gone.
- Provenance sidecar format v2. Sidecars now store span-to-source links instead of the whole document; v1 sidecars migrate automatically at startup. Older dashboards cannot read v2, so update dashboard and MCP together.
- Docs and agent guidance caught up with codebase adoption across the
unspa://guideresource, the init context template, core concepts, getting started, and the CLI README.
Fixed
- MCP live sync reaches the dev dashboard again. The reload notifier now probes
127.0.0.1:3000plus both IPv6 and IPv4 literals on:8173(the Vite dev port), drops the WSL2-squatted:5173candidates, and allows 1 s per attempt.UNSPA_SYNC_URLstill pins a custom port. - History entries name their author instead of
unknownfor writes arriving through the dashboard's own REST API, and MCP-driven entries no longer render as "AI · Anonymous". sync_from_indexno longer flags documented key forms as orphans (entity:<id>, feature-levelinvariant:<id>, surface-declaredtransition:<id>, declaredevent:<name>), matching drift detection.- The graph page fits the viewport exactly (no more permanent 1 px overflow scrollbar).
- Code snippets stay black under the Lyriks theme. The violet emphasis remap no longer catches
pre/code/textareasurfaces such as the implementation panel's snippet blocks and the MCP page's expanded JSON.
Full details in CHANGELOG.md.