# OpenChrome v1.12.1

Release date: 2026-05-15

## Summary

v1.12.1 is a focused follow-up to [v1.12.0](v1.12.0.md). It merges the
accumulated `develop` backlog — the **Competitive Benchmark Suite**
(Epic #1254), **browser lanes**, and **opt-in codegen replay artifacts** —
into `main`:

```
v1.12.0  →  v1.12.1   (this release)

  66 files changed
  +5,210 / -45 lines
  ~24 PRs merged (#1252–#1275)
  5  new MCP tools             (default tools/list now returns 115 entries)
  1  new CI workflow           (cross-platform benchmark matrix)
  0  source files removed
  2  new devDependencies       (js-tiktoken, playwright — dev/test only)
  0  new mandatory runtime deps (argon2 remains the only native dep)
```

Everything in this release is **additive or test-only**. The runtime MCP
surface gains five tools; the rest of the change is a new `tests/benchmark/`
subsystem, a benchmark CI workflow, and a small set of opt-in server hooks.
No existing tool changed name, schema, or return shape. A v1.12.0
`~/.claude/.mcp.json` works unchanged.

The facts-versus-decisions split from the portability-harness contract still
holds: the benchmark suite is pure measurement code, the new tools are
deterministic fact capture, and no outbound LLM call is required by the
core tier.

---

## Upgrade

```bash
npm install -g openchrome-mcp@1.12.1
openchrome check        # verify the installed CLI and runtime wiring
openchrome doctor       # full environment diagnostics
```

Fresh install:

```bash
npm install -g openchrome-mcp@latest
openchrome check
openchrome info
```

No configuration changes are required. Every new subsystem is either
additive (new tools, new CI workflow) or opt-in (codegen replay behind an
env flag).

---

## Breaking changes

**None at the source-code level.** Every existing tool keeps its name,
input schema, and return shape. The single observable change a v1.12.0
client can hit:

### Tier 1 tool surface expanded (110 → 115)

The default `tools/list` surface grew by five tools — a default (no
`--pilot`) introspection now returns **115 tool entries**. All additions
are **additive**; no tool was removed or renamed.

| New tool | Tier | Purpose |
|---|---|---|
| `oc_skill_export` | core | Export a recorded skill as a portable artifact. |
| `oc_lane_create` | core | Open a task-scoped browser lane (isolated tab group). |
| `oc_lane_list` | core | List active browser lanes. |
| `oc_lane_get` | core | Read a browser lane by id. |
| `oc_lane_close` | core | Close a browser lane and release its tabs. |

**Migration**: if your MCP client or test harness pins an exact tool
count, refresh the expected value to `115`. If it enumerates tools by
name, no change is required.

---

## What's new

### Competitive Benchmark Suite (Epic #1254)

A new `tests/benchmark/` subsystem establishes a reproducible, cross-library
benchmark harness. It is **measurement infrastructure** — it ships the
scoring cores, fixtures, runners, and competitor adapters, with real
published numbers landing in follow-up runs.

**Harness foundation (#1255)**

- Shared result envelope + JSON schema (`tests/benchmark/schemas/result.schema.json`)
  so every axis emits the same machine-checkable shape, with embedded
  environment and competitor version pins.
- Environment capture utility — records OS, Node version, git SHA, and
  (for LLM-driven axes) the pinned model id.
- Competitor adapters for **Playwright** and **Puppeteer**, plus an adapter
  index. The registry of pinned competitor versions lives in
  [`benchmark/COMPETITORS.md`](../../benchmark/COMPETITORS.md); hosted/paid
  services are intentionally out of scope (not reproducible on a local run).

**Scoring axes**

| Axis | Sub-issue | What it measures |
|---|---|---|
| Token Efficiency | #1256 | Field retention + payload compression vs. a structured ground-truth spec. Uses the `cl100k_base` tokenizer via `js-tiktoken` — a real, deterministic, pure-JS BPE tokenizer applied uniformly across libraries. Rubric committed *before* measurement (`tests/benchmark/fixtures/token-efficiency/RUBRIC.md`). |
| Agent Task Success | #1257 | Goal-completion scoring core, plus an expanded WebVoyager task corpus (tasks 11–18) with structural validation. |
| Speed / Latency | #1258 | Single-action latency runner against a local static fixture server — no network variance. |
| Reliability & Fault Recovery | #1259 | Flaky rate, recovery rate, and cross-platform stability. Ships a library-agnostic fault-injection proxy, CDP-level fault injectors, and a cross-platform benchmark CI workflow. |
| Developer Experience | #1261 | DX scoring core — quantifies setup/ergonomics friction. |

**Fixtures**

- Local static fixture server for deterministic latency runs (#1258).
- Local login-wall app fixture for auth-flow benchmarks (#1260).
- Token-efficiency starter corpus — three structured archetypes
  (e-commerce, news, docs) establishing the baseline measurement path (#1256).

**CI**

- `.github/workflows/benchmark-reliability.yml` — a path-filtered workflow
  that runs the benchmark suites across **macOS / Linux / Windows** on
  Node 18 / 20 / 22. `fail-fast` is disabled so every matrix cell runs to
  completion: the cross-platform pass rate is itself a benchmark metric.

### Browser lanes (#1037)

Task-scoped **browser lanes** isolate the tabs a single task touches, so
parallel or sequential tasks don't step on each other's tab state. Exposed
through four new core tools — `oc_lane_create` / `oc_lane_list` /
`oc_lane_get` / `oc_lane_close` — backed by `src/core/browser-lanes.ts`.

### Opt-in codegen replay artifacts (#836)

When codegen capture is enabled, the server records each tool call into a
replay envelope and attaches it to the tool result under a `replay` key.
Recorded skills can be exported as portable artifacts via the new
`oc_skill_export` tool. Both are **opt-in** — with the feature flag off,
tool results are byte-identical to v1.12.0.

### Observability fixes

- `oc_skill_export` and the `oc_lane_*` tools are registered in the tool
  annotations map and surfaced in the live-state snapshot, so introspection
  and the dashboard stay consistent with the registered tool surface.

---

## Dependency footprint

Two new **devDependencies** only:

- `js-tiktoken` — pure-JS BPE tokenizer for the Token Efficiency axis. No
  native or wasm component; runs on every CI OS.
- `playwright` — required by the Playwright competitor adapter in the
  benchmark suite.

Neither is a runtime dependency of the MCP server. `argon2` remains the
only mandatory native runtime dependency. No runtime dependency was added
or removed; no source file was removed.

Two new npm scripts expose the benchmark runners: `bench:latency` and
`bench:tokens`.

---

## Reliability & security carried forward

All v1.10.x / v1.11.x / v1.12.0 hardening continues unchanged — HTTP
transport fail-closed policy, dashboard REST authz, file-upload root
restriction, screenshot/vision payload guards, same-origin CORS + DNS-rebind
defense, pilot handoff AES-256-GCM persistence, stale CDP reconnect
invalidation, console-capture line/byte caps, secrets masking, and
host-allowlist enforcement.

This release adds no new attack surface: the benchmark suite is test-only
code, and the five new tools are deterministic fact capture / lifecycle
management with no outbound network or LLM call.

---

## Verification

- `npm install`: clean (`package-lock.json` synced to 1.12.1)
- `npm run build`: clean (`tsconfig.cli.json` + `tsconfig.json`)
- Full Jest suite: passes on the merged `main`
- Merge `develop` → `main`: no conflicts (clean three-way merge)

---

## References

- v1.12.0 release notes: [`docs/releases/v1.12.0.md`](v1.12.0.md)
- v1.11 canonical reference: [`docs/releases/v1.11.1.md`](v1.11.1.md)
- Competitor version registry: [`benchmark/COMPETITORS.md`](../../benchmark/COMPETITORS.md)
- Token-efficiency rubric: `tests/benchmark/fixtures/token-efficiency/RUBRIC.md`
- Benchmark CI workflow: `.github/workflows/benchmark-reliability.yml`
