{
  "schemaVersion": 1,
  "title": "Original synthetic TypeScript build repair: validate an optional port before parsing",
  "synthetic": true,
  "customerResult": false,
  "scope": "One strict TypeScript build failure. The agreed example behavior requires an explicit decimal port from 1 to 65535.",
  "instructions": [
    "Save each entry of files to an empty directory using its exact filename.",
    "Use Node.js and an already installed TypeScript compiler. The reproduction does not install dependencies or make network calls.",
    "Run node reproduce.mjs. Set TSC_BIN to the compiler executable if tsc is not on PATH.",
    "The original fixture must fail with TS2345; the repaired fixture must compile and pass six runtime checks."
  ],
  "files": {
    "before.ts": "export function parsePort(value: string | undefined): number {\n  return Number.parseInt(value, 10);\n}\n",
    "after.ts": "export function parsePort(value: string | undefined): number {\n  if (value === undefined) throw new Error('port_required');\n  if (!/^[0-9]+$/.test(value)) throw new Error('invalid_port');\n  const port = Number.parseInt(value, 10);\n  if (port < 1 || port > 65535) throw new Error('invalid_port');\n  return port;\n}\n",
    "repair.patch": "--- before.ts\n+++ after.ts\n@@ -1,3 +1,7 @@\n export function parsePort(value: string | undefined): number {\n-  return Number.parseInt(value, 10);\n+  if (value === undefined) throw new Error('port_required');\n+  if (!/^[0-9]+$/.test(value)) throw new Error('invalid_port');\n+  const port = Number.parseInt(value, 10);\n+  if (port < 1 || port > 65535) throw new Error('invalid_port');\n+  return port;\n }\n",
    "reproduce.mjs": "import { mkdtempSync, readFileSync, writeFileSync, rmSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createRequire } from 'node:module';\nimport { spawnSync } from 'node:child_process';\nimport assert from 'node:assert/strict';\nconst source=fileURLToPath(new URL('.',import.meta.url));\nconst dir=mkdtempSync(join(tmpdir(),'cooperlux-original-build-'));\nconst compiler=process.env.TSC_BIN||'tsc';\nconst compile=()=>spawnSync(compiler,['--strict','--target','ES2022','--module','commonjs','--skipLibCheck','--outDir',join(dir,'out'),join(dir,'fixture.ts')],{encoding:'utf8',timeout:30000});\ntry {\n  writeFileSync(join(dir,'fixture.ts'),readFileSync(join(source,'before.ts')));\n  const before=compile();if(before.error)throw before.error;\n  assert.notEqual(before.status,0);assert.match(before.stdout,/TS2345/);\n  writeFileSync(join(dir,'fixture.ts'),readFileSync(join(source,'after.ts')));\n  const after=compile();if(after.error)throw after.error;\n  assert.equal(after.status,0,after.stdout+after.stderr);\n  const {parsePort}=createRequire(import.meta.url)(join(dir,'out','fixture.js'));\n  assert.equal(parsePort('3000'),3000);\n  assert.throws(()=>parsePort(undefined),/port_required/);\n  for(const value of ['abc','12abc','0','65536'])assert.throws(()=>parsePort(value),/invalid_port/);\n  const version=spawnSync(compiler,['--version'],{encoding:'utf8'}).stdout.trim();\n  console.log(JSON.stringify({synthetic:true,passed:true,node:process.version,typescript:version,before:{exit:before.status,diagnostic:'TS2345'},after:{exit:after.status},runtimeChecks:6}));\n} finally {rmSync(dir,{recursive:true,force:true});}\n"
  },
  "verification": {
    "verifiedAt": "2026-09-26T18:45:38.229Z",
    "synthetic": true,
    "passed": true,
    "node": "v22.23.2",
    "typescript": "Version 5.9.3",
    "before": { "exit": 2, "diagnostic": "TS2345" },
    "after": { "exit": 0 },
    "runtimeChecks": 6,
    "fileSha256": {
      "before.ts": "e53626a6613320df7d948baf00fd4103a48deb18be7737e6bd05d169a5bea24e",
      "after.ts": "046404776059aa437b965abdaabe69ecb219d87cdeacebe6cd6788f2d5b68176",
      "repair.patch": "21f9fdd365bc8133c2687f2409e59504658fdcfc4965ead76cad5d40fcee3fc1",
      "reproduce.mjs": "ab253af84d3a2d230be843b44b8ae08b66104f3d292a39e4cc633dedd7e854bd"
    }
  }
}
