packages feed

keiro-ops-0.12.0.0: CHANGELOG.md

# Changelog

All notable changes to `keiro-ops` are recorded here. The format follows
[Keep a Changelog](https://keepachangelog.com/), and the package follows the
[Haskell Package Versioning Policy](https://pvp.haskell.org/).

## Unreleased

## 0.12.0.0 — 2026-08-14

### Breaking Changes

- Requires `kiroku-store >=0.7 && <0.8` for explicit checkpoint lifecycle, the
  public transaction-composable reset API, and the visible-head query used by
  the operator position commands, plus the renewable retention evidence required by
  schema-versioned rebuilds.

### New Features

- Embedded `rebuild reproject-stream GROUP PROJECTION STREAM` previews exact serving
  revision, target, dedup, stream-history, and work-admission facts and executes only
  with `--force`. The positive `--max-events` limit defaults to 1000 and is rechecked
  against locked stream metadata before the group fence. Human and v2 JSON outcomes
  report the admitted limit, cleared rows, replay/application counts, dedup
  inserted/existing counts, and verification; typed refusals have stable operator codes.

- Embedded read-only `rebuild external-read CONTRACT VERSION` inspection and
  preview/`--force` `rebuild retire-external-read CONTRACT VERSION`. Both render the
  supported catalog report with contract state, surface generation, PostgreSQL
  dependents, and execute grants; forced retirement uses the library lifecycle API.
- Embedded `rebuild versioned start|status|resume|abandon`, database-backed
  `rebuild retired`, and preview/`--force` `rebuild drop-retired`. Commands render the
  supported catalog operations reports, derive the physical fleet from the mounted
  validated catalog, and expose stable versioned JSON for runs and retirement blockers.

- `Keiro.Ops.Parse.nonNegativeReader`, a message-parameterized bounded reader
  now shared by global-position, stream-version, and generation options without
  changing their accepted values or domain-specific errors.
- A standalone, schema-checked operations console for Keiro- and Kiroku-owned
  database operations, with human tables and stable JSON generated from the
  same result values.
- Preview-before-`--force` mutations, schema-drift refusal, and typed stream-name
  confirmation for permanent stream operations.
- `AppHooks`, `opsCommandTree`, `runOpsInvocation`, and `mainWithHooks` for
  mounting application-owned workflow resume, timer dispatch, candidate-code
  replay audit, and validated projection-catalog rebuild commands.
- Read-only `stream subscriptions` and
  `projection position --subscription NAME` commands backed by the public
  Kiroku 0.4 durable checkpoint inventory. Both preserve member rows and report
  `global_position_distance`; neither queries Kiroku's private schema or claims
  a relevant-event lag.
- Projection catalog inventory and rebuild JSON expose each subscription's
  stable `checkpointOnMissing` value from the same validated catalog used by
  runtime registration and rebuild planning.
- Embedded catalog operations add `rebuild adopt GROUP...`. Without `--force`
  it classifies every catalog group, shows stored/current slice fingerprints
  and removed groups, and prints the exact force invocation. With `--force` it
  calls the supported transactional adoption API and reports the adopted rows.
  Existing rebuild list and preview tables also expose slice identity.
- Rebuild run tables now include `group_slice`, so status and mutation previews
  expose `$pre-canonical` directly during migration recovery.
- Embedded `wf resume-once` results expose `advanced` and `paced` counts plus
  `sleep_due` and the sorted set of `unregistered_names` in JSON (and the
  corresponding human columns), so an operator can terminate a bounded drain on
  durable progress, identify missing workflow definitions, and distinguish due
  sleeps that require the timer worker rather than another resume pass.

### Bug Fixes

- The non-forced `rebuild adopt` preview now distinguishes the named groups it will adopt
  from out-of-scope catalog drift and warns when skipped groups will still refuse startup
  registration.
- `rebuild status` and the non-forced `rebuild abandon` preview now work for
  pre-canonical runs, enabling the documented abandon, adopt, and fresh-start
  recovery sequence without direct SQL.

### Other Changes

- First public release. Requires `keiro ^>=0.12.0.0`,
  `keiro-migrations ^>=0.12.0.0`, and `keiro-pgmq ^>=0.12.0.0`.
- The source distribution now includes the BSD-3-Clause license file.
- `rebuild adopt` now renders scope-annotated group, registration, and old-name rows and
  reports the forced transaction through `keiro/catalog-adoption-preview/v2` and
  `keiro/catalog-adoption-outcome/v2` JSON envelopes. Preview refuses a requested group
  absent from the catalog with `AdoptGroupNotInCatalog`, matching forced execution.