# Drift-state baseline — 2026-05-28

**Auditor:** release-warden (Phase 0)
**Branch:** main
**HEAD SHA:** `631ecfc31be37f2cdc1cbde5d11a76e11bd72bb3`
**Adjudicated policy:** (a) history-accurate — tags resolved via `npm view ... gitHead`
**Scope:** read-only audit; no production files modified.

## ⚠️ Premise correction (must read first)

The MissionBrief stated:

> "git tags max at v0.9.0"
> "Cannot tag v0.10.6 or v0.11.1 without the actual published gitHead SHAs"

**Both claims are false at HEAD.**

- Tags **v0.10.0, v0.10.1, v0.10.2, v0.10.4, v0.10.6, v0.11.0, v0.11.1** ALL exist locally.
- The tags **already point to the npm-published `gitHead` commits** (verified for 10/35 packages × 2 versions; perfect consistency).
- There is therefore **nothing to back-fill**. WS-1's tag-backfill premise needs re-evaluation before any executor acts on it.

The remaining "drift" is *intra-repo*, not tag-vs-npm:
- Root `VERSION` + root `package.json.version` = **0.11.1**
- `npm @reactive-agents/core@latest` = **0.11.1**
- Workspace `packages/*/package.json.version` = **0.10.6** (34 of 35 pkgs) / **0.9.5** (judge-server only)

This pattern is exactly what `release.ts` *produces by design* (per its own comment, lines 205-208): the script writes a new `VERSION` file but **does not** bump the workspace `package.json` files — the publish.yml tag-driven flow is supposed to sync `VERSION` back to main "so `cat VERSION` always matches npm @latest (repo package.json stays unbumped by the tag-driven flow)." In other words: workspace 0.10.6 + VERSION 0.11.1 + npm 0.11.1 is the **expected steady-state** of the release flow, not a defect.

What IS a defect: `@reactive-agents/judge-server` package.json shows `0.9.5` — a drift OF the drift floor (one package out of step with the others' 0.10.6). And the npm registry has no `judge-server` package at all (404 on any version) — it appears to be `"private": true` or simply never published.

---

## 1. All 35 packages × workspace version × npm @latest

`npm view <pkg> version` against the production registry (queried 2026-05-28).

| # | Package | workspace pkg.json | npm @latest | delta |
|---|---|---|---|---|
| 1 | @reactive-agents/a2a | 0.10.6 | 0.11.1 | ✔ workspace lag (expected) |
| 2 | @reactive-agents/benchmarks | 0.10.6 | — (private) | n/a |
| 3 | @reactive-agents/channels | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 4 | @reactive-agents/compose | 0.10.6 | 0.11.1 | ✔ workspace lag (not at 0.10.6 on npm; first pub at 0.11.1) |
| 5 | @reactive-agents/core | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 6 | @reactive-agents/cost | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 7 | create-reactive-agent | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 8 | @reactive-agents/diagnose | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 9 | @reactive-agents/eval | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 10 | @reactive-agents/gateway | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 11 | @reactive-agents/guardrails | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 12 | @reactive-agents/health | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 13 | @reactive-agents/identity | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 14 | @reactive-agents/interaction | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 15 | **@reactive-agents/judge-server** | **0.9.5** | **— (not on npm)** | **⚠ DRIFT: 0.10.6 floor missed; never published** |
| 16 | @reactive-agents/llm-provider | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 17 | @reactive-agents/memory | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 18 | @reactive-agents/observability | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 19 | @reactive-agents/observe | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 20 | @reactive-agents/orchestration | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 21 | @reactive-agents/prompts | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 22 | @reactive-agents/react | 0.10.6 | 0.11.1 | ✔ workspace lag (first pub at 0.11.1) |
| 23 | @reactive-agents/reactive-intelligence | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 24 | reactive-agents (umbrella) | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 25 | @reactive-agents/reasoning | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 26 | @reactive-agents/replay | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 27 | @reactive-agents/runtime | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 28 | @reactive-agents/runtime-shim | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 29 | @reactive-agents/scenarios | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 30 | @reactive-agents/svelte | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 31 | @reactive-agents/testing | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 32 | @reactive-agents/tools | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 33 | @reactive-agents/trace | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 34 | @reactive-agents/verification | 0.10.6 | 0.11.1 | ✔ workspace lag |
| 35 | @reactive-agents/vue | 0.10.6 | 0.11.1 | ✔ workspace lag |

`"✔ workspace lag"` = expected by the design of `scripts/release.ts:205-208`: workspace package.json files are intentionally not bumped post-release. The single real anomaly is **judge-server**.

## 2. Root VERSION file

```
0.11.1
```

(also `package.json.version` = `0.11.1`, name = `reactive-agents`)

## 3. Git tag state

Full list of `v0.*` tags (sorted with `sort -V`):

```
v0.1.0    v0.2.0    v0.2.1    v0.3.0    v0.3.1    v0.4.0
v0.5.0    v0.5.2    v0.5.3    v0.5.4    v0.5.5    v0.5.6
v0.6.0    v0.6.1    v0.6.2    v0.6.3
v0.7.0    v0.7.5    v0.7.6    v0.7.8
v0.8.0
v0.9.0
v0.10.0   v0.10.1   v0.10.2   v0.10.4   v0.10.6
v0.11.0   v0.11.1
```

**Max tag in repo: `v0.11.1`** (not v0.9.0 as the MissionBrief asserted).

Tag types + the commits they resolve to:

| Tag | type | tag-object SHA | resolved commit (`v^{commit}`) | commit subject |
|---|---|---|---|---|
| v0.11.1 | annotated | `cab7ced8588f52a3eddb3b63eb0fc852ef790019` | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` | `docs(agents): note VERSION source-of-truth + release:dry self-clean` |
| v0.10.6 | lightweight | `f17da8ec159f01ec716c895d6c27e924da01ade4` | `f17da8ec159f01ec716c895d6c27e924da01ade4` | `chore: version packages` |

(`rtk git rev-parse v0.11.1` returns the tag-object SHA, not the commit — that is why a naive comparison against `npm gitHead` appears to mismatch. `v0.11.1^{commit}` dereferences correctly.)

## 4. Per-version `gitHead` resolution (npm registry)

Sample: 10 packages × 2 versions = 20 queries.

### v0.10.6 (`npm view @reactive-agents/<pkg>@0.10.6 gitHead`)
| package | gitHead |
|---|---|
| core | `f17da8ec159f01ec716c895d6c27e924da01ade4` |
| runtime | `f17da8ec159f01ec716c895d6c27e924da01ade4` |
| reasoning | `f17da8ec159f01ec716c895d6c27e924da01ade4` |
| llm-provider | `f17da8ec159f01ec716c895d6c27e924da01ade4` |
| memory | `f17da8ec159f01ec716c895d6c27e924da01ade4` |
| tools | `f17da8ec159f01ec716c895d6c27e924da01ade4` |
| reactive-intelligence | `f17da8ec159f01ec716c895d6c27e924da01ade4` |
| diagnose | `f17da8ec159f01ec716c895d6c27e924da01ade4` |
| compose | NOT PUBLISHED at 0.10.6 (first appeared 0.11.1) |
| react | NOT PUBLISHED at 0.10.6 (first appeared 0.11.1) |

### v0.11.1 (`npm view @reactive-agents/<pkg>@0.11.1 gitHead`)
| package | gitHead |
|---|---|
| core | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| runtime | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| reasoning | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| llm-provider | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| memory | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| tools | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| compose | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| react | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| reactive-intelligence | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |
| diagnose | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` |

**Cross-package consistency:** ✅ Perfect within each version. All sampled packages share one gitHead per release. No structural divergence to adjudicate.

**Tag-vs-npm consistency:**
- v0.11.1 tag → commit `6bd11d6c…` ≡ npm gitHead `6bd11d6c…` ✅
- v0.10.6 tag → commit `f17da8ec…` ≡ npm gitHead `f17da8ec…` ✅

## 5. `bun run release:dry 0.12.0` against current main

```
$ bun scripts/release.ts --dry-run "0.12.0"
error: not logged in to npm (`npm whoami` failed). Run `npm login` first.
error: script "release:dry" exited with code 1
```

Exit code: 1 (the outer `bun run` wrapper masked this as 0 in the shell `$?` but the script itself printed `code 1`).

**Important:** the script fails at the `npm whoami` gate (`scripts/release.ts:65-66`) **before** doing any drift inspection. Reading the script confirms there is no separate "drift gate" prior to auth: drift is "structurally prevented" by the script stamping all packages itself to one version, not detected. So the brief's expectation "FAIL with drift error" is not what this script produces — it fails on auth first, drift never gets inspected. If we want a true drift gate before auth, that's a script change (out of release-warden authority).

## 6. Gate baseline at HEAD

| Gate | Command | Status | Notes |
|---|---|---|---|
| Build | `bunx turbo run build` | ✅ PASS | 38/38 successful, 37 cached, 31.95s |
| Tests | `bun test` | ✅ PASS | 5750 pass / 23 skip / **0 fail**, 14138 expects, 659 files, 76.12s (5773 ran — above brief's ≥3219 expectation) |
| Typecheck | `bun run typecheck` | ❌ **FAIL** | `@reactive-agents/verification` tests/{hallucination-detection,layers}.test.ts reference outdated `VerificationLLM` shape missing `embed` property — 8+ TS2345 errors |
| release:dry | `bun run release:dry 0.12.0` | ❌ FAIL (auth) | Cannot exercise drift logic without `npm login`; not a drift signal |

### Typecheck failure detail

```
packages/verification/tests/hallucination-detection.test.ts(145,9): error TS2345:
  Argument of type '{ complete: (_req: any) => Effect.Effect<{ content: string; }, never, never>; }'
  is not assignable to parameter of type 'VerificationLLM'.
  Property 'embed' is missing ...
packages/verification/tests/layers.test.ts(76,77): error TS2345: ...same...
```

8 errors total across two test files. This is *test-file* drift: the production `VerificationLLM` type gained a required `embed` method but the unit-test fakes weren't updated. This blocks the release-warden manifest's "Typecheck clean" gate condition. Either fix the test fakes (one-line `embed: () => Effect.succeed([])`) or escalate.

## 7. Recommendation block

### Tag-backfill SHAs

Given history-accurate policy (a):

| Tag desired | Recommended SHA | Rationale |
|---|---|---|
| v0.10.6 | `f17da8ec159f01ec716c895d6c27e924da01ade4` | Matches npm `gitHead` across all 8 sampled packages; **tag already exists at this commit** — no action required |
| v0.11.1 | `6bd11d6cae905d44cdddf51cd4891572a1e96b99` | Matches npm `gitHead` across all 10 sampled packages; **tag already exists at this commit** (annotated) — no action required |

### Cross-package SHA divergence flag

**None.** Per-version gitHeads are perfectly consistent within the 10-package sample. The lockstep publisher does the right thing.

### Findings the executor MUST consider before WS-1 fires

1. **WS-1's tag-backfill premise is invalid at HEAD.** Tags for both v0.10.6 and v0.11.1 already exist locally and already point to the npm gitHeads. Before WS-1 stamps or pushes anything, re-confirm whether those tags exist on `origin` — they may already be present remotely too. Check with `rtk git ls-remote --tags origin v0.10.6 v0.11.1`. If yes, WS-1 is a no-op and should be closed.

2. **The real drift is `judge-server@0.9.5`.** This package's `version` field never advanced past 0.9.5 and the package isn't on npm. Either:
   - (a) it's intentionally private and the version is cosmetic — set `"private": true` and lockstep-stamp it
   - (b) it should publish — fix the publish config + start including it in the lockstep
   This is a user adjudication, not a warden action.

3. **The drift `release.ts` is supposed to gate against is not gateable at current state.** The script bails on `npm whoami` before reading anything. To actually exercise the drift check via dry-run, either: (a) `npm login` and re-run, or (b) edit `release.ts` to move the drift inspection ahead of the auth check. Both are out of warden authority — escalate if WS-1 needs `release:dry` to actually run.

4. **Typecheck is RED at HEAD.** Per the warden manifest, "Typecheck clean" is a mandatory gate condition. Build is green (and manifest notes build is authoritative for `ignoreDeprecations` false positives), but these `verification` failures are NOT a `"6.0"` false positive — they are real type mismatches in test files. The release-warden gate fails today. A new tag (e.g. v0.12.0) cannot be cut without either fixing the test fakes (`packages/verification/tests/hallucination-detection.test.ts` lines 145, 162, 176, 192 and `packages/verification/tests/layers.test.ts` lines 76, 97, 118, 139) or amending the gate scope. Escalate.

5. **Brief's stated baseline numbers re-confirm.** `bun test` is well above the brief's ≥3219 floor (5750 pass). Build hits 38/38. The repo is "ship-ready" except for the typecheck regression in verification tests.

---

## Appendix — Commands run (verbatim)

```bash
cat VERSION                                              # → 0.11.1
grep version package.json (root)                         # → 0.11.1, name reactive-agents
rtk git tag --list 'v*' | sort -V                        # → 29 tags v0.1.0…v0.11.1
ls packages/ | wc -l                                     # → 35
rtk git rev-parse v0.11.1 v0.10.6 HEAD                   # tag-object SHAs + HEAD
rtk git rev-parse v0.11.1^{commit} v0.10.6^{commit}      # commit SHAs
rtk git cat-file -t v0.11.1 v0.10.6                      # tag / commit
npm view @reactive-agents/<pkg>@<ver> version gitHead    # × 20 (10 pkgs × 2 vers)
bunx turbo run build                                     # → 38/38 PASS, exit 0
bun run typecheck                                        # → FAIL on @reactive-agents/verification, exit 2
bun test                                                 # → 5750 pass / 23 skip / 0 fail, exit 0
bun run release:dry 0.12.0                               # → fails at npm whoami gate, exit 1
```

