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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)