# Changelog

All notable changes to `@beacio/core` will be documented in this file.

## 2.2.0 — 2026-09-19

- CDN / install pins move to `@beacio/core@2.2.0` (see `onboarding-manifest.json`), in lockstep with
  App Store 2.2.0.
- **iOS Home Screen web apps are diagnosed instead of being reported as "not installed"** (GH #448,
  follows #395). A page opened from a Home Screen icon saved with "Open as Web App" on runs
  standalone, where iOS loads no Safari extensions — and it strips the `Safari/` UA token, so
  `initBeacio()` silently no-opped and `resolveOnboardingState()` answered `unsupported`. Both now
  route to a new `home-screen-web-app` state: the banner says *"Open this page in Safari"* and
  offers an `x-safari-https://` CTA plus the plain address to copy, and `resolveOnboardingState()`
  returns `{ kind: 'home-screen-web-app', pageUrl, openInSafariUrl }` (no `returnLink` — the
  /setup round-trip does not apply). German copy ships alongside the English.
- New `@beacio/core/detect` exports: `isIOSHomeScreenWebApp(nav, win)` and
  `buildOpenInSafariUrl(pageUrl)`.
- Precedence, unchanged for every other caller: the extension's active markers still win; the
  deterministic standalone check runs ahead of the best-effort Private-Browsing and per-origin
  "Deny" heuristics, whose recoveries do not apply inside a web app. Additive only — no behaviour
  change in a normal Safari tab, and no new `BEACIO_EVENTS` member or `BeacioOptions` callback (the
  state reuses the `not-installed` event + `onNotInstalled`).

## 2.1.1 — 2026-08-25

- Lockstep bump only. 2.1.1 is an **app-side release** — MetricKit crash-diagnostics forwarding and
  appex crash flushing in the Safari extension's Swift layer (`f01281eb`) — and every published
  `@beacio/*` package moves in lockstep with the App Store version.
- **No source change to this package.** `dist/auto.mjs` is byte-identical to 2.1.0: its SRI digest
  `sha384-DmtRxLg7A/BTgyZ+2aMzCY+kTJCPykU0aVfi/1vXko+vjMKblKwzKIRj2Qq1dm3Z` is unchanged, so an
  existing `integrity=` pin keeps verifying against the 2.1.1 bytes.
- CDN / install pins move to `@beacio/core@2.1.1` (see `onboarding-manifest.json`). Fielded
  `@beacio/core@2.1.0` pins remain supported via the extension skew cell (U-SKEW-01).

## 2.1.0 — 2026-08-25

- Version aligned with App Store / Safari extension **2.1.0**. Every published `@beacio/*` package now moves in **lockstep** with the app release; the previous "packages version independently" policy is retired.
- The jump **1.2.0 → 2.1.0 skips 2.0.0 deliberately**: `@beacio/mcp` was already published at 2.0.0, so the shared lockstep version had to clear it. There is no `@beacio/core@2.0.0` and there never will be.
- No breaking API change relative to 1.2.0 — the major bump is the lockstep alignment, not a source change. Fielded `@beacio/core@1.x` CDN pins remain supported via the extension skew cell (U-SKEW-01).
- CDN / install pins move to `@beacio/core@2.1.0` (see `onboarding-manifest.json`).

## 1.2.0 — 2026-07-27

- Version aligned with App Store / Safari extension **1.2.0**.
- Stability freeze surfaces (internal slots, error matrix, batch GATT wire protocol, experimental vendor path).
- CDN / install pins move to `@beacio/core@1.2.0` (see `onboarding-manifest.json`). Fielded `@beacio/core@1.0.0` CDN pins remain supported via the extension skew cell (U-SKEW-01).

## 1.0.0 — 2026-06-21

- First externally-consumed stable release. The "breaking changes are free" zero-consumers
  assumption is **retired** for the consumed `navigator.bluetooth` polyfill behaviour and
  `optionalServices` surfaces: from 1.0.0 these follow semver — additive-only across minor/patch,
  with a behavioural breaking change only in a major release. Consumers pin the exact immutable
  `@beacio/core@<version>/dist/auto.mjs` rather than a floating tag.

## 2.0.0-beta.2 — 2026-06-03

- Pre-release docs and packaging polish for the `2.0.0-beta` line.
- Documented the `import '@beacio/core/auto'` setup path in the README so installation guidance does not depend on a noisy `postinstall` message.
- Added dedicated power-management guidance covering user-gesture requirements, notification async iterator usage, queue sizing, and conservative cleanup patterns for Safari iOS BLE sessions.
- Prepared lightweight CI bundle-size tracking to watch for accidental package growth without changing runtime behavior.
