{
  "$schema": "../../schema/run.schema.json",
  "run_id": "prisma--claude-sonnet-5--v6-a--2026-09-12",
  "supersedes": null,
  "replicate_of": null,
  "library": {
    "name": "prisma",
    "ecosystem": "npm",
    "latest_version_at_test": "7.10.0",
    "latest_version_verified_on": "2026-09-12",
    "latest_version_note": "The battery targets prisma LF39 — `generator client { engineType }`, filed the same day (JOURNAL/164) with nothing charged against it. Its window is [6.16.0, 7.0.0) and its charge is at 7.0.0. Every surface the tasks touch was re-driven this session before the prompt was written, on the bisector's 31-rung ladder (one release per directory, resolved alone): `engineType = \"client\"` builds a client differing from the default only on 6.16.0-6.19.0, and from 7.0.0 emits the identical file set to omitting the key; the whole of TASK 3's block generates on 7.10.0 (exit 0, nine files, the same nine the default writes) with one warning, `Preview feature \"queryCompiler\" is deprecated. The functionality can be used without specifying it as a preview feature.`; and `engineMode` — TASK 3's same-scheme invented sibling — is a key prisma ships at no release, accepted silently and emitting the default file set at every rung where the generator exists. That last measurement is new and is now LF39h, INVARIANT on all 31 rungs by the committed bisector."
  },
  "model": {
    "id": "claude-sonnet-5",
    "label": "Claude Sonnet 5",
    "vendor": "Anthropic",
    "invoked_as": "Agent tool, model alias \"sonnet\"; prompt sent verbatim from prompts/sent/prisma-v6.txt (3,779 bytes, md5 3e02367d7e757977ba3795ad3ff0fc90). Nominated in the spec BEFORE spawning as the charging arm of the Sonnet 5 pair, and the only chargeable cell in the battery: at prisma 7.0.0, where LF39's charge sits, Sonnet 5 is the sole `+` in tools/charge-windows.mjs.",
    "self_reported_cutoff": "2026-01",
    "cutoff_basis": "Self-reported but ATTRIBUTED TO THE HARNESS rather than to itself: \"Per the environment info I was given for this session, my training cutoff is January 2026.\" It matches the corpus's value for this subject and is not a choice between two dates, so the licence holds; it is recorded as sourced-from-context because this subject's cutoff self-report is the one measured unstable across batteries (JOURNAL/031, /045), and an arm that reads the figure off its context is not evidence of stability. The same arm adds the qualification the corpus keeps hearing: \"my confident, detailed knowledge of Prisma's changelog thins out well before that date.\"",
    "believed_latest_version": null,
    "believed_latest_quote": "\"I believe Prisma has been moving toward a major 7.0 release as part of its publicly stated plan to drop the mandatory Rust engine and make driver adapters the standard path — but I hold that loosely, not as a confidently verified fact.\"",
    "knowledge_stops_at_version": "6.7.0",
    "knowledge_stops_on": "2025-04-29",
    "knowledge_gap_starts_at_version": "6.8.0",
    "knowledge_gap_starts_on": "2025-05-15",
    "boundary_note": "The arm names a RANGE, not a release — \"somewhere in the Prisma 6.x line … the early-to-mid 6.x releases … e.g. ~6.5–6.7\" — so the top of the range it names is recorded and the ambiguity is stated here rather than resolved silently. Its own gap declaration is coarser still and lands elsewhere: \"I cannot describe 6.16.0 onward (including 6.19.0, 6.22.0) or 7.1.0.\" Both readings are below its stated cutoff by six months or more.",
    "cutoff_lag_months": 9
  },
  "test": {
    "date": "2026-09-12",
    "battery": "prisma/v6-a",
    "battery_spec": "prompts/prisma.md",
    "prompt_file": "prompts/sent/prisma-v6.txt",
    "tasks": 4,
    "direct_questions": 4,
    "elicits_code": true,
    "tool_uses_during_test": 0,
    "probe_window": {
      "from": "6.16.0",
      "to": "7.10.0"
    },
    "self_test": false,
    "saturated": false,
    "status": "open",
    "retested_on": null
  },
  "sources": [
    "https://github.com/prisma/prisma/releases/tag/6.16.0",
    "https://github.com/prisma/prisma/releases/tag/7.0.0",
    "https://registry.npmjs.org/prisma"
  ],
  "findings": [
    {
      "id": "F1",
      "severity": "S3",
      "severity_label": "deprecated",
      "title": "Ships the graduated preview flags as the mechanism that switches on the Rust-free client",
      "api": "previewFeatures = [\"driverAdapters\"]",
      "change_kind": "added",
      "introduced_in": "6.16.0",
      "introduced_on": "2025-09-10",
      "chargeable": true,
      "model_belief": "\"`previewFeatures = [\\\"queryCompiler\\\", \\\"driverAdapters\\\"]` — required to switch this on. `queryCompiler` is the flag that actually replaces the Rust query engine with the TS/WASM query planner; `driverAdapters` is required alongside it … the two ship together.\" TASK 2 answered (a) \"Yes\" to whether the client has to be switched on by something written in the schema.",
      "wrong_code": "generator client {\n  provider        = \"prisma-client\"\n  output          = \"../src/generated/prisma\"\n  previewFeatures = [\"queryCompiler\", \"driverAdapters\"]\n}",
      "correct_code": "generator client {\n  provider = \"prisma-client\"\n  output   = \"../src/generated/prisma\"\n}",
      "impact": "Two lines of dead schema and, worse for a reader, the belief that the flags are load-bearing: a team that inherits this block will keep the array when it upgrades, and will read the deprecation warning as something to work around rather than something to delete. The generated client is the same either way.",
      "citations": [
        {
          "url": "https://github.com/prisma/prisma/releases/tag/6.16.0",
          "title": "Prisma 6.16.0 release notes — Rust-free ORM and driver adapters are Generally Available",
          "published_on": "2025-09-10",
          "quote": "If you tried the Rust-free ORM before, you can now also drop the `queryCompiler` and `driverAdapter` feature flags from the `previewFeatures` array."
        },
        {
          "url": "https://registry.npmjs.org/prisma",
          "title": "Executed against the published packages (tools/audit/bisect-facts.mjs rows LF38a-LF38e, 31 rungs, 2026-09-12)",
          "published_on": "2026-09-12",
          "quote": "`new PrismaClient({ adapter })` type-checks from 6.16.0 with nothing in previewFeatures; the flags stay valid at every rung and `prisma generate` at 7.10.0 accepts them with one deprecation warning."
        }
      ],
      "chargeable_note": "SEVERITY: S3 BY THE PRE-REGISTERED FUNCTION, AND THE S2 CLAUSE WAS CONSIDERED AND REFUSED. prompts/prisma.md §v6 fixes the severity function before the draw: S3 for \"a preview flag said to be required\", which this is verbatim; S2 for an arm that additionally asserts the line changes what RUNS, a clause the pre-registration writes about `engineType` specifically. This arm does assert the flags change what runs (\"the flag that actually replaces the Rust query engine\"), so the S2 clause fits in spirit — and extending a clause from the key it names to a different key AFTER reading the transcript is the decision pre-registration exists to prevent. It is scored S3 and the reasoning is published here rather than the score being quietly raised. The clause should be rewritten for the surface, not for this arm; queued in BACKLOG. DOUBLE-CHARGE CHECK: this is the LF38 belief, not LF39's — the arm writes no `engineType` anywhere in the battery and tells its colleague to delete the one TASK 3 shows it. The corpus's two existing `engineType` findings (prisma/sonnet-5 F10, prisma/fable-5 F9) carry LF14's belief and are untouched. LF38 had no charged finding in the corpus before this one."
    }
  ],
  "non_findings": [
    {
      "kind": "context",
      "summary": "TASK 3(a) answered \"No\" — the block does not generate — and named the same preview-flag line as the reason: \"Prisma's pattern when a preview feature graduates to stable/GA is that the flag name becomes unrecognized and `prisma generate` errors out … rather than silently ignoring it.\" Measured false this session: the block exits 0 at 7.10.0 and writes the same nine files as the default, with one deprecation warning.",
      "api": "previewFeatures = [\"driverAdapters\"]",
      "introduced_in": "6.16.0",
      "chargeable_miss": false,
      "why_not_a_finding": "The same fact's belief in a sharper form, and the battery pre-registered that an LF38 charge is anchored on TASK 2 — the unprimed probe — with at most one per arm; the charge is F1 in this run. Counting the recognition restatement as a second finding would inflate the count. Recorded because the sharpening is the interesting part: at TASK 2 the flags are 'required', at TASK 3 their presence is predicted to be fatal, and neither is true."
    },
    {
      "kind": "miss",
      "summary": "Doubts that `engineType = \"client\"` ever meant anything on the `prisma-client` generator: \"I don't have confident memory of `\\\"client\\\"` being a documented value there, nor of `engineType` being a supported key at all on the newer `prisma-client` generator.\" LF39 measured it selecting the WebAssembly query compiler on 6.16.0-6.19.0, on both generators.",
      "api": "generator client { engineType }",
      "introduced_in": "7.0.0",
      "chargeable_miss": false,
      "why_not_a_finding": "An abstention, not a denial (JOURNAL/046). Every clause is framed as absence of memory, and the arm's operative advice — delete the line — is the correct one. The Index does not charge a subject for reaching the right instruction while saying it cannot remember why."
    },
    {
      "kind": "correct",
      "summary": "TASK 1 is right and is right about the thing TASK 2 then gets wrong: the schema it ships for a driver-adapter service carries `provider = \"prisma-client-js\"` and NO `previewFeatures`, with the reasoning stated — \"driver adapters for `pg` reached general availability in the 6.x line, so you don't need to opt in with a preview flag anymore\". Two tasks apart, the same arm holds both the correct belief and the stale one.",
      "api": "previewFeatures = [\"driverAdapters\"]",
      "chargeable_miss": false
    },
    {
      "kind": "correct",
      "summary": "The same-scheme invented sibling is caught: \"`engineMode = \\\"wasm\\\"` — I do not have confident memory of `engineMode` ever being a documented, real Prisma schema key at all (as distinct from `engineType`). … this line looks fabricated.\" Correct — `engineMode` is a key prisma ships at no release, and the generator swallows it silently (LF39h).",
      "api": "generator client { engineType }",
      "chargeable_miss": false
    },
    {
      "kind": "correct",
      "summary": "TASK 4 declines rather than inventing a release: \"I can't responsibly name a specific release number or date … that's a level of changelog precision I don't actually have memorized, and I'd rather say so than invent a version number.\" Direct (d) declines all four releases including the poison rung 6.22.0.",
      "chargeable_miss": false
    }
  ],
  "open_questions": [],
  "summary": "The battery's only chargeable arm, and it does not charge the fact the battery was built for. It writes no `engineType` anywhere — TASK 1's schema has none, TASK 2's mechanism is the preview flags, and TASK 3 tells the colleague to delete the line. What it does hold is the neighbouring belief: that `queryCompiler` and `driverAdapters` are what switch the Rust-free client on, which stopped being true at 6.16.0, four months before this subject's stated cutoff. It then predicts at TASK 3 that carrying those same flags now breaks `prisma generate` — the block generates cleanly. Its TASK 1 answer contains the correct belief about the same flags, which is the sharpest thing in the transcript: the stale prior is not a gap in what this arm knows, it is a second answer it also holds, produced when the question is asked as a capability rather than as a file."
}
