# @pleach/observe changelog (/docs/changelog/observe)



This page collects the **site-content changelog entries** that
materially touched the [`@pleach/observe`](/docs/observe) docs
surface or named a `@pleach/observe` symbol. It is not the
runtime changelog — the canonical record of `@pleach/observe`
runtime behavior lives in the upstream package
[`CHANGELOG.md`](https://github.com/pleachhq/getpleach) and on
[npmjs.org/package/@pleach/observe](https://www.npmjs.com/package/@pleach/observe).

See the combined site changelog at
[`/docs/changelog/combined`](/docs/changelog/combined) for the
chronological unified view across every SKU.

## Unreleased [#unreleased]

### Fixed [#fixed]

* **[`@pleach/observe`](/docs/observe) surface reconciled with the
  shipped recorder (devharness FINDING 83–87).** `getRecorder()`
  returns `ObserveRecorder` and **throws** if called before `init`
  (it never returns `undefined`); a second `init` **throws**
  (singleton-per-process, not a warn-and-return no-op); a `redactor`
  that throws is now documented as **fail-closed** — the SDK
  swallows, warns via `[Observe:redactor-threw]`, and **drops** the
  row (the raw pre-redaction row is never written). The OTel
  destination `Callout` corrected to the real envelope: span name
  `` `<family>.<callClass>` `` (e.g. `anthropic.synthesize`) with
  `gen_ai.*` attributes plus `pleach.observe.{turn_id,provider_id,
  cost_usd}` / `pleach.observe.tag.*` (was the fictional
  `pleach.audit.call` / `pleach.turn_id` set). `BUILT_IN_MATCHERS`
  ships email + phone + SSN only (dropped the "credit card" claim).
  Checked against `observe/src/recorder.ts` + `destinations/otel.ts`
  * `redact.ts`.

* **Schema `codeRepository` + `sameAs` for
  [`@pleach/observe`](/docs/observe) corrected** in the site's
  Organization + SoftwareApplication JSON-LD `@graph` (inlined in
  `<head>` on every page). Both fields now point at
  `https://github.com/pleachhq/observe` (was
  `https://github.com/pleachhq`, a
  leftover from when the SKU schemas were drafted against an
  upstream monorepo). Load-bearing because `sameAs` is the field
  AI search engines use for entity reconciliation across the npm
  ↔ GitHub ↔ docs boundary. See the
  [combined view](/docs/changelog/combined) for the full
  cross-SKU pack.

### Added [#added]

* **[`@pleach/observe`](/docs/observe)** — new top-level page
  for the brownfield audit-row SDK. Documents the five-entry
  facade surface (`init`, `startTurn`, `flush`, `recordCall`,
  `subagent`, `getRecorder`), the `ObserveRow` shape as a strict
  subset of the [`AuditableCall` v7](/docs/auditable-call-row)
  schema, the four destinations (Postgres, Supabase, OTel,
  Memory) on the `./destinations` subpath, the
  custom-destination interface (`write` + optional `flush`),
  the hookable-vs-not-hookable split against the runtime, and
  composition with [`@pleach/core`](/docs/core) when both
  surfaces run in the same process. Phase 0 status callout
  makes the design-target stance explicit —
  `@pleach/observe@0.1.0-alpha.0` is scoped, not yet on npm;
  Phase 1 publish is the next cut.
* **Per-recipe deep-dive pages** —
  [`BYOK observability`](/docs/recipes/byok-observability),
  [`observableChatbot`](/docs/recipes/observable-chatbot),
  [`instrumentedCodingAgent`](/docs/recipes/instrumented-coding-agent),
  and [`enterpriseAgent`](/docs/recipes/enterprise-agent) all
  compose `@pleach/observe`.
* **[Packages](/docs/packages)** — added the `@pleach/observe`
  matrix row in the Reserved tier with the row note
  `0.0.1 · Reserved · 0.1.0-alpha.0 scoped`, and
  reworked the Reserved bullet to distinguish
  [`@pleach/trust-pack`](/docs/packages) (placeholder, no
  contract published) from [`@pleach/observe`](/docs/observe)
  (Phase 0 contract locked, scoped for Phase 1 under
  FSL-1.1-Apache-2.0).
* **[Homepage](/) — new "Keep your stack" block makes
  [`@pleach/observe`](/docs/observe) a top-level surface on the
  marketing home.** The brownfield path now sits between "Should
  you stay where you are?" and "Already paying the lab": wrap an
  existing Vercel AI SDK / LangChain / hand-rolled loop in \~15
  lines. Its diagram (`components/observe-brownfield-diagram.tsx`)
  shows the `init` + per-turn recorder + destination-plug hook
  fanning out to the four destinations — `postgres()`,
  `supabase()`, `otel()`, `memory()` — over the BYOK code shape
  (`init`, `startTurn`, `recordCall`, `end`). The
  `ObserveRow`-is-a-strict-subset-of-`AuditableCall` runway claim
  is the figure caption. Cross-links
  [adoption paths](/docs/adoption-paths) and
  [BYOK observability](/docs/recipes/byok-observability). Block
  states `@pleach/observe` is in alpha; the SDK layer stays free.

### Changed [#changed]

* **Pricing rewrites** — *audit rows ship where you point them*
  — Postgres, Supabase, OTel collector into Datadog / Honeycomb
  / Grafana / your existing OTLP backend, or a custom
  destination; the enterprise integration is the *bridge* from
  `@pleach/observe` into the review surface your team already
  runs.
* **Pricing — "Hosted Observe at enterprise scope"** named as a
  paid enterprise product alongside Hosted Gateway and
  compliance attestation services.
