# Alokai Changelog (/alokai-changelog)
# Alokai Changelog [#alokai-changelog]
## 2.4.0 [#240]
**Release date:** 2026-08-12
### Minor Changes [#minor-changes]
* **ADDED** (`@alokai/connect-admin`) The feature editor — the middleware-served tool where you edit the configuration of your features at runtime, without a redeploy — now ships as its own package, moved out of `@alokai/compass`. Compass drops its feature-editor endpoints, the `defineFeatureEditor` API, the `featureEditors` config field, and the `sdk.compass.getFeatureEditorData` SDK method, with no re-exports left behind; you install, version, and turn the editor on independently.
What you register are **features** — one per area of your app you want to administer — each grouping editable form views and browsable list-panel views, served at `/connect-admin`. The editor ships with versioning, auto-save, a three-way configuration merge, `{{ }}` template variables, per-feature documentation guides, and a bundled playground feature to explore before wiring a real one. See the Connect Admin documentation for installation, authoring view schemas, and reading the authored values through the SDK. The feature editor previously shipped only in Compass `-next` releases, so nothing changes for existing projects; if you used it on a `-next` release, see the migration guide below.
* **ADDED** Major version upgrades now prompt for confirmation before running automated dependency installation, and print the migration guide URL on completion.
* **ADDED** AI code review for pull requests. A CI-run review posts findings on your PRs — incremental by default (each run covers only the commits pushed since the last review, and a push with nothing new to review posts nothing; `--full` forces a whole-PR pass) and tuned for fewer, more trustworthy findings: every finding quotes the code it is about, a finding is only dropped by citing the code that contradicts it, findings the author already replied to are never raised again, pre-existing defects near the change are reported as context instead of blocking comments, and every review states what it did not cover. The review model is configured through the `AI_REVIEW_MODEL` environment variable, and the default configuration works out of the box in CI. To review changes before opening a pull request, use the `alokai-review` skill from `@alokai/ai-toolkit` in your coding agent session — it applies the same review criteria (correctness, consistency, security and performance, maintainability) without needing an API key; `yarn alokai ai review` remains the engine behind the CI review.
* **ADDED** The `autofix` skill: applies accepted code review findings - a single review comment, a whole PR's feedback, or findings handed over in conversation - making the smallest correct edit per finding. When a fix depends on a judgement call, it puts the question to the developer instead of guessing or silently skipping.
### Patch Changes [#patch-changes]
* **FIXED** Icon-only buttons now expose accessible names via translated `aria-label`s, fixing the failing `agent-accessibility-tree` audit in the Lighthouse "Agentic Browsing" category (covers the CMS mini-cart button with item count, the rotating-images pagination dots, and the Compass add-use-case button).
* **FIXED** Storefront `build`, `dev`, and test scripts now work on Windows. Several `yarn` scripts (Next.js `multistore:dev`, middleware `build`, Playwright `test:integration` / `test:integration:dev`, and `changesets:publish:local`) previously set environment variables inline (e.g. `NODE_OPTIONS=... command`), which Windows `cmd`/PowerShell cannot parse. These scripts now use `cross-env` to set environment variables in a cross-platform way, and shell-only constructs (`if [ -d ... ]`, inline `node -e` one-liners) were replaced with small Node scripts so they run the same on Windows, macOS, and Linux. If your project overrides any of these scripts, see the migration guide below.
* **ADDED** Per-integration circuit breaker preset selection via the `CB__PRESET` environment variable (e.g. `CB_SAPCC_PRESET=TOLERANT`). The integration name is uppercased with `-` replaced by `_`. Resolution priority: `CB__PRESET` → `CB_PRESET` → `circuitBreaker.preset` from the integration config → `BALANCED`. An invalid value logs a warning (naming the exact variable) and falls back to `BALANCED`; the `EXTREME_DEBUG` preset remains blocked in production.
* **FIXED** Generated projects' GitHub Actions workflows now pin third-party actions (`actions/checkout`, `actions/setup-node`, `actions/cache`) to an immutable commit SHA instead of a mutable version tag, closing a supply-chain risk where a compromised tag could inject code into your CI/CD pipeline.
* **CHANGED** The generated AGENTS.md now points to the `theming` and `perf-review` skills for theming and performance-review guidance instead of duplicating their instructions inline, keeping the always-loaded AGENTS.md leaner.
* **FIXED** The CLI now includes the specific package name in the error shown when a package fails to install from the registry (e.g. during `yarn alokai store deploy`), instead of only a generic "Authorization required" message.
* **FIXED** `yarn alokai store lint` (runs ESLint for one or more stores) no longer reports a store as failed when it has no override files to lint (e.g. a template store, or a store that fully inherits an app).
* **FIXED** `yarn install` no longer fails on fresh clones at the `alokai-cli plugins install @alokai/cli-plugin-compass` postinstall step. The CLI now resolves plugins from the Alokai registry (`https://npm.alokai.cloud`) directly, so a user-level `@alokai:registry` mapping in `~/.npmrc` is no longer required — only the registry auth token. A user-level scope mapping or the `ALOKAI_CLI_NPM_REGISTRY` environment variable still takes precedence.
* **FIXED** The request mocker no longer loads its `nock` and `@mswjs/interceptors` dependencies unless `defineMocker` is actually used, so importing the middleware integration kit no longer pulls these dev-only packages into your application at startup.
* **FIXED** Deployed Next.js storefronts no longer crash on the first request with `Failed to load external module -: Cannot find module` when a server-external dependency (e.g. `pino`) is hoisted outside the app directory. `yarn alokai store deploy` now ships the complete Next.js standalone output — including the traced `node_modules` produced by the build — instead of reinstalling a minimal dependency set, so the shipped dependencies exactly match what the build traced and packaging no longer depends on the npm registry.
* **ADDED** `yarn alokai store deploy` (deploys stores to the Alokai Console) now fails at packaging time with an actionable error when the assembled deployment package contains dangling symlinks, instead of surfacing the problem as a runtime crash in production.
* **FIXED** `yarn alokai ai sync` (syncs skills and AGENTS.md from `@alokai/ai-toolkit` into the project's AI agent directories) now repairs AI skill links that git checked out as plain text stubs instead of symlinks (a common outcome on Windows), so skills load again without any manual cleanup.
* **FIXED** Fixed project generation and store composition failing on native Windows: the generated project's `package.json` no longer relies on the Unix-only `mkdir -p`, and composed store output no longer includes `node_modules/.bin` shims that pointed at broken paths.
* **FIXED** Store composition no longer crashes on Windows with `RangeError: path should be a path.relative()'d string`. The ignore-path filter now normalises Windows paths (backslashes and drive letters) to POSIX before matching, so absolute `C:\...` paths no longer reach the `ignore` matcher and `.gitignore`-style ignore rules apply correctly.
* **FIXED** Alokai projects now work on native Windows (PowerShell), without WSL: cloning, installing, generating a project, and running the Next.js storefront are all supported. WSL2 remains the recommended setup. Known limitations: the Nuxt storefront does not yet start on native Windows, and Windows CI coverage is a biweekly scheduled E2E run rather than a check on every PR. See the [Windows support docs](https://docs.alokai.com/general/starting-new-project#windows-support) for setup and troubleshooting guidance.
* **ADDED** (Compass) A/B experiment system. Mount `ExperimentsProvider` with an experiment registry and each visitor is assigned a variant per experiment by weighted random on page load, persisted in a per-experiment cookie so it stays sticky across reloads. `useExperiments()` exposes the resolved variants, serialized payloads for stamping analytics events, and a dev/QA override; a per-experiment `onAssignment` callback wires new assignments to any analytics provider. Experiments roll client-side only (rolling during SSR would be incompatible with CDN caching), and each split can be overridden from env via `NEXT_PUBLIC_COMPASS_AB__`. A demo experiment is mounted on the guided-selling page.
* **CHANGED** (Compass) Installing the module now defaults to no-credentials-manager mode. `.env.example` is seeded with an active `ALOKAI_COMPASS_API_URL` (the Alokai LLM gateway) and `ALOKAI_COMPASS_NO_CREDENTIALS_MANAGER=true`, plus a commented-out, empty `ALOKAI_COMPASS_API_KEY=` for you to fill in. Previously it seeded an active dummy API key and a commented-out URL, which defaulted to the hosted credentials manager.
* **FIXED** (Compass) Clearing the AI assistant session now also clears the page-context tracking entries in local storage (`ai-assistant-last-sent-product-id`, `assistant-last-title`, `assistant-last-search`). Previously the stale `ai-assistant-last-sent-product-id` entry survived a session restart, so the assistant never re-sent the product-visit context and lost track of the currently viewed product. The product and category context components now read the tracking entries fresh on each render pass, so the context message is re-sent immediately after a restart without leaving the page.
* **FIXED** (Compass) AI Shopping Assistant reliability after the gateway model update:
* Adding products from an uploaded file (e.g. CSV) no longer dead-ends with "no products found" — the `searchProducts` tool now steers the model to query by SKU, and a 0-results response tells it how to recover instead of giving up.
* Price questions on a product page are answered in the product's actual currency; the assistant no longer assumes or converts the currency symbol.
* Guided selling facet updates reject values outside the catalog facet domain and feed the valid options back to the model for a retry, instead of silently patching the UI with a value no select option matches.
* Guided selling UI updates apply reliably during streaming: assistant messages are processed by id, so a state patch arriving in the same render as a stream consolidation is no longer skipped.
* **FIXED** (Compass) Importing a trace dump in the dev tools no longer fails with HTTP 413 when the trace exceeds the middleware's default 100kb JSON body limit. The module's install script now raises the limit to 2mb for the `devToolsImport` endpoint.
* **FIXED** (Compass) The dev tools page (`/compass/devTools`) now works when the middleware is served behind a path prefix, e.g. proxied under `/api` on deployed environments. The page previously requested its stylesheet, script, and trace data from the domain root (`/compass/...`), which returned 404 behind a proxy; all of these are now requested relative to the page URL.
* **FIXED** (Compass) Clicking the search submit (magnifying glass) button no longer clears the live query. React 19 auto-resets a `