# Changelog

> Every release of controlroom, newest first, from its CHANGELOG.md — what changed and the pull request it came from.

Source: https://controlroom.interlace.tools/docs/changelog

## 1.0.5

### Patch Changes

- [#1160](https://github.com/ofri-peretz/burgee/pull/1160) [`0b381a0`](https://github.com/ofri-peretz/burgee/commit/0b381a0d394092edf2ea21a9143a10111aa72fe4) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - Export `./package.json`. `require('<package>/package.json')` threw `ERR_PACKAGE_PATH_NOT_EXPORTED`, which broke tools that read a dependency's manifest that way: bundlers, license scanners and version checks.
- Updated dependencies [[`0b381a0`](https://github.com/ofri-peretz/burgee/commit/0b381a0d394092edf2ea21a9143a10111aa72fe4)]:
  - caique@1.4.4
  - closeout@1.1.5
  - flagstaff@1.7.2
  - linegauge@1.1.3
  - paratext@1.0.9
  - roundel@1.1.3

## 1.0.4

### Patch Changes

- [#1156](https://github.com/ofri-peretz/burgee/pull/1156) [`05d1942`](https://github.com/ofri-peretz/burgee/commit/05d1942bda296cdc64c6c740123899ac14a3bcc2) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - A pane taller than its rectangle scrolls. Before this, `fit` kept a pane's first rows and dropped the rest, and no key could reach them. The focused pane now moves with `↑`/`↓`, PgUp/PgDn and Home/End, bound in the default keymap as `scroll.up`, `scroll.down`, `scroll.pageUp`, `scroll.pageDown`, `scroll.top` and `scroll.bottom` and listed by `hints()`. A pane at its bottom follows new lines like a log tail. Scrolled up, it stays where it was put, and its last row says how many lines are below (`↓ 180`). A resize re-clamps the position. Its position is reducer state, `ScreenState.scroll`, and `reduce(state, action, extents)` takes the pane heights that the new `extents()` measures.

  A tall pane on a live screen now opens at its last rows, where before it showed its first rows. Those rows were unreachable before, so nothing that worked stops working, but a long static text in a short pane now opens at its end until someone presses Home.

  Off a terminal nothing changes: a pipe, CI, a screen reader and an agent still get every line of every pane. `compose` with `live: false` now prints every line too, so a screen that closes inline leaves every line in the scrollback, not just the page it was on.

## 1.0.3

### Patch Changes

- [#1130](https://github.com/ofri-peretz/burgee/pull/1130) [`c05c86e`](https://github.com/ofri-peretz/burgee/commit/c05c86e2caa0fc3a89f97f7fe9c37bd7b876bfaf) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - Every drop-in subpath now type-checks under `moduleResolution: node10`, and under `module: commonjs`
  with no resolution set, which is TypeScript's default there. `import … from 'burgee/commander'`
  used to fail with TS2307 in such a project, although `require()` of the same specifier worked.
  Each package now declares `types` and a `typesVersions` map, derived from `exports`, with one key per
  typed subpath pointing at the file `exports` already names. `exports` is unchanged, so `node16`,
  `nodenext` and `bundler` read exactly what they read before. `controlroom/ink`'s declarations no
  longer name the untyped `react-reconciler`, which was TS7016 for consumers with `skipLibCheck: false`.
- Updated dependencies [[`c05c86e`](https://github.com/ofri-peretz/burgee/commit/c05c86e2caa0fc3a89f97f7fe9c37bd7b876bfaf)]:
  - caique@1.4.2
  - closeout@1.1.4
  - flagstaff@1.7.1
  - linegauge@1.1.2
  - paratext@1.0.8
  - roundel@1.1.2

## 1.0.2

### Patch Changes

- [#1045](https://github.com/ofri-peretz/burgee/pull/1045) [`c4fd9a3`](https://github.com/ofri-peretz/burgee/commit/c4fd9a3cb10bc36bef8c468365addfc6deb572cf) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - The family plugin schema (`schema.json`, identical in every plugin host) now describes `locales`, burgee's locale-pack key. A plugin carrying `locales` validates against the shared schema as it does against `burgee/locale-pack-schema.json`, which lists every message id. This package reads nothing new, and a plugin carrying `locales` registers here as before.
- Updated dependencies [[`c4fd9a3`](https://github.com/ofri-peretz/burgee/commit/c4fd9a3cb10bc36bef8c468365addfc6deb572cf), [`c4fd9a3`](https://github.com/ofri-peretz/burgee/commit/c4fd9a3cb10bc36bef8c468365addfc6deb572cf), [`b45f141`](https://github.com/ofri-peretz/burgee/commit/b45f1413f40bc775329b066af1528250cd5145f3)]:
  - caique@1.1.0
  - closeout@1.1.2
  - flagstaff@1.4.0
  - linegauge@1.1.1
  - paratext@1.0.6
  - roundel@1.1.1

## 1.0.1

### Patch Changes

- [#1011](https://github.com/ofri-peretz/burgee/pull/1011) [`1968eb4`](https://github.com/ofri-peretz/burgee/commit/1968eb46feec57bb047a9c4a4288e0cf4442f4b2) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - The README quick start runs as written. On npm it was broken for flagstaff (`rt` undefined) and linegauge (`styled` undefined), controlroom's imported flagstaff without installing it, and paratext's printed nothing. No code changed; `readme-quick-start-lock` now runs every package's quick start.

- [#1022](https://github.com/ofri-peretz/burgee/pull/1022) [`ecb0a00`](https://github.com/ofri-peretz/burgee/commit/ecb0a00ca68e9a3b3584aefabb9dcf97e3ff967a) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - The tarball no longer carries declaration files that no `exports` entry reaches. TypeScript could never open them, because a deep import is refused by `exports`. Every entry's types are unchanged. The ten packages drop 71 files and 118,312 bytes between them, burgee 35 files and 76,504 bytes, which takes its tarball from 251,814 to 225,278 bytes gzipped.
- Updated dependencies [[`1357061`](https://github.com/ofri-peretz/burgee/commit/1357061168d836d87389dc0881b4a52df648cdc3), [`49d8e94`](https://github.com/ofri-peretz/burgee/commit/49d8e943ceaf8dcef14d43c0a70c2edec1a67816), [`bfe4ab8`](https://github.com/ofri-peretz/burgee/commit/bfe4ab8b13ff04293345a69007cad9e0cb81c678), [`45a70be`](https://github.com/ofri-peretz/burgee/commit/45a70bec5d1ace1345a883afe10a3a081b081711), [`1968eb4`](https://github.com/ofri-peretz/burgee/commit/1968eb46feec57bb047a9c4a4288e0cf4442f4b2), [`65afee5`](https://github.com/ofri-peretz/burgee/commit/65afee5c96e4cae62dbb9b0ba28fab98fffdbf01), [`bcc438a`](https://github.com/ofri-peretz/burgee/commit/bcc438ac3936ee1cd530931ea090c6a8bdd016b2), [`ecb0a00`](https://github.com/ofri-peretz/burgee/commit/ecb0a00ca68e9a3b3584aefabb9dcf97e3ff967a)]:
  - flagstaff@1.3.0
  - caique@1.0.5
  - linegauge@1.1.0
  - paratext@1.0.5
  - roundel@1.1.0
  - closeout@1.1.1

## 1.0.0

### Major Changes

- [#947](https://github.com/ofri-peretz/burgee/pull/947) [`a5c3282`](https://github.com/ofri-peretz/burgee/commit/a5c3282d83f0d98ad36c83b6acbbd9898d0dfffc) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - controlroom is 1.0. Its entries `.`, `./ink`, `./plugin`, `./schema.json` and the `controlroom` bin are now a semver contract, and `controlroom/ink` is ink 8.0.0's API at that major: 1304 / 1304 on ink 8's own suite and 102 / 102 on @inkjs/ui 2.0.0's, level with real ink on both, with 100% coverage and every spec row built. Nothing changed in the code; the major ends the hold D-20261007-caique-controlroom-1-0-evidence placed on the cut, re-measured in D-20261009-controlroom-1-0.

## 0.3.5

### Patch Changes

- [#938](https://github.com/ofri-peretz/burgee/pull/938) [`9babb6d`](https://github.com/ofri-peretz/burgee/commit/9babb6da1ae7783c7e8367f89e3da9dffc85ffdb) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - npm description and README: the description says what the package does, then its dependency fact in one of two wordings ("Zero dependencies." or "No dependency outside the burgee family."), then its drop-in paths. The README's family section states how the family is built — the leaves, one-way dependencies, nothing from outside the family, trusted publishing with provenance — and its table column is "Migrates from". No API, compatibility grade or benchmark changes.
- Updated dependencies [[`9babb6d`](https://github.com/ofri-peretz/burgee/commit/9babb6da1ae7783c7e8367f89e3da9dffc85ffdb)]:
  - caique@1.0.4
  - closeout@1.0.4
  - flagstaff@1.2.5
  - linegauge@1.0.8
  - paratext@1.0.4
  - roundel@1.0.4

## 0.3.4

### Patch Changes

- [#917](https://github.com/ofri-peretz/burgee/pull/917) [`735f0f6`](https://github.com/ofri-peretz/burgee/commit/735f0f68048f2d0f5e4effad151ed5132b480bb8) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - README: the opening paragraph says what the package does first. The drop-in path follows it as one line, naming the incumbent and `npx burgee migrate`, and every compatibility row and benchmark is unchanged.
- Updated dependencies [[`735f0f6`](https://github.com/ofri-peretz/burgee/commit/735f0f68048f2d0f5e4effad151ed5132b480bb8)]:
  - caique@1.0.3
  - closeout@1.0.3
  - flagstaff@1.2.4
  - linegauge@1.0.7
  - paratext@1.0.3
  - roundel@1.0.3

## 0.3.3

### Patch Changes

- [#897](https://github.com/ofri-peretz/burgee/pull/897) [`f29f159`](https://github.com/ofri-peretz/burgee/commit/f29f159ca0c9746f58d8ba84eec9be72b1140093) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - controlroom has its own docs site at https://controlroom.interlace.tools: its README's Docs line, its `homepage`, and every family table now link there.
- Updated dependencies [[`f29f159`](https://github.com/ofri-peretz/burgee/commit/f29f159ca0c9746f58d8ba84eec9be72b1140093)]:
  - caique@1.0.2
  - closeout@1.0.2
  - flagstaff@1.2.3
  - linegauge@1.0.6
  - paratext@1.0.2
  - roundel@1.0.2

## 0.3.2

### Patch Changes

- [#892](https://github.com/ofri-peretz/burgee/pull/892) [`82292af`](https://github.com/ofri-peretz/burgee/commit/82292af35404c36566d9f977574118f2f56f6ed6) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - The root entry's doc comment, which TypeScript shows on hover and the API reference prints, no longer says the package is reserved and exports one constant. It names what the entry exports: `open()` and its runtime, the layout arithmetic, the tab, focus and collapse reducer with its hint line, and the compositor, with ink's API at `controlroom/ink` and plugins at `controlroom/plugin`. `status` is still `'reserved'`, kept so a program that read it still loads.

- [#895](https://github.com/ofri-peretz/burgee/pull/895) [`e641aa3`](https://github.com/ofri-peretz/burgee/commit/e641aa3a7494d09ad620edcd90cc0df30f2ea800) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - README: the Plugins example now default-exports its plugin, so `controlroom check` accepts it, and registers flagstaff's `log-tail` before `open()`, which threw for a pane drawn with an unregistered component.
- Updated dependencies [[`d33ae03`](https://github.com/ofri-peretz/burgee/commit/d33ae0342583cebfa54be1a043d0c085efd9eaaf)]:
  - caique@1.0.1

## 0.3.1

### Patch Changes

- [#848](https://github.com/ofri-peretz/burgee/pull/848) [`6ae533e`](https://github.com/ofri-peretz/burgee/commit/6ae533e4610c32bad557f5d74a24d0c9a0f07f7e) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - The family `schema.json` describes what five values look like. `contract` is `1`, and burgee refuses a plugin that declares none. A caique widget's `static(spec)` gets `{ kind, message, ...sample.done }`. A seniority `rank` sits between the built-in layers at flag 0, environment 10, config file 20, `package.json` 30 and default 40. A burgee hook's `filter` is `{ command: RegExp }`, now with `command` required, so the schema and the host refuse the same filters.

- [#857](https://github.com/ofri-peretz/burgee/pull/857) [`d80b2d0`](https://github.com/ofri-peretz/burgee/commit/d80b2d0f4a535400c6825b42ac2d8e1be2827f4e) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - The family `schema.json` closes a bellpull resolver's `when` with `additionalProperties: false`, so the schema and bellpull's own validation refuse the same unknown keys.
- Updated dependencies [[`446a691`](https://github.com/ofri-peretz/burgee/commit/446a691ae1b1ff05e06699fd44034f61e91906c2), [`d80b2d0`](https://github.com/ofri-peretz/burgee/commit/d80b2d0f4a535400c6825b42ac2d8e1be2827f4e), [`6ae533e`](https://github.com/ofri-peretz/burgee/commit/6ae533e4610c32bad557f5d74a24d0c9a0f07f7e), [`d80b2d0`](https://github.com/ofri-peretz/burgee/commit/d80b2d0f4a535400c6825b42ac2d8e1be2827f4e), [`fd8e659`](https://github.com/ofri-peretz/burgee/commit/fd8e659076420852b954c8dc57828f575c1df8b8), [`6ae533e`](https://github.com/ofri-peretz/burgee/commit/6ae533e4610c32bad557f5d74a24d0c9a0f07f7e)]:
  - caique@1.0.0
  - closeout@1.0.1
  - flagstaff@1.2.2
  - linegauge@1.0.5
  - paratext@1.0.1
  - roundel@1.0.1

## 0.3.0

### Minor Changes

- [#839](https://github.com/ofri-peretz/burgee/pull/839) [`7694faa`](https://github.com/ofri-peretz/burgee/commit/7694faa1328fb5db10eeea8ffc7b074ca667f82e) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - `controlroom/ink` is ink 8.0.0's API, graded 1304 / 1304 by ink 8's own suite (control 1303 / 1304). New: `usePaste`, `useAnimation`, `useBoxMetrics`, `useWindowSize`, `suspendTerminal` and `waitUntilRenderFlush` on `useApp`, the `alternateScreen` and `interactive` options, `wrap="hard"`, and the yoga props ink 8 sets — `maxWidth`/`maxHeight`, `aspectRatio`, `top`/`right`/`bottom`/`left`, `position: static`, `alignContent`. Where ink 8 changed ink 6's answer, the drop-in follows ink 8: the kitty keyboard answer is read off the input stream, Delete is no longer read as Backspace, and a non-interactive debug run ends with a newline.

## 0.2.1

### Patch Changes

- Updated dependencies [[`1945d65`](https://github.com/ofri-peretz/burgee/commit/1945d65f22aafabd380d67f1e40341d6ef3aa6fa), [`1945d65`](https://github.com/ofri-peretz/burgee/commit/1945d65f22aafabd380d67f1e40341d6ef3aa6fa), [`9ebef65`](https://github.com/ofri-peretz/burgee/commit/9ebef654930ac4565f1ee04ec5f8b6f735c6a1d9), [`1945d65`](https://github.com/ofri-peretz/burgee/commit/1945d65f22aafabd380d67f1e40341d6ef3aa6fa)]:
  - closeout@1.0.0
  - paratext@1.0.0
  - roundel@1.0.0
  - caique@0.7.2
  - flagstaff@1.2.1

## 0.2.0

### Minor Changes

- [#816](https://github.com/ofri-peretz/burgee/pull/816) [`5230016`](https://github.com/ofri-peretz/burgee/commit/52300169a98ece41b3544e5316833464e63a7c83) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - controlroom hosts an input line inside a screen (R20): `open(rt, { input: { editor, pane, onSubmit } })` routes keys to caique's line editor while its pane has focus and lets unused keys fall through to the keymap; outside a terminal, entries come from piped stdin, never a wait. closeout gains `bracketedPaste()` in `closeout/cursor`, paired with its restore like the alternate screen.

- [#816](https://github.com/ofri-peretz/burgee/pull/816) [`5230016`](https://github.com/ofri-peretz/burgee/commit/52300169a98ece41b3544e5316833464e63a7c83) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - `controlroom/ink` negotiates the kitty keyboard protocol as ink does: pushed at once with `kittyKeyboard: { mode: 'enabled' }`, and in `auto` mode only once a known terminal answers the query, with every other byte handed back to stdin and the pop written at unmount. ink's own suite now passes 584 / 584. paratext's `csi` spells the protocol's three sequences (`kittyKeyboardPush`, `kittyKeyboardPop`, `kittyKeyboardQuery`).

- [#816](https://github.com/ofri-peretz/burgee/pull/816) [`5230016`](https://github.com/ofri-peretz/burgee/commit/52300169a98ece41b3544e5316833464e63a7c83) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - controlroom is no longer a reservation: the screen (`open()`, inline or in the alternate screen, with static and NDJSON projections), the layout and tab state, and `controlroom/ink` ship. The package is held to the family's 100% coverage thresholds.

- [#816](https://github.com/ofri-peretz/burgee/pull/816) [`5230016`](https://github.com/ofri-peretz/burgee/commit/52300169a98ece41b3544e5316833464e63a7c83) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - controlroom hosts plugins (R10): `keymaps` and `panes` register through `controlroom/plugin`'s `register()` against the family schema, a screen takes either by name, and `controlroom check <plugin-file>` reports what a plugin contributes. The family schema every host ships gains the `keymaps` and `panes` definitions.

### Patch Changes

- [#815](https://github.com/ofri-peretz/burgee/pull/815) [`28cb9a5`](https://github.com/ofri-peretz/burgee/commit/28cb9a5e13f3e638a77ecc78bba514113d2b8b3a) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - controlroom's README documents the line that runs packages written for ink on `controlroom/ink` unchanged — `"ink": "file:./ink"`, a two-file package that re-exports the drop-in — and why a bare `npm:` alias cannot: it names a package, not a subpath. `ink-spinner`, `ink-text-input` and `ink-select-input` run that way, as published, in `examples/ink-ecosystem`, and `examples/chat-cli-ink` is the chat boilerplate written for Ink and run on the drop-in.

  The benchmarks measure controlroom's weight gates against ink 6.8.0 on React 19.3.0, each at ≤ 1.0×: the drop-in with React and the reconciler bundled against ink with React (W1, 0.745), the same two installed, in bytes and in packages (W2, 0.378 and 0.238), the native root against ink alone (W3, 0.048), and importing each entry point against importing ink and React (W4, 0.289 and 0.144). A B4 side may now be several imports, with externals, and counted whole when its peers load under top-level await.

- Updated dependencies [[`a47209b`](https://github.com/ofri-peretz/burgee/commit/a47209b3a7774e4ecdd1def3043d19afed5a1266), [`5230016`](https://github.com/ofri-peretz/burgee/commit/52300169a98ece41b3544e5316833464e63a7c83), [`5230016`](https://github.com/ofri-peretz/burgee/commit/52300169a98ece41b3544e5316833464e63a7c83), [`5230016`](https://github.com/ofri-peretz/burgee/commit/52300169a98ece41b3544e5316833464e63a7c83)]:
  - caique@0.7.1
  - closeout@0.7.0
  - paratext@0.9.0
  - flagstaff@1.1.1
  - linegauge@1.0.4
  - roundel@0.6.3

## 0.1.0

### Minor Changes

- [#809](https://github.com/ofri-peretz/burgee/pull/809) [`4f45dbf`](https://github.com/ofri-peretz/burgee/commit/4f45dbf339ee02e4c7721b0099b8b3f486bb86f3) Thanks [@ofri-peretz](https://github.com/ofri-peretz)! - `controlroom/ink`: a drop-in for `ink` 6.8 — `render`, `renderToString`, `Box`, `Text`, `Static`, `Transform`, `Newline`, `Spacer`, every ink hook and `measureElement` — rendered by the program's own React through React's own reconciler (React 18 and 19), and laid out by a TypeScript port of yoga's flexbox for the props ink exposes, with no yoga. `react` and `react-reconciler` are optional peers: installed alone, the subpath refuses on first import with `E_PEER_MISSING` and `npm install react react-reconciler` as its `fix`, and the package root never loads either. Graded by ink's own suite at 576 of 584 cases and by `@inkjs/ui`'s at 103 / 103, with `'ink'` resolved to the drop-in.

  compat-oracle resolves a target's optional peers from the suite's own tree (`Host.peers`) and can serve a gated file's internal import from the target's own module (`Host.targetInternals`); both ink rows now grade `controlroom/ink`.

  `burgee migrate` reports `ink` → `controlroom/ink` as a graded drop-in path that is not level yet, and does not rewrite it.

### Patch Changes

- Updated dependencies [[`81fc994`](https://github.com/ofri-peretz/burgee/commit/81fc994c27ae7731495c810c4f642ba63d7eb073), [`81fc994`](https://github.com/ofri-peretz/burgee/commit/81fc994c27ae7731495c810c4f642ba63d7eb073), [`f30e011`](https://github.com/ofri-peretz/burgee/commit/f30e011b129abe89c4c79706e4e6a7432c2fab7f), [`f30e011`](https://github.com/ofri-peretz/burgee/commit/f30e011b129abe89c4c79706e4e6a7432c2fab7f)]:
  - caique@0.7.0
  - flagstaff@1.1.0
