# Prism v7.3.2 — Verification Diagnostics v2

**Released:** 2026-04-03  
**PR:** [#24](https://github.com/dcostenco/prism-mcp/pull/24)  
**Contract:** `schema_version: 1` (additive, no breaking changes)

---

## What's New

### `drift.diff_counts` — Parser Ergonomics

A new optional `diff_counts` object provides integer summaries for parsers that only need counts without iterating the full `diff` arrays:

```json
"diff_counts": {
  "added": 2,
  "removed": 1,
  "modified": 3
}
```

Counts are guaranteed to match the lengths of the corresponding `diff.added`, `diff.removed`, and `diff.modified` arrays.

### `modified[].changed_keys` — Field-Level Change Metadata

Each entry in `drift.diff.modified` now carries a `changed_keys` array listing the top-level assertion fields that differ between the stored and local versions:

```json
{
  "id": "auth-check",
  "description": "updated description",
  "changed_keys": ["assertion", "description"]
}
```

- Sorted alphabetically
- `id` is never listed (it is the matching key)
- Enables operators to triage modifications without deep-diffing the full object

### Human-Readable Rendering

Drift output now includes a summary line and field-level brackets:

```
   Diff Summary: +2 added, ~3 modified, -1 removed

   Changes Detected:
   + new-test: validates auth flow
   ~ auth-check: updated description [assertion, description]
   - old-test: deprecated check
```

## What's Unchanged

- **`schema_version: 1`** — All additions are additive. Parsers ignoring unknown fields require zero changes.
- **Strict-by-ID semantics** — No rename heuristics. A renamed test deterministically appears as one `removed` and one `added` entry.
- **`diff` remains optional** — If historical harness lookup fails, `diff` and `diff_counts` are both absent. Downstream consumers must handle this gracefully.

## Phase 3 (Deferred)

Rename heuristics will be gated behind an opt-in flag or a future `schema_version: 2` contract to preserve deterministic parser expectations established in v1.
