Skip to content

Changelog

What each release changed, newest first, read from the GitHub release list when this site was built. Every line is a pull request that was merged for that release; version bumps and the archiving of finished changes are left out, so the list is what changed for you. A preview is a release on the next line of the packages; the released line is what npm install gives you.

v0.15.0

2 October 2026

  • chore(demo): run the demo and the example on 0.14.6 (#714)
  • fix(shell): a value written just before a reload is kept (#715)
  • fix(shell)!: the spinner is an element like the rest (#716)
  • docs: the plugin store says whose it is (#717)
  • feat(shell)!: a surface’s actions are drawn wherever the surface stands (#718)
  • docs(openspec): archive the four changes from the consumer findings (#719)
  • fix(shell): the spinner ring takes the colour around it (#720)
  • test(testbed): the search surface’s action has a name of its own (#722)

The release on GitHub

v0.14.6

27 September 2026

  • chore(demo): run the demo and the example on 0.14.5 (#708)
  • fix(shell): a container keeps its arrangement while its tab is in the background (#709)
  • docs(openspec): archive a-container-keeps-its-arrangement-in-the-background (#710)
  • fix(shell): the worker repair touches only its own application (#711)
  • docs(openspec): archive the-worker-repair-touches-only-its-own (#712)

The release on GitHub

v0.14.5

27 September 2026

  • chore(demo): run the demo and the example on 0.14.4 (#701)
  • fix(deploy): one SSH connection for both uploads, and a dropped one is retried (#702)
  • fix(shell): a gated container opens on its child after a late session (#703)
  • fix(shell): a distribution served under a path loads and opens under it (#704)
  • docs(openspec): archive the fixes for NextPA findings F-041 and F-042 (#705)
  • docs(shell): the contract says translations and pop-outs live under the base (#706)

The release on GitHub

v0.14.4

26 September 2026

  • docs(openspec): archive generated-components-take-the-app-prefix (#659)
  • docs: sample components take the app prefix, not the platform’s (#660)
  • docs(openspec): record the owner’s decisions on the rest of the refactor (#661)
  • refactor(shell): theme.css imports its parts, and stylesheets carry no comments (#662)
  • refactor(ag-ui): the adapter reads as the steps of a call (#663)
  • chore(workspace): lint inputs are named once, in nx.json (#664)
  • refactor(example): a ticket command and its button end in one function (#665)
  • refactor(devkit): the generated agent files name the connection and the agent apart (#666)
  • refactor(example): the assistant takes the generated shape (#667)
  • refactor(example): no leftovers, and the components take the app prefix (#668)
  • docs(example): the READMEs describe this example (#669)
  • refactor(demo): the quotes weaver has the shape of the other five (#670)
  • refactor(demo): the ledger lives in the finance weaver (#671)
  • refactor(demo): what only the distribution contributes lives under app/ (#672)
  • refactor(demo): no settings that change nothing, and nothing left over (#673)
  • refactor(demo): one language signal, the formatters called directly, one clock (#674)
  • refactor(demo): the quotes weaver says each thing once (#675)
  • refactor(demo): insights reads the session through ctx.session (#676)
  • refactor(demo): the scripted agent names its beats and its events apart (#677)
  • refactor(demo): the facades guard alike, and names say what they do (#678)
  • refactor(demo): the overview module declares what makes it the home (#679)
  • refactor(demo): one supplier list, and open items are what finance is owed (#680)
  • refactor(demo): the customers weaver ships its strings in its own namespace (#681)
  • refactor(demo): the finance weaver ships its strings in its own namespace (#682)
  • refactor(demo): the procurement weaver ships its strings in its own namespace (#683)
  • refactor(demo): the inventory weaver ships its strings in its own namespace (#684)
  • refactor(demo): the people weaver ships its strings in its own namespace (#685)
  • refactor(demo): finance lists its records in the responsive grid (#686)
  • refactor(demo): people lists its records in the responsive grid (#687)
  • refactor(demo): procurement lists its records in the responsive grid (#688)
  • refactor(demo): inventory lists its records in the responsive grid (#689)
  • refactor(demo): the product’s components take the demo- prefix (#690)
  • refactor(demo): the payment matching plugin in parts, and drawing books nothing (#691)
  • refactor(demo): the end-to-end tests read without narration (#692)
  • docs(demo): the README matches the code and reads in an order (#693)
  • refactor(tools): the platform’s tools sit in folders named for what they do (#694)
  • refactor(tools): the checks share one ratchet, one package table and one walker (#695)
  • refactor(scripts): the release and dependency scripts say what they do (#696)
  • test: the test names state the behaviour instead of tracker codes (#697)
  • refactor(shell): the unusable-workspaces port sits in the slice that owns it (#698)
  • docs(openspec): archive the-code-reads-for-a-newcomer (#699)

The release on GitHub

v0.14.3

25 September 2026

  • chore(demo): run the demo and the example on 0.14.2 (#655)
  • docs(openspec): archive defects-found-while-reading-are-fixed (#656)
  • fix(devkit): generated components take the app’s prefix, not lw (#657)

The release on GitHub

v0.14.2

25 September 2026

  • feat(demo): show tab badges, leaving out a child and a plugin menu (#472)
  • docs(openspec): readability worklist and the defects found while reading (#473)
  • refactor(shell): cut the content tab services by what they do (#474)
  • fix(shell): a list menu marks its entry in effect and keeps every icon (#475)
  • fix(shell): a failing menu entry reaches the error handler (#476)
  • fix(shell): a plugin renames and re-actions only surfaces it registered (#477)
  • fix(shell): a deployed plugin’s settings are reachable from the installed list (#478)
  • fix(shell): release grants of failed activations and report missing required plugins (#479)
  • fix(shell): a rail entry that only opens a menu can be curated (#480)
  • fix(shell): actions on open work in the search act where it stands (#481)
  • fix(shell): the pane arrangement reads the saved workspaces from the settings port (#482)
  • fix(shell): the stored language is applied from the product’s settings port (#483)
  • fix(shell): claims that tie on an address are reported whatever their shape (#484)
  • fix(shell): moving a view to the other sidebar by keyboard is announced (#485)
  • fix(shell): a panel drag whose edge disappears still ends (#486)
  • fix(shell): closing the pane that fills the area ends the blow-up (#487)
  • fix(shell): drag between inner panes works for an address with a colon (#488)
  • fix(shell): a pane body lets go of the mounts of surfaces it no longer shows (#489)
  • fix(frame-kit): the frame declaration drops an empty export statement (#490)
  • fix(devkit): the generated weaver notes name real regions and the recorded versions (#491)
  • fix(devkit): the weaver generator composes the weaver without a test runner too (#492)
  • fix(devkit): a forced distribution keeps the occupant’s build settings (#493)
  • fix(devkit): the Nx route names what it leaves untouched (#494)
  • fix(cli): the workspace above a nested package is found (#495)
  • fix(cli): read the entry stylesheet in every form, name errors once (#496)
  • fix(devkit): the Tailwind source path is taken literally (#497)
  • fix(testbed): typing in the RPC sandbox keeps focus (#498)
  • fix(testbed): the minimal store plugin registers its own page (#499)
  • fix(testbed): the static sandbox page loads the kit stylesheet (#500)
  • fix(demo): closing periods and dates follow the local calendar (#501)
  • fix(demo): quote commands accept quotes created after startup (#502)
  • fix(demo): the dashboard’s colour observer stops with its view (#503)
  • docs(openspec): waiting for the store at activation is an owner decision (#504)
  • fix(demo): the quotes plugin activates when storage is blocked (#505)
  • fix(example): a ticket link opens its ticket whatever the case (#506)
  • fix(website): the landing page’s pictures are copied and checked (#507)
  • fix(website): the sidebar guard matches whole routes (#508)
  • refactor(shell): whether this window is a pop-out is one fact (#509)
  • refactor(shell): one helper binds a stored setting to a signal (#510)
  • refactor(shell): the saved workspace list is a persisted setting (#511)
  • refactor(shell): the plugin lists and grants are persisted settings (#512)
  • refactor(shell): the stored-value helpers get a folder of their own (#513)
  • refactor(shell): the rail’s choices are persisted settings (#514)
  • refactor(shell): the panels read their records with the shared parsers (#515)
  • docs(openspec): the readability change records what stays as it is (#516)
  • refactor(shell): each storage key is declared once (#517)
  • refactor(shell): unsaved work gets a folder, two tree files their names (#518)
  • refactor(shell): the retention key grammar lives in one module (#519)
  • refactor(shell): one rule says when the wording may have changed (#520)
  • refactor(shell): the layout questions are answered once (#521)
  • refactor(shell): the tab label module moves to the pane chrome (#522)
  • refactor(shell): a tab’s label is patched in one place (#523)
  • refactor(shell): host command ids are named once (#524)
  • refactor(shell): the fallback language and tone colours are stated once (#525)
  • refactor(shell): wide dialogs share one frame (#526)
  • refactor(shell): names say what they hold (#527)
  • refactor(shell): one rule says which chrome item is offered (#528)
  • refactor(shell): what a pane offers is read from one place (#529)
  • refactor(shell): code only specs called is gone (#530)
  • refactor(shell): the route table carries only what is read from it (#531)
  • refactor(shell): theme and text size start with provideShell (#532)
  • refactor(shell): host commands and built-in menus named for what they hold (#533)
  • refactor(shell): each host command sits beside what it opens (#534)
  • refactor(shell): provideShell reads as named groups (#535)
  • refactor(shell): each edge and the drawer are drawn once (#536)
  • refactor(shell): rail and sidebar moves share one chord and announcement (#537)
  • refactor(shell): menu and move names say what they do (#538)
  • refactor(shell): four files move to the slice that owns them (#539)
  • refactor(shell): the rail reads as its entries, marking and label fit (#540)
  • refactor(shell): the update service keeps checking and hands off the rest (#541)
  • refactor(shell): small names in views and the side panel (#542)
  • refactor(shell): the theme token list and the plugin layer are two files (#543)
  • refactor(shell): the composition checks are pure functions (#544)
  • refactor(shell): the address helper is named for what it answers (#545)
  • refactor(shell): the public barrel reads by slice (#546)
  • refactor(shell): what draws a surface in a pane has its own folder (#547)
  • refactor(shell): the content region’s pieces are named for what they draw (#548)
  • refactor(shell): the iframe surface keeps the component and hands off the rest (#549)
  • refactor(shell): typed surface route data and one route builder (#550)
  • refactor(shell): the content route table and the router are two files (#551)
  • refactor(shell): the pane targets are one list and say what they answer (#552)
  • refactor(shell): the tab context menu takes one deps object (#553)
  • refactor(shell): rail and view curation are two row sources (#554)
  • refactor(shell): smaller content items read plainly (#555)
  • refactor(shell): the pane tree’s read-only walks are built on leavesOf (#556)
  • refactor(shell): one pane reference, one name for carrying the address (#557)
  • refactor(shell): view pane paths go through two helpers (#558)
  • refactor(shell): the pane tree service holds the arrangement and its commands (#559)
  • refactor(shell): the retained view stash keeps its lifecycle (#560)
  • refactor(shell): the retention policy file holds the policy (#561)
  • refactor(shell): unsaved work is found, saved and asked about in one place (#562)
  • refactor(shell): the tab strip hands off overflow and its menu context (#563)
  • refactor(shell): the drag service keeps drag state; drop zones loop (#564)
  • refactor(shell): smaller pane items say what they mean (#565)
  • test(shell): the retention spec is split by the file it tests (#566)
  • refactor(shell): plugin files move to the folders their names promise (#567)
  • refactor(shell): the catalog entry and the installed record are two files (#568)
  • refactor(shell): the contribution registry has a slice of its own (#569)
  • refactor(shell): one word for each step of a plugin’s lifecycle (#570)
  • refactor(shell): enablement alone decides that a deployed plugin is on (#571)
  • refactor(shell): one store consent service; the disable guard answers (#572)
  • refactor(shell): one service holds the plugin catalog (#573)
  • refactor(shell): store figures are pipes, one plugin icon component (#574)
  • refactor(shell): the registry filters omissions once, badges apart (#575)
  • refactor(shell): the plugin context injects, facades and rules apart (#576)
  • refactor(shell): the frame RPC reads in parts (#577)
  • refactor(shell): plugin state admits a write, then indexes its key (#578)
  • refactor(shell): the built-in and the starting workspace have own names (#579)
  • refactor(shell): one definition baseline, one panel declaration (#580)
  • refactor(shell): foundation keeps only what fits its rule (#581)
  • refactor(shell): the workspace declaration is a folder of its own (#582)
  • refactor(shell): the workspace service delegates to four parts (#583)
  • refactor(shell): workspace/baseline/ becomes catalog/ and working-state/ (#584)
  • refactor(shell): the workspace dialog’s rows share their markers (#585)
  • refactor(shell): the translation loader reads in parts (#586)
  • refactor(shell): persistence groups its cross-tab and identity parts (#587)
  • refactor(shell): settings/ becomes settings-dialog/ (#588)
  • refactor(shell): the small names of the workspace and state area (#589)
  • test(shell): workspace specs by concept, waits named for what they wait (#590)
  • refactor(shell): commands/ splits into keyboard/ and palette/ (#591)
  • refactor(shell): the frame-kit entry moves to surface-kit/ (#592)
  • refactor(shell): the menu service resolves, draws and presents apart (#593)
  • refactor(shell): one alias table for chords, one claims function (#594)
  • refactor(shell): the palette builds rows outside the component (#595)
  • refactor(shell): one element list and shared element behaviours (#596)
  • refactor(shell): the select, tooltip and nav tree read in parts (#597)
  • refactor(shell): the frame entry keeps its declarations, jobs move out (#598)
  • refactor(shell): capture reads the frame’s wire shape, one word each (#599)
  • refactor(shell): dialogs build footers once and decide results once (#600)
  • refactor(shell): the icon registry is the store; one ownership check (#601)
  • docs(packages): the plugin-sdk and frame-kit READMEs say what they are (#602)
  • docs(plugin-sdk): the smaller contract files say what holds now (#603)
  • docs(plugin-sdk): plugin, surface and content-route say what holds now (#604)
  • docs(plugin-sdk): every ctx member says which capability it needs (#605)
  • docs(plugin-sdk): one term per concept, and hovers that open plainly (#606)
  • refactor(plugin-sdk): the contract’s files sit in folders by theme (#607)
  • refactor(plugin-sdk): the host’s route and view shapes read from the surface (#608)
  • docs(shell, ag-ui): the published JSDoc says what holds now (#609)
  • refactor(frame-kit): one source for the elements, named build steps (#610)
  • chore(platform): workspace configuration names only what exists (#611)
  • refactor(devkit): four files named after what they hold (#612)
  • refactor(tooling): one source for ids, casing, choices and the version (#613)
  • refactor(devkit): the Nx generators map their options like every route (#614)
  • refactor(devkit): each scaffold sits beside its recipe (#615)
  • refactor(devkit): registering a plugin is rendered once (#616)
  • refactor(devkit): the Nx generators apply amendments through one function (#617)
  • refactor(devkit): region ids are named once and interpolated (#618)
  • refactor(cli): run.ts dispatches through a command table (#619)
  • refactor(cli): one reader of angular.json, and amending cut by concern (#620)
  • refactor(cli): init steps are a union, flags are typed once (#621)
  • refactor(tooling): resolved inputs and validator helpers say what they are (#622)
  • refactor(devkit): the weaver recipe resolves in one file and templates in another (#623)
  • docs(devkit): the scaffolded code reads without simulating it (#624)
  • refactor(tooling): one bundle helper for both bins, test fixtures written once (#625)
  • docs(tooling): the READMEs describe the packages as they are (#626)
  • chore(testbed): drop the Aspire proxy and the JUnit reporter nobody reads (#627)
  • refactor(testbed): the weaver’s files sit in folders named for what they exercise (#628)
  • refactor(testbed): one persisted choice, and principals known by name (#629)
  • refactor(testbed): each capability registers its own contributions (#630)
  • refactor(testbed): containers are called containers in the code too (#631)
  • refactor(testbed): names say what they serve, and the leftovers go (#632)
  • refactor(testbed): main.ts reads as the table of contents of the distribution (#633)
  • refactor(testbed): the static sandbox is named for the rest route it exercises (#634)
  • refactor(testbed): the store plugins say what they register (#635)
  • refactor(testbed): the RPC sandbox page is a skeleton its script fills (#636)
  • refactor(testbed): the example plugins’ scripts are linted (#637)
  • refactor(platform): the two platform apps ship one icon set (#638)
  • test(testbed-weaver): one Transloco setup for the component specs (#639)
  • fix(testbed): the RPC sandbox page is stamped from a template once its script runs (#640)
  • test(testbed-e2e): helpers copied between specs live in support/helpers.ts (#641)
  • docs(openspec): record the owner’s decisions of 2026-09-25 (#642)
  • docs(openspec): propose generated components take the application’s prefix (#643)
  • fix(shell): invocations waiting side by side no longer count as a chain (#644)
  • fix(shell): a plugin state value with no JSON form is refused (#645)
  • fix(frame-kit): a state write made before the connection is sent once connected (#646)
  • feat(plugin-sdk): a plugin’s state handle tells a listener when its value arrives (#647)
  • test(shell): the choices of a command in the page are read when used (#648)
  • fix(shell): a select option draws an icon the registry knows (#649)
  • fix(shell): a plugin the operator deployed offers no install in the store (#650)
  • fix(shell): the plugin store keeps its detail reachable on a narrow screen (#651)
  • fix(ag-ui): the agent connection answers every call a run leaves open (#652)
  • fix(demo): a cancelled customer is not created, and an accepted quote is not sent (#653)

The release on GitHub

v0.14.1

24 September 2026

  • chore(demo): run the demo and the example on 0.14.0 (#467)
  • fix(shell): a narrow tab keeps its title before its badge (#468)
  • feat(shell): a plugin updates an open tab in place (#469)
  • feat(shell): a dialog body asks for the close the person would make (#470)

The release on GitHub

v0.14.0

24 September 2026

  • chore(demo): run the demo and the example on 0.13.0 (#456)
  • test: settle two tests that failed by timing (#457)
  • fix(shell): an open menu follows its strings (#459)
  • fix(shell): a gated sub-address survives its claiming workspace (#458)
  • fix(shell): the F-037 and F-038 fixes keep their promises (#461)
  • feat(shell): a tab may carry a badge beside its title (#462)
  • feat(shell): a product may leave out a container child (#463)
  • docs: align the guides and the SDK notes with 0.14.0 (#465)
  • fix(shell): a profile that drops a borrowed label as it loads is written back (#466)

The release on GitHub

v0.13.0

22 September 2026

  • chore(demo): run the demo and the example on 0.12.2 (#444)
  • fix(shell): a gated sub-address survives a cold start, Escape closes only an open list, and a closed dialog gives the focus back (#445)
  • feat(shell): a tab strip is one tab stop, walked with the arrow keys (#447)
  • feat(shell): the tooltip look works wherever it is placed (#449)
  • refactor(shell): a pane hands its surface a live route, keyed by the tab root (#451)
  • fix(shell): the address moves and nothing else does (#452)
  • refactor(shell): the router parks nothing, and the guides say who draws a surface (#453)

The release on GitHub

v0.12.2

19 September 2026

  • chore(demo): run the demo and the example on 0.12.1 (#439)
  • fix(shell): a preview stays a preview where it was dragged, and the next one lands in it (#441)

The release on GitHub

v0.12.1

18 September 2026

  • chore(demo): run the demo and the example on 0.12.0 (#435)
  • fix(shell): a split can be undone without losing a tab (#436)

The release on GitHub

v0.12.0

18 September 2026

  • chore(demo): run the demo and the example on 0.11.0 (#428)
  • docs: the default workspace, from the concept and the service side (#429)
  • fix(shell): a tab that cannot be closed can still be moved (#430)
  • feat(shell): the split button can be left out while the drag stays (#431)
  • feat(sdk): a command says what an agent’s word is enough for (#432)

The release on GitHub

v0.11.0

16 September 2026

  • chore(demo): run the demo and the example on 0.10.0 (#423)
  • docs: dialogs that keep unsaved edits, from the weaver side (#424)
  • feat!: the initial workspace is the default, and switched-off workspaces report nothing (#425)

The release on GitHub

v0.10.0

16 September 2026

  • chore(demo): run the demo and the example on 0.9.11 (#417)
  • feat: a dialog chooses how it closes and keeps unsaved edits (#418)
  • feat: a menu heading can lead to what it names (#420)

The release on GitHub

v0.9.11

14 September 2026

  • chore(demo): run the demo and the example on 0.9.10 (#411)
  • fix: a tab menu offers only the entries that can act where the tab stands (#412)
  • feat: a content tab in a split pane opens its menu and acts on that pane (#414)

The release on GitHub

v0.9.10

14 September 2026

  • chore(demo): run the demo and the example on 0.9.9 (#406)
  • ci: deploy the site when the version is bumped (#407)
  • fix: a view’s tab in the unsplit main area opens its menu (#408)

The release on GitHub

v0.9.9

14 September 2026

  • fix: a literal in chrome text is not reported as a missing key (#401)
  • fix: a menu entry keeps its icon beside its check (#402)

The release on GitHub

v0.9.8

13 September 2026

  • chore(demo): run the demo and the example on 0.9.7 (#396)
  • ci: publish over trusted publishing only, and check it first (#397)
  • feat: a view action can change while its surface is mounted (#398)

The release on GitHub

v0.9.7

13 September 2026

  • chore(demo): run on 0.9.6 (#378)
  • chore(demo): do not prefetch a renderer the demo never calls (#379)
  • fix: publish element registrations and make the settings row a block (#380)
  • feat: a panel region declares its own widths (#382)
  • feat: a distribution decides which languages the workbench serves (#384)
  • feat: a docked surface can be held where its product put it (#386)
  • feat: a panel region declares its overlay width (#387)
  • fix: closing a held surface ends its hold, and panel widths must be numbers (#389)
  • fix: resetting the workspace ends the holds of its surfaces (#391)
  • fix: a held surface moves with its view (#393)

The release on GitHub

v0.9.6

11 September 2026

  • chore(demo): run on 0.9.5 (#367)
  • feat: a picture of the workbench, across the sandbox boundary (#368)
  • fix: an identity change keeps the arrangement (#370)
  • fix(testbed): the picture command gets a shortcut of its own (#372)
  • feat: a picture of the workbench can be asked for at a size and in a form (#373)
  • feat: the composition report names a shortcut two commands claim (#375)

The release on GitHub

v0.9.5

10 September 2026

  • feat(demo): a quote’s row says its note is unsaved (#356)
  • fix: a late session, a lost route and an opening that never repeated (#358)
  • feat: the workbench lends the row and the brand block it draws (#360)
  • feat: a mark takes the shape a picture takes (#361)
  • feat: permissions lists what can be permitted (#362)
  • feat: a product can answer for its own updates (#363)
  • docs(reference): say that the merge run builds the merge (#365)

The release on GitHub

v0.9.4

10 September 2026

  • docs(site): the hero carries the one command (#333)
  • chore(openspec): the agent skill becomes a change (#336)
  • chore(openspec): the tutorial change records publishing day (#335)
  • docs(site): code blocks and package-manager tabs read as one box (#337)
  • chore(openspec): the overview rewrite becomes a change (#338)
  • docs: the overview argues before it indexes (#339)
  • fix(site): the demo always opens in a new tab (#341)
  • fix(ci): the Sonar finding is fixed, and the analysis runs nightly (#342)
  • chore(openspec): the second reddit post is dropped and the dev.to reading is recorded (#343)
  • feat(docs): the platform ships an agent skill (#344)
  • feat(demo): a quote carries a note, so the workbench can ask about unsaved work (#348)
  • fix(demo): the module tree keeps its module when a tab belongs to none (#349)
  • docs(openspec): unsaved work becomes visible and readable, as a proposal (#351)
  • feat(shell): unsaved work becomes visible on the tab and readable as a fact (#352)
  • fix(shell): switching to a tab no longer hides its mark (#353)
  • test(testbed): reach the close control on a tab that carries the mark (#355)

The release on GitHub

v0.9.3

8 September 2026

  • docs(openspec): the tutorial’s snapshot moves to 0.9.2 (#307)
  • chore(openspec): the demo findings become a change (#308)
  • docs: the tutorial’s picture follows the reader’s theme (#309)
  • refactor: the seven open analysis findings are cleared (#310)
  • fix: the bundle budgets follow what the builds measure (#311)
  • docs: the documentation carries the assistant path (#312)
  • docs(operations): a new docs page has to be staged before the site sees it (#314)
  • feat(tooling): the initial bundle has a ratchet (#315)
  • fix(mcp): the MCP route names the steps it cannot do (#316)
  • docs(site): the landing page shows before it argues (#321)
  • docs(site): the site has a changelog (#322)
  • chore(openspec): the screencast change leaves the queue (#319)
  • fix(cli): the workspace root is a directory like any other (#320)
  • feat(cli): init takes an Angular application or an Nx workspace to a product (#325)
  • docs(contributing): the package-manager fence is a writing rule (#327)
  • fix(site): the package-manager tabs keep the copy button (#328)
  • docs: Getting started is the one command and what it wrote (#329)
  • docs(site): the sticky panel cross-fades between its pictures (#330)

The release on GitHub

v0.9.2

7 September 2026

  • docs(openspec): the tutorial’s snapshot is a tag of its own (#300)
  • fix(devkit): the scaffold sets the bundle budget it makes necessary (#301)
  • docs: the workbench is shown, not listed (#303)

The release on GitHub

v0.9.1

7 September 2026

  • chore(demo): adopt 0.9.0 (#286)
  • docs: five more things a careful reader found (#287)
  • fix(devkit): the distribution scaffold records the frame kit (#288)
  • fix(shell,testbed): a select and a button fit the pane they are given, whatever the font (#289)
  • chore(openspec): the stand-in session arrives whole, and the recipes build nightly (#290)
  • feat(devkit,cli,mcp): the stand-in session arrives whole, and the recipes build nightly (#291)
  • feat(website): the main entries sit in the header on every page (#293)
  • fix(shell): the plugin lifecycle survives faults, and namespace declarations accumulate (#294)
  • docs: three things the review left open (#296)
  • fix(examples): the assistant workbench names a model that still exists (#297)

The release on GitHub

v0.9.0

7 September 2026

  • chore(demo): adopt 0.9.0-preview.10 (#278)
  • docs: the navigation tree gets its page, and a session without a backend its recipe (#279)
  • fix(shell): the isolation level can be named (#280)
  • docs: the llms files carry the whole contract, and two guards hold it (#282)
  • docs: what a careful reader found (#284)

The release on GitHub

v0.9.0-preview.10 preview

7 September 2026

  • chore(demo): adopt 0.9.0-preview.9 (#269)
  • chore(openspec): two changes from the first outside report on the demo (#270)
  • fix(shell): an open menu closes with its injector (#271)
  • feat(demo): the demo welcomes its visitor, and has an About (#272)
  • chore(openspec): breeze-clips-the-active-icon-tab is approved, and what its reproduction found (#274)
  • fix(demo): the Breeze look keeps one header line (#275)

The release on GitHub

v0.9.0-preview.9 preview

6 September 2026

  • chore(demo): adopt 0.9.0-preview.8 (#262)
  • feat(shell): the rail marks the origin of a saved workspace (#264)
  • fix(shell): a refusal for a capability never granted does not point to the settings (#266)
  • fix(demo): the quotes plugin may ask for the customer, and the suite reaches a folded scheme toggle (#267)

The release on GitHub

v0.9.0-preview.8 preview

6 September 2026

  • feat(website): per-page metadata, social card, structured data and WCAG fixes (#253)
  • chore(demo): adopt 0.9.0-preview.7 (#255)
  • docs: the website’s two guards, and what a page under docs/ must open with (#257)
  • fix(shell): an address a workspace switch holds yields to the next navigation (#258)
  • feat(shell): the bars stay usable on a phone (#259)

The release on GitHub

v0.9.0-preview.7 preview

6 September 2026

  • chore(demo): adopt 0.9.0-preview.6 (#246)
  • docs: the README points at the releases (#247)
  • fix(shell): an unanswered address lands in the workspace that claims it (#249)
  • chore: archive unanswered-claimed-address (#250)
  • feat(demo): payment matching arrives through a plugin store, not through the build (#248)
  • chore: archive demo-plugin-store (#251)
  • test(demo): the suite reaches payment matching the way a visitor does (#254)

The release on GitHub

v0.9.0-preview.6 preview

6 September 2026

  • feat(demo): Finance, the module the navigation tree was built for (#237)
  • feat(demo): Procurement, the first of the three modules that had only areas (#238)
  • feat(shell): the sidebar toggle shows the panel, not a direction (#239)
  • feat(demo): a second rail, on the right, for what surrounds the work (#240)
  • chore: archive demo-right-rail (#241)
  • feat(demo): Inventory, the second of the three modules that had only areas (#242)
  • feat(demo): People, the last of the three modules that had only areas (#243)
  • chore: archive demo-erp-navigation (#244)

The release on GitHub

v0.9.0-preview.5 preview

5 September 2026

  • feat(shell): a navigation group that holds nothing offers no fold (#234)
  • refactor(demo): the navigation tree becomes the element’s first consumer (#235)

The release on GitHub

v0.9.0-preview.4 preview

5 September 2026

  • chore(openspec): the tutorial draft and its cover are done (#226)
  • chore(openspec): the tutorial drops the prepared SCION answer and records its publication window (#227)
  • refactor(demo): the navigation tree takes the two workarounds out (#228)
  • feat(shell): a navigation tree among the workbench’s elements (#230)
  • chore(openspec): add the LinkedIn post to the tutorial change (#232)
  • fix(testbed): the new navigation view sits after the ones that were there (#233)

The release on GitHub

v0.9.0-preview.3 preview

5 September 2026

  • chore: the example follows the 0.9.0 preview line; the scaffold defects change is archived (#219)
  • fix(devkit,examples): a docked assistant panel asks for its inset (#220)
  • chore(release): the tag gets a release page, generated from the pull requests (#222)
  • feat(shell): a surface can be renamed, and a plugin can ask what it is under (#221)
  • docs(ag-ui): say whose code is which before the stand-in is replaced (#223)
  • feat(demo): ERP module navigation, first slice (#224)

The release on GitHub