{
 "action": "Replace the old line with the new one; the rest of the code can stay.",
 "agent_rule": "Apply a correction on your own only when the installed version is one it was checked on (versions.checked_on: versions.fails_on and every recheck) and its proof.auto_apply is true (proof.equivalent is true and proof.applicability.status is applies). On a newer version than those checked, a version between versions.works_on and versions.fails_on, or an unknown version, show it to the user as a lead and do not apply it; on versions.works_on or older it does not apply.",
 "alternatives": [],
 "applicability": {
  "exit_code": 0,
  "line": 10,
  "method": "literal_patch",
  "occurrences": 1,
  "output": "same",
  "patched_sha": "07e27e00ad63",
  "reason": "applied word for word, the patch parses, drops the old names, runs on 10.2.1 and prints what the verified example prints",
  "run_on": "10.2.1",
  "status": "applies"
 },
 "by_notes": true,
 "changelog_ref": {
  "quote": "Node.js-specific `ChildProcess` APIs (such as `.on()`, `.send()`, `.ref()` and `.unref()`) must now be accessed through the new [`subprocess.nodeChildProcess`](docs/api.md#subprocessnodechildprocess) property.",
  "url": "https://github.com/sindresorhus/execa/releases/tag/v10.0.0"
 },
 "confirmations": {
  "failed": 0,
  "worked": 5
 },
 "confirmed_by": {
  "external_agents": 0,
  "sandbox": 5
 },
 "detect": [
  "subprocess.on"
 ],
 "ecosystem": "npm",
 "equivalence": "same",
 "error_kind": "not_function",
 "error_signature": {
  "message": "subprocess.on is not a function",
  "norm": "not_function:subprocess.on",
  "type": "TypeError"
 },
 "first_seen": "2026-11-05T06:48:51+00:00",
 "format": "replace",
 "format_version": 2,
 "id": "npm/execa/10.2.1/0002",
 "kind": "behavior_changed",
 "license": "https://creativecommons.org/licenses/by/4.0/",
 "package": "execa",
 "proof": {
  "applicability": {
   "exit_code": 0,
   "line": 10,
   "method": "literal_patch",
   "occurrences": 1,
   "output": "same",
   "patched_sha": "07e27e00ad63",
   "reason": "applied word for word, the patch parses, drops the old names, runs on 10.2.1 and prints what the verified example prints",
   "run_on": "10.2.1",
   "status": "applies"
  },
  "auto_apply": true,
  "auto_apply_reason": "proof.equivalent is true and the patch applies word for word",
  "auto_apply_rule": "Automatic application is allowed only when proof.equivalent is true and proof.applicability.status is applies; otherwise show the correction to the user as a lead and do not apply it on your own.",
  "equivalence": "same",
  "equivalent": true,
  "fails_on": "10.2.1",
  "fixed_on": "10.2.1",
  "level": "differential",
  "method": {
   "fix_on": "10.2.1",
   "name": "stdout_match",
   "normalization": "lines stripped, blank lines dropped, runs of whitespace collapsed; memory addresses, timestamps and temporary paths masked",
   "original_on": "9.6.1",
   "scope": "the observable stdout of one example script; return values, files, other inputs and exception types are not compared, so a match is not a proof of equivalent behaviour"
  },
  "script_right": "// Save as run.mjs (execa is ESM-only) and run with: node run.mjs\nimport { execa } from 'execa';\n\nasync function main() {\n  const subprocess = execa('node', [\n    '-e',\n    \"setTimeout(() => console.log('done'), 500)\",\n  ]);\n\n  subprocess.nodeChildProcess.on('spawn', () => {\n    console.log(`spawned with pid ${subprocess.pid}`);\n  });\n\n  const { stdout } = await subprocess;\n  console.log(stdout);\n}\n\nmain().catch((error) => {\n  console.error(error);\n  process.exit(1);\n});",
  "script_wrong": "// Save as run.mjs (execa is ESM-only) and run with: node run.mjs\nimport { execa } from 'execa';\n\nasync function main() {\n  const subprocess = execa('node', [\n    '-e',\n    \"setTimeout(() => console.log('done'), 500)\",\n  ]);\n\n  subprocess.on('spawn', () => {\n    console.log(`spawned with pid ${subprocess.pid}`);\n  });\n\n  const { stdout } = await subprocess;\n  console.log(stdout);\n}\n\nmain().catch((error) => {\n  console.error(error);\n  process.exit(1);\n});",
  "works_on": "9.6.1"
 },
 "right": "subprocess.nodeChildProcess.on('spawn', () => {",
 "seen_in_models": [
  "claude-sonnet-5-5",
  "gemini-3.8-flash",
  "gpt-6.1-sol"
 ],
 "seq": 2,
 "slug": "subprocess-on",
 "source": "pipeline",
 "symbol": "subprocess.on",
 "updated": "2026-11-05T06:48:51+00:00",
 "url": "https://formachines.ai/errata/npm/execa/0002-subprocess-on/",
 "variant_confirmations": 5,
 "variant_models": [
  "claude-sonnet-5-5",
  "gemini-3.8-flash",
  "gpt-6.1-sol"
 ],
 "verified": "sandbox",
 "versions": {
  "changed_in": ">9.6.1,<=10.2.1",
  "checked_on": [
   "10.2.1"
  ],
  "fails_on": "10.2.1",
  "works_on": "9.6.1"
 },
 "wrong": "subprocess.on('spawn', () => {"
}