runtime-gap-cursor.md

Subject: Cursor runtime parity on Robert's dev machine. Status: absent. Parity score is N/A, not zero. Measured: 2026-04-18.


Measured facts

Cursor binary is not on PATH on this machine:

$ which cursor
cursor not found
# exit code: 1

The bootstrap report confirms the same decision at the runtime-detection step:

$ jq '.runtimes[] | select(.name=="cursor")' .bootstrap-report.json
{
  "name": "cursor",
  "present": false,
  "decision": "absent"
}

Source: /Users/robertboulos/projects/snappy-os/.bootstrap-report.json (lines 49-53, mode dry-run, ts 2026-04-18T20:36:46.633Z, bootstrap_version 0.2.0).

Why parity is N/A, not 0.0

state/log/parity.ndjson contains zero rows with runtime: "cursor". The parity table in program.md reports this correctly as n/a, but earlier CLAUDE.md prose implied Cursor was "synced for portability" without stating the honest consequence: we cannot verify any execution-time behavior from this machine.

Rule: rows with no data are explicit n/a, never zero. A score: 0 row means "runtime tried and failed." A missing row means "runtime was never tested here."

What sync does write

The repo does ship .cursorrules at the root:

$ ls /Users/robertboulos/projects/snappy-os/.cursorrules
.cursorrules

This file is maintained by state/bin/sync-runtimes.ts sync (see program.md § Self-bootstrap → Step 4). It carries the same content as CLAUDE.md so that any Cursor session opened in this repo inherits the instructions passively. Cursor has no documented hook system; the instruction file is the only mechanism.

What we do NOT know from this machine

  1. Whether .cursorrules is actually ingested at the claimed ~500 word limit on first turn.
  2. Whether Cursor's built-in agent mode calls tools in a way compatible with the state/bin/ skills.
  3. Whether a UserPromptSubmit-equivalent exists.

All three require a machine with Cursor installed plus a parity probe run. See state/lint/parity-test.ts for the probe shape.

How to promote this from N/A to a real number

On a machine with Cursor installed:

cd ~/projects/snappy-os
# 1. confirm binary
which cursor                              # exit 0 expected
# 2. bootstrap (will flip present:true in report)
npx snappy-os bootstrap --apply
# 3. run parity harness against Cursor
npx tsx state/lint/parity-test.ts --runtime cursor
# 4. new rows append to state/log/parity.ndjson; re-aggregate
node -e 'const rows=require("fs").readFileSync("state/log/parity.ndjson","utf8").trim().split("\n").map(JSON.parse); const c=rows.filter(r=>r.runtime==="cursor"); console.log("n="+c.length, "mean="+(c.reduce((a,b)=>a+b.score,0)/c.length).toFixed(3))'

Until that runs, the honest answer is: absent = N/A. Do not extrapolate.

<!-- kernel-ok: wiki page documenting runtime absence with cited measurements -->