@stll/oxlint-config 1.8.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +99 -67
  2. package/dist/cloud-setup-cli.cjs +5 -1
  3. package/dist/cloud-setup-cli.cjs.map +1 -1
  4. package/dist/cloud-setup-cli.mjs +6 -2
  5. package/dist/cloud-setup-cli.mjs.map +1 -1
  6. package/dist/dependabot.d.cts +0 -19
  7. package/dist/dependabot.d.mts +0 -19
  8. package/dist/git-tracked-output.cjs +1 -1
  9. package/dist/git-tracked-output.mjs +1 -1
  10. package/dist/publish-artifact-syntax.cjs +1 -1
  11. package/dist/publish-artifact-syntax.mjs +1 -1
  12. package/dist/publish-contract-cli.cjs +2 -2
  13. package/dist/publish-contract-cli.mjs +2 -2
  14. package/dist/quarantine-cli.cjs +3 -2
  15. package/dist/quarantine-cli.cjs.map +1 -1
  16. package/dist/quarantine-cli.mjs +3 -2
  17. package/dist/quarantine-cli.mjs.map +1 -1
  18. package/dist/quarantine-policy.d.cts +25 -2
  19. package/dist/quarantine-policy.d.mts +25 -2
  20. package/dist/quarantine-policy2.cjs +177 -5
  21. package/dist/quarantine-policy2.cjs.map +1 -1
  22. package/dist/quarantine-policy2.mjs +166 -6
  23. package/dist/quarantine-policy2.mjs.map +1 -1
  24. package/dist/toolchain-changed-cli.cjs +1477 -2
  25. package/dist/toolchain-changed-cli.cjs.map +1 -1
  26. package/dist/toolchain-changed-cli.mjs +1474 -1
  27. package/dist/toolchain-changed-cli.mjs.map +1 -1
  28. package/dist/toolchain-check-cli.cjs +2 -0
  29. package/dist/toolchain-check-cli.cjs.map +1 -1
  30. package/dist/toolchain-check-cli.mjs +2 -0
  31. package/dist/toolchain-check-cli.mjs.map +1 -1
  32. package/dist/toolchain-guard.cjs +355 -241
  33. package/dist/toolchain-guard.cjs.map +1 -1
  34. package/dist/toolchain-guard.mjs +352 -244
  35. package/dist/toolchain-guard.mjs.map +1 -1
  36. package/dist/toolchain-inputs.cjs +13 -40
  37. package/dist/toolchain-inputs.cjs.map +1 -1
  38. package/dist/toolchain-inputs.mjs +13 -40
  39. package/dist/toolchain-inputs.mjs.map +1 -1
  40. package/dist/toolchain-schema.cjs +69 -46
  41. package/dist/toolchain-schema.cjs.map +1 -1
  42. package/dist/toolchain-schema.mjs +69 -47
  43. package/dist/toolchain-schema.mjs.map +1 -1
  44. package/dist/typecheck-probe-cli.cjs +40 -2
  45. package/dist/typecheck-probe-cli.cjs.map +1 -1
  46. package/dist/typecheck-probe-cli.mjs +39 -1
  47. package/dist/typecheck-probe-cli.mjs.map +1 -1
  48. package/package.json +3 -4
  49. package/toolchain.json +2 -28
  50. package/dist/toolchain-changed.cjs +0 -1484
  51. package/dist/toolchain-changed.cjs.map +0 -1
  52. package/dist/toolchain-changed.mjs +0 -1477
  53. package/dist/toolchain-changed.mjs.map +0 -1
  54. package/dist/typecheck-parity-cli.cjs +0 -71
  55. package/dist/typecheck-parity-cli.cjs.map +0 -1
  56. package/dist/typecheck-parity-cli.d.cts +0 -1
  57. package/dist/typecheck-parity-cli.d.mts +0 -1
  58. package/dist/typecheck-parity-cli.mjs +0 -71
  59. package/dist/typecheck-parity-cli.mjs.map +0 -1
  60. package/dist/typecheck-parity.cjs +0 -907
  61. package/dist/typecheck-parity.cjs.map +0 -1
  62. package/dist/typecheck-parity.mjs +0 -896
  63. package/dist/typecheck-parity.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"toolchain-guard.cjs","names":["packageMetadata.version","record","path","githubAutomationFileKind","parseDocument","parseConsumerFixtures","discoverConsumerPackages","consumerPackageClosure","record","record","path","validRange","minVersion","parseDocument","valid","satisfies","record","path","LineCounter","parseDocument","isNode","workspaceContains","valid","validRange","satisfies","nodeSupportRangeMatches","extname","record","parseDocument","record","record","spawnSync","path","lstatSync","readFileSync","discoverConsumerManifests","require","createRequire","record","isShellScript","canonicalDockerRuntime","rustImageVersion","githubAutomationFileKind","parseDocument","record","record","path","nodeSelectorMatches","parseToml","isMiseConfigPath","canonicalDockerRuntime","rustImageVersion","isDockerDefinitionPath","isComposeDefinitionPath","isKubernetesDefinitionPath","LineCounter","parseAllDocuments","isMap","isScalar","containerDocumentImages","isSeq","isAlias","githubAutomationFileKind","parseDocument","unexpected","dependabotRules","formatterRule","parseCloudSetup","parseDependabotIgnores","readGitTrackedOutput","realpathSync","toolchainInputKind","path","lstatSync","openSync","readSync","readFileSync","execFileSync","cloudSetupPath","hasCloudSessionStartHook","cloudClaudeSettingsPath","cloudSessionStartFix","hasCloudAttribution","cloudAttributionFix","generateCloudSetup","checkFormatter","checkRepositoryQuarantine","declaredIgnoreConflicts","checkDependabot"],"sources":["../package.json","../src/toolchain-consumer-checks.ts","../src/toolchain-dynamic-selectors.ts","../src/toolchain-engine-floors.ts","../src/toolchain-packages.ts","../src/toolchain-script-extensions.ts","../src/toolchain-script-lifecycle.ts","../src/toolchain-lint-command.ts","../src/toolchain-node-projects.ts","../src/toolchain-rust.ts","../src/toolchain-workflow-trust.ts","../src/toolchain-runtime.ts","../src/toolchain-guard.ts"],"sourcesContent":["","import path from \"node:path\";\nimport { parseDocument } from \"yaml\";\n\nimport packageMetadata from \"../package.json\";\nimport {\n assertConsumerFixtureKind,\n assertConsumerFixtureSelection,\n consumerPackageClosure,\n discoverConsumerPackages,\n parseConsumerFixtures,\n} from \"./consumer-compat-config\";\nimport { assertConsumerNodeSupport } from \"./consumer-node-support\";\nimport { githubAutomationFileKind } from \"./toolchain-inputs\";\n\nexport const consumerRunnerVersion = packageMetadata.version;\n\nexport const consumerCheckWorkflow =\n \"stella/.github/.github/workflows/package-consumer-compat.yml\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst repositoryDirectory = (value: unknown): value is string =>\n typeof value === \"string\" &&\n value !== \"\" &&\n !value.includes(\"\\\\\") &&\n !value.includes(\"${{\") &&\n !value.split(\"\").some((character) => {\n const code = character.charCodeAt(0);\n return code < 32 || code === 127;\n }) &&\n !/^[A-Za-z]:/.test(value) &&\n !path.posix.isAbsolute(value) &&\n (value === \".\" ||\n value\n .split(\"/\")\n .every((part) => part !== \"\" && part !== \".\" && part !== \"..\"));\n\nconst packageDirectories = (value: unknown): value is string[] =>\n Array.isArray(value) &&\n value.length > 0 &&\n value.every(repositoryDirectory) &&\n new Set(value).size === value.length;\n\ntype CronField = {\n minimum: number;\n maximum: number;\n names?: Record<string, number>;\n};\nconst cronFields = [\n { minimum: 0, maximum: 59 },\n { minimum: 0, maximum: 23 },\n { minimum: 1, maximum: 31 },\n {\n minimum: 1,\n maximum: 12,\n names: Object.fromEntries(\n [\n \"JAN\",\n \"FEB\",\n \"MAR\",\n \"APR\",\n \"MAY\",\n \"JUN\",\n \"JUL\",\n \"AUG\",\n \"SEP\",\n \"OCT\",\n \"NOV\",\n \"DEC\",\n ].map((name, index) => [name, index + 1]),\n ),\n },\n {\n minimum: 0,\n maximum: 6,\n names: Object.fromEntries(\n [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"].map((name, index) => [\n name,\n index,\n ]),\n ),\n },\n] as const;\nconst cronFieldValues = (text: string, field: CronField) => {\n const value = (token: string) => {\n const number = /^\\d+$/.test(token)\n ? Number(token)\n : field.names?.[token.toUpperCase()];\n return number !== undefined &&\n Number.isSafeInteger(number) &&\n number >= field.minimum &&\n number <= field.maximum\n ? number\n : undefined;\n };\n const values = new Set<number>();\n for (const part of text.split(\",\")) {\n const split = part.split(\"/\");\n if (split.length > 2) return undefined;\n const [base, stepText] = split;\n const step = stepText === undefined ? 1 : Number(stepText);\n if (stepText !== undefined && !/^\\d+$/.test(stepText)) return undefined;\n if (!Number.isSafeInteger(step) || step <= 0 || base === undefined)\n return undefined;\n const bounds = base.split(\"-\");\n if (bounds.length > 2) return undefined;\n const lower = bounds.at(0);\n if (lower === undefined) return undefined;\n const start = base === \"*\" ? field.minimum : value(lower);\n const upper = bounds.at(1);\n let end = start;\n if (base === \"*\" || (bounds.length === 1 && stepText !== undefined))\n end = field.maximum;\n else if (upper !== undefined) end = value(upper);\n if (start === undefined || end === undefined || start > end)\n return undefined;\n for (let selected = start; selected <= end; selected += step)\n values.add(selected);\n }\n return values;\n};\n\nconst validConsumerCron = (text: string) => {\n const fields = text.trim().split(/\\s+/);\n return (\n fields.length === cronFields.length &&\n cronFields.every((field, index) => {\n const fieldText = fields.at(index);\n return (\n fieldText !== undefined &&\n cronFieldValues(fieldText, field) !== undefined\n );\n })\n );\n};\n\nconst nightlySchedule = (value: unknown) => {\n if (!record(value)) return false;\n const schedule = value[\"schedule\"];\n if (!Array.isArray(schedule) || schedule.length === 0) return false;\n const coveredDays = new Set<number>();\n for (const entry of schedule) {\n if (\n !record(entry) ||\n typeof entry[\"cron\"] !== \"string\" ||\n !validConsumerCron(entry[\"cron\"])\n )\n return false;\n const fields = entry[\"cron\"].trim().split(/\\s+/);\n const selections = cronFields.map((field, index) => {\n const text = fields.at(index);\n return text === undefined ? undefined : cronFieldValues(text, field);\n });\n // Month and date restrictions cannot certify a daily schedule.\n if (selections.at(2)?.size !== 31 || selections.at(3)?.size !== 12)\n continue;\n for (const day of selections.at(4) ?? []) coveredDays.add(day);\n }\n return coveredDays.size === 7;\n};\n\nexport type ConsumerCheck = {\n workflow: string;\n job: string;\n packages: string[];\n toolingVersion: string;\n fixturePath: string;\n};\n\nexport const parseConsumerChecks = (input: unknown): ConsumerCheck[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input)) throw new Error(\"consumerChecks must be an array\");\n const targets = new Set<string>();\n return input.map((entry: unknown) => {\n if (\n !record(entry) ||\n Object.keys(entry).some(\n (key) =>\n ![\n \"workflow\",\n \"job\",\n \"packages\",\n \"toolingVersion\",\n \"fixturePath\",\n ].includes(key),\n ) ||\n typeof entry[\"workflow\"] !== \"string\" ||\n githubAutomationFileKind(entry[\"workflow\"]) !== \"workflow\" ||\n !/^\\.github\\/workflows\\/[^/]+\\.ya?ml$/.test(entry[\"workflow\"]) ||\n typeof entry[\"job\"] !== \"string\" ||\n !/^[A-Za-z_][A-Za-z0-9_-]*$/.test(entry[\"job\"]) ||\n !packageDirectories(entry[\"packages\"]) ||\n typeof entry[\"toolingVersion\"] !== \"string\" ||\n !/^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$/.test(\n entry[\"toolingVersion\"],\n ) ||\n !repositoryDirectory(entry[\"fixturePath\"])\n )\n throw new Error(\n \"consumerChecks requires canonical workflow, job, unique package directories, exact toolingVersion and repository-relative fixturePath\",\n );\n const target = `${entry[\"workflow\"]}:${entry[\"job\"]}`;\n if (targets.has(target))\n throw new Error(\"consumerChecks targets must be unique\");\n targets.add(target);\n return {\n workflow: entry[\"workflow\"],\n job: entry[\"job\"],\n packages: entry[\"packages\"],\n toolingVersion: entry[\"toolingVersion\"],\n fixturePath: entry[\"fixturePath\"],\n };\n });\n};\n\ntype CheckConsumerChecksOptions = {\n declarations: readonly ConsumerCheck[];\n files: Record<string, string>;\n policy: {\n consumerNode: string;\n actions: Record<string, { sha: string; version: string }>;\n };\n};\n\n/** Consumer checks are scoped declarations, never general runtime exceptions. */\nexport const checkConsumerChecks = ({\n declarations,\n files,\n policy,\n}: CheckConsumerChecksOptions) => {\n const diagnostics: {\n rule: \"configuration\";\n path: string;\n line: number;\n message: string;\n }[] = [];\n const exercised = new Set<ConsumerCheck>();\n const add = (message: string) =>\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message,\n });\n for (const [workflow, text] of Object.entries(files)) {\n if (githubAutomationFileKind(workflow) !== \"workflow\") continue;\n try {\n const document = parseDocument(text, { uniqueKeys: true, merge: true });\n if (document.errors.length > 0) throw new Error(\"invalid workflow YAML\");\n const source: unknown = document.toJS({ maxAliasCount: 100 });\n if (!record(source) || !record(source[\"jobs\"])) continue;\n for (const [jobName, job] of Object.entries(source[\"jobs\"])) {\n if (!record(job) || typeof job[\"uses\"] !== \"string\") continue;\n const [workflowPath, ref] = job[\"uses\"].split(\"@\");\n if (workflowPath?.toLowerCase() !== consumerCheckWorkflow) continue;\n const declaration = declarations.find(\n (entry) => entry.workflow === workflow && entry.job === jobName,\n );\n if (declaration === undefined) {\n add(`${workflow}:${jobName} requires a consumerChecks declaration`);\n continue;\n }\n if (!nightlySchedule(source[\"on\"]))\n throw new Error(\n `${workflow} consumer checks require a nonempty valid on.schedule covering every day`,\n );\n if (\"if\" in job || \"needs\" in job || \"strategy\" in job)\n throw new Error(\n `${workflow}:${jobName} consumer checks require a stand-alone unconditional reusable job without if or needs or strategy`,\n );\n exercised.add(declaration);\n const approved = Object.entries(policy.actions).find(\n ([name]) => name.toLowerCase() === consumerCheckWorkflow,\n )?.[1];\n if (\n job[\"uses\"].split(\"@\").length !== 2 ||\n ref === undefined ||\n !/^[a-f0-9]{40}$/.test(ref) ||\n approved === undefined ||\n ref !== approved.sha ||\n \"steps\" in job ||\n \"runs-on\" in job\n )\n throw new Error(\n `${workflow}:${jobName} must invoke the approved immutable consumer workflow as a reusable job`,\n );\n const inputs = job[\"with\"];\n if (!record(inputs))\n throw new Error(`${workflow}:${jobName} requires consumer inputs`);\n const names = new Set<string>();\n for (const key of Object.keys(inputs)) {\n const normalized = key.toLowerCase();\n if (\n names.has(normalized) ||\n ![\n \"packages\",\n \"consumer-node\",\n \"tooling-version\",\n \"fixture-path\",\n ].includes(normalized) ||\n normalized !== key\n )\n throw new Error(\n `${workflow}:${jobName} requires unique canonical consumer input names`,\n );\n names.add(normalized);\n }\n if (inputs[\"consumer-node\"] !== policy.consumerNode)\n throw new Error(\n `${workflow}:${jobName} consumer-node must be ${policy.consumerNode}`,\n );\n if (declaration.toolingVersion !== consumerRunnerVersion)\n throw new Error(\n `${workflow}:${jobName} toolingVersion must match installed @stll/oxlint-config ${consumerRunnerVersion}`,\n );\n if (inputs[\"tooling-version\"] !== declaration.toolingVersion)\n throw new Error(\n `${workflow}:${jobName} tooling-version must match consumerChecks.toolingVersion`,\n );\n if (inputs[\"fixture-path\"] !== declaration.fixturePath)\n throw new Error(\n `${workflow}:${jobName} fixture-path must match consumerChecks.fixturePath`,\n );\n const fixtureManifest = path.posix.join(\n declaration.fixturePath,\n \"consumer-compat.json\",\n );\n const fixtureSource = files[fixtureManifest];\n if (fixtureSource === undefined)\n throw new Error(\n `consumerChecks fixture configuration must be tracked: ${fixtureManifest}`,\n );\n const fixtureConfiguration: unknown = JSON.parse(fixtureSource);\n const fixtures = parseConsumerFixtures(fixtureConfiguration);\n assertConsumerFixtureSelection({\n selected: declaration.packages,\n fixtures,\n });\n const rawPackages = inputs[\"packages\"];\n if (typeof rawPackages !== \"string\")\n throw new Error(\n `${workflow}:${jobName} packages must be a static JSON array`,\n );\n const selected: unknown = JSON.parse(rawPackages);\n if (\n !packageDirectories(selected) ||\n selected.length !== declaration.packages.length ||\n !selected.every((directory) =>\n declaration.packages.includes(directory),\n )\n )\n throw new Error(\n `${workflow}:${jobName} packages must exactly match consumerChecks`,\n );\n const workspacePackages = discoverConsumerPackages(files);\n const packagesByDirectory = new Map(\n [...workspacePackages.values()].map((entry) => [\n entry.directory,\n entry,\n ]),\n );\n for (const directory of declaration.packages) {\n const manifestPath = path.posix.join(directory, \"package.json\");\n const manifestText = files[manifestPath];\n if (manifestText === undefined)\n throw new Error(\n `consumerChecks package manifest must be tracked: ${manifestPath}`,\n );\n const selectedPackage = packagesByDirectory.get(directory);\n if (selectedPackage === undefined)\n throw new Error(\n `consumerChecks package must be a discovered workspace member: ${manifestPath}`,\n );\n const fixture = fixtures.find(\n (candidate) => candidate.package === directory,\n );\n if (fixture === undefined)\n throw new Error(`missing declared consumer fixture: ${directory}`);\n assertConsumerFixtureKind({ fixture, pkg: selectedPackage });\n const manifest = selectedPackage.manifest;\n if (\n manifest[\"private\"] === true ||\n typeof manifest[\"name\"] !== \"string\" ||\n manifest[\"name\"].trim() === \"\"\n )\n throw new Error(\n `consumerChecks requires a named published package: ${manifestPath}`,\n );\n const closure = consumerPackageClosure({\n selected: selectedPackage,\n packages: workspacePackages,\n files,\n });\n for (const member of closure.values())\n assertConsumerNodeSupport({\n manifest: member.manifest,\n node: policy.consumerNode,\n label: path.posix.join(member.directory, \"package.json\"),\n });\n }\n }\n } catch (error) {\n if (\n declarations.some((entry) => entry.workflow === workflow) ||\n text.toLowerCase().includes(consumerCheckWorkflow)\n )\n add(error instanceof Error ? error.message : String(error));\n }\n }\n for (const declaration of declarations)\n if (!exercised.has(declaration))\n add(\n `${declaration.workflow}:${declaration.job} consumerChecks declaration has no matching reusable invocation`,\n );\n return diagnostics;\n};\n","const locatorValidators = {\n image:\n /^(?:jobs\\.[\\w-]+\\.(?:container|services\\.[\\w-]+)|services\\.[\\w.-]+\\.image)$/,\n \"bun-source\": /^(?:jobs\\.[\\w-]+|runs)\\.steps\\.[\\w-]+$/,\n} as const;\n\ntype SelectorKind = keyof typeof locatorValidators;\nconst knownKind = (value: unknown): value is SelectorKind =>\n typeof value === \"string\" && Object.hasOwn(locatorValidators, value);\n\nexport type DynamicSelector = {\n path: string;\n kind: SelectorKind;\n reason: string;\n} & ({ at: string; line?: never } | { line: number; at?: never });\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/** One reviewed declaration identifies one unresolved selector, never a rule. */\nexport const parseDynamicSelectors = (input: unknown): DynamicSelector[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input))\n throw new Error(\"dynamicSelectors must be an array\");\n const result: DynamicSelector[] = [];\n const keys = new Set<string>();\n for (const entry of input) {\n if (\n !record(entry) ||\n Object.keys(entry).some(\n (key) => ![\"path\", \"kind\", \"reason\", \"at\", \"line\"].includes(key),\n ) ||\n typeof entry[\"path\"] !== \"string\" ||\n entry[\"path\"] === \"\" ||\n /[\\\\:$*?]|[^\\S ]/.test(entry[\"path\"]) ||\n entry[\"path\"]\n .split(\"/\")\n .some((part) => part === \"\" || part === \".\" || part === \"..\") ||\n typeof entry[\"reason\"] !== \"string\" ||\n entry[\"reason\"].trim() === \"\"\n )\n throw new Error(\n \"each dynamic selector requires an exact repository path, known kind and nonempty reason\",\n );\n const kind = entry[\"kind\"];\n if (!knownKind(kind)) throw new Error(\"unknown dynamic selector kind\");\n let selector: DynamicSelector;\n if (\n Object.hasOwn(entry, \"line\") &&\n !Object.hasOwn(entry, \"at\") &&\n typeof entry[\"line\"] === \"number\" &&\n Number.isSafeInteger(entry[\"line\"]) &&\n entry[\"line\"] > 0\n ) {\n selector = {\n path: entry[\"path\"],\n kind,\n reason: entry[\"reason\"],\n line: entry[\"line\"],\n };\n } else if (\n !Object.hasOwn(entry, \"line\") &&\n typeof entry[\"at\"] === \"string\" &&\n locatorValidators[kind].test(entry[\"at\"])\n ) {\n selector = {\n path: entry[\"path\"],\n kind,\n reason: entry[\"reason\"],\n at: entry[\"at\"],\n };\n } else\n throw new Error(\n \"dynamic selector requires one positive line or a kind-specific job/service/step ID locator\",\n );\n const key = JSON.stringify([\n selector.path,\n selector.kind,\n selector.at ?? selector.line,\n ]);\n if (keys.has(key))\n throw new Error(\"dynamic selector locations must be unique\");\n keys.add(key);\n result.push(selector);\n }\n return result;\n};\n","import path from \"node:path\";\nimport { minVersion, satisfies, valid, validRange } from \"semver\";\nimport { parseDocument } from \"yaml\";\n\nexport type EngineFloor = { package: string; workflow: string; job: string };\nexport type ResolvedEngineFloor = EngineFloor & {\n range: string;\n major: number;\n};\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst repositoryPath = (value: unknown): value is string =>\n typeof value === \"string\" &&\n value !== \"\" &&\n !/^[A-Za-z]:/.test(value) &&\n !/[\\\\\\s]/.test(value) &&\n !Array.from(value).some((character) => character.charCodeAt(0) < 32) &&\n value\n .split(\"/\")\n .every((part) => part !== \"\" && part !== \".\" && part !== \"..\");\n\nexport const parseEngineFloors = (input: unknown): EngineFloor[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input)) throw new Error(\"engineFloors must be an array\");\n const result: EngineFloor[] = [];\n const jobs = new Set<string>();\n for (const entry of input) {\n if (\n !record(entry) ||\n Object.keys(entry).some(\n (key) => ![\"package\", \"workflow\", \"job\"].includes(key),\n ) ||\n (entry[\"package\"] !== \".\" && !repositoryPath(entry[\"package\"])) ||\n !repositoryPath(entry[\"workflow\"]) ||\n !/^\\.github\\/workflows\\/[^/]+\\.ya?ml$/.test(entry[\"workflow\"]) ||\n typeof entry[\"job\"] !== \"string\" ||\n entry[\"job\"].trim() === \"\"\n )\n throw new Error(\n \"each engine floor requires a repository package directory, workflow path and job\",\n );\n const key = `${entry[\"workflow\"]}:${entry[\"job\"]}`;\n if (jobs.has(key))\n throw new Error(\"engine floor workflow jobs must be unique\");\n jobs.add(key);\n result.push({\n package: entry[\"package\"],\n workflow: entry[\"workflow\"],\n job: entry[\"job\"],\n });\n }\n return result;\n};\n\nexport const resolveEngineFloor = (\n entry: EngineFloor,\n files: Record<string, string>,\n): ResolvedEngineFloor => {\n const manifestText = files[path.posix.join(entry.package, \"package.json\")];\n const workflowText = files[entry.workflow];\n if (manifestText === undefined || workflowText === undefined)\n throw new Error(\"engine floor package and workflow must be tracked\");\n const manifest: unknown = JSON.parse(manifestText);\n if (\n !record(manifest) ||\n manifest[\"private\"] === true ||\n typeof manifest[\"name\"] !== \"string\" ||\n manifest[\"name\"].trim() === \"\" ||\n !record(manifest[\"engines\"]) ||\n typeof manifest[\"engines\"][\"node\"] !== \"string\"\n )\n throw new Error(\n \"engine floor package must be published and declare engines.node\",\n );\n const range = manifest[\"engines\"][\"node\"];\n const minimum = validRange(range) === null ? null : minVersion(range);\n if (minimum === null || minimum.prerelease.length !== 0)\n throw new Error(\"engine floor engines.node must declare a stable minimum\");\n const document = parseDocument(workflowText, { merge: true });\n if (document.errors.length !== 0)\n throw new Error(\"engine floor workflow must be valid YAML\");\n const workflow: unknown = document.toJS({ maxAliasCount: 100 });\n if (!record(workflow) || !record(workflow[\"jobs\"]))\n throw new Error(\"engine floor job must exist in its tracked workflow\");\n const job = workflow[\"jobs\"][entry.job];\n if (!record(job))\n throw new Error(\"engine floor job must exist in its tracked workflow\");\n if (!Array.isArray(job[\"steps\"]) || Object.hasOwn(job, \"uses\"))\n throw new Error(\n \"engine floor job must declare steps and cannot reuse a workflow\",\n );\n return { ...entry, range, major: minimum.major };\n};\n\nexport const engineFloorSelectorMatches = (\n value: unknown,\n floor: ResolvedEngineFloor,\n) => {\n if (\n typeof value !== \"string\" ||\n !/^\\d+\\.\\d+\\.\\d+$/.test(value) ||\n valid(value) !== value\n )\n return false;\n return (\n Number(value.split(\".\").at(0)) === floor.major &&\n satisfies(value, floor.range)\n );\n};\n","import path from \"node:path\";\nimport picomatch from \"picomatch\";\nimport { satisfies, valid, validRange } from \"semver\";\nimport { isNode, LineCounter, parseDocument } from \"yaml\";\n\nimport { nodeSupportRangeMatches } from \"./toolchain-node\";\nimport { workspaceContains } from \"./toolchain-workspaces\";\n\nexport const packageRules = [\n \"bun-pins\",\n \"package-pins\",\n \"typescript-layout\",\n \"node-engine\",\n] as const;\n\ntype Layout =\n | {\n type: \"direct\";\n compilerPackage: string;\n compilerSpecifier: string;\n typecheckCommand: string;\n }\n | {\n type: \"split-compatibility\";\n compilerPackage: string;\n compilerSpecifier: string;\n compatibilityPackage: string;\n compatibilitySpecifier: string;\n typecheckCommand: string;\n };\n\ntype PackagePolicy = {\n bun: string;\n packages: Record<string, string>;\n typescriptInstallLayouts: readonly Layout[];\n typescript6Compatibility: { version: string; packageAlias: string };\n node: string;\n};\n\ntype Diagnostic = {\n rule: (typeof packageRules)[number];\n path: string;\n line: number;\n message: string;\n};\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n// Inspect explicit substitution bodies without evaluating shell expressions.\nconst shellSubstitutions = (command: string) => {\n type Frame = {\n kind: \"root\" | \"parentheses\" | \"backticks\";\n start: number;\n depth: number;\n quote: \"'\" | '\"' | undefined;\n };\n const frames: Frame[] = [\n { kind: \"root\", start: 0, depth: 0, quote: undefined },\n ];\n const bodies: string[] = [];\n for (let index = 0; index < command.length; index += 1) {\n const frame = frames.at(-1);\n if (frame === undefined) break;\n const character = command.at(index);\n if (character === \"\\\\\" && frame.quote !== \"'\") {\n index += 1;\n continue;\n }\n if (character === \"`\" && frame.kind === \"backticks\") {\n bodies.push(command.slice(frame.start, index));\n frames.pop();\n continue;\n }\n if (character === frame.quote) {\n frame.quote = undefined;\n continue;\n }\n if (frame.quote === \"'\") continue;\n if (character === \"$\" && command.at(index + 1) === \"(\") {\n frames.push({\n kind: \"parentheses\",\n start: index + 2,\n depth: 1,\n quote: undefined,\n });\n index += 1;\n continue;\n }\n if (character === \"`\") {\n frames.push({\n kind: \"backticks\",\n start: index + 1,\n depth: 0,\n quote: undefined,\n });\n continue;\n }\n if (frame.quote !== undefined) continue;\n if (character === \"'\" || character === '\"') {\n frame.quote = character;\n continue;\n }\n if (frame.kind !== \"parentheses\") continue;\n if (character === \"(\") frame.depth += 1;\n if (character === \")\" && --frame.depth === 0) {\n bodies.push(command.slice(frame.start, index));\n frames.pop();\n }\n }\n for (const frame of frames.slice(1)) bodies.push(command.slice(frame.start));\n return bodies;\n};\n\nconst shellValueOptions = new Set([\n \"--rcfile\",\n \"--init-file\",\n \"-o\",\n \"+o\",\n \"-O\",\n \"+O\",\n]);\nconst shellExecutable = /^(?:\\/(?:[^/]+\\/)*)?(?:bash|dash|ksh|zsh|sh)$/;\n\ntype ShellToken = {\n kind: \"word\" | \"boundary\" | \"redirect\" | \"comment\";\n value: string;\n index: number;\n};\n\n// Keep expansion bodies in their word: substitutions are inspected separately as executable sources.\nexport const shellTokens = (source: string) => {\n const tokens: ShellToken[] = [];\n for (let index = 0; index < source.length;) {\n const character = source.at(index);\n if (character === undefined) break;\n if (character === \"\\n\") {\n tokens.push({ kind: \"boundary\", value: character, index: index++ });\n continue;\n }\n if (/\\s/.test(character)) {\n index++;\n continue;\n }\n if (character === \"#\") {\n const end = source.indexOf(\"\\n\", index);\n const stop = end < 0 ? source.length : end;\n tokens.push({ kind: \"comment\", value: source.slice(index, stop), index });\n index = stop;\n continue;\n }\n const redirect = /^(?:\\d*)(?:&>>|&>|<<<|<<-|<<|>>|>\\||>&|<&|<>|>|<)/.exec(\n source.slice(index),\n );\n if (redirect !== null) {\n tokens.push({ kind: \"redirect\", value: redirect[0], index });\n index += redirect[0].length;\n continue;\n }\n const boundary = /^(?:&&|\\|\\||[();&|])/.exec(source.slice(index));\n if (boundary !== null) {\n tokens.push({ kind: \"boundary\", value: boundary[0], index });\n index += boundary[0].length;\n continue;\n }\n const start = index;\n type Frame = {\n kind: \"word\" | \"parentheses\" | \"backticks\";\n quote: \"'\" | '\"' | undefined;\n depth: number;\n };\n const frames: Frame[] = [{ kind: \"word\", quote: undefined, depth: 0 }];\n while (index < source.length) {\n const frame = frames.at(-1);\n const current = source.at(index);\n if (frame === undefined || current === undefined) break;\n if (current === \"\\\\\" && frame.quote !== \"'\") {\n index += 2;\n continue;\n }\n if (current === \"`\" && frame.kind === \"backticks\") {\n frames.pop();\n index++;\n continue;\n }\n if (current === frame.quote) {\n frame.quote = undefined;\n index++;\n continue;\n }\n if (frame.quote === \"'\") {\n index++;\n continue;\n }\n if (current === \"$\" && source.at(index + 1) === \"(\") {\n frames.push({ kind: \"parentheses\", quote: undefined, depth: 1 });\n index += 2;\n continue;\n }\n if (current === \"`\") {\n frames.push({ kind: \"backticks\", quote: undefined, depth: 0 });\n index++;\n continue;\n }\n if (frame.quote !== undefined) {\n index++;\n continue;\n }\n if (current === \"'\" || current === '\"') {\n frame.quote = current;\n index++;\n continue;\n }\n if (frame.kind === \"parentheses\") {\n if (current === \"(\") frame.depth++;\n if (current === \")\" && --frame.depth === 0) frames.pop();\n index++;\n continue;\n }\n if (frame.kind === \"word\" && /[\\s<>;&|()]/.test(current)) break;\n index++;\n }\n const value = source.slice(start, index);\n tokens.push({\n kind: \"word\",\n value,\n index: start,\n });\n }\n // Braces are reserved words only where a command or function body can begin.\n let groupDepth = 0;\n let redirectTarget = false;\n const commandWords: string[] = [];\n for (const token of tokens) {\n if (token.kind === \"comment\") continue;\n if (token.kind === \"redirect\") {\n redirectTarget = true;\n continue;\n }\n if (redirectTarget) {\n redirectTarget = false;\n if (token.kind === \"word\") continue;\n }\n if (token.kind === \"boundary\") {\n commandWords.length = 0;\n continue;\n }\n const functionBody =\n commandWords.length === 2 && commandWords.at(0) === \"function\";\n const opensGroup =\n token.value === \"{\" && (commandWords.length === 0 || functionBody);\n const closesGroup =\n token.value === \"}\" && groupDepth > 0 && commandWords.length === 0;\n if (opensGroup || closesGroup) {\n token.kind = \"boundary\";\n groupDepth += opensGroup ? 1 : -1;\n commandWords.length = 0;\n continue;\n }\n if (\n commandWords.length === 0 &&\n [\"if\", \"then\", \"elif\", \"else\", \"do\", \"!\", \"time\"].includes(token.value)\n )\n continue;\n commandWords.push(token.value);\n }\n return tokens;\n};\n\nconst shellArgumentTokens = (tokens: readonly ShellToken[]) => {\n const arguments_: ShellToken[] = [];\n let redirectTarget = false;\n for (const token of tokens) {\n if (token.kind === \"comment\") continue;\n if (token.kind === \"redirect\") {\n redirectTarget = true;\n continue;\n }\n if (redirectTarget) {\n redirectTarget = false;\n if (token.kind === \"word\") continue;\n }\n arguments_.push(token);\n }\n return arguments_;\n};\n\nconst shellReadsProgramStdin = (tokens: readonly ShellToken[]) => {\n const words = executableShellWords(\n shellArgumentTokens(tokens).map(({ value }) => value),\n ).map(decodeShellWord);\n if (!shellExecutable.test(words.at(0) ?? \"\")) return false;\n let stdin = false;\n let script = false;\n for (let index = 1; index < words.length; index++) {\n const option = words.at(index) ?? \"\";\n if (option === \"--\" || option === \"-\") {\n script = index + 1 < words.length;\n break;\n }\n if (!/^[+-]/.test(option)) {\n script = true;\n break;\n }\n if (shellValueOptions.has(option)) {\n index++;\n continue;\n }\n if (/^-[^-]*c/.test(option)) return false;\n if (/^-[^-]*s/.test(option)) stdin = true;\n }\n return stdin || !script;\n};\n\n// Descriptor copies retain their source; later redirections replace only their destination.\nconst shellStdinHeredoc = (tokens: readonly ShellToken[]) => {\n const descriptors = new Map<string, ShellToken>();\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens.at(index);\n if (token?.kind !== \"redirect\") continue;\n const declaration = /^(\\d*)(.+)$/.exec(token.value);\n const operator = declaration?.[2];\n if (operator === undefined) continue;\n const descriptor = String(\n Number(declaration?.[1] || (operator.startsWith(\"<\") ? \"0\" : \"1\")),\n );\n const target = tokens.at(++index);\n if (operator === \"<<\" || operator === \"<<-\") {\n descriptors.set(descriptor, token);\n continue;\n }\n if (operator === \"<&\" || operator === \">&\") {\n const copy = /^(\\d+)(-?)$/.exec(decodeShellWord(target?.value ?? \"\"));\n const sourceDescriptor =\n copy?.[1] === undefined ? undefined : String(Number(copy[1]));\n const source =\n sourceDescriptor === undefined\n ? undefined\n : descriptors.get(sourceDescriptor);\n if (source === undefined) descriptors.delete(descriptor);\n else descriptors.set(descriptor, source);\n if (copy?.[2] === \"-\" && sourceDescriptor !== undefined)\n descriptors.delete(sourceDescriptor);\n continue;\n }\n descriptors.delete(descriptor);\n if (operator === \"&>\" || operator === \"&>>\") descriptors.delete(\"2\");\n }\n return descriptors.get(\"0\");\n};\n\n// Literal heredoc bodies are data, not direct shell command invocations.\nconst shellExecutableSource = (command: string) => {\n const pending: {\n delimiter: string;\n stripTabs: boolean;\n literal: boolean;\n execute: boolean;\n }[] = [];\n return command\n .split(/\\r?\\n/)\n .map((line) => {\n const here = pending.at(0);\n if (here !== undefined) {\n if (\n (here.stripTabs ? line.replace(/^\\t+/, \"\") : line) === here.delimiter\n ) {\n pending.shift();\n return \"\";\n }\n if (here.execute) return line;\n if (here.literal) return \"\";\n return shellSubstitutions(line).join(\"\\n\");\n }\n const words = shellTokens(line);\n let commandStart = 0;\n for (let index = 0; index < words.length; index++) {\n const match = words.at(index);\n const word = match?.value;\n if (word === undefined) continue;\n if (match?.kind === \"comment\") return line.slice(0, match.index);\n if (match?.kind === \"boundary\") {\n commandStart = index + 1;\n continue;\n }\n const declaration =\n match?.kind === \"redirect\" ? /^(?:\\d*)<<(-?)(.*)$/.exec(word) : null;\n let delimiter = declaration?.[2];\n if (delimiter === \"\") delimiter = words.at(++index)?.value;\n if (\n declaration !== null &&\n delimiter !== undefined &&\n !delimiter.startsWith(\"<\")\n ) {\n const commandEnd = words.findIndex(\n (entry, position) =>\n position > index &&\n (entry.kind === \"boundary\" || entry.kind === \"comment\"),\n );\n const invocation = words.slice(\n commandStart,\n commandEnd < 0 ? undefined : commandEnd,\n );\n pending.push({\n delimiter: decodeShellWord(delimiter),\n stripTabs: declaration[1] === \"-\",\n literal: /['\"\\\\]/.test(delimiter),\n execute:\n shellReadsProgramStdin(invocation) &&\n shellStdinHeredoc(invocation) === match,\n });\n }\n }\n return line;\n })\n .join(\"\\n\");\n};\n\nexport const executableShellWords = (words: readonly string[]): string[] => {\n let start = 0;\n const skipAssignments = () => {\n while (\n /^[A-Za-z_][A-Za-z\\d_]*=/.test(decodeShellWord(words.at(start) ?? \"\"))\n )\n start += 1;\n };\n skipAssignments();\n while (\n /^(?:\\/usr\\/bin\\/|\\/bin\\/)?env$/.test(\n decodeShellWord(words.at(start) ?? \"\"),\n )\n ) {\n start += 1;\n while (start < words.length) {\n const option = decodeShellWord(words.at(start) ?? \"\");\n if (option === \"--\") {\n start += 1;\n break;\n }\n if ([\"-u\", \"--unset\", \"-C\", \"--chdir\"].includes(option)) {\n start += 2;\n continue;\n }\n if (\n option === \"-S\" ||\n option === \"--split-string\" ||\n option.startsWith(\"--split-string=\") ||\n (option.startsWith(\"-S\") && option.length > 2)\n ) {\n let source: string;\n if (option === \"-S\" || option === \"--split-string\") {\n source = decodeShellWord(words.at(start + 1) ?? \"\");\n start += 2;\n } else {\n source = option.startsWith(\"-S\")\n ? option.slice(2)\n : option.slice(\"--split-string=\".length);\n start++;\n }\n return executableShellWords([\n \"env\",\n ...shellTokens(source).map(({ value }) => value),\n ...words.slice(start),\n ]);\n }\n if (\n option === \"-\" ||\n option === \"-i\" ||\n option === \"--ignore-environment\" ||\n /^--(?:unset|chdir)=.+|^-[uC].+/.test(option)\n ) {\n start += 1;\n continue;\n }\n break;\n }\n skipAssignments();\n }\n return words.slice(start);\n};\n\n// A quoted argument is executable only when the command itself is a shell with -c.\nconst shellCommandBody = (rawWords: readonly string[]) => {\n const words = executableShellWords(\n rawWords.filter((word) => word !== \"(\" && word !== \")\"),\n ).map(decodeShellWord);\n if (!shellExecutable.test(words.at(0) ?? \"\")) return undefined;\n for (let index = 1; index < words.length; index++) {\n const option = words.at(index);\n if (option === undefined || option === \"--\" || !/^[+-]/.test(option))\n return undefined;\n if (shellValueOptions.has(option)) {\n index++;\n continue;\n }\n if (/^-[^-]*c/.test(option)) return words.at(index + 1);\n }\n return undefined;\n};\n\n/** Shared executable shell words preserve assignments for runtime selectors. */\nexport const shellCommandSegments = (\n command: string,\n grouping: \"boundaries\" | \"tokens\" = \"boundaries\",\n) => {\n const segments: string[][] = [[]];\n const executableSource = shellExecutableSource(command);\n const sources = new Set([\n executableSource,\n ...shellSubstitutions(executableSource),\n ]);\n for (const source of sources) {\n const firstSegment = segments.length;\n segments.push([]);\n for (const { kind, value: word } of shellArgumentTokens(\n shellTokens(source),\n )) {\n if (kind === \"boundary\") {\n if ([\"(\", \")\", \"{\", \"}\"].includes(word) && grouping === \"tokens\")\n segments.at(-1)?.push(word);\n else segments.push([]);\n } else segments.at(-1)?.push(word);\n }\n for (const words of segments.slice(firstSegment)) {\n const body = shellCommandBody(words);\n if (body === undefined) continue;\n const executableBody = shellExecutableSource(body);\n sources.add(executableBody);\n for (const substitution of shellSubstitutions(executableBody))\n sources.add(substitution);\n }\n }\n return segments;\n};\n\n// Inspect direct compiler commands after removing environment launcher assignments.\nexport const compilerCommandSegments = (command: string) =>\n // Compiler policy compares raw invocations; retaining grouping prevents widening its allowlist.\n shellCommandSegments(command, \"tokens\").map(executableShellWords);\n\nconst launcherValueOptions = new Map(\n Object.entries({\n npx: [\n \"-p\",\n \"--package\",\n \"-c\",\n \"--call\",\n \"--cache\",\n \"--registry\",\n \"--userconfig\",\n ],\n bunx: [\"-p\", \"--package\"],\n pnpm: [\"--filter\", \"-F\", \"--dir\", \"-C\", \"--package\"],\n yarn: [\n \"--cwd\",\n \"--cache-folder\",\n \"--mutex\",\n \"--use-yarnrc\",\n \"--modules-folder\",\n \"--registry\",\n ],\n bun: [\n \"--cwd\",\n \"--filter\",\n \"-F\",\n \"--config\",\n \"-c\",\n \"--env-file\",\n \"-e\",\n \"--eval\",\n \"-p\",\n \"--print\",\n ],\n node: [\n \"-e\",\n \"--eval\",\n \"-p\",\n \"--print\",\n \"--conditions\",\n \"-C\",\n \"--inspect-port\",\n \"--max-old-space-size\",\n \"--stack-size\",\n \"--title\",\n \"--icu-data-dir\",\n \"--openssl-config\",\n \"--input-type\",\n ],\n }).map(([launcher, options]) => [launcher, new Set(options)]),\n);\n\nexport const decodeShellWord = (word: string) => {\n let result = \"\";\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < word.length; index += 1) {\n const character = word.at(index);\n if (character === quote) {\n quote = undefined;\n continue;\n }\n if (quote === undefined && (character === \"'\" || character === '\"')) {\n quote = character;\n continue;\n }\n const next = word.at(index + 1);\n if (\n character === \"\\\\\" &&\n next !== undefined &&\n quote !== \"'\" &&\n (quote === undefined || /[$`\"\\\\\\n]/.test(next))\n ) {\n if (next !== \"\\n\") result += next;\n index += 1;\n } else result += character;\n }\n return result;\n};\n\n// Classification sees launcher arguments; acceptance still uses the declared command.\nconst invokesCompiler = (words: string[]) => {\n const tokens = words.map(decodeShellWord);\n const compiler = (word: string) =>\n /(?:^|\\/)(?:tsc|tsgo)(?:\\.js)?$/.test(word);\n let start = 0;\n const skipOptions = (index: number, launcher: string) => {\n while (tokens.at(index)?.startsWith(\"-\")) {\n const option = tokens.at(index);\n index += 1;\n if (option === \"--\") break;\n if (\n option !== undefined &&\n launcherValueOptions.get(launcher)?.has(option)\n )\n index += 1;\n }\n return index;\n };\n while (start < tokens.length) {\n const launcher = tokens.at(start);\n if (launcher === undefined || !launcherValueOptions.has(launcher)) break;\n start = skipOptions(start + 1, launcher);\n if (launcher === \"bun\" && tokens.at(start) === \"check\") return true;\n const subcommand = tokens.at(start);\n if (\n (launcher === \"bun\" && (subcommand === \"x\" || subcommand === \"run\")) ||\n (launcher === \"pnpm\" &&\n (subcommand === \"exec\" || subcommand === \"dlx\")) ||\n (launcher === \"yarn\" &&\n (subcommand === \"exec\" || subcommand === \"dlx\" || subcommand === \"run\"))\n ) {\n start = skipOptions(start + 1, launcher);\n }\n }\n // Explicit compiler tokens behind unsupported launchers fail closed.\n const remaining = tokens.slice(start);\n return remaining.some(\n (word, index) =>\n compiler(word) ||\n (word === \"bun\" &&\n tokens.at(skipOptions(start + index + 1, \"bun\")) === \"check\"),\n );\n};\n\ntype CheckPackageFilesOptions = {\n files: Record<string, string>;\n policy: PackagePolicy;\n};\n\ntype AddDiagnosticOptions = {\n file: string;\n rule: Diagnostic[\"rule\"];\n key: string;\n value?: unknown;\n message: string;\n};\n\n/** Validate manifests and catalog resolutions from a tracked-file snapshot. */\nexport const checkPackageFiles = ({\n files,\n policy,\n}: CheckPackageFilesOptions) => {\n const sources = new Map(Object.entries(files));\n const diagnostics: Diagnostic[] = [];\n const pins = new Map(\n Object.entries({ ...policy.packages, \"bun-types\": policy.bun }),\n );\n const manifests = new Map<string, Record<string, unknown>>();\n const yamlLocations = new Map<string, number[]>();\n const reportedLines = new Map<string, number>();\n const add = ({ file, rule, key, value, message }: AddDiagnosticOptions) => {\n const source = sources.get(file);\n if (source === undefined)\n throw new Error(`Missing package diagnostic source: ${file}`);\n const serialized = value === undefined ? undefined : JSON.stringify(value);\n const locationKey = `${file}:${key}:${serialized ?? \"\"}`;\n const previous = reportedLines.get(locationKey) ?? -1;\n const yamlLine = yamlLocations.get(locationKey)?.shift();\n const index = source\n .split(/\\r?\\n/)\n .findIndex(\n (line, lineIndex) =>\n lineIndex > previous &&\n line.includes(JSON.stringify(key)) &&\n (serialized === undefined || line.includes(serialized)),\n );\n if (index >= 0) reportedLines.set(locationKey, index);\n diagnostics.push({\n rule,\n path: file,\n line: yamlLine ?? Math.max(1, index + 1),\n message,\n });\n };\n for (const [file, text] of sources) {\n const pnpm = path.posix.basename(file) === \"pnpm-workspace.yaml\";\n if (!pnpm && path.posix.basename(file) !== \"package.json\") continue;\n try {\n const lineCounter = new LineCounter();\n const document = pnpm ? parseDocument(text, { lineCounter }) : undefined;\n if (document !== undefined && document.errors.length > 0)\n throw new Error(\"invalid YAML\");\n const json: unknown =\n document === undefined ? JSON.parse(text) : document.toJS();\n if (!record(json)) throw new Error(\"manifest must be an object\");\n if (pnpm) {\n if (json[\"catalog\"] !== undefined && !record(json[\"catalog\"]))\n throw new Error(\"catalog must be a mapping\");\n if (\n json[\"catalogs\"] !== undefined &&\n (!record(json[\"catalogs\"]) ||\n Object.values(json[\"catalogs\"]).some((catalog) => !record(catalog)))\n )\n throw new Error(\"named catalogs must be mappings\");\n if (\n json[\"packages\"] !== undefined &&\n (!Array.isArray(json[\"packages\"]) ||\n !json[\"packages\"].every(\n (pattern: unknown) => typeof pattern === \"string\",\n ))\n )\n throw new Error(\"workspace packages must be patterns\");\n }\n manifests.set(file, json);\n if (document === undefined) continue;\n const catalogEntries = [\n { catalog: json[\"catalog\"], prefix: [\"catalog\"] },\n { catalog: json[\"overrides\"], prefix: [\"overrides\"] },\n ...(record(json[\"catalogs\"])\n ? Object.entries(json[\"catalogs\"]).map(([name, catalog]) => ({\n catalog,\n prefix: [\"catalogs\", name],\n }))\n : []),\n ];\n for (const { catalog, prefix } of catalogEntries) {\n if (!record(catalog)) continue;\n for (const [name, value] of Object.entries(catalog)) {\n const node = document.getIn([...prefix, name], true);\n if (!isNode(node) || node.range === undefined || node.range === null)\n continue;\n const key = `${file}:${name}:${JSON.stringify(value)}`;\n const lines = yamlLocations.get(key) ?? [];\n lines.push(lineCounter.linePos(node.range[0]).line);\n yamlLocations.set(key, lines);\n }\n }\n } catch {\n add({\n file,\n rule: \"package-pins\",\n key: \"\",\n message: pnpm\n ? \"invalid pnpm-workspace.yaml object\"\n : \"invalid package.json object\",\n });\n }\n }\n const catalogSources = (json: Record<string, unknown>) => [\n json,\n ...(record(json[\"workspaces\"]) ? [json[\"workspaces\"]] : []),\n ];\n const pnpmWorkspaceFor = (file: string) => {\n let directory = path.posix.dirname(file);\n while (true) {\n const workspace = manifests.get(\n path.posix.join(directory, \"pnpm-workspace.yaml\"),\n );\n if (workspace !== undefined) return { directory, workspace };\n if (directory === \".\") return undefined;\n directory = path.posix.dirname(directory);\n }\n };\n const catalogFor = (file: string, name: string): unknown => {\n const owner = pnpmWorkspaceFor(file);\n if (owner !== undefined) {\n const { directory, workspace } = owner;\n if (\n path.posix.basename(file) === \"package.json\" &&\n !workspaceContains({\n directory,\n file,\n patterns: workspace[\"packages\"],\n rootMembership: \"implicit\",\n })\n )\n return undefined;\n if (name === \"\" || name === \"default\")\n return (\n workspace[\"catalog\"] ??\n (record(workspace[\"catalogs\"])\n ? workspace[\"catalogs\"][\"default\"]\n : undefined)\n );\n return record(workspace[\"catalogs\"])\n ? workspace[\"catalogs\"][name]\n : undefined;\n }\n let directory = path.posix.dirname(file);\n while (true) {\n const manifest = manifests.get(\n path.posix.join(directory, \"package.json\"),\n );\n if (manifest !== undefined) {\n for (const source of catalogSources(manifest)) {\n if (name === \"\" && source[\"catalog\"] !== undefined)\n return source[\"catalog\"];\n if (\n record(source[\"catalogs\"]) &&\n source[\"catalogs\"][name] !== undefined\n )\n return source[\"catalogs\"][name];\n }\n // A workspace owns catalog resolution even when the requested catalog is absent.\n if (manifest[\"workspaces\"] !== undefined) return undefined;\n }\n if (directory === \".\") return undefined;\n directory = path.posix.dirname(directory);\n }\n };\n const resolve = (file: string, name: string, value: unknown): unknown => {\n const visited = new Set<string>();\n while (typeof value === \"string\" && value.startsWith(\"catalog:\")) {\n if (visited.has(value)) return undefined;\n visited.add(value);\n const catalog = catalogFor(file, value.slice(\"catalog:\".length));\n value = record(catalog) ? catalog[name] : undefined;\n }\n return value;\n };\n const workspaceOwnerFor = (file: string) => {\n const pnpm = pnpmWorkspaceFor(file);\n if (pnpm !== undefined)\n return {\n directory: pnpm.directory,\n patterns: pnpm.workspace[\"packages\"],\n source: \"pnpm\" as const,\n };\n let directory = path.posix.dirname(file);\n while (true) {\n const root = manifests.get(path.posix.join(directory, \"package.json\"));\n const workspaces = root?.[\"workspaces\"];\n if (workspaces !== undefined)\n return {\n directory,\n patterns: record(workspaces) ? workspaces[\"packages\"] : workspaces,\n source: \"json\" as const,\n };\n if (directory === \".\") return undefined;\n directory = path.posix.dirname(directory);\n }\n };\n type WorkspaceResolution = \"matched\" | \"nonmember\" | \"mismatch\";\n const workspaceResolution = ({\n file,\n name,\n pin,\n }: {\n file: string;\n name: string;\n pin: string;\n }): WorkspaceResolution => {\n const owner = workspaceOwnerFor(file);\n if (owner === undefined) return \"nonmember\";\n const { directory, patterns, source } = owner;\n if (source === \"json\" && !Array.isArray(patterns)) return \"mismatch\";\n if (\n !workspaceContains({\n directory,\n file,\n patterns,\n rootMembership: \"implicit\",\n })\n )\n return \"nonmember\";\n const candidates = [...manifests.entries()].filter(\n ([candidate, json]) =>\n path.posix.basename(candidate) === \"package.json\" &&\n json[\"name\"] === name &&\n workspaceContains({\n directory,\n file: candidate,\n patterns,\n rootMembership: source === \"json\" ? \"patterns\" : \"implicit\",\n }),\n );\n return candidates.length === 1 &&\n candidates.every(([, json]) => json[\"version\"] === pin)\n ? \"matched\"\n : \"mismatch\";\n };\n const tsSpecifiers = new Map<string, Set<string>>();\n for (const layout of policy.typescriptInstallLayouts) {\n const values =\n tsSpecifiers.get(layout.compilerPackage) ?? new Set<string>();\n values.add(layout.compilerSpecifier);\n tsSpecifiers.set(layout.compilerPackage, values);\n if (layout.type !== \"split-compatibility\") continue;\n const compatibility =\n tsSpecifiers.get(layout.compatibilityPackage) ?? new Set<string>();\n compatibility.add(layout.compatibilitySpecifier);\n tsSpecifiers.set(layout.compatibilityPackage, compatibility);\n }\n tsSpecifiers.set(\n policy.typescript6Compatibility.packageAlias,\n new Set([`npm:typescript@${policy.typescript6Compatibility.version}`]),\n );\n const layoutFor = (specifiers: Map<string, Set<unknown>>) =>\n policy.typescriptInstallLayouts.find((layout) => {\n const compiler = specifiers.get(layout.compilerPackage);\n if (compiler?.size !== 1 || !compiler.has(layout.compilerSpecifier))\n return false;\n if (layout.type === \"split-compatibility\") {\n const compatibility = specifiers.get(layout.compatibilityPackage);\n return (\n compatibility?.size === 1 &&\n compatibility.has(layout.compatibilitySpecifier)\n );\n }\n return policy.typescriptInstallLayouts.every(\n (other) =>\n other.compilerPackage === layout.compilerPackage ||\n !specifiers.has(other.compilerPackage),\n );\n });\n const peerRange = (value: unknown): value is string =>\n typeof value === \"string\" &&\n valid(value) === null &&\n validRange(value) !== null;\n const toolchainEntries = (file: string, json: Record<string, unknown>) => {\n const entries: { section: string; name: string; value: unknown }[] = [];\n for (const section of [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n \"peerDependencies\",\n ]) {\n const dependencies = json[section];\n if (!record(dependencies)) continue;\n for (const [name, value] of Object.entries(dependencies)) {\n if (!tsSpecifiers.has(name)) continue;\n const resolved = resolve(file, name, value);\n if (section === \"peerDependencies\" && peerRange(resolved)) continue;\n entries.push({ section, name, value: resolved });\n }\n }\n return entries;\n };\n const specifierMap = (entries: { name: string; value: unknown }[]) => {\n const specifiers = new Map<string, Set<unknown>>();\n for (const { name, value } of entries) {\n const values = specifiers.get(name) ?? new Set<unknown>();\n values.add(value);\n specifiers.set(name, values);\n }\n return specifiers;\n };\n const workspaceLayouts = new Map<\n string,\n { layout: Layout | undefined; directory: string }\n >();\n const workspaceLayoutFor = (file: string) => {\n const owner = workspaceOwnerFor(file);\n if (\n owner === undefined ||\n !workspaceContains({ ...owner, file, rootMembership: \"implicit\" })\n )\n return undefined;\n const key = `${owner.source}:${owner.directory}`;\n const cached = workspaceLayouts.get(key);\n if (cached !== undefined) return cached;\n const entries: { name: string; value: unknown }[] = [];\n for (const [candidate, member] of manifests) {\n if (path.posix.basename(candidate) !== \"package.json\") continue;\n const memberOwner = workspaceOwnerFor(candidate);\n if (\n memberOwner?.directory !== owner.directory ||\n memberOwner.source !== owner.source ||\n !workspaceContains({\n ...owner,\n file: candidate,\n rootMembership: \"implicit\",\n })\n )\n continue;\n entries.push(\n ...toolchainEntries(candidate, member).filter(\n ({ section }) => section === \"devDependencies\",\n ),\n );\n }\n const result = {\n layout: layoutFor(specifierMap(entries)),\n directory: owner.directory,\n };\n workspaceLayouts.set(key, result);\n return result;\n };\n for (const [file, json] of manifests) {\n const manager = json[\"packageManager\"];\n if (manager !== undefined && manager !== `bun@${policy.bun}`)\n add({\n file,\n rule: \"bun-pins\",\n key: \"packageManager\",\n value: manager,\n message: `packageManager Bun version must be ${policy.bun}, found ${JSON.stringify(manager)}`,\n });\n const checkEntries = (\n entries: unknown,\n location?: { key: string; value: unknown },\n ) => {\n if (!record(entries)) return;\n for (const [name, raw] of Object.entries(entries)) {\n const value = resolve(file, name, raw);\n const tsAllowed = tsSpecifiers.get(name);\n if (tsAllowed !== undefined) {\n if (typeof value !== \"string\" || !tsAllowed.has(value))\n add({\n file,\n rule: \"typescript-layout\",\n key: location?.key ?? name,\n value: location === undefined ? raw : location.value,\n message: `${name} must use a declared TypeScript specifier, found ${String(value)}`,\n });\n continue;\n }\n const pin = pins.get(name);\n if (pin === undefined) continue;\n if (value === pin) continue;\n const workspace =\n value === \"workspace:*\"\n ? workspaceResolution({ file, name, pin })\n : undefined;\n if (workspace === \"matched\") continue;\n add({\n file,\n rule: name === \"bun-types\" ? \"bun-pins\" : \"package-pins\",\n key: location?.key ?? name,\n value: location === undefined ? raw : location.value,\n message:\n workspace === \"nonmember\"\n ? `${name} workspace:* consumer is not a member of its nearest workspace`\n : `${name} must be ${pin}, found ${String(value)}`,\n });\n }\n };\n for (const key of [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ])\n checkEntries(json[key]);\n if (record(json[\"peerDependencies\"]))\n for (const [name, value] of Object.entries(json[\"peerDependencies\"])) {\n if (tsSpecifiers.has(name) && !peerRange(resolve(file, name, value)))\n checkEntries({ [name]: value });\n }\n for (const source of catalogSources(json)) {\n checkEntries(source[\"catalog\"]);\n if (!record(source[\"catalogs\"])) continue;\n for (const catalog of Object.values(source[\"catalogs\"]))\n checkEntries(catalog);\n }\n const ownedNames = new Set([...pins.keys(), ...tsSpecifiers.keys()]);\n const resolutionDependencies: Record<string, unknown> = {};\n const resolutionRoot = manifests.get(\n path.posix.join(path.posix.dirname(file), \"package.json\"),\n );\n if (resolutionRoot !== undefined)\n for (const section of [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ]) {\n const entries = resolutionRoot[section];\n if (!record(entries)) continue;\n for (const [name, value] of Object.entries(entries))\n resolutionDependencies[name] = resolve(file, name, value);\n }\n const affectedSpecifiers = new Map<string, Set<unknown>>();\n const owner = workspaceOwnerFor(file);\n for (const [candidate, member] of manifests) {\n if (path.posix.basename(candidate) !== \"package.json\") continue;\n const memberOwner = workspaceOwnerFor(candidate);\n const ownManifest =\n candidate === path.posix.join(path.posix.dirname(file), \"package.json\");\n if (\n !ownManifest &&\n !(\n owner !== undefined &&\n owner.directory === path.posix.dirname(file) &&\n memberOwner?.directory === owner.directory &&\n memberOwner.source === owner.source &&\n workspaceContains({\n directory: owner.directory,\n file: candidate,\n patterns: owner.patterns,\n rootMembership: \"implicit\",\n })\n )\n )\n continue;\n for (const section of [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ]) {\n const entries = member[section];\n if (!record(entries)) continue;\n for (const [name, value] of Object.entries(entries)) {\n if (!tsSpecifiers.has(name)) continue;\n const values = affectedSpecifiers.get(name) ?? new Set<unknown>();\n values.add(resolve(candidate, name, value));\n affectedSpecifiers.set(name, values);\n }\n }\n }\n const checkResolutionMap = (entries: unknown, parent?: string) => {\n if (!record(entries)) return;\n for (const [selector, replacement] of Object.entries(entries)) {\n // npm's nested '.' replaces the enclosing package; Yarn and pnpm\n // qualify a target with a dependency path or a parent selector.\n const target = selector === \".\" ? parent : selector;\n if (target === undefined) continue;\n let pattern =\n target\n .split(/>\\s*(?=[@A-Za-z_*]|$)/)\n .at(-1)\n ?.trim() ?? \"\";\n const version = pattern.lastIndexOf(\"@\");\n let qualifier: string | undefined;\n if (version > pattern.lastIndexOf(\"/\")) {\n qualifier = pattern.slice(version + 1).replace(/^npm:/, \"\");\n pattern = pattern.slice(0, version);\n }\n const parts = pattern.split(\"/\");\n pattern = parts.at(-2)?.startsWith(\"@\")\n ? parts.slice(-2).join(\"/\")\n : (parts.at(-1) ?? \"\");\n if (pattern === \"\") {\n add({\n file,\n rule: \"package-pins\",\n key: selector,\n value: replacement,\n message: \"resolution selector must name a package\",\n });\n continue;\n }\n if (record(replacement)) {\n checkResolutionMap(replacement, target);\n continue;\n }\n for (const name of ownedNames) {\n if (!picomatch(pattern)(name)) continue;\n let value = replacement;\n if (typeof replacement === \"string\" && replacement.startsWith(\"$\")) {\n const reference = replacement.slice(1);\n value = resolutionDependencies[reference];\n }\n const resolved = resolve(file, name, value);\n checkEntries(\n { [name]: value },\n {\n key: selector,\n value: replacement,\n },\n );\n if (\n tsSpecifiers.has(name) &&\n [...(affectedSpecifiers.get(name) ?? [])].some((specifier) => {\n if (resolved === specifier) return false;\n if (qualifier === undefined || validRange(qualifier) === null)\n return true;\n if (typeof specifier !== \"string\") return false;\n const versionSpecifier = specifier.startsWith(\"npm:\")\n ? specifier.slice(specifier.lastIndexOf(\"@\") + 1)\n : specifier;\n const release = valid(versionSpecifier);\n return release !== null && satisfies(release, qualifier);\n }) &&\n typeof resolved === \"string\" &&\n tsSpecifiers.get(name)?.has(resolved)\n )\n add({\n file,\n rule: \"typescript-layout\",\n key: selector,\n value: replacement,\n message: `${name} resolution must preserve its declared TypeScript install specifier`,\n });\n }\n }\n };\n checkResolutionMap(json[\"overrides\"]);\n checkResolutionMap(json[\"resolutions\"]);\n if (record(json[\"pnpm\"])) checkResolutionMap(json[\"pnpm\"][\"overrides\"]);\n const localEntries = toolchainEntries(file, json);\n const usesCompiler = policy.typescriptInstallLayouts.some((layout) =>\n localEntries.some(({ name }) => name === layout.compilerPackage),\n );\n let selectedLayout = layoutFor(specifierMap(localEntries));\n if (usesCompiler) {\n if (\n layoutFor(\n specifierMap(\n localEntries.filter(\n ({ section }) => section !== \"peerDependencies\",\n ),\n ),\n ) === undefined\n )\n selectedLayout = undefined;\n if (selectedLayout === undefined) {\n const workspace = workspaceLayoutFor(file);\n const layout = workspace?.layout;\n if (workspace !== undefined && layout !== undefined) {\n const expected = new Map([\n [layout.compilerPackage, layout.compilerSpecifier],\n ]);\n if (layout.type === \"split-compatibility\")\n expected.set(\n layout.compatibilityPackage,\n layout.compatibilitySpecifier,\n );\n expected.set(\n policy.typescript6Compatibility.packageAlias,\n `npm:typescript@${policy.typescript6Compatibility.version}`,\n );\n const developmentOnly = localEntries.every(\n ({ section, name, value }) =>\n section === \"devDependencies\" && expected.get(name) === value,\n );\n const runtimeCompatibilityOnly =\n layout.type === \"split-compatibility\" &&\n path.posix.dirname(file) !== workspace.directory &&\n localEntries.every(\n ({ section, name, value }) =>\n (section === \"dependencies\" ||\n section === \"devDependencies\" ||\n section === \"peerDependencies\") &&\n name === layout.compatibilityPackage &&\n value === layout.compatibilitySpecifier,\n );\n if (developmentOnly || runtimeCompatibilityOnly)\n selectedLayout = layout;\n }\n }\n if (selectedLayout === undefined)\n add({\n file,\n rule: \"typescript-layout\",\n key: \"dependencies\",\n message:\n \"TypeScript compiler and compatibility packages must match one complete declared install layout\",\n });\n const command = record(json[\"scripts\"])\n ? json[\"scripts\"][\"typecheck\"]\n : undefined;\n if (selectedLayout !== undefined && typeof command === \"string\") {\n const normalizedExpected = selectedLayout.typecheckCommand\n .replace(/\\s+/g, \" \")\n .trim();\n for (const words of compilerCommandSegments(command)) {\n if (!invokesCompiler(words)) continue;\n const normalized = words.join(\" \");\n if (\n !words.some((word) => word === \"(\" || word === \")\") &&\n shellSubstitutions(normalized).length === 0 &&\n (normalized === normalizedExpected ||\n normalized.startsWith(`${normalizedExpected} `))\n )\n continue;\n add({\n file,\n rule: \"typescript-layout\",\n key: \"typecheck\",\n value: command,\n message: `typecheck compiler invocation must use ${selectedLayout.typecheckCommand}`,\n });\n break;\n }\n }\n }\n if (record(json[\"peerDependencies\"])) {\n const peerLayout = selectedLayout ?? workspaceLayoutFor(file)?.layout;\n for (const [name, raw] of Object.entries(json[\"peerDependencies\"])) {\n if (!tsSpecifiers.has(name)) continue;\n const range = resolve(file, name, raw);\n if (!peerRange(range)) continue;\n const releases = new Set<string>();\n for (const layout of policy.typescriptInstallLayouts) {\n if (\n layout.compilerPackage !== name &&\n !(\n layout.type === \"split-compatibility\" &&\n layout.compatibilityPackage === name\n )\n )\n continue;\n const specifier = layout.compilerSpecifier;\n releases.add(\n specifier.startsWith(\"npm:\")\n ? specifier.slice(specifier.lastIndexOf(\"@\") + 1)\n : specifier,\n );\n }\n if (name === policy.typescript6Compatibility.packageAlias)\n releases.add(policy.typescript6Compatibility.version);\n if (\n peerLayout?.type === \"split-compatibility\" &&\n name === peerLayout.compatibilityPackage\n )\n releases.add(peerLayout.compatibilitySpecifier);\n if ([...releases].every((release) => satisfies(release, range)))\n continue;\n add({\n file,\n rule: \"typescript-layout\",\n key: name,\n value: raw,\n message: `${name} peer support range must include ${[...releases].join(\" and \")}, found ${range}`,\n });\n }\n }\n if (\n record(json[\"engines\"]) &&\n json[\"engines\"][\"node\"] !== undefined &&\n (typeof json[\"engines\"][\"node\"] !== \"string\" ||\n !nodeSupportRangeMatches(policy.node, json[\"engines\"][\"node\"]))\n )\n add({\n file,\n rule: \"node-engine\",\n key: \"node\",\n value: json[\"engines\"][\"node\"],\n message: `engines.node must support ${policy.node}, found ${JSON.stringify(json[\"engines\"][\"node\"])}`,\n });\n }\n return diagnostics;\n};\n","import { extname } from \"node:path\";\n\nexport const scriptSourceExtensions = {\n \".js\": \"javascript\",\n \".jsx\": \"javascript\",\n \".mjs\": \"javascript\",\n \".cjs\": \"javascript\",\n \".ts\": \"typescript\",\n \".tsx\": \"typescript\",\n \".mts\": \"typescript\",\n \".cts\": \"typescript\",\n} as const;\n\nconst extensionKinds = new Map(Object.entries(scriptSourceExtensions));\n\n/** Share source classification between lint ownership and script command discovery. */\nexport const scriptSourceKind = (file: string) =>\n extensionKinds.get(extname(file));\n","import { parseDocument } from \"yaml\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport type LifecycleFile =\n | { type: \"absent\" }\n | { type: \"tracked\"; source: string }\n | { type: \"unknown\" };\n\nexport type ScriptLifecycleContext = {\n packageManager?: unknown;\n npmrc?: LifecycleFile;\n pnpmWorkspace?: LifecycleFile;\n yarnrc?: LifecycleFile;\n assertFilteredBunBuild?: (selector: string) => void;\n};\n\nconst declaredManager = (value: unknown) =>\n typeof value === \"string\"\n ? /^(bun|npm|pnpm|yarn)@(\\d+\\.\\d+\\.\\d+)(?:\\+\\S+)?$/u.exec(value)\n : null;\n\nexport const rootScriptManager = (\n manifest: unknown,\n context: ScriptLifecycleContext,\n) =>\n declaredManager(\n context.packageManager ??\n (record(manifest) ? manifest[\"packageManager\"] : undefined),\n )?.at(1);\n\nconst npmHooksEnabled = (file: LifecycleFile | undefined) => {\n if (file?.type === \"unknown\")\n throw new Error(\n \"npm lifecycle configuration must be a tracked regular file\",\n );\n if (file?.type !== \"tracked\") return true;\n let enabled = true;\n let section = false;\n for (const raw of file.source.split(/\\r?\\n/u)) {\n const line = raw.trim();\n if (line.startsWith(\"[\")) {\n section = true;\n continue;\n }\n if (section || !/^ignore-scripts(?:\\s*=|\\s*$)/iu.test(line)) continue;\n if (!/^ignore-scripts(?:\\s*=|\\s*$)/u.test(line))\n throw new Error(\n \"npm ignore-scripts must use its canonical lowercase key\",\n );\n const value = line.slice(line.indexOf(\"=\") + 1).trim();\n if (value !== \"true\" && value !== \"false\")\n throw new Error(\n \"npm ignore-scripts must be a literal boolean for lifecycle discovery\",\n );\n enabled = value === \"false\";\n }\n return enabled;\n};\n\nconst yamlSettings = (\n file: LifecycleFile | undefined,\n manager: string,\n): Record<string, unknown> => {\n if (file?.type === \"unknown\")\n throw new Error(\n `${manager} lifecycle configuration requires tracked regular root files without nested workspace overrides`,\n );\n if (file?.type !== \"tracked\") return {};\n const document = parseDocument(file.source);\n if (document.errors.length > 0)\n throw new Error(`Cannot parse ${manager} lifecycle configuration`);\n let settings: unknown;\n try {\n settings = document.toJS();\n } catch {\n throw new Error(`Cannot parse ${manager} lifecycle configuration`);\n }\n if (!record(settings))\n throw new Error(`${manager} lifecycle configuration must be a mapping`);\n return settings;\n};\n\nconst pnpmHooksEnabled = (\n manifest: Record<string, unknown>,\n context: ScriptLifecycleContext,\n) => {\n const declared = declaredManager(\n context.packageManager ?? manifest[\"packageManager\"],\n );\n const dependency = [manifest[\"dependencies\"], manifest[\"devDependencies\"]]\n .flatMap((field) => (record(field) ? [field[\"pnpm\"]] : []))\n .find((value) => typeof value === \"string\");\n const version = declared?.at(1) === \"pnpm\" ? declared.at(2) : dependency;\n if (version !== \"12.9.1\")\n throw new Error(\"pnpm lifecycle discovery requires declared pnpm@12.9.1\");\n const settings = yamlSettings(context.pnpmWorkspace, \"pnpm\");\n const enabled = settings[\"enablePrePostScripts\"];\n if (enabled === undefined) return true;\n if (typeof enabled !== \"boolean\")\n throw new Error(\"pnpm enablePrePostScripts must be a literal boolean\");\n return enabled;\n};\n\ntype LifecycleStagesOptions = {\n name: string;\n manager: string | undefined;\n manifest: Record<string, unknown>;\n scripts: Record<string, unknown>;\n context: ScriptLifecycleContext;\n};\n\n/** Automatic pre/post stages run their bodies directly, without pre-pre recursion. */\nexport const scriptLifecycleStages = ({\n name,\n manager,\n manifest,\n scripts,\n context,\n}: LifecycleStagesOptions) => {\n const hooks = [`pre${name}`, `post${name}`];\n const present = hooks.filter(\n (hook) => scripts[hook] !== undefined && scripts[hook] !== \"\",\n );\n if (present.length === 0) return [name];\n if (present.some((hook) => typeof scripts[hook] !== \"string\"))\n throw new Error(\n `Lifecycle hooks for ${name} must be literal package scripts`,\n );\n let enabled: boolean;\n switch (manager) {\n case \"npm\":\n enabled = npmHooksEnabled(context.npmrc);\n break;\n case \"bun\":\n enabled = true;\n break;\n case \"pnpm\":\n enabled = pnpmHooksEnabled(manifest, context);\n break;\n case \"yarn\": {\n const declaration = declaredManager(\n context.packageManager ?? manifest[\"packageManager\"],\n );\n if (\n declaration?.at(1) !== \"yarn\" ||\n !/^[234]\\./u.test(declaration.at(2) ?? \"\")\n )\n throw new Error(\n \"Yarn lifecycle discovery requires a declared Berry version (2, 3 or 4)\",\n );\n const settings = yamlSettings(context.yarnrc, \"Yarn\");\n if (\n (settings[\"yarnPath\"] !== undefined && settings[\"yarnPath\"] !== null) ||\n (settings[\"plugins\"] !== undefined &&\n (!Array.isArray(settings[\"plugins\"]) ||\n settings[\"plugins\"].length > 0))\n )\n throw new Error(\n \"Custom Yarn executables or plugins require explicit lifecycle discovery support\",\n );\n enabled = false;\n break;\n }\n default:\n throw new Error(\n `Cannot determine the package manager for lifecycle hooks of ${name}`,\n );\n }\n if (!enabled) return [name];\n const source = scripts[name];\n const include = (hook: string) =>\n present.includes(hook) &&\n !(\n manager === \"pnpm\" &&\n typeof source === \"string\" &&\n source.includes(hook)\n );\n return [\n ...(include(`pre${name}`) ? [`pre${name}`] : []),\n name,\n ...(include(`post${name}`) ? [`post${name}`] : []),\n ];\n};\n","import { decodeShellWord, shellCommandSegments } from \"./toolchain-packages\";\nimport { scriptSourceKind } from \"./toolchain-script-extensions\";\nimport {\n rootScriptManager,\n type ScriptLifecycleContext,\n scriptLifecycleStages,\n} from \"./toolchain-script-lifecycle\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst scriptManagers = new Set([\"bun\", \"npm\", \"pnpm\", \"yarn\"]);\n\nconst valueFlags = new Set([\n \"-c\",\n \"--config\",\n \"--tsconfig\",\n \"--ignore-path\",\n \"--ignore-pattern\",\n \"-A\",\n \"--allow\",\n \"-W\",\n \"--warn\",\n \"-D\",\n \"--deny\",\n \"-f\",\n \"--format\",\n \"--max-warnings\",\n \"--threads\",\n \"--report-unused-disable-directives-severity\",\n]);\nconst booleanFlags = new Set([\n \"--no-ignore\",\n \"--quiet\",\n \"--deny-warnings\",\n \"--silent\",\n \"--no-error-on-unmatched-pattern\",\n \"--disable-nested-config\",\n \"--report-unused-disable-directives\",\n \"--disable-unicorn-plugin\",\n \"--disable-oxc-plugin\",\n \"--disable-typescript-plugin\",\n \"--import-plugin\",\n \"--react-plugin\",\n \"--jsdoc-plugin\",\n \"--jest-plugin\",\n \"--vitest-plugin\",\n \"--jsx-a11y-plugin\",\n \"--nextjs-plugin\",\n \"--react-perf-plugin\",\n \"--promise-plugin\",\n \"--node-plugin\",\n \"--vue-plugin\",\n]);\n\n// Shell expansion changes the argument vector; inventory accepts literal words only.\nconst literalWord = (raw: string) => {\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < raw.length; index++) {\n const character = raw.at(index);\n if (character === \"\\\\\" && quote !== \"'\") {\n index++;\n continue;\n }\n if (character === quote) {\n quote = undefined;\n continue;\n }\n if (quote === undefined && (character === \"'\" || character === '\"')) {\n quote = character;\n continue;\n }\n if (quote !== \"'\" && (character === \"$\" || character === \"`\")) return false;\n if (\n quote === undefined &&\n character !== undefined &&\n /[*?[\\]{}~]/.test(character)\n )\n return false;\n }\n return quote === undefined;\n};\n\nconst inventoryArguments = (raw: readonly string[]) => {\n const args: string[] = [];\n let threadsSeen = false;\n for (let index = 0; index < raw.length; index++) {\n const word = raw.at(index);\n if (word === undefined) break;\n if (!literalWord(word))\n return { error: \"oxlint arguments must be literal shell words\" };\n const value = decodeShellWord(word);\n if (!value.startsWith(\"-\")) {\n args.push(value);\n continue;\n }\n if (value === \"--\") {\n // The runner appends its debug flag, so a terminator would hide it as a path.\n return {\n error: \"oxlint argument terminators are unsupported for inventory\",\n };\n }\n if (value === \"--type-aware\" || value === \"--type-check\") continue;\n const equals = value.indexOf(\"=\");\n const flag = equals < 0 ? value : value.slice(0, equals);\n if (booleanFlags.has(flag)) {\n if (equals >= 0)\n return { error: `unexpected value for oxlint flag ${flag}` };\n args.push(value);\n continue;\n }\n if (!valueFlags.has(flag))\n return { error: `unsupported oxlint flag ${flag}` };\n let argument: string;\n if (equals >= 0) {\n argument = value.slice(equals + 1);\n if (argument === \"\")\n return { error: `missing value for oxlint flag ${flag}` };\n } else {\n const next = raw.at(++index);\n if (\n next === undefined ||\n !literalWord(next) ||\n decodeShellWord(next).startsWith(\"-\")\n )\n return { error: `missing or nonliteral value for oxlint flag ${flag}` };\n argument = decodeShellWord(next);\n }\n if (flag === \"--threads\") {\n // The pinned inventory process supplies one thread option of its own.\n if (threadsSeen) return { error: \"duplicate oxlint flag --threads\" };\n if (\n !/^\\+?[0-9]+$/u.test(argument) ||\n BigInt(argument) > 18_446_744_073_709_551_615n\n )\n return { error: \"invalid integer value for oxlint flag --threads\" };\n threadsSeen = true;\n continue;\n }\n if (equals >= 0) args.push(value);\n else args.push(value, argument);\n }\n return { args };\n};\n\ntype LintInventoryCommand = {\n runtime: \"node\" | \"bun\";\n args: string[];\n};\n\n/** Extract runtime and arguments for the pinned inventory binary; never execute package-script shell text. */\nexport const lintInventoryCommands = (\n manifest: unknown,\n forceEnabled = false,\n context: ScriptLifecycleContext & { entryScript?: string } = {},\n) => {\n const commands: LintInventoryCommand[] = [];\n const errors: string[] = [];\n const workspaceTasks = new Set<string>();\n const filteredBuilds = new Set<string>();\n const declaresEngine =\n record(manifest) &&\n [manifest[\"dependencies\"], manifest[\"devDependencies\"]].some(\n (dependencies) =>\n record(dependencies) && \"oxlint-tsgolint\" in dependencies,\n );\n const enabled = forceEnabled || declaresEngine;\n if (!enabled) return { commands, errors, enabled, workspaceTask: false };\n if (!record(manifest))\n return {\n commands,\n errors: [\"lint inventory requires an object package manifest\"],\n enabled,\n workspaceTask: false,\n };\n const scripts = manifest[\"scripts\"];\n if (!record(scripts))\n return {\n commands,\n errors: [\"type-aware linting requires a root lint script\"],\n enabled,\n workspaceTask: false,\n };\n const active = new Set<string>();\n const visited = new Set<string>();\n const visit = (name: string) => {\n if (active.has(name)) {\n errors.push(`cyclic lint script alias: ${name}`);\n return;\n }\n if (visited.has(name)) return;\n const source = scripts[name];\n if (typeof source !== \"string\") {\n errors.push(`missing literal package script: ${name}`);\n return;\n }\n active.add(name);\n for (const raw of shellCommandSegments(source)) {\n if (raw.length === 0) continue;\n const words = raw.map(decodeShellWord);\n const first = words.at(0);\n if (first === \"cd\" || first === \"pushd\" || first === \"popd\") {\n errors.push(\n `${name}: changing directories is unsupported for lint inventory`,\n );\n continue;\n }\n if (first === \"echo\" || first === \"printf\") continue;\n if (first === \"turbo\") {\n if (\n words.length === 3 &&\n words.at(1) === \"run\" &&\n words.at(2) === \"lint\" &&\n raw.every(literalWord)\n )\n workspaceTasks.add(name);\n else if (words.includes(\"lint\") || !raw.every(literalWord))\n errors.push(\n `${name}: workspace lint delegation requires literal turbo run lint without options`,\n );\n continue;\n }\n if (\n first === \"bun\" &&\n words.length === 4 &&\n words.at(1) === \"--filter\" &&\n words.at(2) !== \"\" &&\n !words.at(2)?.startsWith(\"-\") &&\n words.at(3) === \"build\" &&\n raw.every(literalWord)\n ) {\n const selector = words.at(2);\n try {\n if (\n selector === undefined ||\n context.assertFilteredBunBuild === undefined\n )\n throw new Error(\n \"Filtered Bun builds require verified workspace lifecycle context\",\n );\n context.assertFilteredBunBuild(selector);\n filteredBuilds.add(selector);\n } catch (error) {\n errors.push(\n error instanceof Error\n ? error.message\n : \"Cannot determine filtered build lifecycle stages\",\n );\n }\n continue;\n }\n if (\n first !== undefined &&\n scriptManagers.has(first) &&\n words.at(1) === \"run\"\n ) {\n const target = words.at(2);\n if (\n target !== undefined &&\n first === \"bun\" &&\n scriptSourceKind(target) !== undefined &&\n typeof scripts[target] !== \"string\"\n ) {\n if (!raw.every(literalWord))\n errors.push(\n `${name}: validation file commands require literal arguments`,\n );\n continue;\n }\n if (raw.length !== 3 || !raw.every(literalWord)) {\n errors.push(\n `${name}: package script aliases must have one literal name`,\n );\n continue;\n }\n const alias = words.at(2);\n if (alias !== undefined) invoke({ name: alias, manager: first });\n continue;\n }\n let offset: number | undefined;\n if (\n first === \"oxlint\" ||\n first === \"./node_modules/.bin/oxlint\" ||\n first === \"node_modules/.bin/oxlint\"\n )\n offset = 1;\n else if (\n first === \"bun\" &&\n words.at(1) === \"--bun\" &&\n words.at(2) === \"oxlint\"\n )\n offset = 3;\n else if (first === \"bunx\" && words.at(1) === \"oxlint\") offset = 2;\n else if (\n first === \"bunx\" &&\n words.at(1) === \"--no-install\" &&\n words.at(2) === \"oxlint\"\n )\n offset = 3;\n if (offset === undefined) {\n if (\n words.some((word) => /(?:^|\\/)oxlint(?:@[^/]+)?$/.test(word)) ||\n words.some(\n (word, index) =>\n scriptManagers.has(word) &&\n words.slice(index + 1).includes(\"run\"),\n ) ||\n (words.includes(\"turbo\") && words.includes(\"lint\")) ||\n // Only the literal filtered build form above is modelled; any other\n // filtered Bun invocation could run workspace lint out of inventory.\n (first === \"bun\" && words.includes(\"--filter\")) ||\n (first !== undefined &&\n scriptManagers.has(first) &&\n !(\n first === \"bun\" &&\n [\"test\", \"build\", \"check\", \"install\", \"x\"].includes(\n words.at(1) ?? \"\",\n )\n ) &&\n (words.slice(1).some((word) => typeof scripts[word] === \"string\") ||\n !raw.every(literalWord))) ||\n (raw.at(0) !== undefined && !literalWord(raw.at(0) ?? \"\"))\n )\n errors.push(`${name}: unsupported or dynamic oxlint launcher`);\n continue;\n }\n if (!raw.slice(0, offset).every(literalWord)) {\n errors.push(`${name}: oxlint launcher must be literal`);\n continue;\n }\n const inventory = inventoryArguments(raw.slice(offset));\n if (inventory.error !== undefined)\n errors.push(`${name}: ${inventory.error}`);\n else\n commands.push({\n runtime: first === \"bun\" ? \"bun\" : \"node\",\n args: inventory.args,\n });\n }\n active.delete(name);\n visited.add(name);\n };\n const activeInvocations = new Set<string>();\n const invoke = ({\n name,\n manager,\n }: {\n name: string;\n manager: string | undefined;\n }) => {\n const key = `${manager ?? \"unknown\"}:${name}`;\n if (activeInvocations.has(key)) {\n errors.push(`cyclic lint script alias: ${name}`);\n return;\n }\n activeInvocations.add(key);\n try {\n const stages = scriptLifecycleStages({\n name,\n manager,\n manifest,\n scripts,\n context,\n });\n for (const stage of stages) visit(stage);\n } catch (error) {\n errors.push(\n error instanceof Error\n ? error.message\n : \"Cannot determine script lifecycle stages\",\n );\n } finally {\n activeInvocations.delete(key);\n }\n };\n invoke({\n name: context.entryScript ?? \"lint\",\n manager: rootScriptManager(manifest, context),\n });\n const workspaceTask = workspaceTasks.size > 0;\n if (\n !declaresEngine &&\n commands.length === 0 &&\n !workspaceTask &&\n filteredBuilds.size === 0 &&\n errors.length === 0\n )\n return { commands, errors, enabled: false, workspaceTask };\n if (\n commands.length === 0 &&\n !workspaceTask &&\n filteredBuilds.size === 0 &&\n context.entryScript === undefined\n )\n errors.push(\"root lint scripts contain no supported oxlint invocation\");\n return {\n commands: errors.length === 0 ? commands : [],\n errors,\n enabled,\n workspaceTask: errors.length === 0 && workspaceTask,\n };\n};\n","import { spawnSync } from \"node:child_process\";\nimport { lstatSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nimport { discoverConsumerManifests } from \"./consumer-compat-config\";\nimport { lintInventoryCommands } from \"./toolchain-lint-command\";\nimport { scriptSourceKind } from \"./toolchain-script-extensions\";\nimport type {\n LifecycleFile,\n ScriptLifecycleContext,\n} from \"./toolchain-script-lifecycle\";\n\nexport const nodeProjectRule = \"type-aware-projects\";\n\ntype NodeProjectDiagnostic = {\n rule: typeof nodeProjectRule;\n path: string;\n line: number;\n message: string;\n};\n\ntype ProjectOwnershipOptions = {\n trackedFiles: ReadonlySet<string>;\n lintedFiles: readonly string[];\n projectFiles: ReadonlySet<string>;\n};\n\nexport const checkProjectOwnership = ({\n trackedFiles,\n lintedFiles,\n projectFiles,\n}: ProjectOwnershipOptions): NodeProjectDiagnostic[] =>\n [...new Set(lintedFiles)]\n .filter(\n (file) =>\n scriptSourceKind(file) !== undefined &&\n trackedFiles.has(file) &&\n !projectFiles.has(file),\n )\n .sort((left, right) => left.localeCompare(right))\n .map((file) => ({\n rule: nodeProjectRule,\n path: file,\n line: 1,\n message:\n \"type-aware lint would use an inferred project; include this file in a declared tsconfig project (for Node scripts, add scripts/tsconfig.json extending @stll/typescript-config/node.json; see the Node scripts recipe in stella/tooling README)\",\n }));\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringList = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n\ntype ReadCommandOptions = {\n root: string;\n executable: string;\n args: string[];\n runtime: \"node\" | \"bun\";\n};\n\nconst readCommand = ({\n root,\n executable,\n args,\n runtime,\n}: ReadCommandOptions) => {\n const result = spawnSync(\n runtime,\n [...(runtime === \"bun\" ? [\"--bun\"] : []), executable, ...args],\n {\n cwd: root,\n encoding: \"utf8\",\n timeout: 30_000,\n maxBuffer: 32 * 1024 * 1024,\n },\n );\n if (result.error !== undefined) throw result.error;\n if (result.status !== 0)\n throw new Error(\n `configuration discovery failed: ${(result.stderr + result.stdout).trim()}`,\n );\n return result.stdout;\n};\n\nconst relativePath = (root: string, file: string) =>\n path.relative(root, path.resolve(root, file)).split(path.sep).join(\"/\");\n\ntype CheckNodeProjectsOptions = {\n root: string;\n manifest: unknown;\n trackedFiles: ReadonlySet<string>;\n};\n\nconst lifecycleFile = (\n root: string,\n file: string,\n tracked: ReadonlySet<string>,\n): LifecycleFile => {\n try {\n const location = path.join(root, file);\n const metadata = lstatSync(location);\n if (!tracked.has(file) || !metadata.isFile()) return { type: \"unknown\" };\n return { type: \"tracked\", source: readFileSync(location, \"utf8\") };\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\")\n return { type: \"absent\" };\n return { type: \"unknown\" };\n }\n};\n\n/** Inventory and config expansion only: neither subprocess lints or typechecks. */\nexport const checkNodeProjects = ({\n root,\n manifest,\n trackedFiles,\n}: CheckNodeProjectsOptions) => {\n // Membership comes from the canonical workspace discovery, including exclusion\n // patterns. pnpm-workspace.yaml declares members only for pnpm itself; other\n // managers may track it for settings alone, and `bun --filter` always selects\n // from package.json workspaces.\n const packageManager = record(manifest)\n ? manifest[\"packageManager\"]\n : undefined;\n const managerUsesPnpmWorkspace =\n packageManager === undefined ||\n (typeof packageManager === \"string\" && packageManager.startsWith(\"pnpm@\"));\n const discovered = new Map<\n boolean,\n ReturnType<typeof discoverConsumerManifests>\n >();\n const workspaceMembers = (pnpmMembership: boolean) => {\n const cached = discovered.get(pnpmMembership);\n if (cached !== undefined) return cached;\n const files: Record<string, string> = {\n \"package.json\": JSON.stringify(manifest),\n };\n for (const file of trackedFiles) {\n const name = path.posix.basename(file);\n if (\n file !== \"package.json\" &&\n (name === \"package.json\" ||\n (pnpmMembership && name === \"pnpm-workspace.yaml\")) &&\n !file.split(\"/\").includes(\"node_modules\")\n )\n files[file] = readFileSync(path.join(root, file), \"utf8\");\n }\n const result = discoverConsumerManifests(files);\n discovered.set(pnpmMembership, result);\n return result;\n };\n const filteredCommands: (ReturnType<\n typeof lintInventoryCommands\n >[\"commands\"][number] & { cwd: string })[] = [];\n const activeBuilds = new Set<string>();\n const workspaceLifecycle = (directory: string): ScriptLifecycleContext => {\n const nestedLifecycle = { ...lifecycle };\n for (const [key, name] of [\n [\"npmrc\", \".npmrc\"],\n [\"pnpmWorkspace\", \"pnpm-workspace.yaml\"],\n [\"yarnrc\", \".yarnrc.yml\"],\n ] as const) {\n let ancestor = directory;\n while (ancestor !== \".\") {\n if (\n lifecycleFile(root, path.posix.join(ancestor, name), trackedFiles)\n .type !== \"absent\"\n ) {\n nestedLifecycle[key] = { type: \"unknown\" };\n break;\n }\n ancestor = path.posix.dirname(ancestor);\n }\n }\n return nestedLifecycle;\n };\n const lifecycle: ScriptLifecycleContext = {\n packageManager: record(manifest) ? manifest[\"packageManager\"] : undefined,\n npmrc: lifecycleFile(root, \".npmrc\", trackedFiles),\n pnpmWorkspace: lifecycleFile(root, \"pnpm-workspace.yaml\", trackedFiles),\n yarnrc: lifecycleFile(root, \".yarnrc.yml\", trackedFiles),\n assertFilteredBunBuild: (selector) => {\n const selected = [...workspaceMembers(false).entries()].filter(\n ([, pkg]) => pkg[\"name\"] === selector,\n );\n if (selected.length !== 1)\n throw new Error(\n \"Filtered Bun build requires one declared workspace package\",\n );\n const member = selected.at(0);\n if (member === undefined) throw new Error(\"Missing selected workspace\");\n const [directory, pkg] = member;\n const scripts = pkg[\"scripts\"];\n if (!record(scripts) || typeof scripts[\"build\"] !== \"string\")\n throw new Error(\"Filtered Bun build requires a literal build script\");\n if (\n [\"prebuild\", \"postbuild\"].some(\n (name) => scripts[name] !== undefined && scripts[name] !== \"\",\n )\n )\n throw new Error(\n \"Filtered Bun build lifecycle hooks are unsupported for lint inventory; invoke lint scopes explicitly\",\n );\n if (activeBuilds.has(directory))\n throw new Error(\"Cyclic filtered Bun build delegation\");\n activeBuilds.add(directory);\n try {\n const nested = lintInventoryCommands(pkg, true, {\n ...workspaceLifecycle(directory),\n entryScript: \"build\",\n });\n if (nested.workspaceTask)\n throw new Error(\n \"Nested workspace lint delegation is unsupported in filtered builds\",\n );\n if (nested.errors.length > 0)\n throw new Error(\n `${directory}/package.json: ${nested.errors.join(\"; \")}`,\n );\n for (const command of nested.commands)\n filteredCommands.push({\n cwd: path.join(root, directory),\n ...command,\n });\n } finally {\n activeBuilds.delete(directory);\n }\n },\n };\n const inventory = lintInventoryCommands(manifest, false, lifecycle);\n if (!inventory.enabled) return [];\n const diagnostics: ReturnType<typeof checkProjectOwnership> = [];\n const addConfiguration = (file: string, message: string) =>\n diagnostics.push({ rule: nodeProjectRule, path: file, line: 1, message });\n for (const error of inventory.errors) addConfiguration(\"package.json\", error);\n if (inventory.errors.length !== 0) return diagnostics;\n try {\n const require = createRequire(path.join(root, \"package.json\"));\n const oxlint = path.join(\n path.dirname(require.resolve(\"oxlint/package.json\")),\n \"bin/oxlint\",\n );\n const compiler = path.join(\n path.dirname(require.resolve(\"typescript/package.json\")),\n \"bin/tsc\",\n );\n const commands = inventory.commands.map((command) => ({\n cwd: root,\n ...command,\n }));\n if (inventory.workspaceTask) {\n for (const [directory, workspace] of workspaceMembers(\n managerUsesPnpmWorkspace,\n )) {\n if (directory === \".\") continue;\n const file = `${directory}/package.json`;\n if (\n !record(workspace[\"scripts\"]) ||\n workspace[\"scripts\"][\"lint\"] === undefined\n )\n continue;\n const nestedLifecycle = workspaceLifecycle(directory);\n const nested = lintInventoryCommands(workspace, true, nestedLifecycle);\n if (nested.workspaceTask)\n throw new Error(\n `nested workspace lint delegation is unsupported: ${file}`,\n );\n if (nested.errors.length > 0)\n throw new Error(`${file}: ${nested.errors.join(\"; \")}`);\n for (const command of nested.commands)\n commands.push({ cwd: path.join(root, directory), ...command });\n }\n if (commands.length === 0 && filteredCommands.length === 0)\n throw new Error(\"workspace lint task has no declared oxlint commands\");\n }\n commands.push(...filteredCommands);\n // Filtered builds only count once their expanded bodies invoke oxlint.\n if (commands.length === 0)\n throw new Error(\n \"root lint scripts contain no supported oxlint invocation\",\n );\n const lintedFiles = commands.flatMap(({ cwd, args, runtime }) =>\n readCommand({\n root: cwd,\n executable: oxlint,\n args: [...args, \"--debug\", \"files\", \"--threads\", \"1\"],\n runtime,\n })\n .split(/\\r?\\n/)\n .filter((file) => file !== \"\")\n .map((file) => relativePath(root, path.resolve(cwd, file))),\n );\n const nearestProject = (start: string) => {\n let directory = start;\n while (true) {\n const config = path.posix.join(directory, \"tsconfig.json\");\n if (trackedFiles.has(config)) return config;\n if (directory === \".\") return undefined;\n directory = path.posix.dirname(directory);\n }\n };\n const groups = new Map<string, string[]>();\n for (const file of new Set(lintedFiles)) {\n if (!trackedFiles.has(file) || scriptSourceKind(file) === undefined)\n continue;\n const config = nearestProject(path.posix.dirname(file));\n if (config === undefined) continue;\n const group = groups.get(config);\n if (group === undefined) groups.set(config, [file]);\n else group.push(file);\n }\n type Project = { files: Set<string>; references: string[] };\n const projects = new Map<string, Project>();\n const readProject = (config: string): Project => {\n const cached = projects.get(config);\n if (cached !== undefined) return cached;\n const result: Project = { files: new Set(), references: [] };\n try {\n const project: unknown = JSON.parse(\n readCommand({\n root,\n executable: compiler,\n args: [\"--showConfig\", \"--project\", config],\n runtime: \"node\",\n }),\n );\n if (!record(project))\n throw new Error(\"compiler configuration must be an object\");\n const references = project[\"references\"] ?? [];\n if (!Array.isArray(references))\n throw new Error(\"compiler configuration references must be an array\");\n for (const reference of references) {\n if (!record(reference) || typeof reference[\"path\"] !== \"string\")\n throw new Error(\"compiler project reference requires a path\");\n const target = relativePath(\n root,\n path.resolve(root, path.dirname(config), reference[\"path\"]),\n );\n const referencedConfig = target.endsWith(\".json\")\n ? target\n : path.posix.join(target, \"tsconfig.json\");\n if (!trackedFiles.has(referencedConfig))\n throw new Error(\n `project reference is not tracked: ${referencedConfig}`,\n );\n result.references.push(referencedConfig);\n }\n // --showConfig omits `files` when the project owns no roots.\n const sources = project[\"files\"] ?? [];\n if (!stringList(sources))\n throw new Error(\n \"compiler configuration did not return a files array\",\n );\n const options = project[\"compilerOptions\"];\n for (const file of sources) {\n if (\n scriptSourceKind(file) === \"javascript\" &&\n (!record(options) ||\n (options[\"allowJs\"] !== true && options[\"checkJs\"] !== true))\n )\n continue;\n result.files.add(\n relativePath(root, path.resolve(root, path.dirname(config), file)),\n );\n }\n } catch (error) {\n result.files.clear();\n result.references.length = 0;\n addConfiguration(\n config,\n error instanceof Error ? error.message : String(error),\n );\n }\n projects.set(config, result);\n return result;\n };\n const projectFiles = new Set<string>();\n for (const [nearest, sources] of groups) {\n const remaining = new Set(sources);\n const visited = new Set<string>();\n let ancestor: string | undefined = nearest;\n while (ancestor !== undefined && remaining.size > 0) {\n const pending = [ancestor];\n let config = pending.pop();\n while (config !== undefined && remaining.size > 0) {\n if (!visited.has(config)) {\n visited.add(config);\n const project = readProject(config);\n for (const source of remaining) {\n if (!project.files.has(source)) continue;\n projectFiles.add(source);\n remaining.delete(source);\n }\n pending.push(...project.references);\n }\n config = pending.pop();\n }\n const directory = path.posix.dirname(ancestor);\n ancestor =\n directory === \".\"\n ? undefined\n : nearestProject(path.posix.dirname(directory));\n }\n }\n diagnostics.push(\n ...checkProjectOwnership({ trackedFiles, lintedFiles, projectFiles }),\n );\n } catch (error) {\n addConfiguration(\n \"package.json\",\n error instanceof Error ? error.message : String(error),\n );\n }\n return diagnostics;\n};\n","import { parseDocument } from \"yaml\";\n\nimport { canonicalDockerRuntime, rustImageVersion } from \"./toolchain-images\";\nimport { githubAutomationFileKind, isShellScript } from \"./toolchain-inputs\";\nimport { decodeShellWord, shellCommandSegments } from \"./toolchain-packages\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport type RustException = {\n pin: string;\n reason: string;\n tracking: string;\n expires: string;\n};\n\n/** Exceptions authorize one immutable release, never a channel or an entire rule. */\nexport const parseRustExceptions = (\n input: unknown,\n today = new Date().toISOString().slice(0, 10),\n): RustException[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input)) throw new Error(\"rustExceptions must be an array\");\n const pins = new Set<string>();\n return input.map((entry: unknown) => {\n if (\n !record(entry) ||\n Object.keys(entry).length !== 4 ||\n Object.keys(entry).some(\n (key) => ![\"pin\", \"reason\", \"tracking\", \"expires\"].includes(key),\n ) ||\n typeof entry[\"pin\"] !== \"string\" ||\n !/^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/.test(entry[\"pin\"]) ||\n typeof entry[\"reason\"] !== \"string\" ||\n entry[\"reason\"].trim() === \"\" ||\n typeof entry[\"tracking\"] !== \"string\" ||\n !/^https:\\/\\/github\\.com\\/[^/\\s]+\\/[^/\\s]+\\/issues\\/[1-9]\\d*$/.test(\n entry[\"tracking\"],\n ) ||\n typeof entry[\"expires\"] !== \"string\" ||\n !/^\\d{4}-\\d{2}-\\d{2}$/.test(entry[\"expires\"]) ||\n !Number.isFinite(Date.parse(entry[\"expires\"])) ||\n new Date(entry[\"expires\"]).toISOString().slice(0, 10) !==\n entry[\"expires\"] ||\n entry[\"expires\"] <= today ||\n pins.has(entry[\"pin\"])\n )\n throw new Error(\n \"each Rust exception requires a unique exact stable pin, reason, GitHub issue and future valid expiry date\",\n );\n pins.add(entry[\"pin\"]);\n return {\n pin: entry[\"pin\"],\n reason: entry[\"reason\"],\n tracking: entry[\"tracking\"],\n expires: entry[\"expires\"],\n };\n });\n};\n\ntype RustReferenceOptions = {\n file: string;\n rust: string;\n exceptions: readonly RustException[];\n} & (\n | { type: \"file\"; text: string }\n | { type: \"command\"; source: string; line: number }\n | {\n type: \"environment\";\n assignments: readonly { key: string; value: string }[];\n line: number;\n }\n);\n\n/** Only executable fields are inspected: unrelated action inputs are not Rust selectors. */\nexport const checkRustReferences = (options: RustReferenceOptions) => {\n const { file, rust, exceptions } = options;\n const text = options.type === \"file\" ? options.text : \"\";\n const diagnostics: {\n rule: \"rust-version\";\n path: string;\n line: number;\n message: string;\n }[] = [];\n const select = (value: unknown, label: string, line = 1) => {\n if (value === rust || exceptions.some(({ pin }) => pin === value)) return;\n diagnostics.push({\n rule: \"rust-version\",\n path: file,\n line,\n message: `${label} must be Rust ${rust}, found ${String(value)}`,\n });\n };\n const shell = (source: string, firstLine = 1) => {\n const commands = shellCommandSegments(source).map((words) =>\n words.map((word) => ({ value: decodeShellWord(word), line: firstLine })),\n );\n for (const command of commands) {\n let position = 0;\n const prefixes = new Set([\n \"if\",\n \"then\",\n \"do\",\n \"elif\",\n \"!\",\n \"env\",\n \"sudo\",\n \"command\",\n \"exec\",\n \"time\",\n \"export\",\n \"readonly\",\n \"/usr/bin/env\",\n \"/bin/env\",\n ]);\n while (position < command.length) {\n const value = command.at(position)?.value;\n if (value?.startsWith(\"RUSTUP_TOOLCHAIN=\"))\n select(\n value.slice(\"RUSTUP_TOOLCHAIN=\".length),\n \"RUSTUP_TOOLCHAIN\",\n firstLine,\n );\n if (value === \"-u\" || value === \"--unset\") {\n position += 2;\n continue;\n }\n if (\n value?.startsWith(\"--unset=\") ||\n value === \"-i\" ||\n value === \"--ignore-environment\"\n ) {\n position++;\n continue;\n }\n if (\n value !== undefined &&\n (prefixes.has(value) || /^[A-Za-z_][A-Za-z_\\d]*=/.test(value))\n )\n position++;\n else break;\n }\n const executable = command.at(position)?.value;\n const arguments_ = command.slice(position + 1);\n if (executable === \"cargo\" && arguments_.at(0)?.value.startsWith(\"+\")) {\n const selector = arguments_.at(0);\n select(selector?.value.slice(1), \"cargo toolchain\", selector?.line);\n }\n if (executable !== \"rustup\") continue;\n let subcommandPosition = 0;\n while (subcommandPosition < arguments_.length) {\n const token = arguments_.at(subcommandPosition);\n if (token === undefined) break;\n if (token.value === \"--\") {\n subcommandPosition++;\n break;\n }\n if (token.value.startsWith(\"+\")) {\n select(token.value.slice(1), \"rustup toolchain\", token.line);\n } else if (!token.value.startsWith(\"-\")) break;\n subcommandPosition++;\n }\n const invocation = arguments_.slice(subcommandPosition);\n const subcommand = invocation.at(0)?.value;\n if (subcommand === \"target\" || subcommand === \"component\") {\n // These commands name targets/components positionally; only this option selects Rust.\n for (let index = 1; index < invocation.length; index++) {\n const token = invocation.at(index);\n if (token?.value === \"--toolchain\") {\n select(\n invocation.at(++index)?.value,\n \"rustup --toolchain\",\n token.line,\n );\n } else if (token?.value.startsWith(\"--toolchain=\")) {\n select(\n token.value.slice(\"--toolchain=\".length),\n \"rustup --toolchain\",\n token.line,\n );\n }\n }\n continue;\n }\n let selectors: typeof invocation;\n let requiresSelector = true;\n let firstSelectorOnly = false;\n if (\n subcommand === \"default\" ||\n subcommand === \"install\" ||\n subcommand === \"add\" ||\n subcommand === \"update\"\n ) {\n selectors = invocation.slice(1);\n requiresSelector = subcommand !== \"update\";\n } else if (\n subcommand === \"toolchain\" &&\n [\"install\", \"add\", \"update\"].includes(invocation.at(1)?.value ?? \"\")\n ) {\n selectors = invocation.slice(2);\n requiresSelector = invocation.at(1)?.value !== \"update\";\n } else if (subcommand === \"run\") {\n selectors = invocation.slice(1);\n firstSelectorOnly = true;\n } else if (\n subcommand === \"override\" &&\n invocation.at(1)?.value === \"set\"\n ) {\n selectors = invocation.slice(2);\n firstSelectorOnly = true;\n } else continue;\n let selected = 0;\n const optionArguments = new Set([\n \"--path\",\n \"--profile\",\n \"--component\",\n \"-c\",\n \"--target\",\n \"-t\",\n ]);\n for (let index = 0; index < selectors.length; index++) {\n const token = selectors.at(index);\n if (token === undefined) continue;\n if (optionArguments.has(token.value)) {\n index++;\n continue;\n }\n if (token.value.startsWith(\"-\")) continue;\n selected++;\n select(token.value, \"rustup toolchain\", token.line);\n if (firstSelectorOnly) break;\n }\n if (selected === 0 && requiresSelector)\n select(undefined, \"rustup toolchain\", firstLine);\n }\n };\n if (options.type === \"environment\") {\n for (const { key, value } of options.assignments) {\n if (key === \"RUSTUP_TOOLCHAIN\") select(value, key, options.line);\n }\n return diagnostics;\n }\n if (options.type === \"command\") {\n shell(options.source, options.line);\n return diagnostics;\n }\n const lineOf = (token: string) => {\n const index = text.split(/\\r?\\n/).findIndex((line) => line.includes(token));\n return index < 0 ? 1 : index + 1;\n };\n if (isShellScript(file, text)) shell(text);\n if (/(?:^|\\/)package\\.json$/.test(file)) {\n try {\n const object: unknown = JSON.parse(text);\n if (record(object) && record(object[\"scripts\"]))\n for (const [name, script] of Object.entries(object[\"scripts\"]))\n if (typeof script === \"string\") shell(script, lineOf(`\"${name}\"`));\n } catch {\n /* The package owner reports invalid JSON. */\n }\n }\n if (/(?:^|\\/)ci-service-images\\.json$/.test(file)) {\n const images = (value: unknown) => {\n if (\n typeof value === \"string\" &&\n /^rust(?=:|@|$)/.test(canonicalDockerRuntime(value))\n ) {\n const tag = canonicalDockerRuntime(value)\n .replace(/^rust:?/, \"\")\n .split(\"@\")\n .at(0);\n const version = tag === undefined ? undefined : rustImageVersion(tag);\n select(version, \"Rust service image\", lineOf(value));\n } else if (Array.isArray(value)) value.forEach(images);\n else if (record(value))\n for (const [key, entry] of Object.entries(value)) {\n if (key !== \"name\") images(entry);\n }\n };\n try {\n images(JSON.parse(text));\n } catch {\n diagnostics.push({\n rule: \"rust-version\",\n path: file,\n line: 1,\n message: \"invalid service image JSON\",\n });\n }\n }\n if (githubAutomationFileKind(file) === undefined) return diagnostics;\n const document = parseDocument(text);\n if (document.errors.length > 0) return diagnostics;\n try {\n const visit = (value: unknown) => {\n if (Array.isArray(value)) {\n value.forEach(visit);\n return;\n }\n if (!record(value)) return;\n if (\n record(value[\"env\"]) &&\n value[\"env\"][\"RUSTUP_TOOLCHAIN\"] !== undefined\n )\n select(\n value[\"env\"][\"RUSTUP_TOOLCHAIN\"],\n \"RUSTUP_TOOLCHAIN\",\n lineOf(\"RUSTUP_TOOLCHAIN\"),\n );\n if (typeof value[\"run\"] === \"string\") shell(value[\"run\"], lineOf(\"run:\"));\n const uses = value[\"uses\"];\n if (typeof uses === \"string\") {\n const action = uses.split(\"@\").at(0)?.toLowerCase();\n const inputs = record(value[\"with\"]) ? value[\"with\"] : {};\n if (\n action === \"dtolnay/rust-toolchain\" ||\n action === \"actions-rust-lang/setup-rust-toolchain\"\n ) {\n const entries = Object.entries(inputs).filter(\n ([key]) => key.toLowerCase() === \"toolchain\",\n );\n if (entries.length !== 1)\n select(\n undefined,\n `${action} requires an explicit exact toolchain input`,\n lineOf(uses),\n );\n else {\n const selected = entries.at(0)?.at(1);\n // setup-rust-toolchain installs every comma-separated release.\n const selectors =\n action === \"actions-rust-lang/setup-rust-toolchain\" &&\n typeof selected === \"string\"\n ? selected.split(\",\").map((pin) => pin.trim())\n : [selected];\n for (const selector of selectors)\n select(selector, `${action} toolchain`, lineOf(\"toolchain:\"));\n }\n } else if (\n /(?:^|\\/)\\.github\\/workflows\\/[^@]+\\.ya?ml(?:@|$)/.test(uses)\n ) {\n for (const [key, selected] of Object.entries(inputs))\n if ([\"toolchain\", \"rust-toolchain\"].includes(key.toLowerCase()))\n select(selected, `reusable workflow ${key}`, lineOf(`${key}:`));\n }\n }\n for (const [key, child] of Object.entries(value)) {\n if (key === \"workflow_call\" && record(child) && record(child[\"inputs\"]))\n for (const [input, declaration] of Object.entries(child[\"inputs\"]))\n if (\n [\"toolchain\", \"rust-toolchain\"].includes(input) &&\n record(declaration) &&\n declaration[\"default\"] !== undefined\n )\n select(\n declaration[\"default\"],\n `reusable workflow default ${input}`,\n lineOf(\"default:\"),\n );\n visit(child);\n }\n };\n visit(document.toJS({ maxAliasCount: 100 }));\n } catch {\n /* The workflow owner reports alias resolution failures. */\n }\n return diagnostics;\n};\n","import {\n decodeShellWord,\n shellCommandSegments,\n shellTokens,\n} from \"./toolchain-packages\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n// Split only boolean operators outside parentheses and quoted string literals.\nconst booleanParts = (source: string, operator: \"&&\" | \"||\") => {\n const parts: string[] = [];\n let depth = 0;\n let quoted = false;\n let start = 0;\n for (let index = 0; index < source.length; index++) {\n const character = source[index];\n if (character === \"'\") {\n if (quoted && source[index + 1] === \"'\") index++;\n else quoted = !quoted;\n }\n if (quoted) continue;\n if (character === \"(\") depth++;\n if (character === \")\") depth--;\n if (depth === 0 && source.slice(index, index + 2) === operator) {\n parts.push(source.slice(start, index));\n start = index + 2;\n index++;\n }\n }\n parts.push(source.slice(start));\n return parts;\n};\n\nconst withoutOuterParentheses = (source: string): string => {\n if (!source.startsWith(\"(\") || !source.endsWith(\")\")) return source;\n let depth = 0;\n let quoted = false;\n for (let index = 0; index < source.length; index++) {\n const character = source[index];\n if (character === \"'\") {\n if (quoted && source[index + 1] === \"'\") index++;\n else quoted = !quoted;\n }\n if (quoted) continue;\n if (character === \"(\") depth++;\n if (character === \")\") depth--;\n if (depth === 0 && index !== source.length - 1) return source;\n }\n return withoutOuterParentheses(source.slice(1, -1).trim());\n};\n\n// A sufficient static proof, not an evaluator for arbitrary Actions expressions.\n// Unknown predicates can never authorize repository execution before trust.\ntype TrustConditionOptions = {\n condition: unknown;\n event: string;\n allowTrust?: boolean;\n};\nconst excludesUntrusted = ({\n condition,\n event,\n allowTrust = true,\n}: TrustConditionOptions): boolean => {\n if (condition === false) return true;\n if (typeof condition !== \"string\") return false;\n const source = withoutOuterParentheses(\n condition\n .trim()\n .replace(/^\\$\\{\\{([\\s\\S]*)\\}\\}$/u, \"$1\")\n .trim(),\n );\n const alternatives = booleanParts(source, \"||\");\n if (alternatives.length > 1)\n return alternatives.every((part) =>\n excludesUntrusted({ condition: part, event, allowTrust }),\n );\n const conjuncts = booleanParts(source, \"&&\");\n if (conjuncts.length > 1)\n return conjuncts.some((part) =>\n excludesUntrusted({ condition: part, event, allowTrust }),\n );\n const trustComparison =\n /^needs\\.trust-check\\.outputs\\.trusted\\s*==\\s*'([^']*)'$/u.exec(source);\n if (allowTrust && trustComparison?.at(1)?.toLowerCase() === \"true\")\n return true;\n if (source === \"false\") return true;\n const comparison = /^github\\.event_name\\s*(==|!=)\\s*'([^']+)'$/u.exec(source);\n if (comparison === null) return false;\n // Actions compares string values without regard to case.\n const equal = comparison.at(2)?.toLowerCase() === event.toLowerCase();\n return comparison.at(1) === \"==\" ? !equal : equal;\n};\n\n// This is a deliberately small proof language for pre-trust metadata commands.\n// Unknown commands, options, shell constructs, and action inputs require trust.\nconst staticData = (word: string) =>\n !/[`$\\\\]/u.test(word) && !/[<>]/u.test(word);\nconst metadataScript = (command: string) => {\n const interpolation = /\\$\\{\\{([\\s\\S]*?)\\}\\}/gu;\n // Actions interpolates before the shell sees quotes or comments. Validate\n // each expression before replacement, without state mutated in a callback.\n for (const match of command.matchAll(interpolation)) {\n const expression = match.at(1);\n if (\n expression === undefined ||\n ![\n \"github.sha\",\n \"github.run_id\",\n \"github.run_attempt\",\n \"github.repository\",\n ].includes(expression.trim())\n )\n return undefined;\n }\n const source = command.replace(interpolation, \"stll-metadata\");\n return source.includes(\"${{\") ? undefined : source;\n};\nconst metadataWord = (raw: string) => {\n if (/^'[^']*'$/u.test(raw)) return true;\n if ([\"[\", \"]\", \"[[\", \"]]\"].includes(raw)) return true;\n let quote: \"'\" | '\"' | undefined;\n for (const character of raw) {\n if (quote === undefined && \"*?~[{$\".includes(character)) return false;\n if (character === quote) quote = undefined;\n else if (quote === undefined && (character === \"'\" || character === '\"'))\n quote = character;\n }\n if (quote !== undefined) return false;\n const withoutKnownExpressions = raw.replace(\n /\\$\\{[A-Za-z_][A-Za-z_0-9]*\\}|\\$[A-Za-z_][A-Za-z_0-9]*/gu,\n \"value\",\n );\n return !/[`$\\\\]/u.test(withoutKnownExpressions);\n};\nconst safeComparison = (words: readonly string[]) => {\n const first = words.at(0);\n if (![\"test\", \"[\", \"[[\"].includes(first ?? \"\")) return false;\n let end: string | undefined;\n if (first === \"[[\") end = \"]]\";\n else if (first === \"[\") end = \"]\";\n if (end !== undefined && words.at(-1) !== end) return false;\n const operands = words.slice(1, end === undefined ? undefined : -1);\n if (operands.length === 1) return true;\n if (operands.length === 2) return [\"-n\", \"-z\"].includes(operands.at(0) ?? \"\");\n return (\n operands.length === 3 && [\"=\", \"==\", \"!=\"].includes(operands.at(1) ?? \"\")\n );\n};\n\nconst objectReference = (value: string) =>\n /^(?:HEAD|[a-f0-9]{7,64}|(?:refs\\/(?:heads|tags|remotes)\\/|origin\\/)[A-Za-z0-9][A-Za-z0-9._/-]*)(?:[~^][0-9]*)*$/u.test(\n value,\n ) &&\n !value.includes(\"..\") &&\n !value.includes(\"//\") &&\n !value.endsWith(\"/\");\nexport const workflowTrustBootstrapCatalog = {\n commands: {\n test: \"comparison\",\n \"[\": \"comparison\",\n \"[[\": \"comparison\",\n true: \"status\",\n false: \"status\",\n exit: \"exit\",\n echo: \"output\",\n printf: \"format\",\n git: \"git\",\n gh: \"github\",\n },\n git: {\n \"rev-parse\": { flags: [\"--short\", \"--verify\"], references: 1 },\n \"merge-base\": { flags: [\"--all\", \"--is-ancestor\"], references: 2 },\n },\n github: [\"api\"],\n actions: {\n \"actions/checkout\": [\n \"fetch-depth\",\n \"persist-credentials\",\n \"ref\",\n \"repository\",\n \"submodules\",\n ],\n \"oven-sh/setup-bun\": [\"bun-version\", \"no-cache\"],\n },\n} as const;\n\n// History and diff commands may dispatch configured helpers. Only bounded\n// revision queries are proved to remain within repository object metadata.\nconst safeGit = (words: readonly string[]) => {\n const selected = Object.entries(workflowTrustBootstrapCatalog.git).find(\n ([name]) => name === words.at(1),\n );\n if (selected === undefined) return false;\n const [, policy] = selected;\n const references: string[] = [];\n for (const argument of words.slice(2)) {\n if (!staticData(argument)) return false;\n if (!argument.startsWith(\"-\")) {\n references.push(argument);\n continue;\n }\n if (!policy.flags.some((flag) => flag === argument)) return false;\n }\n return (\n references.length === policy.references && references.every(objectReference)\n );\n};\n\nconst safeGh = (words: readonly string[]) => {\n if (!words.every(staticData)) return false;\n if (\n workflowTrustBootstrapCatalog.github.some((name) => name === words.at(1))\n ) {\n const arguments_ = words.slice(2);\n if (\n [\"--method\", \"-X\"].includes(arguments_.at(0) ?? \"\") &&\n arguments_.at(1) === \"GET\"\n )\n arguments_.splice(0, 2);\n if (!arguments_.at(0) || arguments_.at(0)?.startsWith(\"-\")) return false;\n for (let index = 1; index < arguments_.length; index++) {\n const argument = arguments_.at(index);\n if (\n (argument === \"--method\" || argument === \"-X\") &&\n arguments_.at(index + 1) === \"GET\"\n )\n index++;\n else if (\n [\"--jq\", \"-q\"].includes(argument ?? \"\") &&\n /^\\.[A-Za-z0-9_.[\\]\" -]*$/u.test(arguments_.at(index + 1) ?? \"\")\n )\n index++;\n else return false;\n }\n return /^\\/?repos\\/[A-Za-z0-9_./-]+$/u.test(arguments_.at(0) ?? \"\");\n }\n return false;\n};\n\nconst safeCommand = (raw: readonly string[]): boolean => {\n if (raw.length === 0) return true;\n if (!raw.every(metadataWord)) return false;\n const words = raw.map(decodeShellWord);\n const name = words.at(0);\n // A quoted/dynamic executable is never proved to resolve to a known builtin.\n if (raw.at(0) !== name) return false;\n if (name === \"if\" || name === \"elif\") return safeComparison(words.slice(1));\n if ([\"then\", \"else\"].includes(name ?? \"\")) return safeCommand(raw.slice(1));\n if (name === \"fi\") return words.length === 1;\n const selected = Object.entries(workflowTrustBootstrapCatalog.commands).find(\n ([command]) => command === name,\n );\n const kind = selected?.[1];\n if (kind === \"comparison\") return safeComparison(words);\n if (kind === \"status\") return words.length === 1;\n if (kind === \"exit\")\n return (\n words.length === 1 ||\n (words.length === 2 && /^[0-9]+$/u.test(words.at(1) ?? \"\"))\n );\n if (kind === \"output\") return true;\n if (kind === \"format\") {\n const format = words.at(1);\n // Data variables may be arguments, never a format or assignment target.\n return (\n format !== undefined &&\n !format.startsWith(\"-\") &&\n /^(?:[^%$`]|%%|%s)*$/u.test(format)\n );\n }\n if (kind === \"git\") return safeGit(words);\n if (kind === \"github\") return safeGh(words);\n return false;\n};\n\nconst invokesRepositoryCode = (command: string) => {\n const source = metadataScript(command);\n if (source === undefined) return true;\n // The shared command scanner intentionally omits redirects. Prove their\n // destinations separately; metadata may only write Actions outputs or discard.\n const tokens = shellTokens(source);\n for (const [index, token] of tokens.entries()) {\n if (token.kind !== \"redirect\") continue;\n const target = tokens.at(index + 1);\n if (\n ![\">\", \">>\"].includes(token.value) ||\n target?.kind !== \"word\" ||\n !['\"$GITHUB_OUTPUT\"', '\"${GITHUB_OUTPUT}\"', \"/dev/null\"].includes(\n target.value,\n )\n )\n return true;\n }\n const branches: (\"condition\" | \"then\" | \"else\")[] = [];\n for (let words of shellCommandSegments(source, \"tokens\")) {\n if (!safeCommand(words)) return true;\n while ([\"then\", \"else\"].includes(words.at(0) ?? \"\")) {\n const keyword = words.at(0);\n const previous = branches.pop();\n if (keyword === \"then\" && previous === \"condition\") branches.push(\"then\");\n else if (keyword === \"else\" && previous === \"then\") branches.push(\"else\");\n else return true;\n words = words.slice(1);\n }\n const keyword = words.at(0);\n if (keyword === \"if\") branches.push(\"condition\");\n if (keyword === \"elif\") {\n if (branches.pop() !== \"then\") return true;\n branches.push(\"condition\");\n }\n if (keyword === \"fi\") {\n const previous = branches.pop();\n if (previous !== \"then\" && previous !== \"else\") return true;\n }\n }\n return branches.length !== 0;\n};\n\n// These bootstrap actions may run before the repository's trust decision.\n// Input keys are explicit: accepting a repository script input would cross it.\nconst safeAction = (uses: unknown, inputs: unknown) => {\n if (\n typeof uses !== \"string\" ||\n !/^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_./-]+@[a-f0-9]{40}$/u.test(uses)\n )\n return false;\n const repository = uses.split(\"@\").at(0);\n const approved = Object.entries(workflowTrustBootstrapCatalog.actions).find(\n ([name]) => name === repository,\n );\n if (approved === undefined) return false;\n if (inputs === undefined) return repository === \"actions/checkout\";\n if (!record(inputs)) return false;\n if (repository !== \"actions/checkout\") {\n const version = inputs[\"bun-version\"];\n if (\n typeof version !== \"string\" ||\n !/^v?[0-9]+(?:\\.(?:[0-9]+|x)){0,2}$/u.test(version)\n )\n return false;\n }\n const [, allowedInputs] = approved;\n return Object.entries(inputs).every(\n ([name, value]) =>\n allowedInputs.some((allowed) => allowed === name) &&\n [\"string\", \"boolean\", \"number\"].includes(typeof value) &&\n (name !== \"submodules\" || value === false || value === \"false\"),\n );\n};\n\nconst safeShell = (shell: unknown) =>\n shell === undefined || shell === \"bash\" || shell === \"sh\";\nconst safeEnvironment = (value: unknown) =>\n value === undefined ||\n (record(value) &&\n Object.keys(value).every((name) =>\n [\n \"HEAD_REPO\",\n \"BASE_REPO\",\n \"HAS_RUN_CI_LABEL\",\n \"PR_TITLE\",\n \"HEAD_REF\",\n \"ISSUE_BODY\",\n \"COMMENT_BODY\",\n \"GH_TOKEN\",\n \"GITHUB_TOKEN\",\n \"HAWK_RUST_TOOLCHAIN\",\n \"HAWK_VERSION\",\n \"HAWK_X86_64_UNKNOWN_LINUX_GNU_SHA256\",\n ].includes(name),\n ));\nconst configuredShell = (value: unknown) =>\n record(value) && record(value[\"run\"]) ? value[\"run\"][\"shell\"] : undefined;\n\nexport const workflowTrustRules = [\"workflow-trust\"] as const;\n\ntype WorkflowTrustFinding = {\n job: string;\n message: string;\n} & (\n | { type: \"job\"; property: \"uses\" | \"container\" | \"services\" }\n | { type: \"step\"; step: number }\n);\n\nconst workflowEvents = (triggers: unknown): unknown[] => {\n if (typeof triggers === \"string\") return [triggers];\n if (Array.isArray(triggers)) return triggers;\n if (record(triggers)) return Object.keys(triggers);\n return [];\n};\n\n/** Enforce a workflow's declared trust boundary before repository dependency execution. */\nexport const checkWorkflowTrust = (workflow: unknown) => {\n const findings: WorkflowTrustFinding[] = [];\n if (!record(workflow) || !record(workflow[\"jobs\"])) return findings;\n const jobs = workflow[\"jobs\"];\n if (!record(jobs[\"trust-check\"])) return findings;\n const triggers = workflow[\"on\"];\n const events = workflowEvents(triggers);\n const pullRequests = events.filter(\n (event): event is string =>\n event === \"pull_request\" || event === \"pull_request_target\",\n );\n if (pullRequests.length === 0) return findings;\n for (const [name, job] of Object.entries(jobs)) {\n if (!record(job)) continue;\n const needs = job[\"needs\"];\n const ordered =\n name !== \"trust-check\" &&\n (needs === \"trust-check\" ||\n (Array.isArray(needs) && needs.includes(\"trust-check\")));\n const permitsExecution = (stepCondition: unknown) => {\n const guarded = pullRequests.every(\n (event) =>\n excludesUntrusted({ condition: job[\"if\"], event }) ||\n excludesUntrusted({ condition: stepCondition, event }),\n );\n if (ordered && guarded) return true;\n // Non-PR-only execution needs no dependency on a PR-only trust decision.\n return pullRequests.every(\n (event) =>\n excludesUntrusted({\n condition: job[\"if\"],\n event,\n allowTrust: false,\n }) ||\n excludesUntrusted({\n condition: stepCondition,\n event,\n allowTrust: false,\n }),\n );\n };\n const message = `jobs.${name} repository commands require needs: trust-check and a condition requiring its trusted output on pull requests`;\n const jobUses = job[\"uses\"];\n if (jobUses !== undefined && !permitsExecution(undefined))\n findings.push({ type: \"job\", property: \"uses\", job: name, message });\n // Containers and services start before steps, so a step condition cannot\n // authorize them. No image approval catalog is implicit in a digest pin.\n if (!permitsExecution(undefined)) {\n if (job[\"container\"] !== undefined)\n findings.push({\n type: \"job\",\n property: \"container\",\n job: name,\n message,\n });\n const services = job[\"services\"];\n if (\n services !== undefined &&\n (!record(services) || Object.keys(services).length > 0)\n )\n findings.push({\n type: \"job\",\n property: \"services\",\n job: name,\n message,\n });\n }\n if (!Array.isArray(job[\"steps\"])) continue;\n for (const [index, step] of job[\"steps\"].entries()) {\n if (!record(step)) continue;\n const run = step[\"run\"];\n const uses = step[\"uses\"];\n const unsafeRun =\n typeof run === \"string\" &&\n (invokesRepositoryCode(run) ||\n !safeShell(\n step[\"shell\"] ??\n configuredShell(job[\"defaults\"]) ??\n configuredShell(workflow[\"defaults\"]),\n ) ||\n ![workflow[\"env\"], job[\"env\"], step[\"env\"]].every(safeEnvironment));\n const unsafeAction =\n uses !== undefined &&\n (!safeAction(uses, step[\"with\"]) ||\n ![workflow[\"env\"], job[\"env\"], step[\"env\"]].every(safeEnvironment));\n if (!unsafeRun && !unsafeAction) continue;\n // Unknown actions can read the caller's workspace before any later step.\n if (permitsExecution(unsafeAction ? undefined : step[\"if\"])) continue;\n findings.push({ type: \"step\", job: name, step: index, message });\n }\n }\n return findings;\n};\n","import path from \"node:path\";\nimport { parse as parseToml } from \"smol-toml\";\nimport {\n isAlias,\n isMap,\n isScalar,\n isSeq,\n LineCounter,\n parseAllDocuments,\n parseDocument,\n} from \"yaml\";\n\nimport {\n containerDocumentImages,\n isComposeDefinitionPath,\n isKubernetesDefinitionPath,\n} from \"./toolchain-container-inputs\";\nimport type { DynamicSelector } from \"./toolchain-dynamic-selectors\";\nimport {\n engineFloorSelectorMatches,\n type ResolvedEngineFloor,\n} from \"./toolchain-engine-floors\";\nimport { canonicalDockerRuntime, rustImageVersion } from \"./toolchain-images\";\nimport {\n githubAutomationFileKind,\n isDockerDefinitionPath,\n isMiseConfigPath,\n} from \"./toolchain-inputs\";\nimport { nodeSelectorMatches } from \"./toolchain-node\";\nimport { checkRustReferences, type RustException } from \"./toolchain-rust\";\nimport {\n checkWorkflowTrust,\n workflowTrustRules,\n} from \"./toolchain-workflow-trust\";\n\nexport const runtimeRules = [\n \"bun-pins\",\n \"node-version\",\n \"python-version\",\n \"rust-version\",\n \"runtime-manager\",\n \"runtime-docker\",\n \"runtime-workflow\",\n \"action-pins\",\n ...workflowTrustRules,\n] as const;\n\ntype RuntimeRule = (typeof runtimeRules)[number];\n\ntype RuntimePolicy = {\n node: string;\n python: string;\n rust: string;\n bun: string;\n packages: Record<string, string>;\n actions: Record<string, { sha: string; version: string }>;\n};\n\ntype RuntimeDiagnostic = {\n rule: RuntimeRule;\n path: string;\n line: number;\n message: string;\n};\n\nexport type RuntimeDelegation = {\n path: string;\n line: number;\n tool: \"node\" | \"python\" | \"bun\";\n selector: string;\n checkoutPath: string;\n ref: string;\n};\n\ntype CheckRuntimeFileOptions = {\n file: string;\n text: string;\n policy: RuntimePolicy;\n trackedFiles: ReadonlySet<string>;\n readFile: (file: string) => string | undefined;\n repository?: string | undefined;\n onDelegated?: ((report: RuntimeDelegation) => void) | undefined;\n dynamicSelectors?: readonly DynamicSelector[] | undefined;\n onDynamicSelector?: ((entry: DynamicSelector) => void) | undefined;\n rustExceptions?: readonly RustException[] | undefined;\n engineFloors?: readonly ResolvedEngineFloor[] | undefined;\n onEngineFloor?:\n | ((floor: ResolvedEngineFloor, status: \"matched\" | \"mismatch\") => void)\n | undefined;\n};\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\ntype DockerEnvironmentOptions = { source: string; escape: string };\n\n// ENV uses whitespace-delimited assignments, not shell operators or command substitution.\nconst dockerEnvironmentAssignments = ({\n source,\n escape,\n}: DockerEnvironmentOptions) => {\n const words: string[] = [];\n let word = \"\";\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < source.length; index++) {\n const character = source.at(index) ?? \"\";\n if (character === escape && quote !== \"'\") {\n word += character + (source.at(++index) ?? \"\");\n continue;\n }\n if (character === quote) quote = undefined;\n else if (quote === undefined && (character === \"'\" || character === '\"'))\n quote = character;\n else if (quote === undefined && /\\s/.test(character)) {\n if (word !== \"\") words.push(word);\n word = \"\";\n continue;\n }\n word += character;\n }\n if (quote !== undefined) return undefined;\n if (word !== \"\") words.push(word);\n const decode = (raw: string) => {\n let value = \"\";\n let quoted: \"'\" | '\"' | undefined;\n for (let index = 0; index < raw.length; index++) {\n const character = raw.at(index) ?? \"\";\n if (character === quoted) {\n quoted = undefined;\n continue;\n }\n if (quoted === undefined && (character === \"'\" || character === '\"')) {\n quoted = character;\n continue;\n }\n const next = raw.at(index + 1);\n if (\n character === escape &&\n quoted !== \"'\" &&\n next !== undefined &&\n (quoted === undefined ||\n next === '\"' ||\n next === \"$\" ||\n next === escape)\n ) {\n value += next;\n index++;\n } else value += character;\n }\n return value;\n };\n const first = words.at(0);\n if (first === undefined) return undefined;\n if (!first.includes(\"=\")) {\n const legacy = /^(\\S+)\\s+([\\s\\S]*)$/.exec(source);\n if (legacy === null) return undefined;\n return [{ key: decode(legacy[1] ?? \"\"), value: decode(legacy[2] ?? \"\") }];\n }\n const assignments: { key: string; value: string }[] = [];\n for (const raw of words) {\n const separator = raw.indexOf(\"=\");\n if (separator < 1) return undefined;\n assignments.push({\n key: decode(raw.slice(0, separator)),\n value: decode(raw.slice(separator + 1)),\n });\n }\n return assignments;\n};\n\nconst pythonSelectorMatches = (value: unknown, expected: string) =>\n value === expected ||\n (typeof value === \"string\" &&\n /^\\d+\\.\\d+$/.test(expected) &&\n value.startsWith(`${expected}.`) &&\n /^\\d+\\.\\d+\\.\\d+$/.test(value));\n\nconst compareRelease = (left: readonly number[], right: readonly number[]) => {\n for (let index = 0; index < Math.max(left.length, right.length); index++) {\n const difference = (left.at(index) ?? 0) - (right.at(index) ?? 0);\n if (difference !== 0) return Math.sign(difference);\n }\n return 0;\n};\n\n/** A minor policy covers every nonnegative patch in that release series. */\ntype PythonSeriesRequirementOptions = {\n current: readonly number[];\n operator: string;\n target: readonly number[];\n wildcard: boolean;\n};\nconst pythonSeriesRequirementMatches = ({\n current,\n operator,\n target,\n wildcard,\n}: PythonSeriesRequirementOptions) => {\n const prefixCovers = (prefix: readonly number[]) =>\n prefix.length <= 2 &&\n prefix.every((part, index) => current.at(index) === part);\n const prefixOverlaps =\n target.slice(0, 2).every((part, index) => current.at(index) === part) &&\n target.slice(3).every((part) => part === 0);\n if (wildcard) {\n if (operator === \"==\") return prefixCovers(target);\n if (operator === \"!=\") return !prefixOverlaps;\n return false;\n }\n const minimumComparison = compareRelease(current, target);\n const seriesComparison = compareRelease(\n current.slice(0, 2),\n target.slice(0, 2),\n );\n switch (operator) {\n case \"==\":\n return false;\n case \"!=\":\n return !(\n seriesComparison === 0 && target.slice(3).every((part) => part === 0)\n );\n case \">=\":\n return minimumComparison >= 0;\n case \">\":\n return minimumComparison > 0;\n case \"<=\":\n case \"<\":\n return seriesComparison < 0;\n case \"~=\":\n return (\n target.length >= 2 &&\n minimumComparison >= 0 &&\n prefixCovers(target.slice(0, -1))\n );\n default:\n return false;\n }\n};\n\n/** Evaluate final-release Python constraints against the complete selected version set. */\nconst pythonRequirementMatches = (requirement: unknown, version: string) => {\n if (typeof requirement !== \"string\" || requirement.trim() === \"\")\n return false;\n const current = version.split(\".\").map(Number);\n return requirement.split(\",\").every((clause) => {\n const match = /^(~=|==|!=|<=|>=|<|>)\\s*(\\d+(?:\\.\\d+)*)(\\.\\*)?$/.exec(\n clause.trim(),\n );\n if (match === null) return false;\n const operator = match[1];\n const release = match[2];\n if (release === undefined || operator === undefined) return false;\n const target = release.split(\".\").map(Number);\n if (current.length === 2)\n return pythonSeriesRequirementMatches({\n current,\n operator,\n target,\n wildcard: match[3] !== undefined,\n });\n const comparison = compareRelease(current, target);\n if (match[3] !== undefined) {\n if (operator !== \"==\" && operator !== \"!=\") return false;\n const prefix = target.every(\n (part, index) => (current.at(index) ?? 0) === part,\n );\n return operator === \"==\" ? prefix : !prefix;\n }\n switch (operator) {\n case \"==\":\n return comparison === 0;\n case \"!=\":\n return comparison !== 0;\n case \"<=\":\n return comparison <= 0;\n case \">=\":\n return comparison >= 0;\n case \"<\":\n return comparison < 0;\n case \">\":\n return comparison > 0;\n case \"~=\": {\n if (target.length < 2) return false;\n const prefix = target.slice(0, -1);\n return (\n comparison >= 0 &&\n prefix.every((part, index) => (current.at(index) ?? 0) === part)\n );\n }\n default:\n return false;\n }\n });\n};\n\n/** Check runtime declarations only in the files that declare or configure them. */\nexport const checkRuntimeFile = ({\n file,\n text,\n policy,\n trackedFiles,\n readFile,\n repository,\n onDelegated,\n dynamicSelectors = [],\n onDynamicSelector,\n rustExceptions = [],\n engineFloors = [],\n onEngineFloor,\n}: CheckRuntimeFileOptions): RuntimeDiagnostic[] => {\n const diagnostics: RuntimeDiagnostic[] = checkRustReferences({\n type: \"file\",\n file,\n text,\n rust: policy.rust,\n exceptions: rustExceptions,\n });\n const name = path.posix.basename(file);\n const lines = text.split(/\\r?\\n/);\n type RuntimeDiagnosticOptions = Pick<\n RuntimeDiagnostic,\n \"rule\" | \"line\" | \"message\"\n >;\n const add = ({ rule, line, message }: RuntimeDiagnosticOptions) => {\n diagnostics.push({ rule, path: file, line, message });\n };\n let currentLocation: string | undefined;\n const dynamic = (value: unknown) =>\n typeof value === \"string\" && value.includes(\"$\");\n const authorizeDynamic = (\n kind: DynamicSelector[\"kind\"],\n line: number,\n at = currentLocation,\n ) => {\n const matches = dynamicSelectors.filter(\n (entry) =>\n entry.path === file &&\n entry.kind === kind &&\n (entry.at !== undefined ? entry.at === at : entry.line === line),\n );\n if (matches.length !== 1) return false;\n const entry = matches.at(0);\n if (entry === undefined) return false;\n onDynamicSelector?.(entry);\n return true;\n };\n const lineOf = (key: string) =>\n Math.max(1, lines.findIndex((line) => line.includes(key)) + 1);\n type RuntimePinOptions = {\n rule: RuntimeRule;\n value: unknown;\n expected: string;\n label: string;\n line?: number;\n selector?: \"node\" | undefined;\n };\n const pin = ({\n rule,\n value,\n expected,\n label,\n line = 1,\n selector,\n }: RuntimePinOptions) => {\n let matches =\n value === expected ||\n (rule === \"rust-version\" &&\n rustExceptions.some((entry) => entry.pin === value));\n if (selector === \"node\") matches = nodeSelectorMatches(value, expected);\n else if (label.includes(\"python\"))\n matches = pythonSelectorMatches(value, expected);\n if (!matches)\n add({\n rule,\n line,\n message: `${label} must be ${expected}, found ${String(value)}`,\n });\n };\n const toml = (rule: RuntimeRule) => {\n try {\n return parseToml(text);\n } catch {\n add({\n rule,\n line: 1,\n message: \"invalid TOML\",\n });\n return undefined;\n }\n };\n const versions = {\n ...policy.packages,\n ...Object.fromEntries(\n Object.entries(policy.packages).map(([tool, version]) => [\n `npm:${tool}`,\n version,\n ]),\n ),\n bun: policy.bun,\n node: policy.node,\n nodejs: policy.node,\n python: policy.python,\n rust: policy.rust,\n \"core:node\": policy.node,\n \"core:python\": policy.python,\n \"core:rust\": policy.rust,\n \"core:bun\": policy.bun,\n };\n const nodeTools = new Set([\"node\", \"nodejs\", \"core:node\"]);\n if (name === \".bun-version\")\n pin({\n rule: \"bun-pins\",\n value: text.trim(),\n expected: policy.bun,\n label: name,\n });\n if (name === \".node-version\" || name === \".nvmrc\")\n pin({\n rule: \"node-version\",\n selector: \"node\",\n value: text.trim(),\n expected: policy.node,\n label: name,\n });\n if (name === \".python-version\")\n pin({\n rule: \"python-version\",\n value: text.trim(),\n expected: policy.python,\n label: name,\n });\n const firstContent = lines.find(\n (line) => line.trim() !== \"\" && !line.trimStart().startsWith(\"#\"),\n );\n const rustToml =\n name === \"rust-toolchain.toml\" ||\n (name === \"rust-toolchain\" && firstContent?.trimStart().startsWith(\"[\"));\n if (name === \"rust-toolchain\" && !rustToml)\n pin({\n rule: \"rust-version\",\n value: text.trim(),\n expected: policy.rust,\n label: name,\n });\n if (rustToml) {\n const parsed = toml(\"rust-version\");\n if (parsed !== undefined) {\n const toolchain = parsed[\"toolchain\"];\n pin({\n rule: \"rust-version\",\n value: record(toolchain) ? toolchain[\"channel\"] : undefined,\n expected: policy.rust,\n label: \"Rust channel\",\n line: lineOf(\"channel\"),\n });\n }\n }\n if (name === \"Cargo.toml\") {\n const parsed = toml(\"rust-version\");\n const rustFloor = (value: unknown) => {\n const parts =\n typeof value === \"string\" &&\n /^(?:0|[1-9]\\d*)(?:\\.(?:0|[1-9]\\d*)){0,2}$/.test(value)\n ? value.split(\".\").map(Number)\n : undefined;\n if (\n parts === undefined ||\n !parts.every(Number.isSafeInteger) ||\n compareRelease(parts, policy.rust.split(\".\").map(Number)) > 0\n )\n add({\n rule: \"rust-version\",\n line: lineOf(\"rust-version\"),\n message: `Cargo rust-version must be a bare support floor at or below Rust ${policy.rust}`,\n });\n };\n const readManifest = (candidate: string) => {\n if (candidate === file) return parsed;\n if (!trackedFiles.has(candidate)) return undefined;\n try {\n return parseToml(readFile(candidate) ?? \"\");\n } catch {\n return undefined;\n }\n };\n if (parsed !== undefined) {\n const workspace = parsed[\"workspace\"];\n const defaults = record(workspace) ? workspace[\"package\"] : undefined;\n if (record(defaults) && defaults[\"rust-version\"] !== undefined)\n rustFloor(defaults[\"rust-version\"]);\n const pkg = parsed[\"package\"];\n const version = record(pkg) ? pkg[\"rust-version\"] : undefined;\n if (version !== undefined) {\n if (!record(version)) rustFloor(version);\n else {\n let inherited: unknown;\n if (version[\"workspace\"] === true && record(pkg)) {\n const explicit = pkg[\"workspace\"];\n let directory = path.posix.dirname(file);\n const explicitPath =\n typeof explicit === \"string\" &&\n !explicit.includes(\"\\\\\") &&\n !explicit.includes(\":\") &&\n !explicit.includes(\"${{\") &&\n !path.posix.isAbsolute(explicit)\n ? path.posix.normalize(path.posix.join(directory, explicit))\n : undefined;\n if (\n explicit === undefined ||\n (explicitPath !== undefined &&\n explicitPath !== \"..\" &&\n !explicitPath.startsWith(\"../\"))\n ) {\n if (explicitPath !== undefined) directory = explicitPath;\n while (true) {\n const owner = readManifest(\n path.posix.join(directory, \"Cargo.toml\"),\n );\n const table = owner?.[\"workspace\"];\n if (record(table)) {\n const fields = table[\"package\"];\n inherited = record(fields)\n ? fields[\"rust-version\"]\n : undefined;\n break;\n }\n if (explicit !== undefined || directory === \".\") break;\n directory = path.posix.dirname(directory);\n }\n }\n }\n rustFloor(inherited);\n }\n }\n }\n }\n if (name === \"Pipfile\") {\n const parsed = toml(\"python-version\");\n const requires = parsed?.[\"requires\"];\n if (record(requires)) {\n const minor = requires[\"python_version\"];\n if (\n minor !== undefined &&\n minor !== policy.python.split(\".\").slice(0, 2).join(\".\")\n )\n add({\n rule: \"python-version\",\n line: lineOf(\"python_version\"),\n message: `Pipfile python_version must select Python ${policy.python}`,\n });\n const full = requires[\"python_full_version\"];\n if (\n full !== undefined &&\n !(\n typeof full === \"string\" &&\n /^\\d+\\.\\d+\\.\\d+$/.test(full) &&\n pythonSelectorMatches(full, policy.python)\n )\n )\n add({\n rule: \"python-version\",\n line: lineOf(\"python_full_version\"),\n message: `Pipfile python_full_version must select Python ${policy.python}`,\n });\n }\n }\n if (name === \"pyproject.toml\" || name === \"uv.toml\") {\n const parsed = toml(\"python-version\");\n if (parsed !== undefined) {\n const project = parsed[\"project\"];\n if (record(project) && project[\"requires-python\"] !== undefined)\n if (\n !pythonRequirementMatches(project[\"requires-python\"], policy.python)\n )\n add({\n rule: \"python-version\",\n line: lineOf(\"requires-python\"),\n message: `requires-python must include Python ${policy.python}; unsupported constraints must use final-release version specifiers`,\n });\n const tool = parsed[\"tool\"];\n const configuredUv = record(tool) ? tool[\"uv\"] : undefined;\n const uv = name === \"uv.toml\" ? parsed : configuredUv;\n if (record(uv) && uv[\"python\"] !== undefined)\n pin({\n rule: \"python-version\",\n value: uv[\"python\"],\n expected: policy.python,\n label: \"uv python\",\n line: lineOf(\"python\"),\n });\n }\n }\n if (isMiseConfigPath(file)) {\n const parsed = toml(\"runtime-manager\");\n const tools = parsed?.[\"tools\"];\n if (record(tools)) {\n for (const [tool, expected] of Object.entries(versions)) {\n const configured = tools[tool];\n if (configured !== undefined)\n pin({\n rule:\n tool === \"rust\" || tool === \"core:rust\"\n ? \"rust-version\"\n : \"runtime-manager\",\n value: record(configured) ? configured[\"version\"] : configured,\n expected,\n selector: nodeTools.has(tool) ? \"node\" : undefined,\n label: `mise ${tool}`,\n line: lineOf(tool),\n });\n }\n }\n }\n if (name === \".tool-versions\") {\n lines.forEach((line, index) => {\n const fields = line.replace(/#.*$/, \"\").trim().split(/\\s+/);\n const tool = fields.at(0);\n if (tool === undefined || !(tool in versions)) return;\n const expected = Object.entries(versions).find(\n ([key]) => key === tool,\n )?.[1];\n if (expected !== undefined)\n pin({\n rule:\n tool === \"rust\" || tool === \"core:rust\"\n ? \"rust-version\"\n : \"runtime-manager\",\n value: fields.slice(1).join(\" \"),\n expected,\n selector: nodeTools.has(tool) ? \"node\" : undefined,\n label: `.tool-versions ${tool}`,\n line: index + 1,\n });\n });\n }\n type RuntimeImageOptions = {\n image: unknown;\n line: number;\n label: string;\n at?: string | undefined;\n };\n const checkRuntimeImage = ({\n image,\n line,\n label,\n at,\n }: RuntimeImageOptions) => {\n const unknownRuntime = () => {\n const rustImage =\n typeof image === \"string\" &&\n /^rust(?=:|@|$)/i.test(canonicalDockerRuntime(image));\n if (!rustImage && dynamic(image) && authorizeDynamic(\"image\", line, at))\n return;\n add({\n rule: rustImage ? \"rust-version\" : \"runtime-docker\",\n line,\n message: rustImage\n ? `cannot determine ${label} Rust release; use a static exact pin`\n : `cannot determine ${label} runtime; use a static image or a scoped dynamicSelectors declaration`,\n });\n };\n if (typeof image !== \"string\") {\n unknownRuntime();\n return;\n }\n const canonical = canonicalDockerRuntime(image);\n // Variable defaults may contain reference delimiters; preserve offsets while classifying.\n const structuralImage = canonical.replace(\n /\\$\\{[^}]*\\}|\\$[A-Za-z_][A-Za-z_\\d]*/g,\n (variable) => \"x\".repeat(variable.length),\n );\n const digestSeparator = structuralImage.indexOf(\"@\");\n const reference =\n digestSeparator < 0 ? canonical : canonical.slice(0, digestSeparator);\n const structuralReference =\n digestSeparator < 0\n ? structuralImage\n : structuralImage.slice(0, digestSeparator);\n const managedFamily = /^(node|python|rust|oven\\/bun)(?=:|$)/i.exec(\n structuralReference,\n )?.[1];\n const tagSeparator =\n managedFamily === undefined\n ? structuralReference.lastIndexOf(\":\")\n : structuralReference.indexOf(\":\", managedFamily.length);\n const hasTag =\n managedFamily === undefined\n ? tagSeparator > structuralReference.lastIndexOf(\"/\")\n : tagSeparator !== -1;\n const imageRepository = hasTag\n ? reference.slice(0, tagSeparator)\n : reference;\n if (imageRepository.length === 0 || imageRepository.includes(\"$\")) {\n unknownRuntime();\n return;\n }\n if (!/^(node|python|rust|oven\\/bun)$/i.test(imageRepository)) return;\n const tool = imageRepository.toLowerCase();\n let imageRule: RuntimeRule = \"runtime-docker\";\n if (tool === \"rust\") imageRule = \"rust-version\";\n else if (tool === \"oven/bun\") imageRule = \"bun-pins\";\n if (image.includes(\"$\")) {\n unknownRuntime();\n return;\n }\n const digest =\n digestSeparator < 0 ? undefined : canonical.slice(digestSeparator + 1);\n if (digest !== undefined && !/^sha256:[a-fA-F\\d]{64}$/.test(digest)) {\n add({\n rule: imageRule,\n line,\n message: `${label} ${tool} digest must be sha256 followed by 64 hexadecimal characters`,\n });\n return;\n }\n const tag = hasTag ? reference.slice(tagSeparator + 1) : undefined;\n const variantSuffix =\n tool === \"oven/bun\"\n ? /-(?:alpine|slim|debian)$/\n : /-(?:alpine(?:\\d+(?:\\.\\d+)*)?|(?:bookworm|bullseye|trixie|buster)(?:-slim)?|slim)$/;\n // Strip only supported image variants; prerelease qualifiers remain invalid pins.\n const version =\n tool === \"rust\" && tag !== undefined\n ? rustImageVersion(tag)\n : tag?.replace(variantSuffix, \"\");\n let expected = policy.bun;\n if (tool === \"node\") expected = policy.node;\n else if (tool === \"python\") expected = policy.python;\n else if (tool === \"rust\") expected = policy.rust;\n if (digest !== undefined) {\n if (\n version === undefined ||\n !/^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/.test(version)\n ) {\n add({\n rule: imageRule,\n line,\n message: `${label} ${tool} digest requires an exact stable patch tag matching ${expected}`,\n });\n return;\n }\n if (tool === \"node\" && trackedFiles.has(\".node-version\")) {\n const trackedNode = readFile(\".node-version\")?.trim();\n if (trackedNode !== version) {\n add({\n rule: \"runtime-docker\",\n line,\n message: `${label} node digest tag must match tracked .node-version, found ${version}`,\n });\n return;\n }\n }\n }\n pin({\n rule: imageRule,\n value: version,\n expected,\n selector: tool === \"node\" ? \"node\" : undefined,\n label: `${label} ${tool}`,\n line,\n });\n };\n if (isDockerDefinitionPath(file)) {\n const variables = new Map<string, string>();\n const escape = /^\\s*#\\s*escape\\s*=\\s*([\\\\`])\\s*$/m.exec(text)?.[1] ?? \"\\\\\";\n const continuation = new RegExp(`${escape === \"`\" ? \"`\" : \"\\\\\\\\\"}\\\\s*$`);\n const stages = new Set<string>();\n let argumentScope: \"global\" | \"stage\" = \"global\";\n const heredocs: { delimiter: string; stripTabs: boolean; line: number }[] =\n [];\n let instruction = \"\";\n let startLine = 1;\n let pendingRustRun: { source: string; line: number } | undefined;\n const checkRustCommand = (source: string, line: number) => {\n diagnostics.push(\n ...checkRustReferences({\n type: \"command\",\n file,\n source,\n line,\n rust: policy.rust,\n exceptions: rustExceptions,\n }),\n );\n };\n const expand = (value: string) => {\n for (let count = 0; count <= variables.size; count++) {\n const next = value.replace(\n /\\$(?:\\{([A-Za-z_][A-Za-z_\\d]*)\\}|([A-Za-z_][A-Za-z_\\d]*))/g,\n (reference, braced: string | undefined, plain: string | undefined) =>\n variables.get(braced ?? plain ?? \"\") ?? reference,\n );\n if (next === value) return next;\n value = next;\n }\n return value;\n };\n const collectHeredocs = (content: string, line: number) => {\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < content.length; index++) {\n const character = content.at(index);\n if (quote !== undefined) {\n if (character === quote) quote = undefined;\n else if (quote === '\"' && character === \"\\\\\") index++;\n continue;\n }\n if (character === \"\\\\\") {\n index++;\n continue;\n }\n if (character === \"'\" || character === '\"') {\n quote = character;\n continue;\n }\n if (\n character === \"#\" &&\n (index === 0 || /[\\s;&|()]/.test(content.at(index - 1) ?? \"\"))\n )\n break;\n if (character !== \"<\" || content.at(index + 1) !== \"<\") continue;\n if (content.at(index + 2) === \"<\") {\n index += 2;\n continue;\n }\n index += 2;\n const stripTabs = content.at(index) === \"-\";\n if (stripTabs) index++;\n while (/\\s/.test(content.at(index) ?? \"\")) index++;\n if (content.at(index) === \"#\") {\n add({\n rule: \"runtime-docker\",\n line,\n message: \"invalid Docker heredoc delimiter\",\n });\n break;\n }\n let delimiter = \"\";\n let delimiterQuote: \"'\" | '\"' | undefined;\n for (; index < content.length; index++) {\n const part = content.at(index);\n if (delimiterQuote !== undefined) {\n if (part === delimiterQuote) delimiterQuote = undefined;\n else if (\n delimiterQuote === '\"' &&\n part === \"\\\\\" &&\n /[$\"\\\\]/.test(content.at(index + 1) ?? \"\")\n )\n delimiter += content.at(++index);\n else delimiter += part;\n continue;\n }\n if (part === \"'\" || part === '\"') {\n delimiterQuote = part;\n continue;\n }\n if (part === \"\\\\\" && content.at(index + 1) !== undefined) {\n delimiter += content.at(++index);\n continue;\n }\n if (/[\\s;&|<>()]/.test(part ?? \"\")) break;\n delimiter += part;\n }\n if (delimiter !== \"\" && delimiterQuote === undefined)\n heredocs.push({ delimiter, stripTabs, line });\n else\n add({\n rule: \"runtime-docker\",\n line,\n message: \"invalid Docker heredoc delimiter\",\n });\n index--;\n }\n };\n const checkInstruction = (content: string, line: number) => {\n const argument = /^\\s*ARG\\s+([A-Za-z_][A-Za-z_\\d]*)(?:=(.*))?$/i.exec(\n content,\n );\n if (argument !== null) {\n if (argumentScope === \"stage\") return;\n const key = argument[1];\n const value = argument[2];\n if (key !== undefined && value !== undefined)\n variables.set(key, expand(value.replace(/^([\"'])(.*)\\1$/, \"$2\")));\n return;\n }\n const run = /^\\s*RUN\\s+(.+)$/i.exec(content);\n if (run !== null) {\n let source = run[1] ?? \"\";\n source = source.replace(/^(?:--\\S+\\s+)*/, \"\");\n if (source.startsWith(\"[\")) {\n try {\n const words: unknown = JSON.parse(source);\n if (\n Array.isArray(words) &&\n words.every((word: unknown) => typeof word === \"string\")\n ) {\n // Exec-form arguments are literal; only an explicit shell -c evaluates their contents.\n source = words\n .map((word) => `'${word.replaceAll(\"'\", \"'\\\\''\")}'`)\n .join(\" \");\n }\n } catch {\n // A leading bracket also starts a shell test; preserve shell form unless JSON proves exec form.\n }\n }\n const implicit = /^(<<-?(?:'[^']+'|\"[^\"]+\"|\\S+))(?:\\s+(.+))?$/.exec(\n source,\n );\n if (implicit !== null && implicit[2] === undefined)\n source = `sh ${source}`;\n collectHeredocs(content, line);\n if (heredocs.length > 0) pendingRustRun = { source, line };\n else checkRustCommand(source, line);\n return;\n }\n const environment = /^\\s*ENV\\s+(.+)$/i.exec(content);\n if (environment !== null) {\n const assignments = dockerEnvironmentAssignments({\n source: environment[1] ?? \"\",\n escape,\n });\n if (assignments === undefined) {\n add({\n rule: \"runtime-docker\",\n line,\n message: \"invalid Docker ENV assignments\",\n });\n return;\n }\n diagnostics.push(\n ...checkRustReferences({\n type: \"environment\",\n file,\n assignments,\n line,\n rust: policy.rust,\n exceptions: rustExceptions,\n }),\n );\n return;\n }\n if (/^\\s*COPY\\s+/i.test(content)) {\n collectHeredocs(content, line);\n return;\n }\n const from =\n /^\\s*FROM\\s+(?:--platform=\\S+\\s+)?(\\S+)(?:\\s+AS\\s+(\\S+))?/i.exec(\n content,\n );\n if (from === null || from[1] === undefined) return;\n argumentScope = \"stage\";\n const image = expand(from[1]);\n const stage = from[2]?.toLowerCase();\n const previousStage = stages.has(image.toLowerCase());\n if (stage !== undefined) stages.add(stage);\n if (previousStage) return;\n checkRuntimeImage({ image, line, label: \"FROM\" });\n };\n lines.forEach((line, index) => {\n const heredoc = heredocs.at(0);\n if (heredoc !== undefined) {\n if (pendingRustRun !== undefined) pendingRustRun.source += `\\n${line}`;\n if (\n (heredoc.stripTabs ? line.replace(/^\\t+/, \"\") : line) ===\n heredoc.delimiter\n )\n heredocs.shift();\n if (heredocs.length === 0 && pendingRustRun !== undefined) {\n checkRustCommand(pendingRustRun.source, pendingRustRun.line);\n pendingRustRun = undefined;\n }\n return;\n }\n if (line.trimStart().startsWith(\"#\")) return;\n if (instruction === \"\") startLine = index + 1;\n instruction += line.replace(continuation, \" \");\n if (continuation.test(line)) return;\n checkInstruction(instruction, startLine);\n instruction = \"\";\n });\n if (instruction !== \"\") checkInstruction(instruction, startLine);\n for (const heredoc of heredocs)\n add({\n rule: \"runtime-docker\",\n line: heredoc.line,\n message: `unterminated Docker heredoc ${heredoc.delimiter}`,\n });\n }\n if (isComposeDefinitionPath(file) || isKubernetesDefinitionPath(file)) {\n const lineCounter = new LineCounter();\n for (const containerDocument of parseAllDocuments(text, {\n lineCounter,\n merge: true,\n uniqueKeys: true,\n })) {\n const contents = containerDocument.contents;\n const declaredResource =\n isMap(contents) &&\n isScalar(contents.get(\"apiVersion\", true)) &&\n isScalar(contents.get(\"kind\", true));\n const recognizedContainer =\n isComposeDefinitionPath(file) || declaredResource;\n if (containerDocument.errors.length > 0) {\n if (recognizedContainer)\n add({\n rule: \"runtime-docker\",\n line: 1,\n message: \"invalid container YAML\",\n });\n continue;\n }\n try {\n const classified = containerDocumentImages(\n containerDocument.toJS({ maxAliasCount: 100 }),\n file,\n );\n for (const entry of classified?.images ?? []) {\n const node = containerDocument.getIn(entry.path, true);\n const line =\n (isMap(node) || isScalar(node) || isSeq(node) || isAlias(node)) &&\n node.range !== undefined &&\n node.range !== null\n ? lineCounter.linePos(node.range[0]).line\n : 1;\n checkRuntimeImage({\n image: entry.image,\n line,\n at: entry.path.join(\".\"),\n label:\n classified?.ecosystem === \"docker-compose\"\n ? \"Compose image\"\n : \"Kubernetes image\",\n });\n }\n } catch {\n if (recognizedContainer)\n add({\n rule: \"runtime-docker\",\n line: 1,\n message: \"invalid container YAML aliases\",\n });\n }\n }\n }\n const automationKind = githubAutomationFileKind(file);\n if (automationKind === undefined) return diagnostics;\n const document = parseDocument(text, { uniqueKeys: true, merge: true });\n if (document.errors.length > 0) {\n add({\n rule: \"runtime-workflow\",\n line: 1,\n message: \"invalid workflow YAML\",\n });\n return diagnostics;\n }\n const nodeLine = (node: unknown) => {\n if (!record(node) || !Array.isArray(node[\"range\"])) return 1;\n const offset: unknown = node[\"range\"].at(0);\n return typeof offset === \"number\"\n ? text.slice(0, offset).split(\"\\n\").length\n : 1;\n };\n type SparseCheckout =\n | { mode: \"all\" }\n | { mode: \"files\"; paths: ReadonlySet<string> }\n | { mode: \"invalid\" }\n | { mode: \"dynamic\" }\n | { mode: \"mixed\"; paths: ReadonlySet<string> };\n type CheckoutBinding = {\n path: string;\n sparse: SparseCheckout;\n dynamicSource: boolean;\n } & (\n | { source: \"tracked\" }\n | { source: \"untrusted\"; reason: string; line: number }\n | { source: \"delegated\"; ref: string }\n );\n let checkoutBindings: CheckoutBinding[] = [];\n let checkoutDestinations = new Map<string, number>();\n let unknownCheckoutDestination = false;\n let unreviewableCheckoutSource = false;\n const staticRepositoryPath = (value: unknown): value is string =>\n typeof value === \"string\" &&\n value !== \"\" &&\n !value.includes(\"${{\") &&\n !value.includes(\"\\\\\") &&\n !value.includes(\":\") &&\n !path.posix.isAbsolute(value) &&\n !value.split(\"/\").includes(\"..\");\n const normalizeCheckoutPath = (prefix: string) =>\n path.posix.normalize(prefix).replace(/\\/$/, \"\") || \".\";\n type RuntimeReferenceOptions = {\n value: unknown;\n tool: \"node\" | \"python\" | \"bun\";\n line: number;\n };\n const checkoutProvidersFor = (selector: string | undefined) => {\n if (selector === undefined) return checkoutBindings;\n let deepest: CheckoutBinding | undefined;\n for (const entry of checkoutBindings) {\n if (\n entry.path !== \".\" &&\n selector !== entry.path &&\n !selector.startsWith(`${entry.path}/`)\n )\n continue;\n if (\n deepest === undefined ||\n (entry.path !== \".\" &&\n (deepest.path === \".\" || entry.path.length > deepest.path.length))\n )\n deepest = entry;\n }\n return checkoutBindings.filter((entry) => entry.path === deepest?.path);\n };\n const hasAmbiguousCheckoutWriters = (\n selector: string | undefined,\n providers: readonly CheckoutBinding[],\n ) => {\n if (providers.length > 0)\n return providers.some(\n (entry) => (checkoutDestinations.get(entry.path) ?? 0) > 1,\n );\n // A selector before checkout cannot borrow a tracked shadow of an ambiguous destination.\n return [...checkoutDestinations].some(\n ([prefix, count]) =>\n count > 1 &&\n (selector === undefined ||\n prefix === \".\" ||\n selector === prefix ||\n selector.startsWith(`${prefix}/`)),\n );\n };\n const checkReference = ({ value, tool, line }: RuntimeReferenceOptions) => {\n const selectors = {\n node: [\".node-version\", \".nvmrc\"],\n python: [\".python-version\"],\n bun: [\"package.json\"],\n };\n const allowed = selectors[tool];\n const rule = tool === \"bun\" ? \"bun-pins\" : \"runtime-workflow\";\n const selector = staticRepositoryPath(value)\n ? path.posix.normalize(value)\n : undefined;\n const providers = checkoutProvidersFor(selector);\n const binding = selector === undefined ? undefined : providers.at(-1);\n const dynamicSource = providers.some((entry) => entry.dynamicSource);\n const sparseFailure = providers.find((entry) => {\n if (entry.sparse.mode === \"invalid\") return true;\n if (entry.sparse.mode !== \"files\" && entry.sparse.mode !== \"mixed\")\n return false;\n if (selector === undefined) return true;\n const selectedFile =\n entry.path === \".\"\n ? selector\n : path.posix.relative(entry.path, selector);\n return !entry.sparse.paths.has(selectedFile);\n });\n if (sparseFailure !== undefined) {\n let missingFile = \"the selected version file\";\n if (selector !== undefined)\n missingFile =\n sparseFailure.path === \".\"\n ? selector\n : path.posix.relative(sparseFailure.path, selector);\n add({\n rule,\n line,\n message: `checkout sparse-checkout must explicitly list ${missingFile} without invalid literal patterns`,\n });\n return;\n }\n if (selector === undefined) {\n if (\n tool === \"bun\" &&\n dynamic(value) &&\n !unreviewableCheckoutSource &&\n authorizeDynamic(\"bun-source\", line)\n )\n return;\n add({\n rule,\n line,\n message: `setup-${tool} must reference a tracked ${allowed.join(\" or \")}`,\n });\n return;\n }\n if (\n unknownCheckoutDestination ||\n hasAmbiguousCheckoutWriters(selector, providers)\n ) {\n if (\n tool === \"bun\" &&\n dynamicSource &&\n !unreviewableCheckoutSource &&\n authorizeDynamic(\"bun-source\", line)\n )\n return;\n add({\n rule,\n line,\n message: `setup-${tool} version-file selector has untrusted checkout provenance: checkout destinations must be static and have exactly one writer`,\n });\n return;\n }\n if (binding?.source === \"untrusted\") {\n if (\n tool === \"bun\" &&\n dynamicSource &&\n !unreviewableCheckoutSource &&\n authorizeDynamic(\"bun-source\", line)\n )\n return;\n add({\n rule,\n line: binding.line,\n message: `setup-${tool} version-file selector cannot use this checkout: ${binding.reason}`,\n });\n return;\n }\n const target =\n binding === undefined || binding.path === \".\"\n ? selector\n : path.posix.relative(binding.path, selector);\n if (\n !allowed.includes(path.posix.basename(target)) ||\n (binding?.source !== \"delegated\" && !trackedFiles.has(target))\n ) {\n add({\n rule,\n line,\n message: `setup-${tool} must reference a tracked ${allowed.join(\" or \")}`,\n });\n return;\n }\n if (\n binding !== undefined &&\n (binding.sparse.mode === \"dynamic\" || binding.sparse.mode === \"mixed\")\n ) {\n if (\n tool !== \"bun\" ||\n unreviewableCheckoutSource ||\n !authorizeDynamic(\"bun-source\", line)\n ) {\n add({\n rule,\n line,\n message: `checkout sparse-checkout must explicitly list ${target} without dynamic, glob, or negation patterns`,\n });\n return;\n }\n }\n if (binding?.source === \"delegated\") {\n onDelegated?.({\n path: file,\n line,\n tool,\n selector,\n checkoutPath: binding.path,\n ref: binding.ref,\n });\n return;\n }\n const content = readFile(target);\n if (tool === \"bun\") {\n try {\n const manifest: unknown = JSON.parse(content ?? \"\");\n pin({\n rule,\n value: record(manifest) ? manifest[\"packageManager\"] : undefined,\n expected: `bun@${policy.bun}`,\n label: \"setup-bun version file packageManager\",\n line,\n });\n } catch {\n add({\n rule,\n line,\n message:\n \"bun-version-file must reference a readable package.json object\",\n });\n }\n return;\n }\n pin({\n rule,\n value: content?.trim(),\n expected: policy[tool],\n selector: tool === \"node\" ? \"node\" : undefined,\n label: `setup-${tool} version file`,\n line,\n });\n };\n const resolveNode = (node: unknown) => {\n const visited = new Set<unknown>();\n while (isAlias(node)) {\n if (visited.has(node)) throw new Error(\"cyclic YAML alias\");\n visited.add(node);\n node = node.resolve(document);\n }\n return node;\n };\n const approvedActions = new Map(\n Object.entries(policy.actions).map(([action, approved]) => [\n action.toLowerCase(),\n approved,\n ]),\n );\n const mergedMaps = (node: unknown) => {\n node = resolveNode(node);\n if (!isMap(node)) return [];\n const maps: unknown[] = [];\n for (const pair of node.items) {\n if (\n !isScalar(pair.key) ||\n typeof pair.key.value !== \"symbol\" ||\n pair.key.source !== \"<<\"\n )\n continue;\n const merge = resolveNode(pair.value);\n maps.push(...(isSeq(merge) ? merge.items : [merge]));\n }\n return maps;\n };\n const keysOf = (node: unknown, visited = new Set<unknown>()): Set<string> => {\n node = resolveNode(node);\n if (!isMap(node)) return new Set();\n if (visited.has(node)) throw new Error(\"cyclic YAML merge\");\n const next = new Set(visited);\n next.add(node);\n const keys = new Set(\n node.items.flatMap((pair) =>\n isScalar(pair.key) && typeof pair.key.value === \"string\"\n ? [pair.key.value]\n : [],\n ),\n );\n for (const merged of mergedMaps(node))\n for (const key of keysOf(merged, next)) keys.add(key);\n return keys;\n };\n type SourceMapOptions = {\n node: unknown;\n key: string;\n visited?: ReadonlySet<unknown>;\n };\n const sourceMap = ({\n node,\n key,\n visited = new Set(),\n }: SourceMapOptions): unknown => {\n node = resolveNode(node);\n if (!isMap(node)) return undefined;\n if (node.has(key)) return node;\n if (visited.has(node)) throw new Error(\"cyclic YAML merge\");\n const next = new Set(visited);\n next.add(node);\n for (const merged of mergedMaps(node)) {\n const source = sourceMap({ node: merged, key, visited: next });\n if (source !== undefined) return source;\n }\n return undefined;\n };\n const getNode = (node: unknown, key: string) => {\n const source = sourceMap({ node, key });\n return isMap(source) ? resolveNode(source.get(key, true)) : undefined;\n };\n const actionInputs = new Map<unknown, Map<string, unknown>>();\n const inputsOf = (node: unknown) => {\n node = resolveNode(node);\n const cached = actionInputs.get(node);\n if (cached !== undefined) return cached;\n const options = getNode(node, \"with\");\n const inputs = new Map<string, unknown>();\n for (const key of keysOf(options)) {\n const folded = key.toUpperCase();\n const value = getNode(options, key);\n if (inputs.has(folded))\n add({\n rule: \"action-pins\",\n line: nodeLine(value),\n message: `action input ${key} collides after case-folding`,\n });\n if (\n /(?:^|-)VERSION(?:-FILE)?$/.test(folded) &&\n key !== folded.toLowerCase()\n )\n add({\n rule: \"action-pins\",\n line: nodeLine(value),\n message: `selector input ${key} must use canonical lowercase casing`,\n });\n inputs.set(folded, value);\n }\n actionInputs.set(node, inputs);\n return inputs;\n };\n const getInput = (node: unknown, key: string) =>\n inputsOf(node).get(key.toUpperCase());\n const expressionAt = (value: string, start: number) => {\n if (!value.startsWith(\"${{\", start)) return undefined;\n let quote: \"'\" | '\"' | undefined;\n for (let index = start + 3; index < value.length; index++) {\n const character = value.at(index);\n if (quote !== undefined) {\n if (character === quote) {\n if (quote === \"'\" && value.at(index + 1) === \"'\") index++;\n else quote = undefined;\n } else if (quote === '\"' && character === \"\\\\\") index++;\n continue;\n }\n if (character === \"'\" || character === '\"') quote = character;\n else if (value.startsWith(\"${{\", index)) return undefined;\n else if (character === \"}\" && value.at(index + 1) === \"}\")\n return { body: value.slice(start + 3, index).trim(), end: index + 2 };\n }\n return undefined;\n };\n const dynamicRefBody = (value: unknown) => {\n if (typeof value !== \"string\") return undefined;\n const expression = expressionAt(value, 0);\n return expression?.end === value.length ? expression.body : undefined;\n };\n const sparseEntryIsValid = (entry: string) => {\n let literalPath = \"\";\n let position = 0;\n while (position < entry.length) {\n const start = entry.indexOf(\"${{\", position);\n const literal = entry.slice(position, start < 0 ? entry.length : start);\n if (/[!$*?[\\]\\\\:]/.test(literal) || literal.split(\"/\").includes(\"..\"))\n return false;\n literalPath += literal;\n if (start < 0) break;\n const expression = expressionAt(entry, start);\n if (expression === undefined || expression.body === \"\") return false;\n literalPath += \"expression\";\n position = expression.end;\n }\n return staticRepositoryPath(literalPath);\n };\n const checkoutPrefixOf = (node: unknown) => {\n const destination = getInput(node, \"path\");\n if (destination === undefined) return \".\";\n return isScalar(destination) ? destination.value : undefined;\n };\n const sparseCheckoutOf = (node: unknown): SparseCheckout => {\n const sparseKeys = [...inputsOf(node).keys()].filter((key) =>\n key.startsWith(\"SPARSE-CHECKOUT\"),\n );\n if (sparseKeys.length === 0) return { mode: \"all\" };\n if (\n sparseKeys.some(\n (key) =>\n key !== \"SPARSE-CHECKOUT\" && key !== \"SPARSE-CHECKOUT-CONE-MODE\",\n )\n )\n return { mode: \"invalid\" };\n const value = getInput(node, \"sparse-checkout\");\n const cone = getInput(node, \"sparse-checkout-cone-mode\");\n if (\n !isScalar(value) ||\n typeof value.value !== \"string\" ||\n (cone !== undefined &&\n (!isScalar(cone) ||\n (cone.value !== true &&\n cone.value !== false &&\n cone.value !== \"true\" &&\n cone.value !== \"false\")))\n )\n return { mode: \"invalid\" };\n const paths = value.value\n .split(/\\r?\\n/)\n .map((entry) => entry.trim().replace(/^\\//, \"\"))\n .filter((entry) => entry !== \"\");\n if (paths.length === 0 || paths.some((entry) => !sparseEntryIsValid(entry)))\n return { mode: \"invalid\" };\n const literalPaths = new Set(paths.filter((entry) => !dynamic(entry)));\n if (paths.some(dynamic)) {\n if (literalPaths.size === 0) return { mode: \"dynamic\" };\n return { mode: \"mixed\", paths: literalPaths };\n }\n return { mode: \"files\", paths: literalPaths };\n };\n let currentEngineFloor: ResolvedEngineFloor | undefined;\n const checkAction = (node: unknown) => {\n node = resolveNode(node);\n if (!isMap(node)) return;\n inputsOf(node);\n const uses = getNode(node, \"uses\");\n if (uses === undefined) return;\n const line = nodeLine(uses);\n if (!isScalar(uses) || typeof uses.value !== \"string\") {\n add({\n rule: \"action-pins\",\n line,\n message: \"action uses must be a string containing a full commit SHA\",\n });\n return;\n }\n const value = uses.value;\n if (value.startsWith(\"$/\")) {\n if (\n value.length === 2 ||\n /\\s/.test(value) ||\n value.includes(\"@\") ||\n value.includes(\"${{\") ||\n value.includes(\"\\\\\") ||\n value.split(\"/\").includes(\"..\")\n )\n add({\n rule: \"action-pins\",\n line,\n message:\n \"self-repository actions must use a static repository path without a ref suffix\",\n });\n return;\n }\n if (value.startsWith(\"./\")) {\n const selector = staticRepositoryPath(value)\n ? path.posix.normalize(value)\n : undefined;\n const providers = checkoutProvidersFor(selector);\n const binding = selector === undefined ? undefined : providers.at(-1);\n if (\n selector === undefined ||\n unknownCheckoutDestination ||\n (binding !== undefined && binding.source !== \"tracked\") ||\n hasAmbiguousCheckoutWriters(selector, providers)\n )\n add({\n rule: \"action-pins\",\n line,\n message:\n \"local actions require an unambiguous checkout of the current source snapshot\",\n });\n return;\n }\n if (value.startsWith(\"docker://\")) {\n add({\n rule: \"action-pins\",\n line,\n message: \"Docker image actions require a reasoned action-pins opt-out\",\n });\n checkRuntimeImage({\n image: value.slice(\"docker://\".length),\n line,\n label: \"Docker action image\",\n });\n return;\n }\n const remote = /^([^./][^\\s@]*\\/[^\\s@]+)@([^\\s]+)$/.exec(value);\n if (remote === null) {\n add({\n rule: \"action-pins\",\n line,\n message: \"remote actions must use a full commit SHA\",\n });\n return;\n }\n const action = remote[1]?.toLowerCase();\n const ref = remote[2];\n const approved =\n action === undefined\n ? undefined\n : (approvedActions.get(action) ??\n approvedActions.get(action.split(\"/\").slice(0, 2).join(\"/\")));\n if (ref === undefined || !/^[a-f0-9]{40}$/.test(ref))\n add({\n rule: \"action-pins\",\n line,\n message: \"remote actions must use a full commit SHA\",\n });\n else if (approved !== undefined && ref !== approved.sha)\n add({\n rule: \"action-pins\",\n line,\n message: `${action} must use ${approved.sha}`,\n });\n const declaration = sourceMap({ node, key: \"uses\" });\n const comment =\n uses.comment ??\n (isMap(declaration) ? declaration.comment : undefined) ??\n \"\";\n if (\n approved !== undefined &&\n !comment.trim().split(/\\s+/).includes(approved.version)\n )\n add({\n rule: \"action-pins\",\n line,\n message: `${action} requires a # ${approved.version} version comment`,\n });\n if (action === \"actions/checkout\") {\n const checkoutRepository = getInput(node, \"repository\");\n const checkoutRef = getInput(node, \"ref\");\n const prefix = checkoutPrefixOf(node);\n const clean = getInput(node, \"clean\");\n const cleanIsResolved =\n clean === undefined || (isScalar(clean) && !dynamic(clean.value));\n let repo: unknown;\n if (checkoutRepository !== undefined)\n repo = isScalar(checkoutRepository) ? checkoutRepository.value : null;\n const self =\n repo === undefined ||\n repo === \"${{ github.repository }}\" ||\n (typeof repo === \"string\" &&\n repository !== undefined &&\n repo.toLowerCase() === repository.toLowerCase());\n const workflowSource =\n repo === \"${{ job.workflow_repository }}\" &&\n isScalar(checkoutRef) &&\n checkoutRef.value === \"${{ job.workflow_sha }}\";\n const triggers = getNode(document.contents, \"on\");\n const events = (() => {\n if (isMap(triggers)) return [...keysOf(triggers)];\n if (isSeq(triggers))\n return triggers.items.map((event) =>\n isScalar(event) ? event.value : undefined,\n );\n if (isScalar(triggers)) return [triggers.value];\n return [];\n })();\n const callerContext = events.includes(\"workflow_call\");\n let refValue = isScalar(checkoutRef) ? checkoutRef.value : undefined;\n if (\n callerContext &&\n (repo === undefined || repo === \"${{ github.repository }}\") &&\n checkoutRef === undefined\n )\n refValue = \"${{ github.sha }}\";\n const currentRef = dynamicRefBody(refValue);\n const currentSource =\n self &&\n !callerContext &&\n (checkoutRef === undefined || currentRef === \"github.sha\");\n\n const dynamicRef = dynamicRefBody(refValue);\n const delegatedSource =\n !currentSource &&\n (self || repo === \"${{ job.workflow_repository }}\") &&\n dynamicRef !== undefined &&\n dynamicRef !== \"\" &&\n !/^(?:'(?:[^']|'')*'|\"(?:[^\"\\\\]|\\\\.)*\"|(?:true|false|null)|-?(?:0x[\\da-f]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?))$/i.test(\n dynamicRef,\n ) &&\n (!/^(?:github\\s*(?:\\.\\s*sha|\\[\\s*['\"]sha['\"]\\s*\\])|job\\s*(?:\\.\\s*workflow_sha|\\[\\s*['\"]workflow_sha['\"]\\s*\\]))$/i.test(\n dynamicRef,\n ) ||\n (callerContext && currentRef === \"github.sha\"));\n\n const validSource =\n cleanIsResolved &&\n ref === approved?.sha &&\n sourceMap({ node, key: \"if\" }) === undefined &&\n sourceMap({ node, key: \"continue-on-error\" }) === undefined &&\n (currentSource || workflowSource || delegatedSource);\n if (!validSource) unreviewableCheckoutSource = true;\n if (!staticRepositoryPath(prefix)) {\n // Unknown checkout destinations may shadow any tracked selector.\n checkoutBindings.push({\n path: \".\",\n dynamicSource: validSource && dynamic(prefix),\n source: \"untrusted\",\n reason: \"checkout destination must be a static repository path\",\n line,\n sparse: sparseCheckoutOf(node),\n });\n } else {\n const destination = normalizeCheckoutPath(prefix);\n checkoutBindings = checkoutBindings.map((entry) => {\n if (\n entry.path === destination ||\n (destination !== \".\" && !entry.path.startsWith(`${destination}/`))\n )\n return entry;\n // Ancestor checkout may clear an uninitialized destination even with clean: false.\n return {\n path: entry.path,\n sparse: { mode: \"all\" },\n dynamicSource: false,\n source: \"untrusted\",\n reason:\n \"a later ancestor checkout invalidates this descendant destination\",\n line,\n };\n });\n const trustedWriter =\n cleanIsResolved &&\n ref === approved?.sha &&\n sourceMap({ node, key: \"if\" }) === undefined &&\n sourceMap({ node, key: \"continue-on-error\" }) === undefined &&\n checkoutDestinations.get(destination) === 1 &&\n !unknownCheckoutDestination;\n if (trustedWriter && delegatedSource && typeof refValue === \"string\")\n checkoutBindings.push({\n path: destination,\n dynamicSource: validSource && delegatedSource,\n sparse: sparseCheckoutOf(node),\n source: \"delegated\",\n ref: refValue,\n });\n else if (trustedWriter && (workflowSource || currentSource))\n checkoutBindings.push({\n path: destination,\n dynamicSource: validSource && delegatedSource,\n sparse: sparseCheckoutOf(node),\n source: \"tracked\",\n });\n else {\n let reason =\n \"checkout does not select a trusted repository source snapshot\";\n if (!cleanIsResolved)\n reason = \"checkout clean must be statically resolved\";\n else if (ref !== approved?.sha)\n reason = \"actions/checkout must use the approved action SHA\";\n else if (\n sourceMap({ node, key: \"if\" }) !== undefined ||\n sourceMap({ node, key: \"continue-on-error\" }) !== undefined\n )\n reason =\n \"checkout must be unconditional and omit continue-on-error\";\n else if (\n checkoutDestinations.get(destination) !== 1 ||\n unknownCheckoutDestination\n )\n reason = \"checkout destination must have exactly one static writer\";\n checkoutBindings.push({\n path: destination,\n dynamicSource: validSource && delegatedSource,\n sparse: sparseCheckoutOf(node),\n source: \"untrusted\",\n reason,\n line,\n });\n }\n }\n }\n let tool: RuntimeDelegation[\"tool\"];\n switch (action) {\n case \"actions/setup-node\":\n tool = \"node\";\n break;\n case \"actions/setup-python\":\n tool = \"python\";\n break;\n case \"oven-sh/setup-bun\":\n tool = \"bun\";\n break;\n default:\n return;\n }\n const literal = getInput(node, `${tool}-version`);\n if (tool === \"node\" && currentEngineFloor !== undefined) {\n const reference = getInput(node, \"node-version-file\");\n if (\n reference === undefined &&\n isScalar(literal) &&\n engineFloorSelectorMatches(literal.value, currentEngineFloor)\n ) {\n onEngineFloor?.(currentEngineFloor, \"matched\");\n return;\n }\n onEngineFloor?.(currentEngineFloor, \"mismatch\");\n add({\n rule: \"runtime-workflow\",\n line: nodeLine(literal ?? reference ?? uses),\n message: `engine floor job must select an exact Node patch satisfying ${currentEngineFloor.range} with minimum major ${currentEngineFloor.major}`,\n });\n return;\n }\n if (literal !== undefined)\n add({\n rule: tool === \"bun\" ? \"bun-pins\" : \"runtime-workflow\",\n line: nodeLine(literal),\n message: `setup-${tool} must use ${tool}-version-file`,\n });\n const reference = getInput(node, `${tool}-version-file`);\n checkReference({\n value: isScalar(reference) ? reference.value : undefined,\n tool,\n line: reference === undefined ? line : nodeLine(reference),\n });\n };\n const checkContainer = (node: unknown, at: string) => {\n node = resolveNode(node);\n if (node === undefined) return;\n const image = isMap(node) ? getNode(node, \"image\") : node;\n checkRuntimeImage({\n image: isScalar(image) ? image.value : undefined,\n line: nodeLine(image ?? node),\n label: \"container image\",\n at,\n });\n };\n const checkSteps = (\n node: unknown,\n locationPrefix: string,\n floor?: ResolvedEngineFloor,\n ) => {\n currentEngineFloor = undefined;\n checkoutBindings = [];\n checkoutDestinations = new Map();\n unknownCheckoutDestination = false;\n unreviewableCheckoutSource = false;\n node = resolveNode(node);\n if (!isSeq(node)) return;\n for (const step of node.items) {\n const uses = getNode(step, \"uses\");\n if (\n !isScalar(uses) ||\n typeof uses.value !== \"string\" ||\n !uses.value.toLowerCase().startsWith(\"actions/checkout@\")\n )\n continue;\n const prefix = checkoutPrefixOf(step);\n if (!staticRepositoryPath(prefix)) {\n unknownCheckoutDestination = true;\n continue;\n }\n const destination = normalizeCheckoutPath(prefix);\n checkoutDestinations.set(\n destination,\n (checkoutDestinations.get(destination) ?? 0) + 1,\n );\n }\n currentEngineFloor = floor;\n try {\n for (const step of node.items) {\n const id = getNode(step, \"id\");\n currentLocation =\n isScalar(id) && typeof id.value === \"string\"\n ? `${locationPrefix}.steps.${id.value}`\n : undefined;\n checkAction(step);\n }\n } finally {\n currentEngineFloor = undefined;\n currentLocation = undefined;\n }\n };\n try {\n // Resolve aliases first with an expansion bound before visiting executable fields.\n const workflow = document.toJS({ maxAliasCount: 100 });\n if (automationKind === \"workflow\") {\n for (const finding of checkWorkflowTrust(workflow)) {\n const jobNode = getNode(\n getNode(document.contents, \"jobs\"),\n finding.job,\n );\n let source: unknown;\n switch (finding.type) {\n case \"job\":\n source = getNode(jobNode, finding.property);\n break;\n case \"step\": {\n const steps = resolveNode(getNode(jobNode, \"steps\"));\n const step = isSeq(steps)\n ? steps.items.at(finding.step)\n : undefined;\n source = getNode(step, \"run\") ?? getNode(step, \"uses\");\n break;\n }\n default: {\n const unexpected: never = finding;\n throw new Error(\"unknown workflow finding\", { cause: unexpected });\n }\n }\n add({\n rule: \"workflow-trust\",\n line: nodeLine(source ?? jobNode),\n message: finding.message,\n });\n }\n const jobs = getNode(document.contents, \"jobs\");\n if (isMap(jobs))\n for (const key of keysOf(jobs)) {\n checkoutBindings = [];\n checkoutDestinations = new Map();\n unknownCheckoutDestination = false;\n currentEngineFloor = undefined;\n const job = getNode(jobs, key);\n checkAction(job);\n checkContainer(getNode(job, \"container\"), `jobs.${key}.container`);\n const services = getNode(job, \"services\");\n if (isMap(services))\n for (const service of keysOf(services))\n checkContainer(\n getNode(services, service),\n `jobs.${key}.services.${service}`,\n );\n checkSteps(\n getNode(job, \"steps\"),\n `jobs.${key}`,\n engineFloors.find((entry) => entry.job === key),\n );\n }\n } else {\n const runs = getNode(document.contents, \"runs\");\n const using = getNode(runs, \"using\");\n if (isScalar(using) && using.value === \"composite\")\n checkSteps(getNode(runs, \"steps\"), \"runs\");\n if (isScalar(using) && using.value === \"docker\") {\n const image = getNode(runs, \"image\");\n const value = isScalar(image) ? image.value : undefined;\n if (typeof value === \"string\" && value.startsWith(\"docker://\")) {\n add({\n rule: \"action-pins\",\n line: nodeLine(image),\n message:\n \"Docker image actions require a reasoned action-pins opt-out\",\n });\n checkRuntimeImage({\n image: value.slice(\"docker://\".length),\n line: nodeLine(image),\n label: \"Docker action image\",\n });\n } else if (\n typeof value !== \"string\" ||\n value.includes(\"${{\") ||\n value.includes(\"\\\\\") ||\n value.includes(\":\") ||\n path.posix.isAbsolute(value) ||\n path.posix\n .normalize(path.posix.join(path.posix.dirname(file), value))\n .split(\"/\")\n .at(0) === \"..\" ||\n path.posix.basename(value) !== \"Dockerfile\"\n ) {\n add({\n rule: \"action-pins\",\n line: nodeLine(image),\n message:\n \"Docker actions must reference a local Dockerfile or declare a reasoned action-pins opt-out for an external image\",\n });\n }\n }\n }\n } catch {\n add({\n rule: \"runtime-workflow\",\n line: 1,\n message: \"cannot resolve workflow YAML aliases\",\n });\n }\n return diagnostics;\n};\n","import { execFileSync } from \"node:child_process\";\nimport {\n closeSync,\n lstatSync,\n openSync,\n readFileSync,\n readSync,\n realpathSync,\n} from \"node:fs\";\nimport path from \"node:path\";\n\nimport { cloudSetupPath, generateCloudSetup } from \"./cloud-setup\";\nimport {\n cloudAttributionFix,\n cloudClaudeSettingsPath,\n cloudSessionStartFix,\n hasCloudAttribution,\n hasCloudSessionStartHook,\n} from \"./cloud-setup-claude\";\nimport { parseCloudSetup } from \"./cloud-setup-schema\";\nimport { readGitTrackedOutput } from \"./git-tracked-output\";\nimport { checkRepositoryQuarantine } from \"./quarantine-policy\";\nimport {\n checkConsumerChecks,\n parseConsumerChecks,\n} from \"./toolchain-consumer-checks\";\nimport {\n checkDependabot,\n declaredIgnoreConflicts,\n dependabotRules,\n parseDependabotIgnores,\n} from \"./toolchain-dependabot\";\nimport {\n type DynamicSelector,\n parseDynamicSelectors,\n} from \"./toolchain-dynamic-selectors\";\nimport {\n parseEngineFloors,\n type ResolvedEngineFloor,\n resolveEngineFloor,\n} from \"./toolchain-engine-floors\";\nimport { checkFormatter, formatterRule } from \"./toolchain-formatter\";\nimport { toolchainInputKind } from \"./toolchain-inputs\";\nimport { checkNodeProjects, nodeProjectRule } from \"./toolchain-node-projects\";\nimport { checkPackageFiles, packageRules } from \"./toolchain-packages\";\nimport {\n checkRuntimeFile,\n type RuntimeDelegation,\n runtimeRules,\n} from \"./toolchain-runtime\";\nimport { parseRustExceptions } from \"./toolchain-rust\";\nimport { parseToolchainPolicy } from \"./toolchain-schema\";\n\nexport const toolchainRules = [\n ...new Set([\n ...packageRules,\n ...runtimeRules,\n ...dependabotRules,\n nodeProjectRule,\n formatterRule,\n \"cloud-setup-drift\",\n \"quarantine-policy\",\n ] as const),\n] as const;\nexport type ToolchainRule = (typeof toolchainRules)[number];\nexport type SharedToolchainDiagnostic = {\n rule: ToolchainRule | \"configuration\";\n path: string;\n line: number;\n message: string;\n};\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst array = (value: unknown): value is readonly unknown[] =>\n Array.isArray(value);\n\n/** Repository-owned declarations are explicit; malformed decisions fail closed. */\nexport const parseToolchainConfiguration = (input: unknown) => {\n if (\n !record(input) ||\n Object.keys(input).some(\n (key) =>\n key !== \"optOuts\" &&\n key !== \"cloud\" &&\n key !== \"engineFloors\" &&\n key !== \"dynamicSelectors\" &&\n key !== \"consumerChecks\" &&\n key !== \"rustExceptions\" &&\n key !== \"dependabotIgnores\",\n ) ||\n (input[\"optOuts\"] !== undefined && !array(input[\"optOuts\"]))\n )\n throw new Error(\n \"stll-toolchain.json accepts only optOuts, cloud, engineFloors, dynamicSelectors, consumerChecks, rustExceptions and dependabotIgnores declarations\",\n );\n const disabled = new Set<string>();\n const optOuts = input[\"optOuts\"] ?? [];\n if (!array(optOuts)) throw new Error(\"optOuts must be an array\");\n for (const entry of optOuts) {\n if (\n !record(entry) ||\n Object.keys(entry).some((key) => key !== \"rule\" && key !== \"reason\") ||\n typeof entry[\"rule\"] !== \"string\" ||\n !toolchainRules.some((rule) => rule === entry[\"rule\"]) ||\n typeof entry[\"reason\"] !== \"string\" ||\n entry[\"reason\"].trim() === \"\" ||\n disabled.has(entry[\"rule\"])\n )\n throw new Error(\n \"each opt-out requires a unique known rule and a nonempty reason\",\n );\n if (entry[\"rule\"] === \"quarantine-policy\")\n throw new Error(\n \"quarantine-policy cannot be opted out; temporary third-party exclusions require expiry\",\n );\n if (entry[\"rule\"] === \"rust-version\")\n throw new Error(\n \"rust-version requires expiring exact-pin rustExceptions, not an opt-out\",\n );\n if (entry[\"rule\"] === \"node-engine\")\n throw new Error(\n \"node-engine cannot be opted out; engines.node must support the shared Node series\",\n );\n if (entry[\"rule\"] === \"workflow-trust\")\n throw new Error(\n \"workflow-trust cannot be opted out; repository commands must follow the declared trust decision\",\n );\n if (entry[\"rule\"] === \"cloud-setup-drift\")\n throw new Error(\n \"cloud-setup-drift cannot be opted out; generated setup must match shared policy\",\n );\n if (entry[\"rule\"] === nodeProjectRule)\n throw new Error(\n \"type-aware-projects cannot be opted out; linted files require declared TypeScript projects\",\n );\n disabled.add(entry[\"rule\"]);\n }\n return {\n disabled,\n rustExceptions: parseRustExceptions(input[\"rustExceptions\"]),\n cloud: parseCloudSetup(input[\"cloud\"]),\n engineFloors: parseEngineFloors(input[\"engineFloors\"]),\n dynamicSelectors: parseDynamicSelectors(input[\"dynamicSelectors\"]),\n consumerChecks: parseConsumerChecks(input[\"consumerChecks\"]),\n dependabotIgnores: parseDependabotIgnores(input[\"dependabotIgnores\"]),\n };\n};\n\ntype ReadToolchainInputsOptions = {\n bunLock?: \"presence\" | \"content\";\n};\n\n/** Dependency graphs stay opaque unless a caller explicitly needs registry identities. */\nexport const readToolchainInputs = (\n root: string,\n { bunLock = \"presence\" }: ReadToolchainInputsOptions = {},\n) => {\n const diagnostics: SharedToolchainDiagnostic[] = [];\n const tracked = readGitTrackedOutput(root, \"staged\")\n .split(\"\\0\")\n // Gitlinks identify submodule directories, never executable script files.\n .filter((entry) => entry !== \"\" && !entry.startsWith(\"160000 \"))\n .map((entry) => entry.slice(entry.indexOf(\"\\t\") + 1));\n const files: Record<string, string> = {};\n const trackedFiles = new Set(tracked);\n const resolvedRoot = realpathSync(root);\n for (const file of tracked) {\n // Only configuration inputs are read; source files can contain arbitrary examples.\n const kind = toolchainInputKind(file);\n const shebangCandidate =\n kind === undefined &&\n path.posix.extname(file) === \"\" &&\n !file\n .split(\"/\")\n .some((part) => part === \"vendor\" || part === \"node_modules\");\n if (kind === undefined && !shebangCandidate) continue;\n try {\n const inputPath = path.join(resolvedRoot, file);\n if (\n kind === \"presence\" &&\n !(file === \"bun.lock\" && bunLock === \"content\")\n ) {\n // The index can retain deleted declarations; presence follows the worktree.\n lstatSync(inputPath);\n files[file] = \"\";\n continue;\n }\n if (shebangCandidate) {\n const input = lstatSync(inputPath);\n if (!input.isFile() && !input.isSymbolicLink()) continue;\n }\n const resolvedFile = realpathSync(inputPath);\n const relative = path.relative(resolvedRoot, resolvedFile);\n if (\n path.isAbsolute(relative) ||\n relative.split(path.sep).at(0) === \"..\" ||\n !trackedFiles.has(relative.split(path.sep).join(\"/\"))\n )\n throw new Error(\"Configuration target is outside the tracked tree\");\n if (shebangCandidate) {\n if (!lstatSync(resolvedFile).isFile()) continue;\n // Bound discovery reads: extensionless files may be large binary artifacts.\n const descriptor = openSync(resolvedFile, \"r\");\n const prefix = Buffer.alloc(512);\n let count: number;\n try {\n count = readSync(descriptor, prefix, 0, prefix.length, 0);\n } finally {\n closeSync(descriptor);\n }\n if (\n toolchainInputKind(file, prefix.toString(\"utf8\", 0, count)) ===\n undefined\n )\n continue;\n }\n files[file] = readFileSync(resolvedFile, \"utf8\");\n } catch (error) {\n if (\n kind === \"presence\" &&\n error instanceof Error &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n )\n continue;\n if (shebangCandidate) continue;\n diagnostics.push({\n rule: \"configuration\",\n path: file,\n line: 1,\n message: \"cannot read tracked configuration file\",\n });\n }\n }\n return { files, trackedFiles, diagnostics };\n};\n\ntype CheckSharedToolchainOptions = {\n root: string;\n policy: ReturnType<typeof parseToolchainPolicy>;\n onDelegated?: ((report: RuntimeDelegation) => void) | undefined;\n onWarning?: ((report: SharedToolchainDiagnostic) => void) | undefined;\n now?: Date | undefined;\n};\n\nexport const checkToolchain = ({\n root,\n policy,\n onDelegated,\n onWarning,\n now,\n}: CheckSharedToolchainOptions) => {\n const { files, trackedFiles, diagnostics } = readToolchainInputs(root, {\n bunLock: \"content\",\n });\n let repository: string | undefined;\n try {\n const origin = execFileSync(\"git\", [\"remote\", \"get-url\", \"origin\"], {\n cwd: root,\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n repository =\n /^(?:https?:\\/\\/github\\.com\\/|git@github\\.com:|ssh:\\/\\/git@github\\.com\\/)([^/]+\\/[^/]+?)(?:\\.git)?\\/?$/.exec(\n origin,\n )?.[1];\n } catch {\n // Repositories without a GitHub origin can still use github.repository.\n }\n\n let configuration = parseToolchainConfiguration({});\n const engineFloors: ResolvedEngineFloor[] = [];\n let dynamicSelectors: DynamicSelector[] = [];\n if (files[\"stll-toolchain.json\"] !== undefined) {\n try {\n configuration = parseToolchainConfiguration(\n JSON.parse(files[\"stll-toolchain.json\"]),\n );\n dynamicSelectors = configuration.dynamicSelectors;\n for (const entry of configuration.engineFloors)\n engineFloors.push(resolveEngineFloor(entry, files));\n } catch (error) {\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n const cloud = configuration.cloud;\n const script = files[cloudSetupPath];\n if (cloud === undefined && trackedFiles.has(cloudSetupPath))\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudSetupPath,\n line: 1,\n message:\n \"cloud setup script requires an explicit cloud declaration in stll-toolchain.json\",\n });\n if (cloud !== undefined) {\n if (!hasCloudSessionStartHook(files[cloudClaudeSettingsPath]))\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudClaudeSettingsPath,\n line: 1,\n message: `tracked Claude cloud SessionStart hook is missing, disabled or differs from shared policy; run stll-cloud-setup; if automatic merge is unsafe, ${cloudSessionStartFix}`,\n });\n if (!hasCloudAttribution(files[cloudClaudeSettingsPath]))\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudClaudeSettingsPath,\n line: 1,\n message: `tracked Claude attribution is missing or differs from shared policy; run stll-cloud-setup; if automatic merge is unsafe, ${cloudAttributionFix}`,\n });\n try {\n const nodeVersion = files[\".node-version\"];\n if (nodeVersion === undefined)\n throw new Error(\n \"cloud setup requires a tracked root .node-version with an exact stable release\",\n );\n const expected = generateCloudSetup({\n policy,\n cloud,\n nodeVersion: nodeVersion.trim(),\n files,\n rustExceptions: configuration.rustExceptions,\n });\n if (script !== expected)\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudSetupPath,\n line: 1,\n message:\n \"cloud setup script is missing or differs from shared policy; run stll-cloud-setup\",\n });\n } catch (error) {\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudSetupPath,\n line: 1,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n const exercisedFloors = new Set<ResolvedEngineFloor>();\n const mismatchedFloors = new Set<ResolvedEngineFloor>();\n\n const selectorMatches = new Map<DynamicSelector, number>();\n diagnostics.push(\n ...checkConsumerChecks({\n declarations: configuration.consumerChecks,\n files,\n policy,\n }),\n );\n diagnostics.push(...checkPackageFiles({ files, policy }));\n const usesBun = Object.entries(files).some(([file, text]) => {\n if (path.posix.basename(file) === \"bun.lock\") return true;\n if (path.posix.basename(file) !== \"package.json\") return false;\n try {\n const manifest: unknown = JSON.parse(text);\n return (\n record(manifest) &&\n typeof manifest[\"packageManager\"] === \"string\" &&\n /^bun(?:@|$)/u.test(manifest[\"packageManager\"])\n );\n } catch {\n // Package diagnostics already reject malformed manifests.\n return false;\n }\n });\n diagnostics.push(\n ...checkFormatter({ files, policy: policy.formatter, usesBun }),\n );\n if (usesBun || files[\"bunfig.toml\"] !== undefined) {\n try {\n if (files[\"bunfig.toml\"] === undefined)\n throw new Error(\n \"Bun repositories require a tracked root bunfig.toml with the five-day quarantine policy; use the documented pinned bunx stll-quarantine --sync bootstrap, then commit bunfig.toml\",\n );\n const result = checkRepositoryQuarantine({\n files,\n now,\n npmrcPresent: trackedFiles.has(\".npmrc\"),\n });\n for (const message of result.errors)\n diagnostics.push({\n rule: \"quarantine-policy\",\n path: \"bunfig.toml\",\n line: 1,\n message,\n });\n for (const message of result.warnings)\n onWarning?.({\n rule: \"quarantine-policy\",\n path: \"bunfig.toml\",\n line: 1,\n message,\n });\n } catch (error) {\n diagnostics.push({\n rule: \"quarantine-policy\",\n path: \"bunfig.toml\",\n line: 1,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n if (files[\"package.json\"] !== undefined) {\n let manifest: unknown;\n try {\n manifest = JSON.parse(files[\"package.json\"]);\n } catch {\n // The package manifest guard reports invalid JSON.\n }\n diagnostics.push(...checkNodeProjects({ root, manifest, trackedFiles }));\n }\n for (const [file, text] of Object.entries(files))\n diagnostics.push(\n ...checkRuntimeFile({\n file,\n text,\n policy: {\n ...policy,\n packages: { ...policy.packages, typescript: policy.typescript },\n },\n trackedFiles,\n rustExceptions: configuration.rustExceptions,\n dynamicSelectors: dynamicSelectors.filter(\n (entry) => entry.path === file,\n ),\n onDynamicSelector: (entry) =>\n selectorMatches.set(entry, (selectorMatches.get(entry) ?? 0) + 1),\n repository,\n onDelegated,\n engineFloors: engineFloors.filter((entry) => entry.workflow === file),\n onEngineFloor: (entry, status) => {\n if (status === \"mismatch\") mismatchedFloors.add(entry);\n else exercisedFloors.add(entry);\n },\n readFile: (target) => files[target],\n }),\n );\n for (const entry of engineFloors)\n if (!exercisedFloors.has(entry) || mismatchedFloors.has(entry))\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message: `engine floor ${entry.workflow}:${entry.job} requires a setup-node exact patch satisfying ${entry.package} engines.node minimum major ${entry.major}`,\n });\n for (const entry of dynamicSelectors)\n if (selectorMatches.get(entry) !== 1)\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message: `dynamic selector ${entry.path}:${entry.at ?? entry.line} must match exactly one unresolved ${entry.kind} selector`,\n });\n const dependabotIgnores = configuration.dependabotIgnores;\n for (const message of declaredIgnoreConflicts({\n ignores: dependabotIgnores,\n policy: policy.dependabot,\n }))\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message,\n });\n diagnostics.push(\n ...checkDependabot({\n files,\n policy: policy.dependabot,\n ignores: dependabotIgnores,\n }),\n );\n return diagnostics.filter(\n (diagnostic) => !configuration.disabled.has(diagnostic.rule),\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"toolchain-guard.cjs","names":["valid","gte","packageMetadata.version","record","path","githubAutomationFileKind","parseDocument","parseConsumerFixtures","discoverConsumerPackages","consumerPackageClosure","record","record","path","validRange","minVersion","parseDocument","valid","satisfies","record","valid","path","LineCounter","parseDocument","isNode","workspaceContains","validRange","satisfies","nodeSupportRangeMatches","extname","record","parseDocument","record","record","spawnSync","path","pathToFileURL","createRequire","lstatSync","readFileSync","discoverConsumerManifests","require","record","overdueVerdict","isShellScript","canonicalDockerRuntime","rustImageVersion","githubAutomationFileKind","parseDocument","record","record","path","nodeSelectorMatches","parseToml","isMiseConfigPath","canonicalDockerRuntime","rustImageVersion","isDockerDefinitionPath","isComposeDefinitionPath","isKubernetesDefinitionPath","LineCounter","parseAllDocuments","isMap","isScalar","containerDocumentImages","isSeq","isAlias","githubAutomationFileKind","parseDocument","unexpected","dependabotRules","formatterRule","parseCloudSetup","parseDependabotIgnores","readGitTrackedOutput","realpathSync","toolchainInputKind","path","lstatSync","openSync","readSync","readFileSync","execFileSync","cloudSetupPath","hasCloudSessionStartHook","cloudClaudeSettingsPath","cloudSessionStartFix","hasCloudAttribution","cloudAttributionFix","generateCloudSetup","checkFormatter","checkRepositoryQuarantine","declaredIgnoreConflicts","checkDependabot"],"sources":["../src/toolchain-bun.ts","../package.json","../src/toolchain-consumer-checks.ts","../src/toolchain-dynamic-selectors.ts","../src/toolchain-engine-floors.ts","../src/toolchain-packages.ts","../src/toolchain-script-extensions.ts","../src/toolchain-script-lifecycle.ts","../src/toolchain-lint-command.ts","../src/toolchain-node-projects.ts","../src/toolchain-rust.ts","../src/toolchain-workflow-trust.ts","../src/toolchain-runtime.ts","../src/toolchain-guard.ts"],"sourcesContent":["import { gte, valid } from \"semver\";\n\n// Stable releases only: a prerelease never satisfies the shared minimum.\nconst STABLE_RELEASE = /^\\d+\\.\\d+\\.\\d+$/u;\n\n/**\n * The shared policy names the minimum Bun. A repository pins one exact\n * release at or above it in its root packageManager, and every other Bun\n * reference in the repository must equal that release.\n */\nexport const repositoryBun = (floor: string, manifest: string | undefined) => {\n let packageManager: unknown;\n try {\n const parsed: unknown = JSON.parse(manifest ?? \"\");\n if (typeof parsed === \"object\" && parsed !== null)\n packageManager = Reflect.get(parsed, \"packageManager\");\n } catch {\n // Manifest diagnostics report a malformed root package.json.\n }\n const version =\n typeof packageManager === \"string\"\n ? /^bun@(.+)$/.exec(packageManager)?.[1]\n : undefined;\n return version !== undefined &&\n STABLE_RELEASE.test(version) &&\n valid(version) === version &&\n gte(version, floor)\n ? version\n : floor;\n};\n\n/** A selected runtime satisfies the policy when it is an exact release at or above the floor. */\nexport const satisfiesBunFloor = (version: string, floor: string) =>\n STABLE_RELEASE.test(version) &&\n valid(version) === version &&\n gte(version, floor);\n","","import path from \"node:path\";\nimport { parseDocument } from \"yaml\";\n\nimport packageMetadata from \"../package.json\";\nimport {\n assertConsumerFixtureKind,\n assertConsumerFixtureSelection,\n consumerPackageClosure,\n discoverConsumerPackages,\n parseConsumerFixtures,\n} from \"./consumer-compat-config\";\nimport { assertConsumerNodeSupport } from \"./consumer-node-support\";\nimport { githubAutomationFileKind } from \"./toolchain-inputs\";\n\nexport const consumerRunnerVersion = packageMetadata.version;\n\nexport const consumerCheckWorkflow =\n \"stella/.github/.github/workflows/package-consumer-compat.yml\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst repositoryDirectory = (value: unknown): value is string =>\n typeof value === \"string\" &&\n value !== \"\" &&\n !value.includes(\"\\\\\") &&\n !value.includes(\"${{\") &&\n !value.split(\"\").some((character) => {\n const code = character.charCodeAt(0);\n return code < 32 || code === 127;\n }) &&\n !/^[A-Za-z]:/.test(value) &&\n !path.posix.isAbsolute(value) &&\n (value === \".\" ||\n value\n .split(\"/\")\n .every((part) => part !== \"\" && part !== \".\" && part !== \"..\"));\n\nconst packageDirectories = (value: unknown): value is string[] =>\n Array.isArray(value) &&\n value.length > 0 &&\n value.every(repositoryDirectory) &&\n new Set(value).size === value.length;\n\ntype CronField = {\n minimum: number;\n maximum: number;\n names?: Record<string, number>;\n};\nconst cronFields = [\n { minimum: 0, maximum: 59 },\n { minimum: 0, maximum: 23 },\n { minimum: 1, maximum: 31 },\n {\n minimum: 1,\n maximum: 12,\n names: Object.fromEntries(\n [\n \"JAN\",\n \"FEB\",\n \"MAR\",\n \"APR\",\n \"MAY\",\n \"JUN\",\n \"JUL\",\n \"AUG\",\n \"SEP\",\n \"OCT\",\n \"NOV\",\n \"DEC\",\n ].map((name, index) => [name, index + 1]),\n ),\n },\n {\n minimum: 0,\n maximum: 6,\n names: Object.fromEntries(\n [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"].map((name, index) => [\n name,\n index,\n ]),\n ),\n },\n] as const;\nconst cronFieldValues = (text: string, field: CronField) => {\n const value = (token: string) => {\n const number = /^\\d+$/.test(token)\n ? Number(token)\n : field.names?.[token.toUpperCase()];\n return number !== undefined &&\n Number.isSafeInteger(number) &&\n number >= field.minimum &&\n number <= field.maximum\n ? number\n : undefined;\n };\n const values = new Set<number>();\n for (const part of text.split(\",\")) {\n const split = part.split(\"/\");\n if (split.length > 2) return undefined;\n const [base, stepText] = split;\n const step = stepText === undefined ? 1 : Number(stepText);\n if (stepText !== undefined && !/^\\d+$/.test(stepText)) return undefined;\n if (!Number.isSafeInteger(step) || step <= 0 || base === undefined)\n return undefined;\n const bounds = base.split(\"-\");\n if (bounds.length > 2) return undefined;\n const lower = bounds.at(0);\n if (lower === undefined) return undefined;\n const start = base === \"*\" ? field.minimum : value(lower);\n const upper = bounds.at(1);\n let end = start;\n if (base === \"*\" || (bounds.length === 1 && stepText !== undefined))\n end = field.maximum;\n else if (upper !== undefined) end = value(upper);\n if (start === undefined || end === undefined || start > end)\n return undefined;\n for (let selected = start; selected <= end; selected += step)\n values.add(selected);\n }\n return values;\n};\n\nconst validConsumerCron = (text: string) => {\n const fields = text.trim().split(/\\s+/);\n return (\n fields.length === cronFields.length &&\n cronFields.every((field, index) => {\n const fieldText = fields.at(index);\n return (\n fieldText !== undefined &&\n cronFieldValues(fieldText, field) !== undefined\n );\n })\n );\n};\n\nconst nightlySchedule = (value: unknown) => {\n if (!record(value)) return false;\n const schedule = value[\"schedule\"];\n if (!Array.isArray(schedule) || schedule.length === 0) return false;\n const coveredDays = new Set<number>();\n for (const entry of schedule) {\n if (\n !record(entry) ||\n typeof entry[\"cron\"] !== \"string\" ||\n !validConsumerCron(entry[\"cron\"])\n )\n return false;\n const fields = entry[\"cron\"].trim().split(/\\s+/);\n const selections = cronFields.map((field, index) => {\n const text = fields.at(index);\n return text === undefined ? undefined : cronFieldValues(text, field);\n });\n // Month and date restrictions cannot certify a daily schedule.\n if (selections.at(2)?.size !== 31 || selections.at(3)?.size !== 12)\n continue;\n for (const day of selections.at(4) ?? []) coveredDays.add(day);\n }\n return coveredDays.size === 7;\n};\n\nexport type ConsumerCheck = {\n workflow: string;\n job: string;\n packages: string[];\n toolingVersion: string;\n fixturePath: string;\n};\n\nexport const parseConsumerChecks = (input: unknown): ConsumerCheck[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input)) throw new Error(\"consumerChecks must be an array\");\n const targets = new Set<string>();\n return input.map((entry: unknown) => {\n if (\n !record(entry) ||\n Object.keys(entry).some(\n (key) =>\n ![\n \"workflow\",\n \"job\",\n \"packages\",\n \"toolingVersion\",\n \"fixturePath\",\n ].includes(key),\n ) ||\n typeof entry[\"workflow\"] !== \"string\" ||\n githubAutomationFileKind(entry[\"workflow\"]) !== \"workflow\" ||\n !/^\\.github\\/workflows\\/[^/]+\\.ya?ml$/.test(entry[\"workflow\"]) ||\n typeof entry[\"job\"] !== \"string\" ||\n !/^[A-Za-z_][A-Za-z0-9_-]*$/.test(entry[\"job\"]) ||\n !packageDirectories(entry[\"packages\"]) ||\n typeof entry[\"toolingVersion\"] !== \"string\" ||\n !/^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$/.test(\n entry[\"toolingVersion\"],\n ) ||\n !repositoryDirectory(entry[\"fixturePath\"])\n )\n throw new Error(\n \"consumerChecks requires canonical workflow, job, unique package directories, exact toolingVersion and repository-relative fixturePath\",\n );\n const target = `${entry[\"workflow\"]}:${entry[\"job\"]}`;\n if (targets.has(target))\n throw new Error(\"consumerChecks targets must be unique\");\n targets.add(target);\n return {\n workflow: entry[\"workflow\"],\n job: entry[\"job\"],\n packages: entry[\"packages\"],\n toolingVersion: entry[\"toolingVersion\"],\n fixturePath: entry[\"fixturePath\"],\n };\n });\n};\n\ntype CheckConsumerChecksOptions = {\n declarations: readonly ConsumerCheck[];\n files: Record<string, string>;\n policy: {\n consumerNode: string;\n actions: Record<string, { sha: string; version: string }>;\n };\n};\n\n/** Consumer checks are scoped declarations, never general runtime exceptions. */\nexport const checkConsumerChecks = ({\n declarations,\n files,\n policy,\n}: CheckConsumerChecksOptions) => {\n const diagnostics: {\n rule: \"configuration\";\n path: string;\n line: number;\n message: string;\n }[] = [];\n const exercised = new Set<ConsumerCheck>();\n const add = (message: string) =>\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message,\n });\n for (const [workflow, text] of Object.entries(files)) {\n if (githubAutomationFileKind(workflow) !== \"workflow\") continue;\n try {\n const document = parseDocument(text, { uniqueKeys: true, merge: true });\n if (document.errors.length > 0) throw new Error(\"invalid workflow YAML\");\n const source: unknown = document.toJS({ maxAliasCount: 100 });\n if (!record(source) || !record(source[\"jobs\"])) continue;\n for (const [jobName, job] of Object.entries(source[\"jobs\"])) {\n if (!record(job) || typeof job[\"uses\"] !== \"string\") continue;\n const [workflowPath, ref] = job[\"uses\"].split(\"@\");\n if (workflowPath?.toLowerCase() !== consumerCheckWorkflow) continue;\n const declaration = declarations.find(\n (entry) => entry.workflow === workflow && entry.job === jobName,\n );\n if (declaration === undefined) {\n add(`${workflow}:${jobName} requires a consumerChecks declaration`);\n continue;\n }\n if (!nightlySchedule(source[\"on\"]))\n throw new Error(\n `${workflow} consumer checks require a nonempty valid on.schedule covering every day`,\n );\n if (\"if\" in job || \"needs\" in job || \"strategy\" in job)\n throw new Error(\n `${workflow}:${jobName} consumer checks require a stand-alone unconditional reusable job without if or needs or strategy`,\n );\n exercised.add(declaration);\n const approved = Object.entries(policy.actions).find(\n ([name]) => name.toLowerCase() === consumerCheckWorkflow,\n )?.[1];\n if (\n job[\"uses\"].split(\"@\").length !== 2 ||\n ref === undefined ||\n !/^[a-f0-9]{40}$/.test(ref) ||\n approved === undefined ||\n ref !== approved.sha ||\n \"steps\" in job ||\n \"runs-on\" in job\n )\n throw new Error(\n `${workflow}:${jobName} must invoke the approved immutable consumer workflow as a reusable job`,\n );\n const inputs = job[\"with\"];\n if (!record(inputs))\n throw new Error(`${workflow}:${jobName} requires consumer inputs`);\n const names = new Set<string>();\n for (const key of Object.keys(inputs)) {\n const normalized = key.toLowerCase();\n if (\n names.has(normalized) ||\n ![\n \"packages\",\n \"consumer-node\",\n \"tooling-version\",\n \"fixture-path\",\n ].includes(normalized) ||\n normalized !== key\n )\n throw new Error(\n `${workflow}:${jobName} requires unique canonical consumer input names`,\n );\n names.add(normalized);\n }\n if (inputs[\"consumer-node\"] !== policy.consumerNode)\n throw new Error(\n `${workflow}:${jobName} consumer-node must be ${policy.consumerNode}`,\n );\n if (declaration.toolingVersion !== consumerRunnerVersion)\n throw new Error(\n `${workflow}:${jobName} toolingVersion must match installed @stll/oxlint-config ${consumerRunnerVersion}`,\n );\n if (inputs[\"tooling-version\"] !== declaration.toolingVersion)\n throw new Error(\n `${workflow}:${jobName} tooling-version must match consumerChecks.toolingVersion`,\n );\n if (inputs[\"fixture-path\"] !== declaration.fixturePath)\n throw new Error(\n `${workflow}:${jobName} fixture-path must match consumerChecks.fixturePath`,\n );\n const fixtureManifest = path.posix.join(\n declaration.fixturePath,\n \"consumer-compat.json\",\n );\n const fixtureSource = files[fixtureManifest];\n if (fixtureSource === undefined)\n throw new Error(\n `consumerChecks fixture configuration must be tracked: ${fixtureManifest}`,\n );\n const fixtureConfiguration: unknown = JSON.parse(fixtureSource);\n const fixtures = parseConsumerFixtures(fixtureConfiguration);\n assertConsumerFixtureSelection({\n selected: declaration.packages,\n fixtures,\n });\n const rawPackages = inputs[\"packages\"];\n if (typeof rawPackages !== \"string\")\n throw new Error(\n `${workflow}:${jobName} packages must be a static JSON array`,\n );\n const selected: unknown = JSON.parse(rawPackages);\n if (\n !packageDirectories(selected) ||\n selected.length !== declaration.packages.length ||\n !selected.every((directory) =>\n declaration.packages.includes(directory),\n )\n )\n throw new Error(\n `${workflow}:${jobName} packages must exactly match consumerChecks`,\n );\n const workspacePackages = discoverConsumerPackages(files);\n const packagesByDirectory = new Map(\n [...workspacePackages.values()].map((entry) => [\n entry.directory,\n entry,\n ]),\n );\n for (const directory of declaration.packages) {\n const manifestPath = path.posix.join(directory, \"package.json\");\n const manifestText = files[manifestPath];\n if (manifestText === undefined)\n throw new Error(\n `consumerChecks package manifest must be tracked: ${manifestPath}`,\n );\n const selectedPackage = packagesByDirectory.get(directory);\n if (selectedPackage === undefined)\n throw new Error(\n `consumerChecks package must be a discovered workspace member: ${manifestPath}`,\n );\n const fixture = fixtures.find(\n (candidate) => candidate.package === directory,\n );\n if (fixture === undefined)\n throw new Error(`missing declared consumer fixture: ${directory}`);\n assertConsumerFixtureKind({ fixture, pkg: selectedPackage });\n const manifest = selectedPackage.manifest;\n if (\n manifest[\"private\"] === true ||\n typeof manifest[\"name\"] !== \"string\" ||\n manifest[\"name\"].trim() === \"\"\n )\n throw new Error(\n `consumerChecks requires a named published package: ${manifestPath}`,\n );\n const closure = consumerPackageClosure({\n selected: selectedPackage,\n packages: workspacePackages,\n files,\n });\n for (const member of closure.values())\n assertConsumerNodeSupport({\n manifest: member.manifest,\n node: policy.consumerNode,\n label: path.posix.join(member.directory, \"package.json\"),\n });\n }\n }\n } catch (error) {\n if (\n declarations.some((entry) => entry.workflow === workflow) ||\n text.toLowerCase().includes(consumerCheckWorkflow)\n )\n add(error instanceof Error ? error.message : String(error));\n }\n }\n for (const declaration of declarations)\n if (!exercised.has(declaration))\n add(\n `${declaration.workflow}:${declaration.job} consumerChecks declaration has no matching reusable invocation`,\n );\n return diagnostics;\n};\n","const locatorValidators = {\n image:\n /^(?:jobs\\.[\\w-]+\\.(?:container|services\\.[\\w-]+)|services\\.[\\w.-]+\\.image)$/,\n \"bun-source\": /^(?:jobs\\.[\\w-]+|runs)\\.steps\\.[\\w-]+$/,\n} as const;\n\ntype SelectorKind = keyof typeof locatorValidators;\nconst knownKind = (value: unknown): value is SelectorKind =>\n typeof value === \"string\" && Object.hasOwn(locatorValidators, value);\n\nexport type DynamicSelector = {\n path: string;\n kind: SelectorKind;\n reason: string;\n} & ({ at: string; line?: never } | { line: number; at?: never });\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/** One reviewed declaration identifies one unresolved selector, never a rule. */\nexport const parseDynamicSelectors = (input: unknown): DynamicSelector[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input))\n throw new Error(\"dynamicSelectors must be an array\");\n const result: DynamicSelector[] = [];\n const keys = new Set<string>();\n for (const entry of input) {\n if (\n !record(entry) ||\n Object.keys(entry).some(\n (key) => ![\"path\", \"kind\", \"reason\", \"at\", \"line\"].includes(key),\n ) ||\n typeof entry[\"path\"] !== \"string\" ||\n entry[\"path\"] === \"\" ||\n /[\\\\:$*?]|[^\\S ]/.test(entry[\"path\"]) ||\n entry[\"path\"]\n .split(\"/\")\n .some((part) => part === \"\" || part === \".\" || part === \"..\") ||\n typeof entry[\"reason\"] !== \"string\" ||\n entry[\"reason\"].trim() === \"\"\n )\n throw new Error(\n \"each dynamic selector requires an exact repository path, known kind and nonempty reason\",\n );\n const kind = entry[\"kind\"];\n if (!knownKind(kind)) throw new Error(\"unknown dynamic selector kind\");\n let selector: DynamicSelector;\n if (\n Object.hasOwn(entry, \"line\") &&\n !Object.hasOwn(entry, \"at\") &&\n typeof entry[\"line\"] === \"number\" &&\n Number.isSafeInteger(entry[\"line\"]) &&\n entry[\"line\"] > 0\n ) {\n selector = {\n path: entry[\"path\"],\n kind,\n reason: entry[\"reason\"],\n line: entry[\"line\"],\n };\n } else if (\n !Object.hasOwn(entry, \"line\") &&\n typeof entry[\"at\"] === \"string\" &&\n locatorValidators[kind].test(entry[\"at\"])\n ) {\n selector = {\n path: entry[\"path\"],\n kind,\n reason: entry[\"reason\"],\n at: entry[\"at\"],\n };\n } else\n throw new Error(\n \"dynamic selector requires one positive line or a kind-specific job/service/step ID locator\",\n );\n const key = JSON.stringify([\n selector.path,\n selector.kind,\n selector.at ?? selector.line,\n ]);\n if (keys.has(key))\n throw new Error(\"dynamic selector locations must be unique\");\n keys.add(key);\n result.push(selector);\n }\n return result;\n};\n","import path from \"node:path\";\nimport { minVersion, satisfies, valid, validRange } from \"semver\";\nimport { parseDocument } from \"yaml\";\n\nexport type EngineFloor = { package: string; workflow: string; job: string };\nexport type ResolvedEngineFloor = EngineFloor & {\n range: string;\n major: number;\n};\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst repositoryPath = (value: unknown): value is string =>\n typeof value === \"string\" &&\n value !== \"\" &&\n !/^[A-Za-z]:/.test(value) &&\n !/[\\\\\\s]/.test(value) &&\n !Array.from(value).some((character) => character.charCodeAt(0) < 32) &&\n value\n .split(\"/\")\n .every((part) => part !== \"\" && part !== \".\" && part !== \"..\");\n\nexport const parseEngineFloors = (input: unknown): EngineFloor[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input)) throw new Error(\"engineFloors must be an array\");\n const result: EngineFloor[] = [];\n const jobs = new Set<string>();\n for (const entry of input) {\n if (\n !record(entry) ||\n Object.keys(entry).some(\n (key) => ![\"package\", \"workflow\", \"job\"].includes(key),\n ) ||\n (entry[\"package\"] !== \".\" && !repositoryPath(entry[\"package\"])) ||\n !repositoryPath(entry[\"workflow\"]) ||\n !/^\\.github\\/workflows\\/[^/]+\\.ya?ml$/.test(entry[\"workflow\"]) ||\n typeof entry[\"job\"] !== \"string\" ||\n entry[\"job\"].trim() === \"\"\n )\n throw new Error(\n \"each engine floor requires a repository package directory, workflow path and job\",\n );\n const key = `${entry[\"workflow\"]}:${entry[\"job\"]}`;\n if (jobs.has(key))\n throw new Error(\"engine floor workflow jobs must be unique\");\n jobs.add(key);\n result.push({\n package: entry[\"package\"],\n workflow: entry[\"workflow\"],\n job: entry[\"job\"],\n });\n }\n return result;\n};\n\nexport const resolveEngineFloor = (\n entry: EngineFloor,\n files: Record<string, string>,\n): ResolvedEngineFloor => {\n const manifestText = files[path.posix.join(entry.package, \"package.json\")];\n const workflowText = files[entry.workflow];\n if (manifestText === undefined || workflowText === undefined)\n throw new Error(\"engine floor package and workflow must be tracked\");\n const manifest: unknown = JSON.parse(manifestText);\n if (\n !record(manifest) ||\n manifest[\"private\"] === true ||\n typeof manifest[\"name\"] !== \"string\" ||\n manifest[\"name\"].trim() === \"\" ||\n !record(manifest[\"engines\"]) ||\n typeof manifest[\"engines\"][\"node\"] !== \"string\"\n )\n throw new Error(\n \"engine floor package must be published and declare engines.node\",\n );\n const range = manifest[\"engines\"][\"node\"];\n const minimum = validRange(range) === null ? null : minVersion(range);\n if (minimum === null || minimum.prerelease.length !== 0)\n throw new Error(\"engine floor engines.node must declare a stable minimum\");\n const document = parseDocument(workflowText, { merge: true });\n if (document.errors.length !== 0)\n throw new Error(\"engine floor workflow must be valid YAML\");\n const workflow: unknown = document.toJS({ maxAliasCount: 100 });\n if (!record(workflow) || !record(workflow[\"jobs\"]))\n throw new Error(\"engine floor job must exist in its tracked workflow\");\n const job = workflow[\"jobs\"][entry.job];\n if (!record(job))\n throw new Error(\"engine floor job must exist in its tracked workflow\");\n if (!Array.isArray(job[\"steps\"]) || Object.hasOwn(job, \"uses\"))\n throw new Error(\n \"engine floor job must declare steps and cannot reuse a workflow\",\n );\n return { ...entry, range, major: minimum.major };\n};\n\nexport const engineFloorSelectorMatches = (\n value: unknown,\n floor: ResolvedEngineFloor,\n) => {\n if (\n typeof value !== \"string\" ||\n !/^\\d+\\.\\d+\\.\\d+$/.test(value) ||\n valid(value) !== value\n )\n return false;\n return (\n Number(value.split(\".\").at(0)) === floor.major &&\n satisfies(value, floor.range)\n );\n};\n","import path from \"node:path\";\nimport picomatch from \"picomatch\";\nimport { satisfies, valid, validRange } from \"semver\";\nimport { isNode, LineCounter, parseDocument } from \"yaml\";\n\nimport { nodeSupportRangeMatches } from \"./toolchain-node\";\nimport { workspaceContains } from \"./toolchain-workspaces\";\n\nexport const packageRules = [\n \"bun-pins\",\n \"package-pins\",\n \"typescript-layout\",\n \"node-engine\",\n] as const;\n\ntype PackagePolicy = {\n bun: string;\n packages: Record<string, string>;\n typescript: string;\n node: string;\n};\n\n/** Compiler packages `bun check` replaces; an install needs a repository allowlist entry. */\nconst typescriptPackages: ReadonlySet<string> = new Set([\n \"typescript\",\n \"@typescript/native\",\n]);\nconst typecheckCommand = \"bun check\";\nconst typescriptGuidance =\n \"type check with `bun check --no-pretty --all --project=<tsconfig>`, use tsrs for programs and type checkers, and oxc-parser for syntax-only reads\";\nconst installSections = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n] as const;\nconst allowlistFile = \"stll-toolchain.json\";\n\ntype Diagnostic = {\n rule: (typeof packageRules)[number];\n path: string;\n line: number;\n message: string;\n};\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/** `npm:typescript@7.0.2` installs a compiler under another name; returns its version. */\nconst typescriptAliasVersion = (spec: unknown) => {\n if (typeof spec !== \"string\") return undefined;\n const match = /^npm:(?:typescript|@typescript\\/native)(?:@(.*))?$/.exec(spec);\n return match === null ? undefined : (match[1] ?? \"\");\n};\nconst exactTypescriptSpec = (spec: unknown): spec is string => {\n if (typeof spec !== \"string\") return false;\n const version = typescriptAliasVersion(spec) ?? spec;\n return valid(version) === version;\n};\nconst isTypescriptInstall = (name: string, value: unknown) =>\n typescriptPackages.has(name) || typescriptAliasVersion(value) !== undefined;\n\n/** One repository-declared TypeScript install: where, what, and which dependency needs it. */\nexport type TypescriptAllowlistEntry = {\n workspace: string;\n name: string;\n spec: string;\n dependency: string;\n reason: string;\n};\n\nconst allowlistKeys = [\n \"workspace\",\n \"name\",\n \"spec\",\n \"dependency\",\n \"reason\",\n] as const;\nconst allowlistFormat =\n '{\"workspace\": \"<package directory or .>\", \"name\": \"typescript\", \"spec\": \"<exact version>\", \"dependency\": \"<package that needs it>\", \"reason\": \"<why>\"}';\nconst workspaceManifest = (workspace: string) =>\n workspace === \".\" ? \"package.json\" : `${workspace}/package.json`;\n\n/** Each repository declares its own TypeScript installs; there is no shared list. */\nexport const parseTypescriptAllowlist = (\n input: unknown,\n): TypescriptAllowlistEntry[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input))\n throw new Error(\n `typescriptAllowlist must be an array of entries like ${allowlistFormat}`,\n );\n const seen = new Set<string>();\n return input.map((entry: unknown) => {\n const shown = JSON.stringify(entry);\n const text = (key: (typeof allowlistKeys)[number]) => {\n const value = record(entry) ? entry[key] : undefined;\n return typeof value === \"string\" && value.trim() !== \"\"\n ? value\n : undefined;\n };\n const workspace = text(\"workspace\");\n const name = text(\"name\");\n const spec = text(\"spec\");\n const dependency = text(\"dependency\");\n const reason = text(\"reason\");\n if (\n !record(entry) ||\n Object.keys(entry).length !== allowlistKeys.length ||\n workspace === undefined ||\n name === undefined ||\n spec === undefined ||\n dependency === undefined ||\n reason === undefined\n )\n throw new Error(\n `typescriptAllowlist entry ${shown} must have exactly workspace, name, spec, dependency and reason as nonempty strings: ${allowlistFormat}`,\n );\n if (\n workspace !== \".\" &&\n (path.posix.normalize(workspace) !== workspace ||\n workspace.startsWith(\"/\") ||\n workspace.endsWith(\"/\") ||\n workspace === \"..\" ||\n workspace.startsWith(\"../\"))\n )\n throw new Error(\n `typescriptAllowlist entry ${shown}: workspace must be \".\" for the root or a normalized relative package directory such as \"apps/web\"`,\n );\n if (!exactTypescriptSpec(spec))\n throw new Error(\n `typescriptAllowlist entry ${shown}: spec must be the exact spec the manifest resolves to, such as \"6.0.3\" or \"npm:typescript@6.0.3\", not a range or catalog reference`,\n );\n if (!isTypescriptInstall(name, spec))\n throw new Error(\n `typescriptAllowlist entry ${shown}: name must be typescript or @typescript/native, or an alias whose spec is npm:typescript@<version> or npm:@typescript/native@<version>`,\n );\n if (typescriptPackages.has(dependency) || dependency === name)\n throw new Error(\n `typescriptAllowlist entry ${shown}: dependency must name the package in that workspace that needs ${name}, not a TypeScript package`,\n );\n const key = `${workspace}\\0${name}`;\n if (seen.has(key))\n throw new Error(\n `typescriptAllowlist declares ${name} for ${workspace} more than once; keep one entry`,\n );\n seen.add(key);\n return { workspace, name, spec, dependency, reason };\n });\n};\n\n// Inspect explicit substitution bodies without evaluating shell expressions.\nconst shellSubstitutions = (command: string) => {\n type Frame = {\n kind: \"root\" | \"parentheses\" | \"backticks\";\n start: number;\n depth: number;\n quote: \"'\" | '\"' | undefined;\n };\n const frames: Frame[] = [\n { kind: \"root\", start: 0, depth: 0, quote: undefined },\n ];\n const bodies: string[] = [];\n for (let index = 0; index < command.length; index += 1) {\n const frame = frames.at(-1);\n if (frame === undefined) break;\n const character = command.at(index);\n if (character === \"\\\\\" && frame.quote !== \"'\") {\n index += 1;\n continue;\n }\n if (character === \"`\" && frame.kind === \"backticks\") {\n bodies.push(command.slice(frame.start, index));\n frames.pop();\n continue;\n }\n if (character === frame.quote) {\n frame.quote = undefined;\n continue;\n }\n if (frame.quote === \"'\") continue;\n if (character === \"$\" && command.at(index + 1) === \"(\") {\n frames.push({\n kind: \"parentheses\",\n start: index + 2,\n depth: 1,\n quote: undefined,\n });\n index += 1;\n continue;\n }\n if (character === \"`\") {\n frames.push({\n kind: \"backticks\",\n start: index + 1,\n depth: 0,\n quote: undefined,\n });\n continue;\n }\n if (frame.quote !== undefined) continue;\n if (character === \"'\" || character === '\"') {\n frame.quote = character;\n continue;\n }\n if (frame.kind !== \"parentheses\") continue;\n if (character === \"(\") frame.depth += 1;\n if (character === \")\" && --frame.depth === 0) {\n bodies.push(command.slice(frame.start, index));\n frames.pop();\n }\n }\n for (const frame of frames.slice(1)) bodies.push(command.slice(frame.start));\n return bodies;\n};\n\nconst shellValueOptions = new Set([\n \"--rcfile\",\n \"--init-file\",\n \"-o\",\n \"+o\",\n \"-O\",\n \"+O\",\n]);\nconst shellExecutable = /^(?:\\/(?:[^/]+\\/)*)?(?:bash|dash|ksh|zsh|sh)$/;\n\ntype ShellToken = {\n kind: \"word\" | \"boundary\" | \"redirect\" | \"comment\";\n value: string;\n index: number;\n};\n\n// Keep expansion bodies in their word: substitutions are inspected separately as executable sources.\nexport const shellTokens = (source: string) => {\n const tokens: ShellToken[] = [];\n for (let index = 0; index < source.length;) {\n const character = source.at(index);\n if (character === undefined) break;\n if (character === \"\\n\") {\n tokens.push({ kind: \"boundary\", value: character, index: index++ });\n continue;\n }\n if (/\\s/.test(character)) {\n index++;\n continue;\n }\n if (character === \"#\") {\n const end = source.indexOf(\"\\n\", index);\n const stop = end < 0 ? source.length : end;\n tokens.push({ kind: \"comment\", value: source.slice(index, stop), index });\n index = stop;\n continue;\n }\n const redirect = /^(?:\\d*)(?:&>>|&>|<<<|<<-|<<|>>|>\\||>&|<&|<>|>|<)/.exec(\n source.slice(index),\n );\n if (redirect !== null) {\n tokens.push({ kind: \"redirect\", value: redirect[0], index });\n index += redirect[0].length;\n continue;\n }\n const boundary = /^(?:&&|\\|\\||[();&|])/.exec(source.slice(index));\n if (boundary !== null) {\n tokens.push({ kind: \"boundary\", value: boundary[0], index });\n index += boundary[0].length;\n continue;\n }\n const start = index;\n type Frame = {\n kind: \"word\" | \"parentheses\" | \"backticks\";\n quote: \"'\" | '\"' | undefined;\n depth: number;\n };\n const frames: Frame[] = [{ kind: \"word\", quote: undefined, depth: 0 }];\n while (index < source.length) {\n const frame = frames.at(-1);\n const current = source.at(index);\n if (frame === undefined || current === undefined) break;\n if (current === \"\\\\\" && frame.quote !== \"'\") {\n index += 2;\n continue;\n }\n if (current === \"`\" && frame.kind === \"backticks\") {\n frames.pop();\n index++;\n continue;\n }\n if (current === frame.quote) {\n frame.quote = undefined;\n index++;\n continue;\n }\n if (frame.quote === \"'\") {\n index++;\n continue;\n }\n if (current === \"$\" && source.at(index + 1) === \"(\") {\n frames.push({ kind: \"parentheses\", quote: undefined, depth: 1 });\n index += 2;\n continue;\n }\n if (current === \"`\") {\n frames.push({ kind: \"backticks\", quote: undefined, depth: 0 });\n index++;\n continue;\n }\n if (frame.quote !== undefined) {\n index++;\n continue;\n }\n if (current === \"'\" || current === '\"') {\n frame.quote = current;\n index++;\n continue;\n }\n if (frame.kind === \"parentheses\") {\n if (current === \"(\") frame.depth++;\n if (current === \")\" && --frame.depth === 0) frames.pop();\n index++;\n continue;\n }\n if (frame.kind === \"word\" && /[\\s<>;&|()]/.test(current)) break;\n index++;\n }\n const value = source.slice(start, index);\n tokens.push({\n kind: \"word\",\n value,\n index: start,\n });\n }\n // Braces are reserved words only where a command or function body can begin.\n let groupDepth = 0;\n let redirectTarget = false;\n const commandWords: string[] = [];\n for (const token of tokens) {\n if (token.kind === \"comment\") continue;\n if (token.kind === \"redirect\") {\n redirectTarget = true;\n continue;\n }\n if (redirectTarget) {\n redirectTarget = false;\n if (token.kind === \"word\") continue;\n }\n if (token.kind === \"boundary\") {\n commandWords.length = 0;\n continue;\n }\n const functionBody =\n commandWords.length === 2 && commandWords.at(0) === \"function\";\n const opensGroup =\n token.value === \"{\" && (commandWords.length === 0 || functionBody);\n const closesGroup =\n token.value === \"}\" && groupDepth > 0 && commandWords.length === 0;\n if (opensGroup || closesGroup) {\n token.kind = \"boundary\";\n groupDepth += opensGroup ? 1 : -1;\n commandWords.length = 0;\n continue;\n }\n if (\n commandWords.length === 0 &&\n [\"if\", \"then\", \"elif\", \"else\", \"do\", \"!\", \"time\"].includes(token.value)\n )\n continue;\n commandWords.push(token.value);\n }\n return tokens;\n};\n\nconst shellArgumentTokens = (tokens: readonly ShellToken[]) => {\n const arguments_: ShellToken[] = [];\n let redirectTarget = false;\n for (const token of tokens) {\n if (token.kind === \"comment\") continue;\n if (token.kind === \"redirect\") {\n redirectTarget = true;\n continue;\n }\n if (redirectTarget) {\n redirectTarget = false;\n if (token.kind === \"word\") continue;\n }\n arguments_.push(token);\n }\n return arguments_;\n};\n\nconst shellReadsProgramStdin = (tokens: readonly ShellToken[]) => {\n const words = executableShellWords(\n shellArgumentTokens(tokens).map(({ value }) => value),\n ).map(decodeShellWord);\n if (!shellExecutable.test(words.at(0) ?? \"\")) return false;\n let stdin = false;\n let script = false;\n for (let index = 1; index < words.length; index++) {\n const option = words.at(index) ?? \"\";\n if (option === \"--\" || option === \"-\") {\n script = index + 1 < words.length;\n break;\n }\n if (!/^[+-]/.test(option)) {\n script = true;\n break;\n }\n if (shellValueOptions.has(option)) {\n index++;\n continue;\n }\n if (/^-[^-]*c/.test(option)) return false;\n if (/^-[^-]*s/.test(option)) stdin = true;\n }\n return stdin || !script;\n};\n\n// Descriptor copies retain their source; later redirections replace only their destination.\nconst shellStdinHeredoc = (tokens: readonly ShellToken[]) => {\n const descriptors = new Map<string, ShellToken>();\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens.at(index);\n if (token?.kind !== \"redirect\") continue;\n const declaration = /^(\\d*)(.+)$/.exec(token.value);\n const operator = declaration?.[2];\n if (operator === undefined) continue;\n const descriptor = String(\n Number(declaration?.[1] || (operator.startsWith(\"<\") ? \"0\" : \"1\")),\n );\n const target = tokens.at(++index);\n if (operator === \"<<\" || operator === \"<<-\") {\n descriptors.set(descriptor, token);\n continue;\n }\n if (operator === \"<&\" || operator === \">&\") {\n const copy = /^(\\d+)(-?)$/.exec(decodeShellWord(target?.value ?? \"\"));\n const sourceDescriptor =\n copy?.[1] === undefined ? undefined : String(Number(copy[1]));\n const source =\n sourceDescriptor === undefined\n ? undefined\n : descriptors.get(sourceDescriptor);\n if (source === undefined) descriptors.delete(descriptor);\n else descriptors.set(descriptor, source);\n if (copy?.[2] === \"-\" && sourceDescriptor !== undefined)\n descriptors.delete(sourceDescriptor);\n continue;\n }\n descriptors.delete(descriptor);\n if (operator === \"&>\" || operator === \"&>>\") descriptors.delete(\"2\");\n }\n return descriptors.get(\"0\");\n};\n\n// Literal heredoc bodies are data, not direct shell command invocations.\nconst shellExecutableSource = (command: string) => {\n const pending: {\n delimiter: string;\n stripTabs: boolean;\n literal: boolean;\n execute: boolean;\n }[] = [];\n return command\n .split(/\\r?\\n/)\n .map((line) => {\n const here = pending.at(0);\n if (here !== undefined) {\n if (\n (here.stripTabs ? line.replace(/^\\t+/, \"\") : line) === here.delimiter\n ) {\n pending.shift();\n return \"\";\n }\n if (here.execute) return line;\n if (here.literal) return \"\";\n return shellSubstitutions(line).join(\"\\n\");\n }\n const words = shellTokens(line);\n let commandStart = 0;\n for (let index = 0; index < words.length; index++) {\n const match = words.at(index);\n const word = match?.value;\n if (word === undefined) continue;\n if (match?.kind === \"comment\") return line.slice(0, match.index);\n if (match?.kind === \"boundary\") {\n commandStart = index + 1;\n continue;\n }\n const declaration =\n match?.kind === \"redirect\" ? /^(?:\\d*)<<(-?)(.*)$/.exec(word) : null;\n let delimiter = declaration?.[2];\n if (delimiter === \"\") delimiter = words.at(++index)?.value;\n if (\n declaration !== null &&\n delimiter !== undefined &&\n !delimiter.startsWith(\"<\")\n ) {\n const commandEnd = words.findIndex(\n (entry, position) =>\n position > index &&\n (entry.kind === \"boundary\" || entry.kind === \"comment\"),\n );\n const invocation = words.slice(\n commandStart,\n commandEnd < 0 ? undefined : commandEnd,\n );\n pending.push({\n delimiter: decodeShellWord(delimiter),\n stripTabs: declaration[1] === \"-\",\n literal: /['\"\\\\]/.test(delimiter),\n execute:\n shellReadsProgramStdin(invocation) &&\n shellStdinHeredoc(invocation) === match,\n });\n }\n }\n return line;\n })\n .join(\"\\n\");\n};\n\nexport const executableShellWords = (words: readonly string[]): string[] => {\n let start = 0;\n const skipAssignments = () => {\n while (\n /^[A-Za-z_][A-Za-z\\d_]*=/.test(decodeShellWord(words.at(start) ?? \"\"))\n )\n start += 1;\n };\n skipAssignments();\n while (\n /^(?:\\/usr\\/bin\\/|\\/bin\\/)?env$/.test(\n decodeShellWord(words.at(start) ?? \"\"),\n )\n ) {\n start += 1;\n while (start < words.length) {\n const option = decodeShellWord(words.at(start) ?? \"\");\n if (option === \"--\") {\n start += 1;\n break;\n }\n if ([\"-u\", \"--unset\", \"-C\", \"--chdir\"].includes(option)) {\n start += 2;\n continue;\n }\n if (\n option === \"-S\" ||\n option === \"--split-string\" ||\n option.startsWith(\"--split-string=\") ||\n (option.startsWith(\"-S\") && option.length > 2)\n ) {\n let source: string;\n if (option === \"-S\" || option === \"--split-string\") {\n source = decodeShellWord(words.at(start + 1) ?? \"\");\n start += 2;\n } else {\n source = option.startsWith(\"-S\")\n ? option.slice(2)\n : option.slice(\"--split-string=\".length);\n start++;\n }\n return executableShellWords([\n \"env\",\n ...shellTokens(source).map(({ value }) => value),\n ...words.slice(start),\n ]);\n }\n if (\n option === \"-\" ||\n option === \"-i\" ||\n option === \"--ignore-environment\" ||\n /^--(?:unset|chdir)=.+|^-[uC].+/.test(option)\n ) {\n start += 1;\n continue;\n }\n break;\n }\n skipAssignments();\n }\n return words.slice(start);\n};\n\n// A quoted argument is executable only when the command itself is a shell with -c.\nconst shellCommandBody = (rawWords: readonly string[]) => {\n const words = executableShellWords(\n rawWords.filter((word) => word !== \"(\" && word !== \")\"),\n ).map(decodeShellWord);\n if (!shellExecutable.test(words.at(0) ?? \"\")) return undefined;\n for (let index = 1; index < words.length; index++) {\n const option = words.at(index);\n if (option === undefined || option === \"--\" || !/^[+-]/.test(option))\n return undefined;\n if (shellValueOptions.has(option)) {\n index++;\n continue;\n }\n if (/^-[^-]*c/.test(option)) return words.at(index + 1);\n }\n return undefined;\n};\n\n/** Shared executable shell words preserve assignments for runtime selectors. */\nexport const shellCommandSegments = (\n command: string,\n grouping: \"boundaries\" | \"tokens\" = \"boundaries\",\n) => {\n const segments: string[][] = [[]];\n const executableSource = shellExecutableSource(command);\n const sources = new Set([\n executableSource,\n ...shellSubstitutions(executableSource),\n ]);\n for (const source of sources) {\n const firstSegment = segments.length;\n segments.push([]);\n for (const { kind, value: word } of shellArgumentTokens(\n shellTokens(source),\n )) {\n if (kind === \"boundary\") {\n if ([\"(\", \")\", \"{\", \"}\"].includes(word) && grouping === \"tokens\")\n segments.at(-1)?.push(word);\n else segments.push([]);\n } else segments.at(-1)?.push(word);\n }\n for (const words of segments.slice(firstSegment)) {\n const body = shellCommandBody(words);\n if (body === undefined) continue;\n const executableBody = shellExecutableSource(body);\n sources.add(executableBody);\n for (const substitution of shellSubstitutions(executableBody))\n sources.add(substitution);\n }\n }\n return segments;\n};\n\n// Inspect direct compiler commands after removing environment launcher assignments.\nexport const compilerCommandSegments = (command: string) =>\n // Compiler policy compares raw invocations; retaining grouping prevents widening its allowlist.\n shellCommandSegments(command, \"tokens\").map(executableShellWords);\n\nconst launcherValueOptions = new Map(\n Object.entries({\n npx: [\n \"-p\",\n \"--package\",\n \"-c\",\n \"--call\",\n \"--cache\",\n \"--registry\",\n \"--userconfig\",\n ],\n bunx: [\"-p\", \"--package\"],\n pnpm: [\"--filter\", \"-F\", \"--dir\", \"-C\", \"--package\"],\n yarn: [\n \"--cwd\",\n \"--cache-folder\",\n \"--mutex\",\n \"--use-yarnrc\",\n \"--modules-folder\",\n \"--registry\",\n ],\n bun: [\n \"--cwd\",\n \"--filter\",\n \"-F\",\n \"--config\",\n \"-c\",\n \"--env-file\",\n \"-e\",\n \"--eval\",\n \"-p\",\n \"--print\",\n ],\n node: [\n \"-e\",\n \"--eval\",\n \"-p\",\n \"--print\",\n \"--conditions\",\n \"-C\",\n \"--inspect-port\",\n \"--max-old-space-size\",\n \"--stack-size\",\n \"--title\",\n \"--icu-data-dir\",\n \"--openssl-config\",\n \"--input-type\",\n ],\n }).map(([launcher, options]) => [launcher, new Set(options)]),\n);\n\nexport const decodeShellWord = (word: string) => {\n let result = \"\";\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < word.length; index += 1) {\n const character = word.at(index);\n if (character === quote) {\n quote = undefined;\n continue;\n }\n if (quote === undefined && (character === \"'\" || character === '\"')) {\n quote = character;\n continue;\n }\n const next = word.at(index + 1);\n if (\n character === \"\\\\\" &&\n next !== undefined &&\n quote !== \"'\" &&\n (quote === undefined || /[$`\"\\\\\\n]/.test(next))\n ) {\n if (next !== \"\\n\") result += next;\n index += 1;\n } else result += character;\n }\n return result;\n};\n\n// Classification sees launcher arguments; acceptance still uses the declared command.\nconst invokesCompiler = (words: string[]) => {\n const tokens = words.map(decodeShellWord);\n const compiler = (word: string) =>\n /(?:^|\\/)(?:tsc|tsgo)(?:\\.js)?$/.test(word);\n let start = 0;\n const skipOptions = (index: number, launcher: string) => {\n while (tokens.at(index)?.startsWith(\"-\")) {\n const option = tokens.at(index);\n index += 1;\n if (option === \"--\") break;\n if (\n option !== undefined &&\n launcherValueOptions.get(launcher)?.has(option)\n )\n index += 1;\n }\n return index;\n };\n while (start < tokens.length) {\n const launcher = tokens.at(start);\n if (launcher === undefined || !launcherValueOptions.has(launcher)) break;\n start = skipOptions(start + 1, launcher);\n if (launcher === \"bun\" && tokens.at(start) === \"check\") return true;\n const subcommand = tokens.at(start);\n if (\n (launcher === \"bun\" && (subcommand === \"x\" || subcommand === \"run\")) ||\n (launcher === \"pnpm\" &&\n (subcommand === \"exec\" || subcommand === \"dlx\")) ||\n (launcher === \"yarn\" &&\n (subcommand === \"exec\" || subcommand === \"dlx\" || subcommand === \"run\"))\n ) {\n start = skipOptions(start + 1, launcher);\n }\n }\n // Explicit compiler tokens behind unsupported launchers fail closed.\n const remaining = tokens.slice(start);\n return remaining.some(\n (word, index) =>\n compiler(word) ||\n (word === \"bun\" &&\n tokens.at(skipOptions(start + index + 1, \"bun\")) === \"check\"),\n );\n};\n\ntype CheckPackageFilesOptions = {\n files: Record<string, string>;\n policy: PackagePolicy;\n /** The repository's own TypeScript installs from `stll-toolchain.json`. */\n typescriptAllowlist: readonly TypescriptAllowlistEntry[];\n};\n\ntype AddDiagnosticOptions = {\n file: string;\n rule: Diagnostic[\"rule\"];\n key: string;\n value?: unknown;\n message: string;\n};\n\n/** Validate manifests and catalog resolutions from a tracked-file snapshot. */\nexport const checkPackageFiles = ({\n files,\n policy,\n typescriptAllowlist,\n}: CheckPackageFilesOptions) => {\n const sources = new Map(Object.entries(files));\n const diagnostics: Diagnostic[] = [];\n const pins = new Map(\n Object.entries({ ...policy.packages, \"bun-types\": policy.bun }),\n );\n const manifests = new Map<string, Record<string, unknown>>();\n const yamlLocations = new Map<string, number[]>();\n const reportedLines = new Map<string, number>();\n const add = ({ file, rule, key, value, message }: AddDiagnosticOptions) => {\n const source = sources.get(file);\n if (source === undefined)\n throw new Error(`Missing package diagnostic source: ${file}`);\n const serialized = value === undefined ? undefined : JSON.stringify(value);\n const locationKey = `${file}:${key}:${serialized ?? \"\"}`;\n const previous = reportedLines.get(locationKey) ?? -1;\n const yamlLine = yamlLocations.get(locationKey)?.shift();\n const index = source\n .split(/\\r?\\n/)\n .findIndex(\n (line, lineIndex) =>\n lineIndex > previous &&\n line.includes(JSON.stringify(key)) &&\n (serialized === undefined || line.includes(serialized)),\n );\n if (index >= 0) reportedLines.set(locationKey, index);\n diagnostics.push({\n rule,\n path: file,\n line: yamlLine ?? Math.max(1, index + 1),\n message,\n });\n };\n for (const [file, text] of sources) {\n const pnpm = path.posix.basename(file) === \"pnpm-workspace.yaml\";\n if (!pnpm && path.posix.basename(file) !== \"package.json\") continue;\n try {\n const lineCounter = new LineCounter();\n const document = pnpm ? parseDocument(text, { lineCounter }) : undefined;\n if (document !== undefined && document.errors.length > 0)\n throw new Error(\"invalid YAML\");\n const json: unknown =\n document === undefined ? JSON.parse(text) : document.toJS();\n if (!record(json)) throw new Error(\"manifest must be an object\");\n if (pnpm) {\n if (json[\"catalog\"] !== undefined && !record(json[\"catalog\"]))\n throw new Error(\"catalog must be a mapping\");\n if (\n json[\"catalogs\"] !== undefined &&\n (!record(json[\"catalogs\"]) ||\n Object.values(json[\"catalogs\"]).some((catalog) => !record(catalog)))\n )\n throw new Error(\"named catalogs must be mappings\");\n if (\n json[\"packages\"] !== undefined &&\n (!Array.isArray(json[\"packages\"]) ||\n !json[\"packages\"].every(\n (pattern: unknown) => typeof pattern === \"string\",\n ))\n )\n throw new Error(\"workspace packages must be patterns\");\n }\n manifests.set(file, json);\n if (document === undefined) continue;\n const catalogEntries = [\n { catalog: json[\"catalog\"], prefix: [\"catalog\"] },\n { catalog: json[\"overrides\"], prefix: [\"overrides\"] },\n ...(record(json[\"catalogs\"])\n ? Object.entries(json[\"catalogs\"]).map(([name, catalog]) => ({\n catalog,\n prefix: [\"catalogs\", name],\n }))\n : []),\n ];\n for (const { catalog, prefix } of catalogEntries) {\n if (!record(catalog)) continue;\n for (const [name, value] of Object.entries(catalog)) {\n const node = document.getIn([...prefix, name], true);\n if (!isNode(node) || node.range === undefined || node.range === null)\n continue;\n const key = `${file}:${name}:${JSON.stringify(value)}`;\n const lines = yamlLocations.get(key) ?? [];\n lines.push(lineCounter.linePos(node.range[0]).line);\n yamlLocations.set(key, lines);\n }\n }\n } catch {\n add({\n file,\n rule: \"package-pins\",\n key: \"\",\n message: pnpm\n ? \"invalid pnpm-workspace.yaml object\"\n : \"invalid package.json object\",\n });\n }\n }\n const catalogSources = (json: Record<string, unknown>) => [\n json,\n ...(record(json[\"workspaces\"]) ? [json[\"workspaces\"]] : []),\n ];\n const pnpmWorkspaceFor = (file: string) => {\n let directory = path.posix.dirname(file);\n while (true) {\n const workspace = manifests.get(\n path.posix.join(directory, \"pnpm-workspace.yaml\"),\n );\n if (workspace !== undefined) return { directory, workspace };\n if (directory === \".\") return undefined;\n directory = path.posix.dirname(directory);\n }\n };\n const catalogFor = (file: string, name: string): unknown => {\n const owner = pnpmWorkspaceFor(file);\n if (owner !== undefined) {\n const { directory, workspace } = owner;\n if (\n path.posix.basename(file) === \"package.json\" &&\n !workspaceContains({\n directory,\n file,\n patterns: workspace[\"packages\"],\n rootMembership: \"implicit\",\n })\n )\n return undefined;\n if (name === \"\" || name === \"default\")\n return (\n workspace[\"catalog\"] ??\n (record(workspace[\"catalogs\"])\n ? workspace[\"catalogs\"][\"default\"]\n : undefined)\n );\n return record(workspace[\"catalogs\"])\n ? workspace[\"catalogs\"][name]\n : undefined;\n }\n let directory = path.posix.dirname(file);\n while (true) {\n const manifest = manifests.get(\n path.posix.join(directory, \"package.json\"),\n );\n if (manifest !== undefined) {\n for (const source of catalogSources(manifest)) {\n if (name === \"\" && source[\"catalog\"] !== undefined)\n return source[\"catalog\"];\n if (\n record(source[\"catalogs\"]) &&\n source[\"catalogs\"][name] !== undefined\n )\n return source[\"catalogs\"][name];\n }\n // A workspace owns catalog resolution even when the requested catalog is absent.\n if (manifest[\"workspaces\"] !== undefined) return undefined;\n }\n if (directory === \".\") return undefined;\n directory = path.posix.dirname(directory);\n }\n };\n // `catalogs` lists every catalog the reference passed through.\n const resolveThrough = (file: string, name: string, value: unknown) => {\n const visited = new Set<string>();\n const catalogs: Record<string, unknown>[] = [];\n while (typeof value === \"string\" && value.startsWith(\"catalog:\")) {\n if (visited.has(value)) return { value: undefined, catalogs };\n visited.add(value);\n const catalog = catalogFor(file, value.slice(\"catalog:\".length));\n if (!record(catalog)) return { value: undefined, catalogs };\n catalogs.push(catalog);\n value = catalog[name];\n }\n return { value, catalogs };\n };\n const resolve = (file: string, name: string, value: unknown): unknown =>\n resolveThrough(file, name, value).value;\n const workspaceOwnerFor = (file: string) => {\n const pnpm = pnpmWorkspaceFor(file);\n if (pnpm !== undefined)\n return {\n directory: pnpm.directory,\n patterns: pnpm.workspace[\"packages\"],\n source: \"pnpm\" as const,\n };\n let directory = path.posix.dirname(file);\n while (true) {\n const root = manifests.get(path.posix.join(directory, \"package.json\"));\n const workspaces = root?.[\"workspaces\"];\n if (workspaces !== undefined)\n return {\n directory,\n patterns: record(workspaces) ? workspaces[\"packages\"] : workspaces,\n source: \"json\" as const,\n };\n if (directory === \".\") return undefined;\n directory = path.posix.dirname(directory);\n }\n };\n type WorkspaceResolution = \"matched\" | \"nonmember\" | \"mismatch\";\n const workspaceResolution = ({\n file,\n name,\n pin,\n }: {\n file: string;\n name: string;\n pin: string;\n }): WorkspaceResolution => {\n const owner = workspaceOwnerFor(file);\n if (owner === undefined) return \"nonmember\";\n const { directory, patterns, source } = owner;\n if (source === \"json\" && !Array.isArray(patterns)) return \"mismatch\";\n if (\n !workspaceContains({\n directory,\n file,\n patterns,\n rootMembership: \"implicit\",\n })\n )\n return \"nonmember\";\n const candidates = [...manifests.entries()].filter(\n ([candidate, json]) =>\n path.posix.basename(candidate) === \"package.json\" &&\n json[\"name\"] === name &&\n workspaceContains({\n directory,\n file: candidate,\n patterns,\n rootMembership: source === \"json\" ? \"patterns\" : \"implicit\",\n }),\n );\n return candidates.length === 1 &&\n candidates.every(([, json]) => json[\"version\"] === pin)\n ? \"matched\"\n : \"mismatch\";\n };\n // TypeScript installs exist only where the repository allowlists them.\n const allowed = new Map(\n typescriptAllowlist.map((entry) => [\n `${workspaceManifest(entry.workspace)}\\0${entry.name}`,\n entry,\n ]),\n );\n // A catalog may hold a TypeScript entry only for an allowed install that\n // resolves through it to the allowed spec.\n const allowedCatalogEntries = new Map<Record<string, unknown>, Set<string>>();\n for (const entry of typescriptAllowlist) {\n const file = workspaceManifest(entry.workspace);\n const json = manifests.get(file);\n if (json === undefined) continue;\n for (const section of installSections) {\n const entries = json[section];\n if (!record(entries) || !Object.hasOwn(entries, entry.name)) continue;\n const { value, catalogs } = resolveThrough(\n file,\n entry.name,\n entries[entry.name],\n );\n if (value !== entry.spec) continue;\n for (const catalog of catalogs) {\n const names = allowedCatalogEntries.get(catalog) ?? new Set<string>();\n names.add(entry.name);\n allowedCatalogEntries.set(catalog, names);\n }\n }\n }\n const shownSpec = (raw: unknown, value: unknown) => {\n if (typeof value !== \"string\") return `${String(raw)} (unresolved)`;\n return raw === value ? value : `${value} (from ${String(raw)})`;\n };\n const typescriptMessage = (name: string, value: unknown) =>\n `${name} ${String(value)} is not needed: ${typescriptGuidance}`;\n type EntryScope = \"install\" | \"catalog\" | \"peer\" | \"resolution\";\n const typescriptEntryMessage = ({\n file,\n entries,\n name,\n raw,\n value,\n scope,\n }: {\n file: string;\n entries: Record<string, unknown>;\n name: string;\n raw: unknown;\n value: unknown;\n scope: EntryScope;\n }) => {\n const shown = shownSpec(raw, value);\n if (scope === \"catalog\")\n return allowedCatalogEntries.get(entries)?.has(name) === true\n ? undefined\n : `${name} ${shown} in a catalog of ${file} serves no allowed install: ${typescriptGuidance}; a catalog may hold ${name} only at the spec of a workspace entry in typescriptAllowlist in ${allowlistFile}`;\n if (scope === \"resolution\")\n return `${name} must not be overridden or resolved (${shown}): ${typescriptGuidance}; declare it in the workspace whose dependency needs it and add a typescriptAllowlist entry in ${allowlistFile}`;\n if (scope === \"peer\")\n return `${name} peer ${shown} is not a version range: ${typescriptGuidance}`;\n const entry =\n path.posix.basename(file) === \"package.json\"\n ? allowed.get(`${file}\\0${name}`)\n : undefined;\n if (entry === undefined) {\n const workspace = path.posix.dirname(file);\n const suggestion = JSON.stringify({\n workspace,\n name,\n spec: exactTypescriptSpec(value) ? value : \"<exact version>\",\n dependency: \"<package that needs it>\",\n reason: \"<why it needs this TypeScript>\",\n });\n return `${name} ${shown} in ${file} is not allowed: ${typescriptGuidance}; if a dependency of this workspace needs it, add ${suggestion} to typescriptAllowlist in ${allowlistFile}`;\n }\n return value === entry.spec\n ? undefined\n : `${name} in ${file} resolves to ${shown}, but typescriptAllowlist in ${allowlistFile} allows ${entry.spec} for ${entry.dependency}; declare ${entry.spec} or update the entry's spec`;\n };\n const peerRange = (value: unknown): value is string =>\n typeof value === \"string\" && validRange(value) !== null;\n for (const [file, json] of manifests) {\n const manager = json[\"packageManager\"];\n if (manager !== undefined && manager !== `bun@${policy.bun}`)\n add({\n file,\n rule: \"bun-pins\",\n key: \"packageManager\",\n value: manager,\n message: `packageManager Bun version must be ${policy.bun} (one exact release at or above the shared minimum, the same in every manifest), found ${JSON.stringify(manager)}`,\n });\n const checkEntries = (\n entries: unknown,\n scope: EntryScope,\n location?: { key: string; value: unknown },\n ) => {\n if (!record(entries)) return;\n for (const [name, raw] of Object.entries(entries)) {\n const value = resolve(file, name, raw);\n if (isTypescriptInstall(name, value)) {\n const message = typescriptEntryMessage({\n file,\n entries,\n name,\n raw,\n value,\n scope,\n });\n if (message !== undefined)\n add({\n file,\n rule: \"typescript-layout\",\n key: location?.key ?? name,\n value: location === undefined ? raw : location.value,\n message,\n });\n continue;\n }\n const pin = pins.get(name);\n if (pin === undefined) continue;\n if (value === pin) continue;\n const workspace =\n value === \"workspace:*\"\n ? workspaceResolution({ file, name, pin })\n : undefined;\n if (workspace === \"matched\") continue;\n add({\n file,\n rule: name === \"bun-types\" ? \"bun-pins\" : \"package-pins\",\n key: location?.key ?? name,\n value: location === undefined ? raw : location.value,\n message:\n workspace === \"nonmember\"\n ? `${name} workspace:* consumer is not a member of its nearest workspace`\n : `${name} must be ${pin}, found ${String(value)}`,\n });\n }\n };\n for (const key of installSections) checkEntries(json[key], \"install\");\n if (record(json[\"peerDependencies\"]))\n for (const [name, value] of Object.entries(json[\"peerDependencies\"])) {\n const resolved = resolve(file, name, value);\n if (isTypescriptInstall(name, resolved) && !peerRange(resolved))\n checkEntries({ [name]: value }, \"peer\");\n }\n for (const source of catalogSources(json)) {\n checkEntries(source[\"catalog\"], \"catalog\");\n if (!record(source[\"catalogs\"])) continue;\n for (const catalog of Object.values(source[\"catalogs\"]))\n checkEntries(catalog, \"catalog\");\n }\n const ownedNames = new Set([...pins.keys(), ...typescriptPackages]);\n const resolutionDependencies: Record<string, unknown> = {};\n const resolutionRoot = manifests.get(\n path.posix.join(path.posix.dirname(file), \"package.json\"),\n );\n if (resolutionRoot !== undefined)\n for (const section of [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ]) {\n const entries = resolutionRoot[section];\n if (!record(entries)) continue;\n for (const [name, value] of Object.entries(entries))\n resolutionDependencies[name] = resolve(file, name, value);\n }\n const checkResolutionMap = (entries: unknown, parent?: string) => {\n if (!record(entries)) return;\n for (const [selector, replacement] of Object.entries(entries)) {\n // npm's nested '.' replaces the enclosing package; Yarn and pnpm\n // qualify a target with a dependency path or a parent selector.\n const target = selector === \".\" ? parent : selector;\n if (target === undefined) continue;\n let pattern =\n target\n .split(/>\\s*(?=[@A-Za-z_*]|$)/)\n .at(-1)\n ?.trim() ?? \"\";\n const version = pattern.lastIndexOf(\"@\");\n if (version > pattern.lastIndexOf(\"/\"))\n pattern = pattern.slice(0, version);\n const parts = pattern.split(\"/\");\n pattern = parts.at(-2)?.startsWith(\"@\")\n ? parts.slice(-2).join(\"/\")\n : (parts.at(-1) ?? \"\");\n if (pattern === \"\") {\n add({\n file,\n rule: \"package-pins\",\n key: selector,\n value: replacement,\n message: \"resolution selector must name a package\",\n });\n continue;\n }\n if (record(replacement)) {\n checkResolutionMap(replacement, target);\n continue;\n }\n let value = replacement;\n if (typeof replacement === \"string\" && replacement.startsWith(\"$\")) {\n const reference = replacement.slice(1);\n value = resolutionDependencies[reference];\n }\n const location = { key: selector, value: replacement };\n const targets = [...ownedNames].filter((name) =>\n picomatch(pattern)(name),\n );\n for (const name of targets)\n checkEntries({ [name]: value }, \"resolution\", location);\n // Redirecting any other package to a compiler is a TypeScript install too.\n if (\n typescriptAliasVersion(value) !== undefined &&\n !targets.some((name) => isTypescriptInstall(name, value))\n )\n checkEntries({ [pattern]: value }, \"resolution\", location);\n }\n };\n checkResolutionMap(json[\"overrides\"]);\n checkResolutionMap(json[\"resolutions\"]);\n if (record(json[\"pnpm\"])) checkResolutionMap(json[\"pnpm\"][\"overrides\"]);\n const command = record(json[\"scripts\"])\n ? json[\"scripts\"][\"typecheck\"]\n : undefined;\n if (typeof command === \"string\")\n for (const words of compilerCommandSegments(command)) {\n if (!invokesCompiler(words)) continue;\n const normalized = words.join(\" \");\n if (\n !words.some((word) => word === \"(\" || word === \")\") &&\n shellSubstitutions(normalized).length === 0 &&\n (normalized === typecheckCommand ||\n normalized.startsWith(`${typecheckCommand} `))\n )\n continue;\n add({\n file,\n rule: \"typescript-layout\",\n key: \"typecheck\",\n value: command,\n message: `typecheck must run \\`${typecheckCommand} --no-pretty --all --project=<tsconfig>\\`, not a TypeScript compiler package`,\n });\n break;\n }\n if (record(json[\"peerDependencies\"]))\n for (const [name, raw] of Object.entries(json[\"peerDependencies\"])) {\n if (!typescriptPackages.has(name)) continue;\n const range = resolve(file, name, raw);\n if (!peerRange(range)) continue;\n // Peer ranges, exact versions included, state support: `typescript`\n // must cover the checker's release; the native package has none.\n const release = name === \"typescript\" ? policy.typescript : undefined;\n if (release === undefined) {\n add({\n file,\n rule: \"typescript-layout\",\n key: name,\n value: raw,\n message: typescriptMessage(name, range),\n });\n continue;\n }\n if (satisfies(release, range)) continue;\n add({\n file,\n rule: \"typescript-layout\",\n key: name,\n value: raw,\n message: `${name} peer support range must include ${release}, found ${range}`,\n });\n }\n if (\n record(json[\"engines\"]) &&\n json[\"engines\"][\"node\"] !== undefined &&\n (typeof json[\"engines\"][\"node\"] !== \"string\" ||\n !nodeSupportRangeMatches(policy.node, json[\"engines\"][\"node\"]))\n )\n add({\n file,\n rule: \"node-engine\",\n key: \"node\",\n value: json[\"engines\"][\"node\"],\n message: `engines.node must support ${policy.node}, found ${JSON.stringify(json[\"engines\"][\"node\"])}`,\n });\n }\n // An entry stays only while its workspace still installs the TypeScript\n // entry beside the dependency that needs it.\n const staleness = (entry: TypescriptAllowlistEntry) => {\n const file = workspaceManifest(entry.workspace);\n const json = manifests.get(file);\n if (json === undefined)\n return `${file} is missing or invalid; remove the entry`;\n const declares = (name: string) =>\n installSections.some((section) => {\n const entries = json[section];\n return record(entries) && Object.hasOwn(entries, name);\n });\n if (!declares(entry.name))\n return `${file} no longer declares ${entry.name} in dependencies, devDependencies or optionalDependencies; remove the entry`;\n if (!declares(entry.dependency))\n return `${file} no longer depends on ${entry.dependency}; remove the entry and the ${entry.name} declaration, or name the dependency that still needs it`;\n return undefined;\n };\n for (const entry of typescriptAllowlist) {\n const stale = staleness(entry);\n if (stale === undefined) continue;\n const message = `typescriptAllowlist entry ${entry.name} ${entry.spec} for ${entry.workspace} is stale: ${stale}`;\n if (sources.has(allowlistFile))\n add({\n file: allowlistFile,\n rule: \"typescript-layout\",\n key: \"workspace\",\n value: entry.workspace,\n message,\n });\n else\n diagnostics.push({\n rule: \"typescript-layout\",\n path: allowlistFile,\n line: 1,\n message,\n });\n }\n return diagnostics;\n};\n","import { extname } from \"node:path\";\n\nexport const scriptSourceExtensions = {\n \".js\": \"javascript\",\n \".jsx\": \"javascript\",\n \".mjs\": \"javascript\",\n \".cjs\": \"javascript\",\n \".ts\": \"typescript\",\n \".tsx\": \"typescript\",\n \".mts\": \"typescript\",\n \".cts\": \"typescript\",\n} as const;\n\nconst extensionKinds = new Map(Object.entries(scriptSourceExtensions));\n\n/** Share source classification between lint ownership and script command discovery. */\nexport const scriptSourceKind = (file: string) =>\n extensionKinds.get(extname(file));\n","import { parseDocument } from \"yaml\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport type LifecycleFile =\n | { type: \"absent\" }\n | { type: \"tracked\"; source: string }\n | { type: \"unknown\" };\n\nexport type ScriptLifecycleContext = {\n packageManager?: unknown;\n npmrc?: LifecycleFile;\n pnpmWorkspace?: LifecycleFile;\n yarnrc?: LifecycleFile;\n assertFilteredBunBuild?: (selector: string) => void;\n};\n\nconst declaredManager = (value: unknown) =>\n typeof value === \"string\"\n ? /^(bun|npm|pnpm|yarn)@(\\d+\\.\\d+\\.\\d+)(?:\\+\\S+)?$/u.exec(value)\n : null;\n\nexport const rootScriptManager = (\n manifest: unknown,\n context: ScriptLifecycleContext,\n) =>\n declaredManager(\n context.packageManager ??\n (record(manifest) ? manifest[\"packageManager\"] : undefined),\n )?.at(1);\n\nconst npmHooksEnabled = (file: LifecycleFile | undefined) => {\n if (file?.type === \"unknown\")\n throw new Error(\n \"npm lifecycle configuration must be a tracked regular file\",\n );\n if (file?.type !== \"tracked\") return true;\n let enabled = true;\n let section = false;\n for (const raw of file.source.split(/\\r?\\n/u)) {\n const line = raw.trim();\n if (line.startsWith(\"[\")) {\n section = true;\n continue;\n }\n if (section || !/^ignore-scripts(?:\\s*=|\\s*$)/iu.test(line)) continue;\n if (!/^ignore-scripts(?:\\s*=|\\s*$)/u.test(line))\n throw new Error(\n \"npm ignore-scripts must use its canonical lowercase key\",\n );\n const value = line.slice(line.indexOf(\"=\") + 1).trim();\n if (value !== \"true\" && value !== \"false\")\n throw new Error(\n \"npm ignore-scripts must be a literal boolean for lifecycle discovery\",\n );\n enabled = value === \"false\";\n }\n return enabled;\n};\n\nconst yamlSettings = (\n file: LifecycleFile | undefined,\n manager: string,\n): Record<string, unknown> => {\n if (file?.type === \"unknown\")\n throw new Error(\n `${manager} lifecycle configuration requires tracked regular root files without nested workspace overrides`,\n );\n if (file?.type !== \"tracked\") return {};\n const document = parseDocument(file.source);\n if (document.errors.length > 0)\n throw new Error(`Cannot parse ${manager} lifecycle configuration`);\n let settings: unknown;\n try {\n settings = document.toJS();\n } catch {\n throw new Error(`Cannot parse ${manager} lifecycle configuration`);\n }\n if (!record(settings))\n throw new Error(`${manager} lifecycle configuration must be a mapping`);\n return settings;\n};\n\nconst pnpmHooksEnabled = (\n manifest: Record<string, unknown>,\n context: ScriptLifecycleContext,\n) => {\n const declared = declaredManager(\n context.packageManager ?? manifest[\"packageManager\"],\n );\n const dependency = [manifest[\"dependencies\"], manifest[\"devDependencies\"]]\n .flatMap((field) => (record(field) ? [field[\"pnpm\"]] : []))\n .find((value) => typeof value === \"string\");\n const version = declared?.at(1) === \"pnpm\" ? declared.at(2) : dependency;\n if (version !== \"12.9.1\")\n throw new Error(\"pnpm lifecycle discovery requires declared pnpm@12.9.1\");\n const settings = yamlSettings(context.pnpmWorkspace, \"pnpm\");\n const enabled = settings[\"enablePrePostScripts\"];\n if (enabled === undefined) return true;\n if (typeof enabled !== \"boolean\")\n throw new Error(\"pnpm enablePrePostScripts must be a literal boolean\");\n return enabled;\n};\n\ntype LifecycleStagesOptions = {\n name: string;\n manager: string | undefined;\n manifest: Record<string, unknown>;\n scripts: Record<string, unknown>;\n context: ScriptLifecycleContext;\n};\n\n/** Automatic pre/post stages run their bodies directly, without pre-pre recursion. */\nexport const scriptLifecycleStages = ({\n name,\n manager,\n manifest,\n scripts,\n context,\n}: LifecycleStagesOptions) => {\n const hooks = [`pre${name}`, `post${name}`];\n const present = hooks.filter(\n (hook) => scripts[hook] !== undefined && scripts[hook] !== \"\",\n );\n if (present.length === 0) return [name];\n if (present.some((hook) => typeof scripts[hook] !== \"string\"))\n throw new Error(\n `Lifecycle hooks for ${name} must be literal package scripts`,\n );\n let enabled: boolean;\n switch (manager) {\n case \"npm\":\n enabled = npmHooksEnabled(context.npmrc);\n break;\n case \"bun\":\n enabled = true;\n break;\n case \"pnpm\":\n enabled = pnpmHooksEnabled(manifest, context);\n break;\n case \"yarn\": {\n const declaration = declaredManager(\n context.packageManager ?? manifest[\"packageManager\"],\n );\n if (\n declaration?.at(1) !== \"yarn\" ||\n !/^[234]\\./u.test(declaration.at(2) ?? \"\")\n )\n throw new Error(\n \"Yarn lifecycle discovery requires a declared Berry version (2, 3 or 4)\",\n );\n const settings = yamlSettings(context.yarnrc, \"Yarn\");\n if (\n (settings[\"yarnPath\"] !== undefined && settings[\"yarnPath\"] !== null) ||\n (settings[\"plugins\"] !== undefined &&\n (!Array.isArray(settings[\"plugins\"]) ||\n settings[\"plugins\"].length > 0))\n )\n throw new Error(\n \"Custom Yarn executables or plugins require explicit lifecycle discovery support\",\n );\n enabled = false;\n break;\n }\n default:\n throw new Error(\n `Cannot determine the package manager for lifecycle hooks of ${name}`,\n );\n }\n if (!enabled) return [name];\n const source = scripts[name];\n const include = (hook: string) =>\n present.includes(hook) &&\n !(\n manager === \"pnpm\" &&\n typeof source === \"string\" &&\n source.includes(hook)\n );\n return [\n ...(include(`pre${name}`) ? [`pre${name}`] : []),\n name,\n ...(include(`post${name}`) ? [`post${name}`] : []),\n ];\n};\n","import { decodeShellWord, shellCommandSegments } from \"./toolchain-packages\";\nimport { scriptSourceKind } from \"./toolchain-script-extensions\";\nimport {\n rootScriptManager,\n type ScriptLifecycleContext,\n scriptLifecycleStages,\n} from \"./toolchain-script-lifecycle\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst scriptManagers = new Set([\"bun\", \"npm\", \"pnpm\", \"yarn\"]);\n\nconst valueFlags = new Set([\n \"-c\",\n \"--config\",\n \"--tsconfig\",\n \"--ignore-path\",\n \"--ignore-pattern\",\n \"-A\",\n \"--allow\",\n \"-W\",\n \"--warn\",\n \"-D\",\n \"--deny\",\n \"-f\",\n \"--format\",\n \"--max-warnings\",\n \"--threads\",\n \"--report-unused-disable-directives-severity\",\n]);\nconst booleanFlags = new Set([\n \"--no-ignore\",\n \"--quiet\",\n \"--deny-warnings\",\n \"--silent\",\n \"--no-error-on-unmatched-pattern\",\n \"--disable-nested-config\",\n \"--report-unused-disable-directives\",\n \"--disable-unicorn-plugin\",\n \"--disable-oxc-plugin\",\n \"--disable-typescript-plugin\",\n \"--import-plugin\",\n \"--react-plugin\",\n \"--jsdoc-plugin\",\n \"--jest-plugin\",\n \"--vitest-plugin\",\n \"--jsx-a11y-plugin\",\n \"--nextjs-plugin\",\n \"--react-perf-plugin\",\n \"--promise-plugin\",\n \"--node-plugin\",\n \"--vue-plugin\",\n]);\n\n// Shell expansion changes the argument vector; inventory accepts literal words only.\nconst literalWord = (raw: string) => {\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < raw.length; index++) {\n const character = raw.at(index);\n if (character === \"\\\\\" && quote !== \"'\") {\n index++;\n continue;\n }\n if (character === quote) {\n quote = undefined;\n continue;\n }\n if (quote === undefined && (character === \"'\" || character === '\"')) {\n quote = character;\n continue;\n }\n if (quote !== \"'\" && (character === \"$\" || character === \"`\")) return false;\n if (\n quote === undefined &&\n character !== undefined &&\n /[*?[\\]{}~]/.test(character)\n )\n return false;\n }\n return quote === undefined;\n};\n\nconst inventoryArguments = (raw: readonly string[]) => {\n const args: string[] = [];\n let threadsSeen = false;\n for (let index = 0; index < raw.length; index++) {\n const word = raw.at(index);\n if (word === undefined) break;\n if (!literalWord(word))\n return { error: \"oxlint arguments must be literal shell words\" };\n const value = decodeShellWord(word);\n if (!value.startsWith(\"-\")) {\n args.push(value);\n continue;\n }\n if (value === \"--\") {\n // The runner appends its debug flag, so a terminator would hide it as a path.\n return {\n error: \"oxlint argument terminators are unsupported for inventory\",\n };\n }\n if (value === \"--type-aware\" || value === \"--type-check\") continue;\n const equals = value.indexOf(\"=\");\n const flag = equals < 0 ? value : value.slice(0, equals);\n if (booleanFlags.has(flag)) {\n if (equals >= 0)\n return { error: `unexpected value for oxlint flag ${flag}` };\n args.push(value);\n continue;\n }\n if (!valueFlags.has(flag))\n return { error: `unsupported oxlint flag ${flag}` };\n let argument: string;\n if (equals >= 0) {\n argument = value.slice(equals + 1);\n if (argument === \"\")\n return { error: `missing value for oxlint flag ${flag}` };\n } else {\n const next = raw.at(++index);\n if (\n next === undefined ||\n !literalWord(next) ||\n decodeShellWord(next).startsWith(\"-\")\n )\n return { error: `missing or nonliteral value for oxlint flag ${flag}` };\n argument = decodeShellWord(next);\n }\n if (flag === \"--threads\") {\n // The pinned inventory process supplies one thread option of its own.\n if (threadsSeen) return { error: \"duplicate oxlint flag --threads\" };\n if (\n !/^\\+?[0-9]+$/u.test(argument) ||\n BigInt(argument) > 18_446_744_073_709_551_615n\n )\n return { error: \"invalid integer value for oxlint flag --threads\" };\n threadsSeen = true;\n continue;\n }\n if (equals >= 0) args.push(value);\n else args.push(value, argument);\n }\n return { args };\n};\n\ntype LintInventoryCommand = {\n runtime: \"node\" | \"bun\";\n args: string[];\n};\n\n/** Extract runtime and arguments for the pinned inventory binary; never execute package-script shell text. */\nexport const lintInventoryCommands = (\n manifest: unknown,\n forceEnabled = false,\n context: ScriptLifecycleContext & { entryScript?: string } = {},\n) => {\n const commands: LintInventoryCommand[] = [];\n const errors: string[] = [];\n const workspaceTasks = new Set<string>();\n const filteredBuilds = new Set<string>();\n const declaresEngine =\n record(manifest) &&\n [manifest[\"dependencies\"], manifest[\"devDependencies\"]].some(\n (dependencies) =>\n record(dependencies) && \"oxlint-tsgolint\" in dependencies,\n );\n const enabled = forceEnabled || declaresEngine;\n if (!enabled) return { commands, errors, enabled, workspaceTask: false };\n if (!record(manifest))\n return {\n commands,\n errors: [\"lint inventory requires an object package manifest\"],\n enabled,\n workspaceTask: false,\n };\n const scripts = manifest[\"scripts\"];\n if (!record(scripts))\n return {\n commands,\n errors: [\"type-aware linting requires a root lint script\"],\n enabled,\n workspaceTask: false,\n };\n const active = new Set<string>();\n const visited = new Set<string>();\n const visit = (name: string) => {\n if (active.has(name)) {\n errors.push(`cyclic lint script alias: ${name}`);\n return;\n }\n if (visited.has(name)) return;\n const source = scripts[name];\n if (typeof source !== \"string\") {\n errors.push(`missing literal package script: ${name}`);\n return;\n }\n active.add(name);\n for (const raw of shellCommandSegments(source)) {\n if (raw.length === 0) continue;\n const words = raw.map(decodeShellWord);\n const first = words.at(0);\n if (first === \"cd\" || first === \"pushd\" || first === \"popd\") {\n errors.push(\n `${name}: changing directories is unsupported for lint inventory`,\n );\n continue;\n }\n if (first === \"echo\" || first === \"printf\") continue;\n if (first === \"turbo\") {\n if (\n words.length === 3 &&\n words.at(1) === \"run\" &&\n words.at(2) === \"lint\" &&\n raw.every(literalWord)\n )\n workspaceTasks.add(name);\n else if (words.includes(\"lint\") || !raw.every(literalWord))\n errors.push(\n `${name}: workspace lint delegation requires literal turbo run lint without options`,\n );\n continue;\n }\n if (\n first === \"bun\" &&\n words.length === 4 &&\n words.at(1) === \"--filter\" &&\n words.at(2) !== \"\" &&\n !words.at(2)?.startsWith(\"-\") &&\n words.at(3) === \"build\" &&\n raw.every(literalWord)\n ) {\n const selector = words.at(2);\n try {\n if (\n selector === undefined ||\n context.assertFilteredBunBuild === undefined\n )\n throw new Error(\n \"Filtered Bun builds require verified workspace lifecycle context\",\n );\n context.assertFilteredBunBuild(selector);\n filteredBuilds.add(selector);\n } catch (error) {\n errors.push(\n error instanceof Error\n ? error.message\n : \"Cannot determine filtered build lifecycle stages\",\n );\n }\n continue;\n }\n if (\n first !== undefined &&\n scriptManagers.has(first) &&\n words.at(1) === \"run\"\n ) {\n const target = words.at(2);\n if (\n target !== undefined &&\n first === \"bun\" &&\n scriptSourceKind(target) !== undefined &&\n typeof scripts[target] !== \"string\"\n ) {\n if (!raw.every(literalWord))\n errors.push(\n `${name}: validation file commands require literal arguments`,\n );\n continue;\n }\n if (raw.length !== 3 || !raw.every(literalWord)) {\n errors.push(\n `${name}: package script aliases must have one literal name`,\n );\n continue;\n }\n const alias = words.at(2);\n if (alias !== undefined) invoke({ name: alias, manager: first });\n continue;\n }\n let offset: number | undefined;\n if (\n first === \"oxlint\" ||\n first === \"./node_modules/.bin/oxlint\" ||\n first === \"node_modules/.bin/oxlint\"\n )\n offset = 1;\n else if (\n first === \"bun\" &&\n words.at(1) === \"--bun\" &&\n words.at(2) === \"oxlint\"\n )\n offset = 3;\n else if (first === \"bunx\" && words.at(1) === \"oxlint\") offset = 2;\n else if (\n first === \"bunx\" &&\n words.at(1) === \"--no-install\" &&\n words.at(2) === \"oxlint\"\n )\n offset = 3;\n if (offset === undefined) {\n if (\n words.some((word) => /(?:^|\\/)oxlint(?:@[^/]+)?$/.test(word)) ||\n words.some(\n (word, index) =>\n scriptManagers.has(word) &&\n words.slice(index + 1).includes(\"run\"),\n ) ||\n (words.includes(\"turbo\") && words.includes(\"lint\")) ||\n // Only the literal filtered build form above is modelled; any other\n // filtered Bun invocation could run workspace lint out of inventory.\n (first === \"bun\" && words.includes(\"--filter\")) ||\n (first !== undefined &&\n scriptManagers.has(first) &&\n !(\n first === \"bun\" &&\n [\"test\", \"build\", \"check\", \"install\", \"x\"].includes(\n words.at(1) ?? \"\",\n )\n ) &&\n (words.slice(1).some((word) => typeof scripts[word] === \"string\") ||\n !raw.every(literalWord))) ||\n (raw.at(0) !== undefined && !literalWord(raw.at(0) ?? \"\"))\n )\n errors.push(`${name}: unsupported or dynamic oxlint launcher`);\n continue;\n }\n if (!raw.slice(0, offset).every(literalWord)) {\n errors.push(`${name}: oxlint launcher must be literal`);\n continue;\n }\n const inventory = inventoryArguments(raw.slice(offset));\n if (inventory.error !== undefined)\n errors.push(`${name}: ${inventory.error}`);\n else\n commands.push({\n runtime: first === \"bun\" ? \"bun\" : \"node\",\n args: inventory.args,\n });\n }\n active.delete(name);\n visited.add(name);\n };\n const activeInvocations = new Set<string>();\n const invoke = ({\n name,\n manager,\n }: {\n name: string;\n manager: string | undefined;\n }) => {\n const key = `${manager ?? \"unknown\"}:${name}`;\n if (activeInvocations.has(key)) {\n errors.push(`cyclic lint script alias: ${name}`);\n return;\n }\n activeInvocations.add(key);\n try {\n const stages = scriptLifecycleStages({\n name,\n manager,\n manifest,\n scripts,\n context,\n });\n for (const stage of stages) visit(stage);\n } catch (error) {\n errors.push(\n error instanceof Error\n ? error.message\n : \"Cannot determine script lifecycle stages\",\n );\n } finally {\n activeInvocations.delete(key);\n }\n };\n invoke({\n name: context.entryScript ?? \"lint\",\n manager: rootScriptManager(manifest, context),\n });\n const workspaceTask = workspaceTasks.size > 0;\n if (\n !declaresEngine &&\n commands.length === 0 &&\n !workspaceTask &&\n filteredBuilds.size === 0 &&\n errors.length === 0\n )\n return { commands, errors, enabled: false, workspaceTask };\n if (\n commands.length === 0 &&\n !workspaceTask &&\n filteredBuilds.size === 0 &&\n context.entryScript === undefined\n )\n errors.push(\"root lint scripts contain no supported oxlint invocation\");\n return {\n commands: errors.length === 0 ? commands : [],\n errors,\n enabled,\n workspaceTask: errors.length === 0 && workspaceTask,\n };\n};\n","import { spawnSync } from \"node:child_process\";\nimport { lstatSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { discoverConsumerManifests } from \"./consumer-compat-config\";\nimport { lintInventoryCommands } from \"./toolchain-lint-command\";\nimport { scriptSourceKind } from \"./toolchain-script-extensions\";\nimport type {\n LifecycleFile,\n ScriptLifecycleContext,\n} from \"./toolchain-script-lifecycle\";\n\nexport const nodeProjectRule = \"type-aware-projects\";\n\ntype NodeProjectDiagnostic = {\n rule: typeof nodeProjectRule;\n path: string;\n line: number;\n message: string;\n};\n\ntype ProjectOwnershipOptions = {\n trackedFiles: ReadonlySet<string>;\n lintedFiles: readonly string[];\n projectFiles: ReadonlySet<string>;\n};\n\nexport const checkProjectOwnership = ({\n trackedFiles,\n lintedFiles,\n projectFiles,\n}: ProjectOwnershipOptions): NodeProjectDiagnostic[] =>\n [...new Set(lintedFiles)]\n .filter(\n (file) =>\n scriptSourceKind(file) !== undefined &&\n trackedFiles.has(file) &&\n !projectFiles.has(file),\n )\n .sort((left, right) => left.localeCompare(right))\n .map((file) => ({\n rule: nodeProjectRule,\n path: file,\n line: 1,\n message:\n \"type-aware lint would use an inferred project; include this file in a declared tsconfig project (for Node scripts, add scripts/tsconfig.json extending @stll/typescript-config/node.json; see the Node scripts recipe in stella/tooling README)\",\n }));\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringList = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n\ntype ReadCommandOptions = {\n root: string;\n executable: string;\n args: string[];\n runtime: \"node\" | \"bun\";\n};\n\nconst readCommand = ({\n root,\n executable,\n args,\n runtime,\n}: ReadCommandOptions) => {\n const result = spawnSync(\n runtime,\n [...(runtime === \"bun\" ? [\"--bun\"] : []), executable, ...args],\n {\n cwd: root,\n encoding: \"utf8\",\n timeout: 30_000,\n maxBuffer: 32 * 1024 * 1024,\n },\n );\n if (result.error !== undefined) throw result.error;\n if (result.status !== 0)\n throw new Error(\n `configuration discovery failed: ${(result.stderr + result.stdout).trim()}`,\n );\n return result.stdout;\n};\n\n// tsrs resolves tsconfig files without a TypeScript install in the consumer;\n// its API is asynchronous, so a short-lived Node process runs it.\nconst projectConfigScript = `\nconst [moduleUrl, root, config] = process.argv.slice(1);\nconst { API } = await import(moduleUrl);\nconst api = new API({ cwd: root });\ntry {\n const parsed = await api.parseConfigFile(config);\n // An empty files list (TS18002) or no inputs (TS18003) leaves a project\n // without roots; only unreadable configuration fails discovery.\n const errors = parsed.errors.filter((error) => error.code !== 18002 && error.code !== 18003);\n if (errors.length > 0) {\n process.stderr.write(errors.map((error) => \"TS\" + error.code + \": \" + (error.text ?? error.messageText ?? \"\")).join(\"\\\\n\"));\n process.exitCode = 1;\n } else\n process.stdout.write(JSON.stringify({\n files: parsed.fileNames,\n references: (parsed.projectReferences ?? []).map((reference) => reference.path),\n allowJs: parsed.options.allowJs === true,\n checkJs: parsed.options.checkJs === true,\n }));\n} finally {\n await api.close();\n}\n`;\n\ntype ProjectConfig = {\n files: string[];\n references: string[];\n allowJs: boolean;\n checkJs: boolean;\n};\n\n// The shared tooling depends on tsrs; a checker bundled outside the package\n// resolves it from the repository instead.\nconst resolveProjectApi = (root: string) => {\n for (const base of [import.meta.url, path.join(root, \"package.json\")])\n try {\n return pathToFileURL(createRequire(base).resolve(\"tsrs/unstable/async\"))\n .href;\n } catch (error) {\n const code = record(error) ? error[\"code\"] : undefined;\n if (code !== \"MODULE_NOT_FOUND\" && code !== \"ERR_MODULE_NOT_FOUND\")\n throw error;\n }\n throw new Error(\n \"configuration discovery needs tsrs: reinstall @stll/oxlint-config, which depends on it\",\n );\n};\n\nconst readProjectConfig = (root: string, config: string): ProjectConfig => {\n const api = resolveProjectApi(root);\n const result = spawnSync(\n \"node\",\n [\n \"--input-type=module\",\n \"-e\",\n projectConfigScript,\n api,\n root,\n path.resolve(root, config),\n ],\n {\n cwd: root,\n encoding: \"utf8\",\n timeout: 30_000,\n maxBuffer: 32 * 1024 * 1024,\n },\n );\n if (result.error !== undefined) throw result.error;\n if (result.status !== 0)\n throw new Error(\n `configuration discovery failed: ${(result.stderr + result.stdout).trim()}`,\n );\n const parsed: unknown = JSON.parse(result.stdout);\n if (\n !record(parsed) ||\n !stringList(parsed[\"files\"]) ||\n !stringList(parsed[\"references\"]) ||\n typeof parsed[\"allowJs\"] !== \"boolean\" ||\n typeof parsed[\"checkJs\"] !== \"boolean\"\n )\n throw new Error(\"compiler configuration must list files and references\");\n return {\n files: parsed[\"files\"],\n references: parsed[\"references\"],\n allowJs: parsed[\"allowJs\"],\n checkJs: parsed[\"checkJs\"],\n };\n};\n\nconst relativePath = (root: string, file: string) =>\n path.relative(root, path.resolve(root, file)).split(path.sep).join(\"/\");\n\ntype CheckNodeProjectsOptions = {\n root: string;\n manifest: unknown;\n trackedFiles: ReadonlySet<string>;\n};\n\nconst lifecycleFile = (\n root: string,\n file: string,\n tracked: ReadonlySet<string>,\n): LifecycleFile => {\n try {\n const location = path.join(root, file);\n const metadata = lstatSync(location);\n if (!tracked.has(file) || !metadata.isFile()) return { type: \"unknown\" };\n return { type: \"tracked\", source: readFileSync(location, \"utf8\") };\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\")\n return { type: \"absent\" };\n return { type: \"unknown\" };\n }\n};\n\n/** Inventory and config expansion only: neither subprocess lints or typechecks. */\nexport const checkNodeProjects = ({\n root,\n manifest,\n trackedFiles,\n}: CheckNodeProjectsOptions) => {\n // Membership comes from the canonical workspace discovery, including exclusion\n // patterns. pnpm-workspace.yaml declares members only for pnpm itself; other\n // managers may track it for settings alone, and `bun --filter` always selects\n // from package.json workspaces.\n const packageManager = record(manifest)\n ? manifest[\"packageManager\"]\n : undefined;\n const managerUsesPnpmWorkspace =\n packageManager === undefined ||\n (typeof packageManager === \"string\" && packageManager.startsWith(\"pnpm@\"));\n const discovered = new Map<\n boolean,\n ReturnType<typeof discoverConsumerManifests>\n >();\n const workspaceMembers = (pnpmMembership: boolean) => {\n const cached = discovered.get(pnpmMembership);\n if (cached !== undefined) return cached;\n const files: Record<string, string> = {\n \"package.json\": JSON.stringify(manifest),\n };\n for (const file of trackedFiles) {\n const name = path.posix.basename(file);\n if (\n file !== \"package.json\" &&\n (name === \"package.json\" ||\n (pnpmMembership && name === \"pnpm-workspace.yaml\")) &&\n !file.split(\"/\").includes(\"node_modules\")\n )\n files[file] = readFileSync(path.join(root, file), \"utf8\");\n }\n const result = discoverConsumerManifests(files);\n discovered.set(pnpmMembership, result);\n return result;\n };\n const filteredCommands: (ReturnType<\n typeof lintInventoryCommands\n >[\"commands\"][number] & { cwd: string })[] = [];\n const activeBuilds = new Set<string>();\n const workspaceLifecycle = (directory: string): ScriptLifecycleContext => {\n const nestedLifecycle = { ...lifecycle };\n for (const [key, name] of [\n [\"npmrc\", \".npmrc\"],\n [\"pnpmWorkspace\", \"pnpm-workspace.yaml\"],\n [\"yarnrc\", \".yarnrc.yml\"],\n ] as const) {\n let ancestor = directory;\n while (ancestor !== \".\") {\n if (\n lifecycleFile(root, path.posix.join(ancestor, name), trackedFiles)\n .type !== \"absent\"\n ) {\n nestedLifecycle[key] = { type: \"unknown\" };\n break;\n }\n ancestor = path.posix.dirname(ancestor);\n }\n }\n return nestedLifecycle;\n };\n const lifecycle: ScriptLifecycleContext = {\n packageManager: record(manifest) ? manifest[\"packageManager\"] : undefined,\n npmrc: lifecycleFile(root, \".npmrc\", trackedFiles),\n pnpmWorkspace: lifecycleFile(root, \"pnpm-workspace.yaml\", trackedFiles),\n yarnrc: lifecycleFile(root, \".yarnrc.yml\", trackedFiles),\n assertFilteredBunBuild: (selector) => {\n const selected = [...workspaceMembers(false).entries()].filter(\n ([, pkg]) => pkg[\"name\"] === selector,\n );\n if (selected.length !== 1)\n throw new Error(\n \"Filtered Bun build requires one declared workspace package\",\n );\n const member = selected.at(0);\n if (member === undefined) throw new Error(\"Missing selected workspace\");\n const [directory, pkg] = member;\n const scripts = pkg[\"scripts\"];\n if (!record(scripts) || typeof scripts[\"build\"] !== \"string\")\n throw new Error(\"Filtered Bun build requires a literal build script\");\n if (\n [\"prebuild\", \"postbuild\"].some(\n (name) => scripts[name] !== undefined && scripts[name] !== \"\",\n )\n )\n throw new Error(\n \"Filtered Bun build lifecycle hooks are unsupported for lint inventory; invoke lint scopes explicitly\",\n );\n if (activeBuilds.has(directory))\n throw new Error(\"Cyclic filtered Bun build delegation\");\n activeBuilds.add(directory);\n try {\n const nested = lintInventoryCommands(pkg, true, {\n ...workspaceLifecycle(directory),\n entryScript: \"build\",\n });\n if (nested.workspaceTask)\n throw new Error(\n \"Nested workspace lint delegation is unsupported in filtered builds\",\n );\n if (nested.errors.length > 0)\n throw new Error(\n `${directory}/package.json: ${nested.errors.join(\"; \")}`,\n );\n for (const command of nested.commands)\n filteredCommands.push({\n cwd: path.join(root, directory),\n ...command,\n });\n } finally {\n activeBuilds.delete(directory);\n }\n },\n };\n const inventory = lintInventoryCommands(manifest, false, lifecycle);\n if (!inventory.enabled) return [];\n const diagnostics: ReturnType<typeof checkProjectOwnership> = [];\n const addConfiguration = (file: string, message: string) =>\n diagnostics.push({ rule: nodeProjectRule, path: file, line: 1, message });\n for (const error of inventory.errors) addConfiguration(\"package.json\", error);\n if (inventory.errors.length !== 0) return diagnostics;\n try {\n const require = createRequire(path.join(root, \"package.json\"));\n const oxlint = path.join(\n path.dirname(require.resolve(\"oxlint/package.json\")),\n \"bin/oxlint\",\n );\n const commands = inventory.commands.map((command) => ({\n cwd: root,\n ...command,\n }));\n if (inventory.workspaceTask) {\n for (const [directory, workspace] of workspaceMembers(\n managerUsesPnpmWorkspace,\n )) {\n if (directory === \".\") continue;\n const file = `${directory}/package.json`;\n if (\n !record(workspace[\"scripts\"]) ||\n workspace[\"scripts\"][\"lint\"] === undefined\n )\n continue;\n const nestedLifecycle = workspaceLifecycle(directory);\n const nested = lintInventoryCommands(workspace, true, nestedLifecycle);\n if (nested.workspaceTask)\n throw new Error(\n `nested workspace lint delegation is unsupported: ${file}`,\n );\n if (nested.errors.length > 0)\n throw new Error(`${file}: ${nested.errors.join(\"; \")}`);\n for (const command of nested.commands)\n commands.push({ cwd: path.join(root, directory), ...command });\n }\n if (commands.length === 0 && filteredCommands.length === 0)\n throw new Error(\"workspace lint task has no declared oxlint commands\");\n }\n commands.push(...filteredCommands);\n // Filtered builds only count once their expanded bodies invoke oxlint.\n if (commands.length === 0)\n throw new Error(\n \"root lint scripts contain no supported oxlint invocation\",\n );\n const lintedFiles = commands.flatMap(({ cwd, args, runtime }) =>\n readCommand({\n root: cwd,\n executable: oxlint,\n args: [...args, \"--debug\", \"files\", \"--threads\", \"1\"],\n runtime,\n })\n .split(/\\r?\\n/)\n .filter((file) => file !== \"\")\n .map((file) => relativePath(root, path.resolve(cwd, file))),\n );\n const nearestProject = (start: string) => {\n let directory = start;\n while (true) {\n const config = path.posix.join(directory, \"tsconfig.json\");\n if (trackedFiles.has(config)) return config;\n if (directory === \".\") return undefined;\n directory = path.posix.dirname(directory);\n }\n };\n const groups = new Map<string, string[]>();\n for (const file of new Set(lintedFiles)) {\n if (!trackedFiles.has(file) || scriptSourceKind(file) === undefined)\n continue;\n const config = nearestProject(path.posix.dirname(file));\n if (config === undefined) continue;\n const group = groups.get(config);\n if (group === undefined) groups.set(config, [file]);\n else group.push(file);\n }\n type Project = { files: Set<string>; references: string[] };\n const projects = new Map<string, Project>();\n const readProject = (config: string): Project => {\n const cached = projects.get(config);\n if (cached !== undefined) return cached;\n const result: Project = { files: new Set(), references: [] };\n try {\n const project = readProjectConfig(root, config);\n for (const reference of project.references) {\n const target = relativePath(root, reference);\n const referencedConfig = target.endsWith(\".json\")\n ? target\n : path.posix.join(target, \"tsconfig.json\");\n if (!trackedFiles.has(referencedConfig))\n throw new Error(\n `project reference is not tracked: ${referencedConfig}`,\n );\n result.references.push(referencedConfig);\n }\n for (const file of project.files) {\n if (\n scriptSourceKind(file) === \"javascript\" &&\n !project.allowJs &&\n !project.checkJs\n )\n continue;\n result.files.add(relativePath(root, file));\n }\n } catch (error) {\n result.files.clear();\n result.references.length = 0;\n addConfiguration(\n config,\n error instanceof Error ? error.message : String(error),\n );\n }\n projects.set(config, result);\n return result;\n };\n const projectFiles = new Set<string>();\n for (const [nearest, sources] of groups) {\n const remaining = new Set(sources);\n const visited = new Set<string>();\n let ancestor: string | undefined = nearest;\n while (ancestor !== undefined && remaining.size > 0) {\n const pending = [ancestor];\n let config = pending.pop();\n while (config !== undefined && remaining.size > 0) {\n if (!visited.has(config)) {\n visited.add(config);\n const project = readProject(config);\n for (const source of remaining) {\n if (!project.files.has(source)) continue;\n projectFiles.add(source);\n remaining.delete(source);\n }\n pending.push(...project.references);\n }\n config = pending.pop();\n }\n const directory = path.posix.dirname(ancestor);\n ancestor =\n directory === \".\"\n ? undefined\n : nearestProject(path.posix.dirname(directory));\n }\n }\n diagnostics.push(\n ...checkProjectOwnership({ trackedFiles, lintedFiles, projectFiles }),\n );\n } catch (error) {\n addConfiguration(\n \"package.json\",\n error instanceof Error ? error.message : String(error),\n );\n }\n return diagnostics;\n};\n","import { parseDocument } from \"yaml\";\n\nimport { type ExpiryScope, overdueVerdict } from \"./dated-entry-scope\";\nimport { canonicalDockerRuntime, rustImageVersion } from \"./toolchain-images\";\nimport { githubAutomationFileKind, isShellScript } from \"./toolchain-inputs\";\nimport { decodeShellWord, shellCommandSegments } from \"./toolchain-packages\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport type RustException = {\n pin: string;\n reason: string;\n tracking: string;\n expires: string;\n};\n\n/**\n * Exceptions authorize one immutable release, never a channel or an entire\n * rule. Expiry is scoped separately by checkRustExceptionExpiry.\n */\nexport const parseRustExceptions = (input: unknown): RustException[] => {\n if (input === undefined) return [];\n if (!Array.isArray(input)) throw new Error(\"rustExceptions must be an array\");\n const pins = new Set<string>();\n return input.map((entry: unknown) => {\n if (\n !record(entry) ||\n Object.keys(entry).length !== 4 ||\n Object.keys(entry).some(\n (key) => ![\"pin\", \"reason\", \"tracking\", \"expires\"].includes(key),\n ) ||\n typeof entry[\"pin\"] !== \"string\" ||\n !/^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/.test(entry[\"pin\"]) ||\n typeof entry[\"reason\"] !== \"string\" ||\n entry[\"reason\"].trim() === \"\" ||\n typeof entry[\"tracking\"] !== \"string\" ||\n !/^https:\\/\\/github\\.com\\/[^/\\s]+\\/[^/\\s]+\\/issues\\/[1-9]\\d*$/.test(\n entry[\"tracking\"],\n ) ||\n typeof entry[\"expires\"] !== \"string\" ||\n !/^\\d{4}-\\d{2}-\\d{2}$/.test(entry[\"expires\"]) ||\n !Number.isFinite(Date.parse(entry[\"expires\"])) ||\n new Date(entry[\"expires\"]).toISOString().slice(0, 10) !==\n entry[\"expires\"] ||\n pins.has(entry[\"pin\"])\n )\n throw new Error(\n \"each Rust exception requires a unique exact stable pin, reason, GitHub issue and valid expiry date\",\n );\n pins.add(entry[\"pin\"]);\n return {\n pin: entry[\"pin\"],\n reason: entry[\"reason\"],\n tracking: entry[\"tracking\"],\n expires: entry[\"expires\"],\n };\n });\n};\n\n/** Whether the base stll-toolchain.json declares this exception with the same expiry. */\nconst declaresException = (\n baseText: string,\n { pin, expires }: RustException,\n) => {\n const base: unknown = JSON.parse(baseText);\n const exceptions = record(base) ? base[\"rustExceptions\"] : undefined;\n return (\n Array.isArray(exceptions) &&\n exceptions.some(\n (entry: unknown) =>\n record(entry) && entry[\"pin\"] === pin && entry[\"expires\"] === expires,\n )\n );\n};\n\ntype RustExceptionExpiryOptions = {\n exceptions: readonly RustException[];\n now?: Date | undefined;\n scope: ExpiryScope;\n};\n/** An exception expires on its date; the scope decides whether that fails this run. */\nexport const checkRustExceptionExpiry = ({\n exceptions,\n now = new Date(),\n scope,\n}: RustExceptionExpiryOptions) => {\n const today = now.toISOString().slice(0, 10);\n const errors: string[] = [];\n const warnings: string[] = [];\n for (const exception of exceptions) {\n if (exception.expires > today) continue;\n const overdue = `stll-toolchain.json Rust exception ${exception.pin} expired on ${exception.expires}`;\n const verdict = overdueVerdict(scope, \"stll-toolchain.json\", (base) =>\n declaresException(base, exception),\n );\n if (!verdict.fail)\n warnings.push(\n `${overdue}; remove it or move to the shared Rust pin (default-branch and scheduled runs fail, as do changes that add or edit it)`,\n );\n else if (verdict.unavailable === undefined)\n errors.push(`${overdue}; remove it or move to the shared Rust pin`);\n else\n errors.push(\n `${overdue}; cannot tell whether this change adds it: ${verdict.unavailable}`,\n );\n }\n return { errors, warnings };\n};\n\ntype RustReferenceOptions = {\n file: string;\n rust: string;\n exceptions: readonly RustException[];\n} & (\n | { type: \"file\"; text: string }\n | { type: \"command\"; source: string; line: number }\n | {\n type: \"environment\";\n assignments: readonly { key: string; value: string }[];\n line: number;\n }\n);\n\n/** Only executable fields are inspected: unrelated action inputs are not Rust selectors. */\nexport const checkRustReferences = (options: RustReferenceOptions) => {\n const { file, rust, exceptions } = options;\n const text = options.type === \"file\" ? options.text : \"\";\n const diagnostics: {\n rule: \"rust-version\";\n path: string;\n line: number;\n message: string;\n }[] = [];\n const select = (value: unknown, label: string, line = 1) => {\n if (value === rust || exceptions.some(({ pin }) => pin === value)) return;\n diagnostics.push({\n rule: \"rust-version\",\n path: file,\n line,\n message: `${label} must be Rust ${rust}, found ${String(value)}`,\n });\n };\n const shell = (source: string, firstLine = 1) => {\n const commands = shellCommandSegments(source).map((words) =>\n words.map((word) => ({ value: decodeShellWord(word), line: firstLine })),\n );\n for (const command of commands) {\n let position = 0;\n const prefixes = new Set([\n \"if\",\n \"then\",\n \"do\",\n \"elif\",\n \"!\",\n \"env\",\n \"sudo\",\n \"command\",\n \"exec\",\n \"time\",\n \"export\",\n \"readonly\",\n \"/usr/bin/env\",\n \"/bin/env\",\n ]);\n while (position < command.length) {\n const value = command.at(position)?.value;\n if (value?.startsWith(\"RUSTUP_TOOLCHAIN=\"))\n select(\n value.slice(\"RUSTUP_TOOLCHAIN=\".length),\n \"RUSTUP_TOOLCHAIN\",\n firstLine,\n );\n if (value === \"-u\" || value === \"--unset\") {\n position += 2;\n continue;\n }\n if (\n value?.startsWith(\"--unset=\") ||\n value === \"-i\" ||\n value === \"--ignore-environment\"\n ) {\n position++;\n continue;\n }\n if (\n value !== undefined &&\n (prefixes.has(value) || /^[A-Za-z_][A-Za-z_\\d]*=/.test(value))\n )\n position++;\n else break;\n }\n const executable = command.at(position)?.value;\n const arguments_ = command.slice(position + 1);\n if (executable === \"cargo\" && arguments_.at(0)?.value.startsWith(\"+\")) {\n const selector = arguments_.at(0);\n select(selector?.value.slice(1), \"cargo toolchain\", selector?.line);\n }\n if (executable !== \"rustup\") continue;\n let subcommandPosition = 0;\n while (subcommandPosition < arguments_.length) {\n const token = arguments_.at(subcommandPosition);\n if (token === undefined) break;\n if (token.value === \"--\") {\n subcommandPosition++;\n break;\n }\n if (token.value.startsWith(\"+\")) {\n select(token.value.slice(1), \"rustup toolchain\", token.line);\n } else if (!token.value.startsWith(\"-\")) break;\n subcommandPosition++;\n }\n const invocation = arguments_.slice(subcommandPosition);\n const subcommand = invocation.at(0)?.value;\n if (subcommand === \"target\" || subcommand === \"component\") {\n // These commands name targets/components positionally; only this option selects Rust.\n for (let index = 1; index < invocation.length; index++) {\n const token = invocation.at(index);\n if (token?.value === \"--toolchain\") {\n select(\n invocation.at(++index)?.value,\n \"rustup --toolchain\",\n token.line,\n );\n } else if (token?.value.startsWith(\"--toolchain=\")) {\n select(\n token.value.slice(\"--toolchain=\".length),\n \"rustup --toolchain\",\n token.line,\n );\n }\n }\n continue;\n }\n let selectors: typeof invocation;\n let requiresSelector = true;\n let firstSelectorOnly = false;\n if (\n subcommand === \"default\" ||\n subcommand === \"install\" ||\n subcommand === \"add\" ||\n subcommand === \"update\"\n ) {\n selectors = invocation.slice(1);\n requiresSelector = subcommand !== \"update\";\n } else if (\n subcommand === \"toolchain\" &&\n [\"install\", \"add\", \"update\"].includes(invocation.at(1)?.value ?? \"\")\n ) {\n selectors = invocation.slice(2);\n requiresSelector = invocation.at(1)?.value !== \"update\";\n } else if (subcommand === \"run\") {\n selectors = invocation.slice(1);\n firstSelectorOnly = true;\n } else if (\n subcommand === \"override\" &&\n invocation.at(1)?.value === \"set\"\n ) {\n selectors = invocation.slice(2);\n firstSelectorOnly = true;\n } else continue;\n let selected = 0;\n const optionArguments = new Set([\n \"--path\",\n \"--profile\",\n \"--component\",\n \"-c\",\n \"--target\",\n \"-t\",\n ]);\n for (let index = 0; index < selectors.length; index++) {\n const token = selectors.at(index);\n if (token === undefined) continue;\n if (optionArguments.has(token.value)) {\n index++;\n continue;\n }\n if (token.value.startsWith(\"-\")) continue;\n selected++;\n select(token.value, \"rustup toolchain\", token.line);\n if (firstSelectorOnly) break;\n }\n if (selected === 0 && requiresSelector)\n select(undefined, \"rustup toolchain\", firstLine);\n }\n };\n if (options.type === \"environment\") {\n for (const { key, value } of options.assignments) {\n if (key === \"RUSTUP_TOOLCHAIN\") select(value, key, options.line);\n }\n return diagnostics;\n }\n if (options.type === \"command\") {\n shell(options.source, options.line);\n return diagnostics;\n }\n const lineOf = (token: string) => {\n const index = text.split(/\\r?\\n/).findIndex((line) => line.includes(token));\n return index < 0 ? 1 : index + 1;\n };\n if (isShellScript(file, text)) shell(text);\n if (/(?:^|\\/)package\\.json$/.test(file)) {\n try {\n const object: unknown = JSON.parse(text);\n if (record(object) && record(object[\"scripts\"]))\n for (const [name, script] of Object.entries(object[\"scripts\"]))\n if (typeof script === \"string\") shell(script, lineOf(`\"${name}\"`));\n } catch {\n /* The package owner reports invalid JSON. */\n }\n }\n if (/(?:^|\\/)ci-service-images\\.json$/.test(file)) {\n const images = (value: unknown) => {\n if (\n typeof value === \"string\" &&\n /^rust(?=:|@|$)/.test(canonicalDockerRuntime(value))\n ) {\n const tag = canonicalDockerRuntime(value)\n .replace(/^rust:?/, \"\")\n .split(\"@\")\n .at(0);\n const version = tag === undefined ? undefined : rustImageVersion(tag);\n select(version, \"Rust service image\", lineOf(value));\n } else if (Array.isArray(value)) value.forEach(images);\n else if (record(value))\n for (const [key, entry] of Object.entries(value)) {\n if (key !== \"name\") images(entry);\n }\n };\n try {\n images(JSON.parse(text));\n } catch {\n diagnostics.push({\n rule: \"rust-version\",\n path: file,\n line: 1,\n message: \"invalid service image JSON\",\n });\n }\n }\n if (githubAutomationFileKind(file) === undefined) return diagnostics;\n const document = parseDocument(text);\n if (document.errors.length > 0) return diagnostics;\n try {\n const visit = (value: unknown) => {\n if (Array.isArray(value)) {\n value.forEach(visit);\n return;\n }\n if (!record(value)) return;\n if (\n record(value[\"env\"]) &&\n value[\"env\"][\"RUSTUP_TOOLCHAIN\"] !== undefined\n )\n select(\n value[\"env\"][\"RUSTUP_TOOLCHAIN\"],\n \"RUSTUP_TOOLCHAIN\",\n lineOf(\"RUSTUP_TOOLCHAIN\"),\n );\n if (typeof value[\"run\"] === \"string\") shell(value[\"run\"], lineOf(\"run:\"));\n const uses = value[\"uses\"];\n if (typeof uses === \"string\") {\n const action = uses.split(\"@\").at(0)?.toLowerCase();\n const inputs = record(value[\"with\"]) ? value[\"with\"] : {};\n if (\n action === \"dtolnay/rust-toolchain\" ||\n action === \"actions-rust-lang/setup-rust-toolchain\"\n ) {\n const entries = Object.entries(inputs).filter(\n ([key]) => key.toLowerCase() === \"toolchain\",\n );\n if (entries.length !== 1)\n select(\n undefined,\n `${action} requires an explicit exact toolchain input`,\n lineOf(uses),\n );\n else {\n const selected = entries.at(0)?.at(1);\n // setup-rust-toolchain installs every comma-separated release.\n const selectors =\n action === \"actions-rust-lang/setup-rust-toolchain\" &&\n typeof selected === \"string\"\n ? selected.split(\",\").map((pin) => pin.trim())\n : [selected];\n for (const selector of selectors)\n select(selector, `${action} toolchain`, lineOf(\"toolchain:\"));\n }\n } else if (\n /(?:^|\\/)\\.github\\/workflows\\/[^@]+\\.ya?ml(?:@|$)/.test(uses)\n ) {\n for (const [key, selected] of Object.entries(inputs))\n if ([\"toolchain\", \"rust-toolchain\"].includes(key.toLowerCase()))\n select(selected, `reusable workflow ${key}`, lineOf(`${key}:`));\n }\n }\n for (const [key, child] of Object.entries(value)) {\n if (key === \"workflow_call\" && record(child) && record(child[\"inputs\"]))\n for (const [input, declaration] of Object.entries(child[\"inputs\"]))\n if (\n [\"toolchain\", \"rust-toolchain\"].includes(input) &&\n record(declaration) &&\n declaration[\"default\"] !== undefined\n )\n select(\n declaration[\"default\"],\n `reusable workflow default ${input}`,\n lineOf(\"default:\"),\n );\n visit(child);\n }\n };\n visit(document.toJS({ maxAliasCount: 100 }));\n } catch {\n /* The workflow owner reports alias resolution failures. */\n }\n return diagnostics;\n};\n","import {\n decodeShellWord,\n shellCommandSegments,\n shellTokens,\n} from \"./toolchain-packages\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n// Split only boolean operators outside parentheses and quoted string literals.\nconst booleanParts = (source: string, operator: \"&&\" | \"||\") => {\n const parts: string[] = [];\n let depth = 0;\n let quoted = false;\n let start = 0;\n for (let index = 0; index < source.length; index++) {\n const character = source[index];\n if (character === \"'\") {\n if (quoted && source[index + 1] === \"'\") index++;\n else quoted = !quoted;\n }\n if (quoted) continue;\n if (character === \"(\") depth++;\n if (character === \")\") depth--;\n if (depth === 0 && source.slice(index, index + 2) === operator) {\n parts.push(source.slice(start, index));\n start = index + 2;\n index++;\n }\n }\n parts.push(source.slice(start));\n return parts;\n};\n\nconst withoutOuterParentheses = (source: string): string => {\n if (!source.startsWith(\"(\") || !source.endsWith(\")\")) return source;\n let depth = 0;\n let quoted = false;\n for (let index = 0; index < source.length; index++) {\n const character = source[index];\n if (character === \"'\") {\n if (quoted && source[index + 1] === \"'\") index++;\n else quoted = !quoted;\n }\n if (quoted) continue;\n if (character === \"(\") depth++;\n if (character === \")\") depth--;\n if (depth === 0 && index !== source.length - 1) return source;\n }\n return withoutOuterParentheses(source.slice(1, -1).trim());\n};\n\n// A sufficient static proof, not an evaluator for arbitrary Actions expressions.\n// Unknown predicates can never authorize repository execution before trust.\ntype TrustConditionOptions = {\n condition: unknown;\n event: string;\n allowTrust?: boolean;\n};\nconst excludesUntrusted = ({\n condition,\n event,\n allowTrust = true,\n}: TrustConditionOptions): boolean => {\n if (condition === false) return true;\n if (typeof condition !== \"string\") return false;\n const source = withoutOuterParentheses(\n condition\n .trim()\n .replace(/^\\$\\{\\{([\\s\\S]*)\\}\\}$/u, \"$1\")\n .trim(),\n );\n const alternatives = booleanParts(source, \"||\");\n if (alternatives.length > 1)\n return alternatives.every((part) =>\n excludesUntrusted({ condition: part, event, allowTrust }),\n );\n const conjuncts = booleanParts(source, \"&&\");\n if (conjuncts.length > 1)\n return conjuncts.some((part) =>\n excludesUntrusted({ condition: part, event, allowTrust }),\n );\n const trustComparison =\n /^needs\\.trust-check\\.outputs\\.trusted\\s*==\\s*'([^']*)'$/u.exec(source);\n if (allowTrust && trustComparison?.at(1)?.toLowerCase() === \"true\")\n return true;\n if (source === \"false\") return true;\n const comparison = /^github\\.event_name\\s*(==|!=)\\s*'([^']+)'$/u.exec(source);\n if (comparison === null) return false;\n // Actions compares string values without regard to case.\n const equal = comparison.at(2)?.toLowerCase() === event.toLowerCase();\n return comparison.at(1) === \"==\" ? !equal : equal;\n};\n\n// This is a deliberately small proof language for pre-trust metadata commands.\n// Unknown commands, options, shell constructs, and action inputs require trust.\nconst staticData = (word: string) =>\n !/[`$\\\\]/u.test(word) && !/[<>]/u.test(word);\nconst metadataScript = (command: string) => {\n const interpolation = /\\$\\{\\{([\\s\\S]*?)\\}\\}/gu;\n // Actions interpolates before the shell sees quotes or comments. Validate\n // each expression before replacement, without state mutated in a callback.\n for (const match of command.matchAll(interpolation)) {\n const expression = match.at(1);\n if (\n expression === undefined ||\n ![\n \"github.sha\",\n \"github.run_id\",\n \"github.run_attempt\",\n \"github.repository\",\n ].includes(expression.trim())\n )\n return undefined;\n }\n const source = command.replace(interpolation, \"stll-metadata\");\n return source.includes(\"${{\") ? undefined : source;\n};\nconst metadataWord = (raw: string) => {\n if (/^'[^']*'$/u.test(raw)) return true;\n if ([\"[\", \"]\", \"[[\", \"]]\"].includes(raw)) return true;\n let quote: \"'\" | '\"' | undefined;\n for (const character of raw) {\n if (quote === undefined && \"*?~[{$\".includes(character)) return false;\n if (character === quote) quote = undefined;\n else if (quote === undefined && (character === \"'\" || character === '\"'))\n quote = character;\n }\n if (quote !== undefined) return false;\n const withoutKnownExpressions = raw.replace(\n /\\$\\{[A-Za-z_][A-Za-z_0-9]*\\}|\\$[A-Za-z_][A-Za-z_0-9]*/gu,\n \"value\",\n );\n return !/[`$\\\\]/u.test(withoutKnownExpressions);\n};\nconst safeComparison = (words: readonly string[]) => {\n const first = words.at(0);\n if (![\"test\", \"[\", \"[[\"].includes(first ?? \"\")) return false;\n let end: string | undefined;\n if (first === \"[[\") end = \"]]\";\n else if (first === \"[\") end = \"]\";\n if (end !== undefined && words.at(-1) !== end) return false;\n const operands = words.slice(1, end === undefined ? undefined : -1);\n if (operands.length === 1) return true;\n if (operands.length === 2) return [\"-n\", \"-z\"].includes(operands.at(0) ?? \"\");\n return (\n operands.length === 3 && [\"=\", \"==\", \"!=\"].includes(operands.at(1) ?? \"\")\n );\n};\n\nconst objectReference = (value: string) =>\n /^(?:HEAD|[a-f0-9]{7,64}|(?:refs\\/(?:heads|tags|remotes)\\/|origin\\/)[A-Za-z0-9][A-Za-z0-9._/-]*)(?:[~^][0-9]*)*$/u.test(\n value,\n ) &&\n !value.includes(\"..\") &&\n !value.includes(\"//\") &&\n !value.endsWith(\"/\");\nexport const workflowTrustBootstrapCatalog = {\n commands: {\n test: \"comparison\",\n \"[\": \"comparison\",\n \"[[\": \"comparison\",\n true: \"status\",\n false: \"status\",\n exit: \"exit\",\n echo: \"output\",\n printf: \"format\",\n git: \"git\",\n gh: \"github\",\n },\n git: {\n \"rev-parse\": { flags: [\"--short\", \"--verify\"], references: 1 },\n \"merge-base\": { flags: [\"--all\", \"--is-ancestor\"], references: 2 },\n },\n github: [\"api\"],\n actions: {\n \"actions/checkout\": [\n \"fetch-depth\",\n \"persist-credentials\",\n \"ref\",\n \"repository\",\n \"submodules\",\n ],\n \"oven-sh/setup-bun\": [\"bun-version\", \"no-cache\"],\n },\n} as const;\n\n// History and diff commands may dispatch configured helpers. Only bounded\n// revision queries are proved to remain within repository object metadata.\nconst safeGit = (words: readonly string[]) => {\n const selected = Object.entries(workflowTrustBootstrapCatalog.git).find(\n ([name]) => name === words.at(1),\n );\n if (selected === undefined) return false;\n const [, policy] = selected;\n const references: string[] = [];\n for (const argument of words.slice(2)) {\n if (!staticData(argument)) return false;\n if (!argument.startsWith(\"-\")) {\n references.push(argument);\n continue;\n }\n if (!policy.flags.some((flag) => flag === argument)) return false;\n }\n return (\n references.length === policy.references && references.every(objectReference)\n );\n};\n\nconst safeGh = (words: readonly string[]) => {\n if (!words.every(staticData)) return false;\n if (\n workflowTrustBootstrapCatalog.github.some((name) => name === words.at(1))\n ) {\n const arguments_ = words.slice(2);\n if (\n [\"--method\", \"-X\"].includes(arguments_.at(0) ?? \"\") &&\n arguments_.at(1) === \"GET\"\n )\n arguments_.splice(0, 2);\n if (!arguments_.at(0) || arguments_.at(0)?.startsWith(\"-\")) return false;\n for (let index = 1; index < arguments_.length; index++) {\n const argument = arguments_.at(index);\n if (\n (argument === \"--method\" || argument === \"-X\") &&\n arguments_.at(index + 1) === \"GET\"\n )\n index++;\n else if (\n [\"--jq\", \"-q\"].includes(argument ?? \"\") &&\n /^\\.[A-Za-z0-9_.[\\]\" -]*$/u.test(arguments_.at(index + 1) ?? \"\")\n )\n index++;\n else return false;\n }\n return /^\\/?repos\\/[A-Za-z0-9_./-]+$/u.test(arguments_.at(0) ?? \"\");\n }\n return false;\n};\n\nconst safeCommand = (raw: readonly string[]): boolean => {\n if (raw.length === 0) return true;\n if (!raw.every(metadataWord)) return false;\n const words = raw.map(decodeShellWord);\n const name = words.at(0);\n // A quoted/dynamic executable is never proved to resolve to a known builtin.\n if (raw.at(0) !== name) return false;\n if (name === \"if\" || name === \"elif\") return safeComparison(words.slice(1));\n if ([\"then\", \"else\"].includes(name ?? \"\")) return safeCommand(raw.slice(1));\n if (name === \"fi\") return words.length === 1;\n const selected = Object.entries(workflowTrustBootstrapCatalog.commands).find(\n ([command]) => command === name,\n );\n const kind = selected?.[1];\n if (kind === \"comparison\") return safeComparison(words);\n if (kind === \"status\") return words.length === 1;\n if (kind === \"exit\")\n return (\n words.length === 1 ||\n (words.length === 2 && /^[0-9]+$/u.test(words.at(1) ?? \"\"))\n );\n if (kind === \"output\") return true;\n if (kind === \"format\") {\n const format = words.at(1);\n // Data variables may be arguments, never a format or assignment target.\n return (\n format !== undefined &&\n !format.startsWith(\"-\") &&\n /^(?:[^%$`]|%%|%s)*$/u.test(format)\n );\n }\n if (kind === \"git\") return safeGit(words);\n if (kind === \"github\") return safeGh(words);\n return false;\n};\n\nconst invokesRepositoryCode = (command: string) => {\n const source = metadataScript(command);\n if (source === undefined) return true;\n // The shared command scanner intentionally omits redirects. Prove their\n // destinations separately; metadata may only write Actions outputs or discard.\n const tokens = shellTokens(source);\n for (const [index, token] of tokens.entries()) {\n if (token.kind !== \"redirect\") continue;\n const target = tokens.at(index + 1);\n if (\n ![\">\", \">>\"].includes(token.value) ||\n target?.kind !== \"word\" ||\n !['\"$GITHUB_OUTPUT\"', '\"${GITHUB_OUTPUT}\"', \"/dev/null\"].includes(\n target.value,\n )\n )\n return true;\n }\n const branches: (\"condition\" | \"then\" | \"else\")[] = [];\n for (let words of shellCommandSegments(source, \"tokens\")) {\n if (!safeCommand(words)) return true;\n while ([\"then\", \"else\"].includes(words.at(0) ?? \"\")) {\n const keyword = words.at(0);\n const previous = branches.pop();\n if (keyword === \"then\" && previous === \"condition\") branches.push(\"then\");\n else if (keyword === \"else\" && previous === \"then\") branches.push(\"else\");\n else return true;\n words = words.slice(1);\n }\n const keyword = words.at(0);\n if (keyword === \"if\") branches.push(\"condition\");\n if (keyword === \"elif\") {\n if (branches.pop() !== \"then\") return true;\n branches.push(\"condition\");\n }\n if (keyword === \"fi\") {\n const previous = branches.pop();\n if (previous !== \"then\" && previous !== \"else\") return true;\n }\n }\n return branches.length !== 0;\n};\n\n// These bootstrap actions may run before the repository's trust decision.\n// Input keys are explicit: accepting a repository script input would cross it.\nconst safeAction = (uses: unknown, inputs: unknown) => {\n if (\n typeof uses !== \"string\" ||\n !/^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_./-]+@[a-f0-9]{40}$/u.test(uses)\n )\n return false;\n const repository = uses.split(\"@\").at(0);\n const approved = Object.entries(workflowTrustBootstrapCatalog.actions).find(\n ([name]) => name === repository,\n );\n if (approved === undefined) return false;\n if (inputs === undefined) return repository === \"actions/checkout\";\n if (!record(inputs)) return false;\n if (repository !== \"actions/checkout\") {\n const version = inputs[\"bun-version\"];\n if (\n typeof version !== \"string\" ||\n !/^v?[0-9]+(?:\\.(?:[0-9]+|x)){0,2}$/u.test(version)\n )\n return false;\n }\n const [, allowedInputs] = approved;\n return Object.entries(inputs).every(\n ([name, value]) =>\n allowedInputs.some((allowed) => allowed === name) &&\n [\"string\", \"boolean\", \"number\"].includes(typeof value) &&\n (name !== \"submodules\" || value === false || value === \"false\"),\n );\n};\n\nconst safeShell = (shell: unknown) =>\n shell === undefined || shell === \"bash\" || shell === \"sh\";\nconst safeEnvironment = (value: unknown) =>\n value === undefined ||\n (record(value) &&\n Object.keys(value).every((name) =>\n [\n \"HEAD_REPO\",\n \"BASE_REPO\",\n \"HAS_RUN_CI_LABEL\",\n \"PR_TITLE\",\n \"HEAD_REF\",\n \"ISSUE_BODY\",\n \"COMMENT_BODY\",\n \"GH_TOKEN\",\n \"GITHUB_TOKEN\",\n \"HAWK_RUST_TOOLCHAIN\",\n \"HAWK_VERSION\",\n \"HAWK_X86_64_UNKNOWN_LINUX_GNU_SHA256\",\n ].includes(name),\n ));\nconst configuredShell = (value: unknown) =>\n record(value) && record(value[\"run\"]) ? value[\"run\"][\"shell\"] : undefined;\n\nexport const workflowTrustRules = [\"workflow-trust\"] as const;\n\ntype WorkflowTrustFinding = {\n job: string;\n message: string;\n} & (\n | { type: \"job\"; property: \"uses\" | \"container\" | \"services\" }\n | { type: \"step\"; step: number }\n);\n\nconst workflowEvents = (triggers: unknown): unknown[] => {\n if (typeof triggers === \"string\") return [triggers];\n if (Array.isArray(triggers)) return triggers;\n if (record(triggers)) return Object.keys(triggers);\n return [];\n};\n\n/** Enforce a workflow's declared trust boundary before repository dependency execution. */\nexport const checkWorkflowTrust = (workflow: unknown) => {\n const findings: WorkflowTrustFinding[] = [];\n if (!record(workflow) || !record(workflow[\"jobs\"])) return findings;\n const jobs = workflow[\"jobs\"];\n if (!record(jobs[\"trust-check\"])) return findings;\n const triggers = workflow[\"on\"];\n const events = workflowEvents(triggers);\n const pullRequests = events.filter(\n (event): event is string =>\n event === \"pull_request\" || event === \"pull_request_target\",\n );\n if (pullRequests.length === 0) return findings;\n for (const [name, job] of Object.entries(jobs)) {\n if (!record(job)) continue;\n const needs = job[\"needs\"];\n const ordered =\n name !== \"trust-check\" &&\n (needs === \"trust-check\" ||\n (Array.isArray(needs) && needs.includes(\"trust-check\")));\n const permitsExecution = (stepCondition: unknown) => {\n const guarded = pullRequests.every(\n (event) =>\n excludesUntrusted({ condition: job[\"if\"], event }) ||\n excludesUntrusted({ condition: stepCondition, event }),\n );\n if (ordered && guarded) return true;\n // Non-PR-only execution needs no dependency on a PR-only trust decision.\n return pullRequests.every(\n (event) =>\n excludesUntrusted({\n condition: job[\"if\"],\n event,\n allowTrust: false,\n }) ||\n excludesUntrusted({\n condition: stepCondition,\n event,\n allowTrust: false,\n }),\n );\n };\n const message = `jobs.${name} repository commands require needs: trust-check and a condition requiring its trusted output on pull requests`;\n const jobUses = job[\"uses\"];\n if (jobUses !== undefined && !permitsExecution(undefined))\n findings.push({ type: \"job\", property: \"uses\", job: name, message });\n // Containers and services start before steps, so a step condition cannot\n // authorize them. No image approval catalog is implicit in a digest pin.\n if (!permitsExecution(undefined)) {\n if (job[\"container\"] !== undefined)\n findings.push({\n type: \"job\",\n property: \"container\",\n job: name,\n message,\n });\n const services = job[\"services\"];\n if (\n services !== undefined &&\n (!record(services) || Object.keys(services).length > 0)\n )\n findings.push({\n type: \"job\",\n property: \"services\",\n job: name,\n message,\n });\n }\n if (!Array.isArray(job[\"steps\"])) continue;\n for (const [index, step] of job[\"steps\"].entries()) {\n if (!record(step)) continue;\n const run = step[\"run\"];\n const uses = step[\"uses\"];\n const unsafeRun =\n typeof run === \"string\" &&\n (invokesRepositoryCode(run) ||\n !safeShell(\n step[\"shell\"] ??\n configuredShell(job[\"defaults\"]) ??\n configuredShell(workflow[\"defaults\"]),\n ) ||\n ![workflow[\"env\"], job[\"env\"], step[\"env\"]].every(safeEnvironment));\n const unsafeAction =\n uses !== undefined &&\n (!safeAction(uses, step[\"with\"]) ||\n ![workflow[\"env\"], job[\"env\"], step[\"env\"]].every(safeEnvironment));\n if (!unsafeRun && !unsafeAction) continue;\n // Unknown actions can read the caller's workspace before any later step.\n if (permitsExecution(unsafeAction ? undefined : step[\"if\"])) continue;\n findings.push({ type: \"step\", job: name, step: index, message });\n }\n }\n return findings;\n};\n","import path from \"node:path\";\nimport { parse as parseToml } from \"smol-toml\";\nimport {\n isAlias,\n isMap,\n isScalar,\n isSeq,\n LineCounter,\n parseAllDocuments,\n parseDocument,\n} from \"yaml\";\n\nimport {\n containerDocumentImages,\n isComposeDefinitionPath,\n isKubernetesDefinitionPath,\n} from \"./toolchain-container-inputs\";\nimport type { DynamicSelector } from \"./toolchain-dynamic-selectors\";\nimport {\n engineFloorSelectorMatches,\n type ResolvedEngineFloor,\n} from \"./toolchain-engine-floors\";\nimport { canonicalDockerRuntime, rustImageVersion } from \"./toolchain-images\";\nimport {\n githubAutomationFileKind,\n isDockerDefinitionPath,\n isMiseConfigPath,\n} from \"./toolchain-inputs\";\nimport { nodeSelectorMatches } from \"./toolchain-node\";\nimport { checkRustReferences, type RustException } from \"./toolchain-rust\";\nimport {\n checkWorkflowTrust,\n workflowTrustRules,\n} from \"./toolchain-workflow-trust\";\n\nexport const runtimeRules = [\n \"bun-pins\",\n \"node-version\",\n \"python-version\",\n \"rust-version\",\n \"runtime-manager\",\n \"runtime-docker\",\n \"runtime-workflow\",\n \"action-pins\",\n ...workflowTrustRules,\n] as const;\n\ntype RuntimeRule = (typeof runtimeRules)[number];\n\ntype RuntimePolicy = {\n node: string;\n python: string;\n rust: string;\n bun: string;\n packages: Record<string, string>;\n actions: Record<string, { sha: string; version: string }>;\n};\n\ntype RuntimeDiagnostic = {\n rule: RuntimeRule;\n path: string;\n line: number;\n message: string;\n};\n\nexport type RuntimeDelegation = {\n path: string;\n line: number;\n tool: \"node\" | \"python\" | \"bun\";\n selector: string;\n checkoutPath: string;\n ref: string;\n};\n\ntype CheckRuntimeFileOptions = {\n file: string;\n text: string;\n policy: RuntimePolicy;\n trackedFiles: ReadonlySet<string>;\n readFile: (file: string) => string | undefined;\n repository?: string | undefined;\n onDelegated?: ((report: RuntimeDelegation) => void) | undefined;\n dynamicSelectors?: readonly DynamicSelector[] | undefined;\n onDynamicSelector?: ((entry: DynamicSelector) => void) | undefined;\n rustExceptions?: readonly RustException[] | undefined;\n engineFloors?: readonly ResolvedEngineFloor[] | undefined;\n onEngineFloor?:\n | ((floor: ResolvedEngineFloor, status: \"matched\" | \"mismatch\") => void)\n | undefined;\n};\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\ntype DockerEnvironmentOptions = { source: string; escape: string };\n\n// ENV uses whitespace-delimited assignments, not shell operators or command substitution.\nconst dockerEnvironmentAssignments = ({\n source,\n escape,\n}: DockerEnvironmentOptions) => {\n const words: string[] = [];\n let word = \"\";\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < source.length; index++) {\n const character = source.at(index) ?? \"\";\n if (character === escape && quote !== \"'\") {\n word += character + (source.at(++index) ?? \"\");\n continue;\n }\n if (character === quote) quote = undefined;\n else if (quote === undefined && (character === \"'\" || character === '\"'))\n quote = character;\n else if (quote === undefined && /\\s/.test(character)) {\n if (word !== \"\") words.push(word);\n word = \"\";\n continue;\n }\n word += character;\n }\n if (quote !== undefined) return undefined;\n if (word !== \"\") words.push(word);\n const decode = (raw: string) => {\n let value = \"\";\n let quoted: \"'\" | '\"' | undefined;\n for (let index = 0; index < raw.length; index++) {\n const character = raw.at(index) ?? \"\";\n if (character === quoted) {\n quoted = undefined;\n continue;\n }\n if (quoted === undefined && (character === \"'\" || character === '\"')) {\n quoted = character;\n continue;\n }\n const next = raw.at(index + 1);\n if (\n character === escape &&\n quoted !== \"'\" &&\n next !== undefined &&\n (quoted === undefined ||\n next === '\"' ||\n next === \"$\" ||\n next === escape)\n ) {\n value += next;\n index++;\n } else value += character;\n }\n return value;\n };\n const first = words.at(0);\n if (first === undefined) return undefined;\n if (!first.includes(\"=\")) {\n const legacy = /^(\\S+)\\s+([\\s\\S]*)$/.exec(source);\n if (legacy === null) return undefined;\n return [{ key: decode(legacy[1] ?? \"\"), value: decode(legacy[2] ?? \"\") }];\n }\n const assignments: { key: string; value: string }[] = [];\n for (const raw of words) {\n const separator = raw.indexOf(\"=\");\n if (separator < 1) return undefined;\n assignments.push({\n key: decode(raw.slice(0, separator)),\n value: decode(raw.slice(separator + 1)),\n });\n }\n return assignments;\n};\n\nconst pythonSelectorMatches = (value: unknown, expected: string) =>\n value === expected ||\n (typeof value === \"string\" &&\n /^\\d+\\.\\d+$/.test(expected) &&\n value.startsWith(`${expected}.`) &&\n /^\\d+\\.\\d+\\.\\d+$/.test(value));\n\nconst compareRelease = (left: readonly number[], right: readonly number[]) => {\n for (let index = 0; index < Math.max(left.length, right.length); index++) {\n const difference = (left.at(index) ?? 0) - (right.at(index) ?? 0);\n if (difference !== 0) return Math.sign(difference);\n }\n return 0;\n};\n\n/** A minor policy covers every nonnegative patch in that release series. */\ntype PythonSeriesRequirementOptions = {\n current: readonly number[];\n operator: string;\n target: readonly number[];\n wildcard: boolean;\n};\nconst pythonSeriesRequirementMatches = ({\n current,\n operator,\n target,\n wildcard,\n}: PythonSeriesRequirementOptions) => {\n const prefixCovers = (prefix: readonly number[]) =>\n prefix.length <= 2 &&\n prefix.every((part, index) => current.at(index) === part);\n const prefixOverlaps =\n target.slice(0, 2).every((part, index) => current.at(index) === part) &&\n target.slice(3).every((part) => part === 0);\n if (wildcard) {\n if (operator === \"==\") return prefixCovers(target);\n if (operator === \"!=\") return !prefixOverlaps;\n return false;\n }\n const minimumComparison = compareRelease(current, target);\n const seriesComparison = compareRelease(\n current.slice(0, 2),\n target.slice(0, 2),\n );\n switch (operator) {\n case \"==\":\n return false;\n case \"!=\":\n return !(\n seriesComparison === 0 && target.slice(3).every((part) => part === 0)\n );\n case \">=\":\n return minimumComparison >= 0;\n case \">\":\n return minimumComparison > 0;\n case \"<=\":\n case \"<\":\n return seriesComparison < 0;\n case \"~=\":\n return (\n target.length >= 2 &&\n minimumComparison >= 0 &&\n prefixCovers(target.slice(0, -1))\n );\n default:\n return false;\n }\n};\n\n/** Evaluate final-release Python constraints against the complete selected version set. */\nconst pythonRequirementMatches = (requirement: unknown, version: string) => {\n if (typeof requirement !== \"string\" || requirement.trim() === \"\")\n return false;\n const current = version.split(\".\").map(Number);\n return requirement.split(\",\").every((clause) => {\n const match = /^(~=|==|!=|<=|>=|<|>)\\s*(\\d+(?:\\.\\d+)*)(\\.\\*)?$/.exec(\n clause.trim(),\n );\n if (match === null) return false;\n const operator = match[1];\n const release = match[2];\n if (release === undefined || operator === undefined) return false;\n const target = release.split(\".\").map(Number);\n if (current.length === 2)\n return pythonSeriesRequirementMatches({\n current,\n operator,\n target,\n wildcard: match[3] !== undefined,\n });\n const comparison = compareRelease(current, target);\n if (match[3] !== undefined) {\n if (operator !== \"==\" && operator !== \"!=\") return false;\n const prefix = target.every(\n (part, index) => (current.at(index) ?? 0) === part,\n );\n return operator === \"==\" ? prefix : !prefix;\n }\n switch (operator) {\n case \"==\":\n return comparison === 0;\n case \"!=\":\n return comparison !== 0;\n case \"<=\":\n return comparison <= 0;\n case \">=\":\n return comparison >= 0;\n case \"<\":\n return comparison < 0;\n case \">\":\n return comparison > 0;\n case \"~=\": {\n if (target.length < 2) return false;\n const prefix = target.slice(0, -1);\n return (\n comparison >= 0 &&\n prefix.every((part, index) => (current.at(index) ?? 0) === part)\n );\n }\n default:\n return false;\n }\n });\n};\n\n/** Check runtime declarations only in the files that declare or configure them. */\nexport const checkRuntimeFile = ({\n file,\n text,\n policy,\n trackedFiles,\n readFile,\n repository,\n onDelegated,\n dynamicSelectors = [],\n onDynamicSelector,\n rustExceptions = [],\n engineFloors = [],\n onEngineFloor,\n}: CheckRuntimeFileOptions): RuntimeDiagnostic[] => {\n const diagnostics: RuntimeDiagnostic[] = checkRustReferences({\n type: \"file\",\n file,\n text,\n rust: policy.rust,\n exceptions: rustExceptions,\n });\n const name = path.posix.basename(file);\n const lines = text.split(/\\r?\\n/);\n type RuntimeDiagnosticOptions = Pick<\n RuntimeDiagnostic,\n \"rule\" | \"line\" | \"message\"\n >;\n const add = ({ rule, line, message }: RuntimeDiagnosticOptions) => {\n diagnostics.push({ rule, path: file, line, message });\n };\n let currentLocation: string | undefined;\n const dynamic = (value: unknown) =>\n typeof value === \"string\" && value.includes(\"$\");\n const authorizeDynamic = (\n kind: DynamicSelector[\"kind\"],\n line: number,\n at = currentLocation,\n ) => {\n const matches = dynamicSelectors.filter(\n (entry) =>\n entry.path === file &&\n entry.kind === kind &&\n (entry.at !== undefined ? entry.at === at : entry.line === line),\n );\n if (matches.length !== 1) return false;\n const entry = matches.at(0);\n if (entry === undefined) return false;\n onDynamicSelector?.(entry);\n return true;\n };\n const lineOf = (key: string) =>\n Math.max(1, lines.findIndex((line) => line.includes(key)) + 1);\n type RuntimePinOptions = {\n rule: RuntimeRule;\n value: unknown;\n expected: string;\n label: string;\n line?: number;\n selector?: \"node\" | undefined;\n };\n const pin = ({\n rule,\n value,\n expected,\n label,\n line = 1,\n selector,\n }: RuntimePinOptions) => {\n let matches =\n value === expected ||\n (rule === \"rust-version\" &&\n rustExceptions.some((entry) => entry.pin === value));\n if (selector === \"node\") matches = nodeSelectorMatches(value, expected);\n else if (label.includes(\"python\"))\n matches = pythonSelectorMatches(value, expected);\n if (!matches)\n add({\n rule,\n line,\n message: `${label} must be ${expected}, found ${String(value)}`,\n });\n };\n const toml = (rule: RuntimeRule) => {\n try {\n return parseToml(text);\n } catch {\n add({\n rule,\n line: 1,\n message: \"invalid TOML\",\n });\n return undefined;\n }\n };\n const versions = {\n ...policy.packages,\n ...Object.fromEntries(\n Object.entries(policy.packages).map(([tool, version]) => [\n `npm:${tool}`,\n version,\n ]),\n ),\n bun: policy.bun,\n node: policy.node,\n nodejs: policy.node,\n python: policy.python,\n rust: policy.rust,\n \"core:node\": policy.node,\n \"core:python\": policy.python,\n \"core:rust\": policy.rust,\n \"core:bun\": policy.bun,\n };\n const nodeTools = new Set([\"node\", \"nodejs\", \"core:node\"]);\n if (name === \".bun-version\")\n pin({\n rule: \"bun-pins\",\n value: text.trim(),\n expected: policy.bun,\n label: name,\n });\n if (name === \".node-version\" || name === \".nvmrc\")\n pin({\n rule: \"node-version\",\n selector: \"node\",\n value: text.trim(),\n expected: policy.node,\n label: name,\n });\n if (name === \".python-version\")\n pin({\n rule: \"python-version\",\n value: text.trim(),\n expected: policy.python,\n label: name,\n });\n const firstContent = lines.find(\n (line) => line.trim() !== \"\" && !line.trimStart().startsWith(\"#\"),\n );\n const rustToml =\n name === \"rust-toolchain.toml\" ||\n (name === \"rust-toolchain\" && firstContent?.trimStart().startsWith(\"[\"));\n if (name === \"rust-toolchain\" && !rustToml)\n pin({\n rule: \"rust-version\",\n value: text.trim(),\n expected: policy.rust,\n label: name,\n });\n if (rustToml) {\n const parsed = toml(\"rust-version\");\n if (parsed !== undefined) {\n const toolchain = parsed[\"toolchain\"];\n pin({\n rule: \"rust-version\",\n value: record(toolchain) ? toolchain[\"channel\"] : undefined,\n expected: policy.rust,\n label: \"Rust channel\",\n line: lineOf(\"channel\"),\n });\n }\n }\n if (name === \"Cargo.toml\") {\n const parsed = toml(\"rust-version\");\n const rustFloor = (value: unknown) => {\n const parts =\n typeof value === \"string\" &&\n /^(?:0|[1-9]\\d*)(?:\\.(?:0|[1-9]\\d*)){0,2}$/.test(value)\n ? value.split(\".\").map(Number)\n : undefined;\n if (\n parts === undefined ||\n !parts.every(Number.isSafeInteger) ||\n compareRelease(parts, policy.rust.split(\".\").map(Number)) > 0\n )\n add({\n rule: \"rust-version\",\n line: lineOf(\"rust-version\"),\n message: `Cargo rust-version must be a bare support floor at or below Rust ${policy.rust}`,\n });\n };\n const readManifest = (candidate: string) => {\n if (candidate === file) return parsed;\n if (!trackedFiles.has(candidate)) return undefined;\n try {\n return parseToml(readFile(candidate) ?? \"\");\n } catch {\n return undefined;\n }\n };\n if (parsed !== undefined) {\n const workspace = parsed[\"workspace\"];\n const defaults = record(workspace) ? workspace[\"package\"] : undefined;\n if (record(defaults) && defaults[\"rust-version\"] !== undefined)\n rustFloor(defaults[\"rust-version\"]);\n const pkg = parsed[\"package\"];\n const version = record(pkg) ? pkg[\"rust-version\"] : undefined;\n if (version !== undefined) {\n if (!record(version)) rustFloor(version);\n else {\n let inherited: unknown;\n if (version[\"workspace\"] === true && record(pkg)) {\n const explicit = pkg[\"workspace\"];\n let directory = path.posix.dirname(file);\n const explicitPath =\n typeof explicit === \"string\" &&\n !explicit.includes(\"\\\\\") &&\n !explicit.includes(\":\") &&\n !explicit.includes(\"${{\") &&\n !path.posix.isAbsolute(explicit)\n ? path.posix.normalize(path.posix.join(directory, explicit))\n : undefined;\n if (\n explicit === undefined ||\n (explicitPath !== undefined &&\n explicitPath !== \"..\" &&\n !explicitPath.startsWith(\"../\"))\n ) {\n if (explicitPath !== undefined) directory = explicitPath;\n while (true) {\n const owner = readManifest(\n path.posix.join(directory, \"Cargo.toml\"),\n );\n const table = owner?.[\"workspace\"];\n if (record(table)) {\n const fields = table[\"package\"];\n inherited = record(fields)\n ? fields[\"rust-version\"]\n : undefined;\n break;\n }\n if (explicit !== undefined || directory === \".\") break;\n directory = path.posix.dirname(directory);\n }\n }\n }\n rustFloor(inherited);\n }\n }\n }\n }\n if (name === \"Pipfile\") {\n const parsed = toml(\"python-version\");\n const requires = parsed?.[\"requires\"];\n if (record(requires)) {\n const minor = requires[\"python_version\"];\n if (\n minor !== undefined &&\n minor !== policy.python.split(\".\").slice(0, 2).join(\".\")\n )\n add({\n rule: \"python-version\",\n line: lineOf(\"python_version\"),\n message: `Pipfile python_version must select Python ${policy.python}`,\n });\n const full = requires[\"python_full_version\"];\n if (\n full !== undefined &&\n !(\n typeof full === \"string\" &&\n /^\\d+\\.\\d+\\.\\d+$/.test(full) &&\n pythonSelectorMatches(full, policy.python)\n )\n )\n add({\n rule: \"python-version\",\n line: lineOf(\"python_full_version\"),\n message: `Pipfile python_full_version must select Python ${policy.python}`,\n });\n }\n }\n if (name === \"pyproject.toml\" || name === \"uv.toml\") {\n const parsed = toml(\"python-version\");\n if (parsed !== undefined) {\n const project = parsed[\"project\"];\n if (record(project) && project[\"requires-python\"] !== undefined)\n if (\n !pythonRequirementMatches(project[\"requires-python\"], policy.python)\n )\n add({\n rule: \"python-version\",\n line: lineOf(\"requires-python\"),\n message: `requires-python must include Python ${policy.python}; unsupported constraints must use final-release version specifiers`,\n });\n const tool = parsed[\"tool\"];\n const configuredUv = record(tool) ? tool[\"uv\"] : undefined;\n const uv = name === \"uv.toml\" ? parsed : configuredUv;\n if (record(uv) && uv[\"python\"] !== undefined)\n pin({\n rule: \"python-version\",\n value: uv[\"python\"],\n expected: policy.python,\n label: \"uv python\",\n line: lineOf(\"python\"),\n });\n }\n }\n if (isMiseConfigPath(file)) {\n const parsed = toml(\"runtime-manager\");\n const tools = parsed?.[\"tools\"];\n if (record(tools)) {\n for (const [tool, expected] of Object.entries(versions)) {\n const configured = tools[tool];\n if (configured !== undefined)\n pin({\n rule:\n tool === \"rust\" || tool === \"core:rust\"\n ? \"rust-version\"\n : \"runtime-manager\",\n value: record(configured) ? configured[\"version\"] : configured,\n expected,\n selector: nodeTools.has(tool) ? \"node\" : undefined,\n label: `mise ${tool}`,\n line: lineOf(tool),\n });\n }\n }\n }\n if (name === \".tool-versions\") {\n lines.forEach((line, index) => {\n const fields = line.replace(/#.*$/, \"\").trim().split(/\\s+/);\n const tool = fields.at(0);\n if (tool === undefined || !(tool in versions)) return;\n const expected = Object.entries(versions).find(\n ([key]) => key === tool,\n )?.[1];\n if (expected !== undefined)\n pin({\n rule:\n tool === \"rust\" || tool === \"core:rust\"\n ? \"rust-version\"\n : \"runtime-manager\",\n value: fields.slice(1).join(\" \"),\n expected,\n selector: nodeTools.has(tool) ? \"node\" : undefined,\n label: `.tool-versions ${tool}`,\n line: index + 1,\n });\n });\n }\n type RuntimeImageOptions = {\n image: unknown;\n line: number;\n label: string;\n at?: string | undefined;\n };\n const checkRuntimeImage = ({\n image,\n line,\n label,\n at,\n }: RuntimeImageOptions) => {\n const unknownRuntime = () => {\n const rustImage =\n typeof image === \"string\" &&\n /^rust(?=:|@|$)/i.test(canonicalDockerRuntime(image));\n if (!rustImage && dynamic(image) && authorizeDynamic(\"image\", line, at))\n return;\n add({\n rule: rustImage ? \"rust-version\" : \"runtime-docker\",\n line,\n message: rustImage\n ? `cannot determine ${label} Rust release; use a static exact pin`\n : `cannot determine ${label} runtime; use a static image or a scoped dynamicSelectors declaration`,\n });\n };\n if (typeof image !== \"string\") {\n unknownRuntime();\n return;\n }\n const canonical = canonicalDockerRuntime(image);\n // Variable defaults may contain reference delimiters; preserve offsets while classifying.\n const structuralImage = canonical.replace(\n /\\$\\{[^}]*\\}|\\$[A-Za-z_][A-Za-z_\\d]*/g,\n (variable) => \"x\".repeat(variable.length),\n );\n const digestSeparator = structuralImage.indexOf(\"@\");\n const reference =\n digestSeparator < 0 ? canonical : canonical.slice(0, digestSeparator);\n const structuralReference =\n digestSeparator < 0\n ? structuralImage\n : structuralImage.slice(0, digestSeparator);\n const managedFamily = /^(node|python|rust|oven\\/bun)(?=:|$)/i.exec(\n structuralReference,\n )?.[1];\n const tagSeparator =\n managedFamily === undefined\n ? structuralReference.lastIndexOf(\":\")\n : structuralReference.indexOf(\":\", managedFamily.length);\n const hasTag =\n managedFamily === undefined\n ? tagSeparator > structuralReference.lastIndexOf(\"/\")\n : tagSeparator !== -1;\n const imageRepository = hasTag\n ? reference.slice(0, tagSeparator)\n : reference;\n if (imageRepository.length === 0 || imageRepository.includes(\"$\")) {\n unknownRuntime();\n return;\n }\n if (!/^(node|python|rust|oven\\/bun)$/i.test(imageRepository)) return;\n const tool = imageRepository.toLowerCase();\n let imageRule: RuntimeRule = \"runtime-docker\";\n if (tool === \"rust\") imageRule = \"rust-version\";\n else if (tool === \"oven/bun\") imageRule = \"bun-pins\";\n if (image.includes(\"$\")) {\n unknownRuntime();\n return;\n }\n const digest =\n digestSeparator < 0 ? undefined : canonical.slice(digestSeparator + 1);\n if (digest !== undefined && !/^sha256:[a-fA-F\\d]{64}$/.test(digest)) {\n add({\n rule: imageRule,\n line,\n message: `${label} ${tool} digest must be sha256 followed by 64 hexadecimal characters`,\n });\n return;\n }\n const tag = hasTag ? reference.slice(tagSeparator + 1) : undefined;\n const variantSuffix =\n tool === \"oven/bun\"\n ? /-(?:alpine|slim|debian)$/\n : /-(?:alpine(?:\\d+(?:\\.\\d+)*)?|(?:bookworm|bullseye|trixie|buster)(?:-slim)?|slim)$/;\n // Strip only supported image variants; prerelease qualifiers remain invalid pins.\n const version =\n tool === \"rust\" && tag !== undefined\n ? rustImageVersion(tag)\n : tag?.replace(variantSuffix, \"\");\n let expected = policy.bun;\n if (tool === \"node\") expected = policy.node;\n else if (tool === \"python\") expected = policy.python;\n else if (tool === \"rust\") expected = policy.rust;\n if (digest !== undefined) {\n if (\n version === undefined ||\n !/^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$/.test(version)\n ) {\n add({\n rule: imageRule,\n line,\n message: `${label} ${tool} digest requires an exact stable patch tag matching ${expected}`,\n });\n return;\n }\n if (tool === \"node\" && trackedFiles.has(\".node-version\")) {\n const trackedNode = readFile(\".node-version\")?.trim();\n if (trackedNode !== version) {\n add({\n rule: \"runtime-docker\",\n line,\n message: `${label} node digest tag must match tracked .node-version, found ${version}`,\n });\n return;\n }\n }\n }\n pin({\n rule: imageRule,\n value: version,\n expected,\n selector: tool === \"node\" ? \"node\" : undefined,\n label: `${label} ${tool}`,\n line,\n });\n };\n if (isDockerDefinitionPath(file)) {\n const variables = new Map<string, string>();\n const escape = /^\\s*#\\s*escape\\s*=\\s*([\\\\`])\\s*$/m.exec(text)?.[1] ?? \"\\\\\";\n const continuation = new RegExp(`${escape === \"`\" ? \"`\" : \"\\\\\\\\\"}\\\\s*$`);\n const stages = new Set<string>();\n let argumentScope: \"global\" | \"stage\" = \"global\";\n const heredocs: { delimiter: string; stripTabs: boolean; line: number }[] =\n [];\n let instruction = \"\";\n let startLine = 1;\n let pendingRustRun: { source: string; line: number } | undefined;\n const checkRustCommand = (source: string, line: number) => {\n diagnostics.push(\n ...checkRustReferences({\n type: \"command\",\n file,\n source,\n line,\n rust: policy.rust,\n exceptions: rustExceptions,\n }),\n );\n };\n const expand = (value: string) => {\n for (let count = 0; count <= variables.size; count++) {\n const next = value.replace(\n /\\$(?:\\{([A-Za-z_][A-Za-z_\\d]*)\\}|([A-Za-z_][A-Za-z_\\d]*))/g,\n (reference, braced: string | undefined, plain: string | undefined) =>\n variables.get(braced ?? plain ?? \"\") ?? reference,\n );\n if (next === value) return next;\n value = next;\n }\n return value;\n };\n const collectHeredocs = (content: string, line: number) => {\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < content.length; index++) {\n const character = content.at(index);\n if (quote !== undefined) {\n if (character === quote) quote = undefined;\n else if (quote === '\"' && character === \"\\\\\") index++;\n continue;\n }\n if (character === \"\\\\\") {\n index++;\n continue;\n }\n if (character === \"'\" || character === '\"') {\n quote = character;\n continue;\n }\n if (\n character === \"#\" &&\n (index === 0 || /[\\s;&|()]/.test(content.at(index - 1) ?? \"\"))\n )\n break;\n if (character !== \"<\" || content.at(index + 1) !== \"<\") continue;\n if (content.at(index + 2) === \"<\") {\n index += 2;\n continue;\n }\n index += 2;\n const stripTabs = content.at(index) === \"-\";\n if (stripTabs) index++;\n while (/\\s/.test(content.at(index) ?? \"\")) index++;\n if (content.at(index) === \"#\") {\n add({\n rule: \"runtime-docker\",\n line,\n message: \"invalid Docker heredoc delimiter\",\n });\n break;\n }\n let delimiter = \"\";\n let delimiterQuote: \"'\" | '\"' | undefined;\n for (; index < content.length; index++) {\n const part = content.at(index);\n if (delimiterQuote !== undefined) {\n if (part === delimiterQuote) delimiterQuote = undefined;\n else if (\n delimiterQuote === '\"' &&\n part === \"\\\\\" &&\n /[$\"\\\\]/.test(content.at(index + 1) ?? \"\")\n )\n delimiter += content.at(++index);\n else delimiter += part;\n continue;\n }\n if (part === \"'\" || part === '\"') {\n delimiterQuote = part;\n continue;\n }\n if (part === \"\\\\\" && content.at(index + 1) !== undefined) {\n delimiter += content.at(++index);\n continue;\n }\n if (/[\\s;&|<>()]/.test(part ?? \"\")) break;\n delimiter += part;\n }\n if (delimiter !== \"\" && delimiterQuote === undefined)\n heredocs.push({ delimiter, stripTabs, line });\n else\n add({\n rule: \"runtime-docker\",\n line,\n message: \"invalid Docker heredoc delimiter\",\n });\n index--;\n }\n };\n const checkInstruction = (content: string, line: number) => {\n const argument = /^\\s*ARG\\s+([A-Za-z_][A-Za-z_\\d]*)(?:=(.*))?$/i.exec(\n content,\n );\n if (argument !== null) {\n if (argumentScope === \"stage\") return;\n const key = argument[1];\n const value = argument[2];\n if (key !== undefined && value !== undefined)\n variables.set(key, expand(value.replace(/^([\"'])(.*)\\1$/, \"$2\")));\n return;\n }\n const run = /^\\s*RUN\\s+(.+)$/i.exec(content);\n if (run !== null) {\n let source = run[1] ?? \"\";\n source = source.replace(/^(?:--\\S+\\s+)*/, \"\");\n if (source.startsWith(\"[\")) {\n try {\n const words: unknown = JSON.parse(source);\n if (\n Array.isArray(words) &&\n words.every((word: unknown) => typeof word === \"string\")\n ) {\n // Exec-form arguments are literal; only an explicit shell -c evaluates their contents.\n source = words\n .map((word) => `'${word.replaceAll(\"'\", \"'\\\\''\")}'`)\n .join(\" \");\n }\n } catch {\n // A leading bracket also starts a shell test; preserve shell form unless JSON proves exec form.\n }\n }\n const implicit = /^(<<-?(?:'[^']+'|\"[^\"]+\"|\\S+))(?:\\s+(.+))?$/.exec(\n source,\n );\n if (implicit !== null && implicit[2] === undefined)\n source = `sh ${source}`;\n collectHeredocs(content, line);\n if (heredocs.length > 0) pendingRustRun = { source, line };\n else checkRustCommand(source, line);\n return;\n }\n const environment = /^\\s*ENV\\s+(.+)$/i.exec(content);\n if (environment !== null) {\n const assignments = dockerEnvironmentAssignments({\n source: environment[1] ?? \"\",\n escape,\n });\n if (assignments === undefined) {\n add({\n rule: \"runtime-docker\",\n line,\n message: \"invalid Docker ENV assignments\",\n });\n return;\n }\n diagnostics.push(\n ...checkRustReferences({\n type: \"environment\",\n file,\n assignments,\n line,\n rust: policy.rust,\n exceptions: rustExceptions,\n }),\n );\n return;\n }\n if (/^\\s*COPY\\s+/i.test(content)) {\n collectHeredocs(content, line);\n return;\n }\n const from =\n /^\\s*FROM\\s+(?:--platform=\\S+\\s+)?(\\S+)(?:\\s+AS\\s+(\\S+))?/i.exec(\n content,\n );\n if (from === null || from[1] === undefined) return;\n argumentScope = \"stage\";\n const image = expand(from[1]);\n const stage = from[2]?.toLowerCase();\n const previousStage = stages.has(image.toLowerCase());\n if (stage !== undefined) stages.add(stage);\n if (previousStage) return;\n checkRuntimeImage({ image, line, label: \"FROM\" });\n };\n lines.forEach((line, index) => {\n const heredoc = heredocs.at(0);\n if (heredoc !== undefined) {\n if (pendingRustRun !== undefined) pendingRustRun.source += `\\n${line}`;\n if (\n (heredoc.stripTabs ? line.replace(/^\\t+/, \"\") : line) ===\n heredoc.delimiter\n )\n heredocs.shift();\n if (heredocs.length === 0 && pendingRustRun !== undefined) {\n checkRustCommand(pendingRustRun.source, pendingRustRun.line);\n pendingRustRun = undefined;\n }\n return;\n }\n if (line.trimStart().startsWith(\"#\")) return;\n if (instruction === \"\") startLine = index + 1;\n instruction += line.replace(continuation, \" \");\n if (continuation.test(line)) return;\n checkInstruction(instruction, startLine);\n instruction = \"\";\n });\n if (instruction !== \"\") checkInstruction(instruction, startLine);\n for (const heredoc of heredocs)\n add({\n rule: \"runtime-docker\",\n line: heredoc.line,\n message: `unterminated Docker heredoc ${heredoc.delimiter}`,\n });\n }\n if (isComposeDefinitionPath(file) || isKubernetesDefinitionPath(file)) {\n const lineCounter = new LineCounter();\n for (const containerDocument of parseAllDocuments(text, {\n lineCounter,\n merge: true,\n uniqueKeys: true,\n })) {\n const contents = containerDocument.contents;\n const declaredResource =\n isMap(contents) &&\n isScalar(contents.get(\"apiVersion\", true)) &&\n isScalar(contents.get(\"kind\", true));\n const recognizedContainer =\n isComposeDefinitionPath(file) || declaredResource;\n if (containerDocument.errors.length > 0) {\n if (recognizedContainer)\n add({\n rule: \"runtime-docker\",\n line: 1,\n message: \"invalid container YAML\",\n });\n continue;\n }\n try {\n const classified = containerDocumentImages(\n containerDocument.toJS({ maxAliasCount: 100 }),\n file,\n );\n for (const entry of classified?.images ?? []) {\n const node = containerDocument.getIn(entry.path, true);\n const line =\n (isMap(node) || isScalar(node) || isSeq(node) || isAlias(node)) &&\n node.range !== undefined &&\n node.range !== null\n ? lineCounter.linePos(node.range[0]).line\n : 1;\n checkRuntimeImage({\n image: entry.image,\n line,\n at: entry.path.join(\".\"),\n label:\n classified?.ecosystem === \"docker-compose\"\n ? \"Compose image\"\n : \"Kubernetes image\",\n });\n }\n } catch {\n if (recognizedContainer)\n add({\n rule: \"runtime-docker\",\n line: 1,\n message: \"invalid container YAML aliases\",\n });\n }\n }\n }\n const automationKind = githubAutomationFileKind(file);\n if (automationKind === undefined) return diagnostics;\n const document = parseDocument(text, { uniqueKeys: true, merge: true });\n if (document.errors.length > 0) {\n add({\n rule: \"runtime-workflow\",\n line: 1,\n message: \"invalid workflow YAML\",\n });\n return diagnostics;\n }\n const nodeLine = (node: unknown) => {\n if (!record(node) || !Array.isArray(node[\"range\"])) return 1;\n const offset: unknown = node[\"range\"].at(0);\n return typeof offset === \"number\"\n ? text.slice(0, offset).split(\"\\n\").length\n : 1;\n };\n type SparseCheckout =\n | { mode: \"all\" }\n | { mode: \"files\"; paths: ReadonlySet<string> }\n | { mode: \"invalid\" }\n | { mode: \"dynamic\" }\n | { mode: \"mixed\"; paths: ReadonlySet<string> };\n type CheckoutBinding = {\n path: string;\n sparse: SparseCheckout;\n dynamicSource: boolean;\n } & (\n | { source: \"tracked\" }\n | { source: \"untrusted\"; reason: string; line: number }\n | { source: \"delegated\"; ref: string }\n );\n let checkoutBindings: CheckoutBinding[] = [];\n let checkoutDestinations = new Map<string, number>();\n let unknownCheckoutDestination = false;\n let unreviewableCheckoutSource = false;\n const staticRepositoryPath = (value: unknown): value is string =>\n typeof value === \"string\" &&\n value !== \"\" &&\n !value.includes(\"${{\") &&\n !value.includes(\"\\\\\") &&\n !value.includes(\":\") &&\n !path.posix.isAbsolute(value) &&\n !value.split(\"/\").includes(\"..\");\n const normalizeCheckoutPath = (prefix: string) =>\n path.posix.normalize(prefix).replace(/\\/$/, \"\") || \".\";\n type RuntimeReferenceOptions = {\n value: unknown;\n tool: \"node\" | \"python\" | \"bun\";\n line: number;\n };\n const checkoutProvidersFor = (selector: string | undefined) => {\n if (selector === undefined) return checkoutBindings;\n let deepest: CheckoutBinding | undefined;\n for (const entry of checkoutBindings) {\n if (\n entry.path !== \".\" &&\n selector !== entry.path &&\n !selector.startsWith(`${entry.path}/`)\n )\n continue;\n if (\n deepest === undefined ||\n (entry.path !== \".\" &&\n (deepest.path === \".\" || entry.path.length > deepest.path.length))\n )\n deepest = entry;\n }\n return checkoutBindings.filter((entry) => entry.path === deepest?.path);\n };\n const hasAmbiguousCheckoutWriters = (\n selector: string | undefined,\n providers: readonly CheckoutBinding[],\n ) => {\n if (providers.length > 0)\n return providers.some(\n (entry) => (checkoutDestinations.get(entry.path) ?? 0) > 1,\n );\n // A selector before checkout cannot borrow a tracked shadow of an ambiguous destination.\n return [...checkoutDestinations].some(\n ([prefix, count]) =>\n count > 1 &&\n (selector === undefined ||\n prefix === \".\" ||\n selector === prefix ||\n selector.startsWith(`${prefix}/`)),\n );\n };\n const checkReference = ({ value, tool, line }: RuntimeReferenceOptions) => {\n const selectors = {\n node: [\".node-version\", \".nvmrc\"],\n python: [\".python-version\"],\n bun: [\"package.json\"],\n };\n const allowed = selectors[tool];\n const rule = tool === \"bun\" ? \"bun-pins\" : \"runtime-workflow\";\n const selector = staticRepositoryPath(value)\n ? path.posix.normalize(value)\n : undefined;\n const providers = checkoutProvidersFor(selector);\n const binding = selector === undefined ? undefined : providers.at(-1);\n const dynamicSource = providers.some((entry) => entry.dynamicSource);\n const sparseFailure = providers.find((entry) => {\n if (entry.sparse.mode === \"invalid\") return true;\n if (entry.sparse.mode !== \"files\" && entry.sparse.mode !== \"mixed\")\n return false;\n if (selector === undefined) return true;\n const selectedFile =\n entry.path === \".\"\n ? selector\n : path.posix.relative(entry.path, selector);\n return !entry.sparse.paths.has(selectedFile);\n });\n if (sparseFailure !== undefined) {\n let missingFile = \"the selected version file\";\n if (selector !== undefined)\n missingFile =\n sparseFailure.path === \".\"\n ? selector\n : path.posix.relative(sparseFailure.path, selector);\n add({\n rule,\n line,\n message: `checkout sparse-checkout must explicitly list ${missingFile} without invalid literal patterns`,\n });\n return;\n }\n if (selector === undefined) {\n if (\n tool === \"bun\" &&\n dynamic(value) &&\n !unreviewableCheckoutSource &&\n authorizeDynamic(\"bun-source\", line)\n )\n return;\n add({\n rule,\n line,\n message: `setup-${tool} must reference a tracked ${allowed.join(\" or \")}`,\n });\n return;\n }\n if (\n unknownCheckoutDestination ||\n hasAmbiguousCheckoutWriters(selector, providers)\n ) {\n if (\n tool === \"bun\" &&\n dynamicSource &&\n !unreviewableCheckoutSource &&\n authorizeDynamic(\"bun-source\", line)\n )\n return;\n add({\n rule,\n line,\n message: `setup-${tool} version-file selector has untrusted checkout provenance: checkout destinations must be static and have exactly one writer`,\n });\n return;\n }\n if (binding?.source === \"untrusted\") {\n if (\n tool === \"bun\" &&\n dynamicSource &&\n !unreviewableCheckoutSource &&\n authorizeDynamic(\"bun-source\", line)\n )\n return;\n add({\n rule,\n line: binding.line,\n message: `setup-${tool} version-file selector cannot use this checkout: ${binding.reason}`,\n });\n return;\n }\n const target =\n binding === undefined || binding.path === \".\"\n ? selector\n : path.posix.relative(binding.path, selector);\n if (\n !allowed.includes(path.posix.basename(target)) ||\n (binding?.source !== \"delegated\" && !trackedFiles.has(target))\n ) {\n add({\n rule,\n line,\n message: `setup-${tool} must reference a tracked ${allowed.join(\" or \")}`,\n });\n return;\n }\n if (\n binding !== undefined &&\n (binding.sparse.mode === \"dynamic\" || binding.sparse.mode === \"mixed\")\n ) {\n if (\n tool !== \"bun\" ||\n unreviewableCheckoutSource ||\n !authorizeDynamic(\"bun-source\", line)\n ) {\n add({\n rule,\n line,\n message: `checkout sparse-checkout must explicitly list ${target} without dynamic, glob, or negation patterns`,\n });\n return;\n }\n }\n if (binding?.source === \"delegated\") {\n onDelegated?.({\n path: file,\n line,\n tool,\n selector,\n checkoutPath: binding.path,\n ref: binding.ref,\n });\n return;\n }\n const content = readFile(target);\n if (tool === \"bun\") {\n try {\n const manifest: unknown = JSON.parse(content ?? \"\");\n pin({\n rule,\n value: record(manifest) ? manifest[\"packageManager\"] : undefined,\n expected: `bun@${policy.bun}`,\n label: \"setup-bun version file packageManager\",\n line,\n });\n } catch {\n add({\n rule,\n line,\n message:\n \"bun-version-file must reference a readable package.json object\",\n });\n }\n return;\n }\n pin({\n rule,\n value: content?.trim(),\n expected: policy[tool],\n selector: tool === \"node\" ? \"node\" : undefined,\n label: `setup-${tool} version file`,\n line,\n });\n };\n const resolveNode = (node: unknown) => {\n const visited = new Set<unknown>();\n while (isAlias(node)) {\n if (visited.has(node)) throw new Error(\"cyclic YAML alias\");\n visited.add(node);\n node = node.resolve(document);\n }\n return node;\n };\n const approvedActions = new Map(\n Object.entries(policy.actions).map(([action, approved]) => [\n action.toLowerCase(),\n approved,\n ]),\n );\n const mergedMaps = (node: unknown) => {\n node = resolveNode(node);\n if (!isMap(node)) return [];\n const maps: unknown[] = [];\n for (const pair of node.items) {\n if (\n !isScalar(pair.key) ||\n typeof pair.key.value !== \"symbol\" ||\n pair.key.source !== \"<<\"\n )\n continue;\n const merge = resolveNode(pair.value);\n maps.push(...(isSeq(merge) ? merge.items : [merge]));\n }\n return maps;\n };\n const keysOf = (node: unknown, visited = new Set<unknown>()): Set<string> => {\n node = resolveNode(node);\n if (!isMap(node)) return new Set();\n if (visited.has(node)) throw new Error(\"cyclic YAML merge\");\n const next = new Set(visited);\n next.add(node);\n const keys = new Set(\n node.items.flatMap((pair) =>\n isScalar(pair.key) && typeof pair.key.value === \"string\"\n ? [pair.key.value]\n : [],\n ),\n );\n for (const merged of mergedMaps(node))\n for (const key of keysOf(merged, next)) keys.add(key);\n return keys;\n };\n type SourceMapOptions = {\n node: unknown;\n key: string;\n visited?: ReadonlySet<unknown>;\n };\n const sourceMap = ({\n node,\n key,\n visited = new Set(),\n }: SourceMapOptions): unknown => {\n node = resolveNode(node);\n if (!isMap(node)) return undefined;\n if (node.has(key)) return node;\n if (visited.has(node)) throw new Error(\"cyclic YAML merge\");\n const next = new Set(visited);\n next.add(node);\n for (const merged of mergedMaps(node)) {\n const source = sourceMap({ node: merged, key, visited: next });\n if (source !== undefined) return source;\n }\n return undefined;\n };\n const getNode = (node: unknown, key: string) => {\n const source = sourceMap({ node, key });\n return isMap(source) ? resolveNode(source.get(key, true)) : undefined;\n };\n const actionInputs = new Map<unknown, Map<string, unknown>>();\n const inputsOf = (node: unknown) => {\n node = resolveNode(node);\n const cached = actionInputs.get(node);\n if (cached !== undefined) return cached;\n const options = getNode(node, \"with\");\n const inputs = new Map<string, unknown>();\n for (const key of keysOf(options)) {\n const folded = key.toUpperCase();\n const value = getNode(options, key);\n if (inputs.has(folded))\n add({\n rule: \"action-pins\",\n line: nodeLine(value),\n message: `action input ${key} collides after case-folding`,\n });\n if (\n /(?:^|-)VERSION(?:-FILE)?$/.test(folded) &&\n key !== folded.toLowerCase()\n )\n add({\n rule: \"action-pins\",\n line: nodeLine(value),\n message: `selector input ${key} must use canonical lowercase casing`,\n });\n inputs.set(folded, value);\n }\n actionInputs.set(node, inputs);\n return inputs;\n };\n const getInput = (node: unknown, key: string) =>\n inputsOf(node).get(key.toUpperCase());\n const expressionAt = (value: string, start: number) => {\n if (!value.startsWith(\"${{\", start)) return undefined;\n let quote: \"'\" | '\"' | undefined;\n for (let index = start + 3; index < value.length; index++) {\n const character = value.at(index);\n if (quote !== undefined) {\n if (character === quote) {\n if (quote === \"'\" && value.at(index + 1) === \"'\") index++;\n else quote = undefined;\n } else if (quote === '\"' && character === \"\\\\\") index++;\n continue;\n }\n if (character === \"'\" || character === '\"') quote = character;\n else if (value.startsWith(\"${{\", index)) return undefined;\n else if (character === \"}\" && value.at(index + 1) === \"}\")\n return { body: value.slice(start + 3, index).trim(), end: index + 2 };\n }\n return undefined;\n };\n const dynamicRefBody = (value: unknown) => {\n if (typeof value !== \"string\") return undefined;\n const expression = expressionAt(value, 0);\n return expression?.end === value.length ? expression.body : undefined;\n };\n const sparseEntryIsValid = (entry: string) => {\n let literalPath = \"\";\n let position = 0;\n while (position < entry.length) {\n const start = entry.indexOf(\"${{\", position);\n const literal = entry.slice(position, start < 0 ? entry.length : start);\n if (/[!$*?[\\]\\\\:]/.test(literal) || literal.split(\"/\").includes(\"..\"))\n return false;\n literalPath += literal;\n if (start < 0) break;\n const expression = expressionAt(entry, start);\n if (expression === undefined || expression.body === \"\") return false;\n literalPath += \"expression\";\n position = expression.end;\n }\n return staticRepositoryPath(literalPath);\n };\n const checkoutPrefixOf = (node: unknown) => {\n const destination = getInput(node, \"path\");\n if (destination === undefined) return \".\";\n return isScalar(destination) ? destination.value : undefined;\n };\n const sparseCheckoutOf = (node: unknown): SparseCheckout => {\n const sparseKeys = [...inputsOf(node).keys()].filter((key) =>\n key.startsWith(\"SPARSE-CHECKOUT\"),\n );\n if (sparseKeys.length === 0) return { mode: \"all\" };\n if (\n sparseKeys.some(\n (key) =>\n key !== \"SPARSE-CHECKOUT\" && key !== \"SPARSE-CHECKOUT-CONE-MODE\",\n )\n )\n return { mode: \"invalid\" };\n const value = getInput(node, \"sparse-checkout\");\n const cone = getInput(node, \"sparse-checkout-cone-mode\");\n if (\n !isScalar(value) ||\n typeof value.value !== \"string\" ||\n (cone !== undefined &&\n (!isScalar(cone) ||\n (cone.value !== true &&\n cone.value !== false &&\n cone.value !== \"true\" &&\n cone.value !== \"false\")))\n )\n return { mode: \"invalid\" };\n const paths = value.value\n .split(/\\r?\\n/)\n .map((entry) => entry.trim().replace(/^\\//, \"\"))\n .filter((entry) => entry !== \"\");\n if (paths.length === 0 || paths.some((entry) => !sparseEntryIsValid(entry)))\n return { mode: \"invalid\" };\n const literalPaths = new Set(paths.filter((entry) => !dynamic(entry)));\n if (paths.some(dynamic)) {\n if (literalPaths.size === 0) return { mode: \"dynamic\" };\n return { mode: \"mixed\", paths: literalPaths };\n }\n return { mode: \"files\", paths: literalPaths };\n };\n let currentEngineFloor: ResolvedEngineFloor | undefined;\n const checkAction = (node: unknown) => {\n node = resolveNode(node);\n if (!isMap(node)) return;\n inputsOf(node);\n const uses = getNode(node, \"uses\");\n if (uses === undefined) return;\n const line = nodeLine(uses);\n if (!isScalar(uses) || typeof uses.value !== \"string\") {\n add({\n rule: \"action-pins\",\n line,\n message: \"action uses must be a string containing a full commit SHA\",\n });\n return;\n }\n const value = uses.value;\n if (value.startsWith(\"$/\")) {\n if (\n value.length === 2 ||\n /\\s/.test(value) ||\n value.includes(\"@\") ||\n value.includes(\"${{\") ||\n value.includes(\"\\\\\") ||\n value.split(\"/\").includes(\"..\")\n )\n add({\n rule: \"action-pins\",\n line,\n message:\n \"self-repository actions must use a static repository path without a ref suffix\",\n });\n return;\n }\n if (value.startsWith(\"./\")) {\n const selector = staticRepositoryPath(value)\n ? path.posix.normalize(value)\n : undefined;\n const providers = checkoutProvidersFor(selector);\n const binding = selector === undefined ? undefined : providers.at(-1);\n if (\n selector === undefined ||\n unknownCheckoutDestination ||\n (binding !== undefined && binding.source !== \"tracked\") ||\n hasAmbiguousCheckoutWriters(selector, providers)\n )\n add({\n rule: \"action-pins\",\n line,\n message:\n \"local actions require an unambiguous checkout of the current source snapshot\",\n });\n return;\n }\n if (value.startsWith(\"docker://\")) {\n add({\n rule: \"action-pins\",\n line,\n message: \"Docker image actions require a reasoned action-pins opt-out\",\n });\n checkRuntimeImage({\n image: value.slice(\"docker://\".length),\n line,\n label: \"Docker action image\",\n });\n return;\n }\n const remote = /^([^./][^\\s@]*\\/[^\\s@]+)@([^\\s]+)$/.exec(value);\n if (remote === null) {\n add({\n rule: \"action-pins\",\n line,\n message: \"remote actions must use a full commit SHA\",\n });\n return;\n }\n const action = remote[1]?.toLowerCase();\n const ref = remote[2];\n const approved =\n action === undefined\n ? undefined\n : (approvedActions.get(action) ??\n approvedActions.get(action.split(\"/\").slice(0, 2).join(\"/\")));\n if (ref === undefined || !/^[a-f0-9]{40}$/.test(ref))\n add({\n rule: \"action-pins\",\n line,\n message: \"remote actions must use a full commit SHA\",\n });\n else if (approved !== undefined && ref !== approved.sha)\n add({\n rule: \"action-pins\",\n line,\n message: `${action} must use ${approved.sha}`,\n });\n const declaration = sourceMap({ node, key: \"uses\" });\n const comment =\n uses.comment ??\n (isMap(declaration) ? declaration.comment : undefined) ??\n \"\";\n if (\n approved !== undefined &&\n !comment.trim().split(/\\s+/).includes(approved.version)\n )\n add({\n rule: \"action-pins\",\n line,\n message: `${action} requires a # ${approved.version} version comment`,\n });\n if (action === \"actions/checkout\") {\n const checkoutRepository = getInput(node, \"repository\");\n const checkoutRef = getInput(node, \"ref\");\n const prefix = checkoutPrefixOf(node);\n const clean = getInput(node, \"clean\");\n const cleanIsResolved =\n clean === undefined || (isScalar(clean) && !dynamic(clean.value));\n let repo: unknown;\n if (checkoutRepository !== undefined)\n repo = isScalar(checkoutRepository) ? checkoutRepository.value : null;\n const self =\n repo === undefined ||\n repo === \"${{ github.repository }}\" ||\n (typeof repo === \"string\" &&\n repository !== undefined &&\n repo.toLowerCase() === repository.toLowerCase());\n const workflowSource =\n repo === \"${{ job.workflow_repository }}\" &&\n isScalar(checkoutRef) &&\n checkoutRef.value === \"${{ job.workflow_sha }}\";\n const triggers = getNode(document.contents, \"on\");\n const events = (() => {\n if (isMap(triggers)) return [...keysOf(triggers)];\n if (isSeq(triggers))\n return triggers.items.map((event) =>\n isScalar(event) ? event.value : undefined,\n );\n if (isScalar(triggers)) return [triggers.value];\n return [];\n })();\n const callerContext = events.includes(\"workflow_call\");\n let refValue = isScalar(checkoutRef) ? checkoutRef.value : undefined;\n if (\n callerContext &&\n (repo === undefined || repo === \"${{ github.repository }}\") &&\n checkoutRef === undefined\n )\n refValue = \"${{ github.sha }}\";\n const currentRef = dynamicRefBody(refValue);\n const currentSource =\n self &&\n !callerContext &&\n (checkoutRef === undefined || currentRef === \"github.sha\");\n\n const dynamicRef = dynamicRefBody(refValue);\n const delegatedSource =\n !currentSource &&\n (self || repo === \"${{ job.workflow_repository }}\") &&\n dynamicRef !== undefined &&\n dynamicRef !== \"\" &&\n !/^(?:'(?:[^']|'')*'|\"(?:[^\"\\\\]|\\\\.)*\"|(?:true|false|null)|-?(?:0x[\\da-f]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?))$/i.test(\n dynamicRef,\n ) &&\n (!/^(?:github\\s*(?:\\.\\s*sha|\\[\\s*['\"]sha['\"]\\s*\\])|job\\s*(?:\\.\\s*workflow_sha|\\[\\s*['\"]workflow_sha['\"]\\s*\\]))$/i.test(\n dynamicRef,\n ) ||\n (callerContext && currentRef === \"github.sha\"));\n\n const validSource =\n cleanIsResolved &&\n ref === approved?.sha &&\n sourceMap({ node, key: \"if\" }) === undefined &&\n sourceMap({ node, key: \"continue-on-error\" }) === undefined &&\n (currentSource || workflowSource || delegatedSource);\n if (!validSource) unreviewableCheckoutSource = true;\n if (!staticRepositoryPath(prefix)) {\n // Unknown checkout destinations may shadow any tracked selector.\n checkoutBindings.push({\n path: \".\",\n dynamicSource: validSource && dynamic(prefix),\n source: \"untrusted\",\n reason: \"checkout destination must be a static repository path\",\n line,\n sparse: sparseCheckoutOf(node),\n });\n } else {\n const destination = normalizeCheckoutPath(prefix);\n checkoutBindings = checkoutBindings.map((entry) => {\n if (\n entry.path === destination ||\n (destination !== \".\" && !entry.path.startsWith(`${destination}/`))\n )\n return entry;\n // Ancestor checkout may clear an uninitialized destination even with clean: false.\n return {\n path: entry.path,\n sparse: { mode: \"all\" },\n dynamicSource: false,\n source: \"untrusted\",\n reason:\n \"a later ancestor checkout invalidates this descendant destination\",\n line,\n };\n });\n const trustedWriter =\n cleanIsResolved &&\n ref === approved?.sha &&\n sourceMap({ node, key: \"if\" }) === undefined &&\n sourceMap({ node, key: \"continue-on-error\" }) === undefined &&\n checkoutDestinations.get(destination) === 1 &&\n !unknownCheckoutDestination;\n if (trustedWriter && delegatedSource && typeof refValue === \"string\")\n checkoutBindings.push({\n path: destination,\n dynamicSource: validSource && delegatedSource,\n sparse: sparseCheckoutOf(node),\n source: \"delegated\",\n ref: refValue,\n });\n else if (trustedWriter && (workflowSource || currentSource))\n checkoutBindings.push({\n path: destination,\n dynamicSource: validSource && delegatedSource,\n sparse: sparseCheckoutOf(node),\n source: \"tracked\",\n });\n else {\n let reason =\n \"checkout does not select a trusted repository source snapshot\";\n if (!cleanIsResolved)\n reason = \"checkout clean must be statically resolved\";\n else if (ref !== approved?.sha)\n reason = \"actions/checkout must use the approved action SHA\";\n else if (\n sourceMap({ node, key: \"if\" }) !== undefined ||\n sourceMap({ node, key: \"continue-on-error\" }) !== undefined\n )\n reason =\n \"checkout must be unconditional and omit continue-on-error\";\n else if (\n checkoutDestinations.get(destination) !== 1 ||\n unknownCheckoutDestination\n )\n reason = \"checkout destination must have exactly one static writer\";\n checkoutBindings.push({\n path: destination,\n dynamicSource: validSource && delegatedSource,\n sparse: sparseCheckoutOf(node),\n source: \"untrusted\",\n reason,\n line,\n });\n }\n }\n }\n let tool: RuntimeDelegation[\"tool\"];\n switch (action) {\n case \"actions/setup-node\":\n tool = \"node\";\n break;\n case \"actions/setup-python\":\n tool = \"python\";\n break;\n case \"oven-sh/setup-bun\":\n tool = \"bun\";\n break;\n default:\n return;\n }\n const literal = getInput(node, `${tool}-version`);\n if (tool === \"node\" && currentEngineFloor !== undefined) {\n const reference = getInput(node, \"node-version-file\");\n if (\n reference === undefined &&\n isScalar(literal) &&\n engineFloorSelectorMatches(literal.value, currentEngineFloor)\n ) {\n onEngineFloor?.(currentEngineFloor, \"matched\");\n return;\n }\n onEngineFloor?.(currentEngineFloor, \"mismatch\");\n add({\n rule: \"runtime-workflow\",\n line: nodeLine(literal ?? reference ?? uses),\n message: `engine floor job must select an exact Node patch satisfying ${currentEngineFloor.range} with minimum major ${currentEngineFloor.major}`,\n });\n return;\n }\n if (literal !== undefined)\n add({\n rule: tool === \"bun\" ? \"bun-pins\" : \"runtime-workflow\",\n line: nodeLine(literal),\n message: `setup-${tool} must use ${tool}-version-file`,\n });\n const reference = getInput(node, `${tool}-version-file`);\n checkReference({\n value: isScalar(reference) ? reference.value : undefined,\n tool,\n line: reference === undefined ? line : nodeLine(reference),\n });\n };\n const checkContainer = (node: unknown, at: string) => {\n node = resolveNode(node);\n if (node === undefined) return;\n const image = isMap(node) ? getNode(node, \"image\") : node;\n checkRuntimeImage({\n image: isScalar(image) ? image.value : undefined,\n line: nodeLine(image ?? node),\n label: \"container image\",\n at,\n });\n };\n const checkSteps = (\n node: unknown,\n locationPrefix: string,\n floor?: ResolvedEngineFloor,\n ) => {\n currentEngineFloor = undefined;\n checkoutBindings = [];\n checkoutDestinations = new Map();\n unknownCheckoutDestination = false;\n unreviewableCheckoutSource = false;\n node = resolveNode(node);\n if (!isSeq(node)) return;\n for (const step of node.items) {\n const uses = getNode(step, \"uses\");\n if (\n !isScalar(uses) ||\n typeof uses.value !== \"string\" ||\n !uses.value.toLowerCase().startsWith(\"actions/checkout@\")\n )\n continue;\n const prefix = checkoutPrefixOf(step);\n if (!staticRepositoryPath(prefix)) {\n unknownCheckoutDestination = true;\n continue;\n }\n const destination = normalizeCheckoutPath(prefix);\n checkoutDestinations.set(\n destination,\n (checkoutDestinations.get(destination) ?? 0) + 1,\n );\n }\n currentEngineFloor = floor;\n try {\n for (const step of node.items) {\n const id = getNode(step, \"id\");\n currentLocation =\n isScalar(id) && typeof id.value === \"string\"\n ? `${locationPrefix}.steps.${id.value}`\n : undefined;\n checkAction(step);\n }\n } finally {\n currentEngineFloor = undefined;\n currentLocation = undefined;\n }\n };\n try {\n // Resolve aliases first with an expansion bound before visiting executable fields.\n const workflow = document.toJS({ maxAliasCount: 100 });\n if (automationKind === \"workflow\") {\n for (const finding of checkWorkflowTrust(workflow)) {\n const jobNode = getNode(\n getNode(document.contents, \"jobs\"),\n finding.job,\n );\n let source: unknown;\n switch (finding.type) {\n case \"job\":\n source = getNode(jobNode, finding.property);\n break;\n case \"step\": {\n const steps = resolveNode(getNode(jobNode, \"steps\"));\n const step = isSeq(steps)\n ? steps.items.at(finding.step)\n : undefined;\n source = getNode(step, \"run\") ?? getNode(step, \"uses\");\n break;\n }\n default: {\n const unexpected: never = finding;\n throw new Error(\"unknown workflow finding\", { cause: unexpected });\n }\n }\n add({\n rule: \"workflow-trust\",\n line: nodeLine(source ?? jobNode),\n message: finding.message,\n });\n }\n const jobs = getNode(document.contents, \"jobs\");\n if (isMap(jobs))\n for (const key of keysOf(jobs)) {\n checkoutBindings = [];\n checkoutDestinations = new Map();\n unknownCheckoutDestination = false;\n currentEngineFloor = undefined;\n const job = getNode(jobs, key);\n checkAction(job);\n checkContainer(getNode(job, \"container\"), `jobs.${key}.container`);\n const services = getNode(job, \"services\");\n if (isMap(services))\n for (const service of keysOf(services))\n checkContainer(\n getNode(services, service),\n `jobs.${key}.services.${service}`,\n );\n checkSteps(\n getNode(job, \"steps\"),\n `jobs.${key}`,\n engineFloors.find((entry) => entry.job === key),\n );\n }\n } else {\n const runs = getNode(document.contents, \"runs\");\n const using = getNode(runs, \"using\");\n if (isScalar(using) && using.value === \"composite\")\n checkSteps(getNode(runs, \"steps\"), \"runs\");\n if (isScalar(using) && using.value === \"docker\") {\n const image = getNode(runs, \"image\");\n const value = isScalar(image) ? image.value : undefined;\n if (typeof value === \"string\" && value.startsWith(\"docker://\")) {\n add({\n rule: \"action-pins\",\n line: nodeLine(image),\n message:\n \"Docker image actions require a reasoned action-pins opt-out\",\n });\n checkRuntimeImage({\n image: value.slice(\"docker://\".length),\n line: nodeLine(image),\n label: \"Docker action image\",\n });\n } else if (\n typeof value !== \"string\" ||\n value.includes(\"${{\") ||\n value.includes(\"\\\\\") ||\n value.includes(\":\") ||\n path.posix.isAbsolute(value) ||\n path.posix\n .normalize(path.posix.join(path.posix.dirname(file), value))\n .split(\"/\")\n .at(0) === \"..\" ||\n path.posix.basename(value) !== \"Dockerfile\"\n ) {\n add({\n rule: \"action-pins\",\n line: nodeLine(image),\n message:\n \"Docker actions must reference a local Dockerfile or declare a reasoned action-pins opt-out for an external image\",\n });\n }\n }\n }\n } catch {\n add({\n rule: \"runtime-workflow\",\n line: 1,\n message: \"cannot resolve workflow YAML aliases\",\n });\n }\n return diagnostics;\n};\n","import { execFileSync } from \"node:child_process\";\nimport {\n closeSync,\n lstatSync,\n openSync,\n readFileSync,\n readSync,\n realpathSync,\n} from \"node:fs\";\nimport path from \"node:path\";\n\nimport { cloudSetupPath, generateCloudSetup } from \"./cloud-setup\";\nimport {\n cloudAttributionFix,\n cloudClaudeSettingsPath,\n cloudSessionStartFix,\n hasCloudAttribution,\n hasCloudSessionStartHook,\n} from \"./cloud-setup-claude\";\nimport { parseCloudSetup } from \"./cloud-setup-schema\";\nimport type { ExpiryScope } from \"./dated-entry-scope\";\nimport { readGitTrackedOutput } from \"./git-tracked-output\";\nimport { checkRepositoryQuarantine } from \"./quarantine-policy\";\nimport { repositoryBun } from \"./toolchain-bun\";\nimport {\n checkConsumerChecks,\n parseConsumerChecks,\n} from \"./toolchain-consumer-checks\";\nimport {\n checkDependabot,\n declaredIgnoreConflicts,\n dependabotRules,\n parseDependabotIgnores,\n} from \"./toolchain-dependabot\";\nimport {\n type DynamicSelector,\n parseDynamicSelectors,\n} from \"./toolchain-dynamic-selectors\";\nimport {\n parseEngineFloors,\n type ResolvedEngineFloor,\n resolveEngineFloor,\n} from \"./toolchain-engine-floors\";\nimport { checkFormatter, formatterRule } from \"./toolchain-formatter\";\nimport { toolchainInputKind } from \"./toolchain-inputs\";\nimport { checkNodeProjects, nodeProjectRule } from \"./toolchain-node-projects\";\nimport {\n checkPackageFiles,\n packageRules,\n parseTypescriptAllowlist,\n} from \"./toolchain-packages\";\nimport {\n checkRuntimeFile,\n type RuntimeDelegation,\n runtimeRules,\n} from \"./toolchain-runtime\";\nimport {\n checkRustExceptionExpiry,\n parseRustExceptions,\n} from \"./toolchain-rust\";\nimport { parseToolchainPolicy } from \"./toolchain-schema\";\n\nexport const toolchainRules = [\n ...new Set([\n ...packageRules,\n ...runtimeRules,\n ...dependabotRules,\n nodeProjectRule,\n formatterRule,\n \"cloud-setup-drift\",\n \"quarantine-policy\",\n ] as const),\n] as const;\nexport type ToolchainRule = (typeof toolchainRules)[number];\nexport type SharedToolchainDiagnostic = {\n rule: ToolchainRule | \"configuration\";\n path: string;\n line: number;\n message: string;\n};\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst array = (value: unknown): value is readonly unknown[] =>\n Array.isArray(value);\n\n/** Repository-owned declarations are explicit; malformed decisions fail closed. */\nexport const parseToolchainConfiguration = (input: unknown) => {\n if (\n !record(input) ||\n Object.keys(input).some(\n (key) =>\n key !== \"optOuts\" &&\n key !== \"cloud\" &&\n key !== \"engineFloors\" &&\n key !== \"dynamicSelectors\" &&\n key !== \"consumerChecks\" &&\n key !== \"rustExceptions\" &&\n key !== \"dependabotIgnores\" &&\n key !== \"typescriptAllowlist\",\n ) ||\n (input[\"optOuts\"] !== undefined && !array(input[\"optOuts\"]))\n )\n throw new Error(\n \"stll-toolchain.json accepts only optOuts, cloud, engineFloors, dynamicSelectors, consumerChecks, rustExceptions, dependabotIgnores and typescriptAllowlist declarations\",\n );\n const disabled = new Set<string>();\n const optOuts = input[\"optOuts\"] ?? [];\n if (!array(optOuts)) throw new Error(\"optOuts must be an array\");\n for (const entry of optOuts) {\n if (\n !record(entry) ||\n Object.keys(entry).some((key) => key !== \"rule\" && key !== \"reason\") ||\n typeof entry[\"rule\"] !== \"string\" ||\n !toolchainRules.some((rule) => rule === entry[\"rule\"]) ||\n typeof entry[\"reason\"] !== \"string\" ||\n entry[\"reason\"].trim() === \"\" ||\n disabled.has(entry[\"rule\"])\n )\n throw new Error(\n \"each opt-out requires a unique known rule and a nonempty reason\",\n );\n if (entry[\"rule\"] === \"quarantine-policy\")\n throw new Error(\n \"quarantine-policy cannot be opted out; temporary third-party exclusions require expiry\",\n );\n if (entry[\"rule\"] === \"rust-version\")\n throw new Error(\n \"rust-version requires expiring exact-pin rustExceptions, not an opt-out\",\n );\n if (entry[\"rule\"] === \"node-engine\")\n throw new Error(\n \"node-engine cannot be opted out; engines.node must support the shared Node series\",\n );\n if (entry[\"rule\"] === \"workflow-trust\")\n throw new Error(\n \"workflow-trust cannot be opted out; repository commands must follow the declared trust decision\",\n );\n if (entry[\"rule\"] === \"cloud-setup-drift\")\n throw new Error(\n \"cloud-setup-drift cannot be opted out; generated setup must match shared policy\",\n );\n if (entry[\"rule\"] === nodeProjectRule)\n throw new Error(\n \"type-aware-projects cannot be opted out; linted files require declared TypeScript projects\",\n );\n disabled.add(entry[\"rule\"]);\n }\n return {\n disabled,\n rustExceptions: parseRustExceptions(input[\"rustExceptions\"]),\n cloud: parseCloudSetup(input[\"cloud\"]),\n engineFloors: parseEngineFloors(input[\"engineFloors\"]),\n dynamicSelectors: parseDynamicSelectors(input[\"dynamicSelectors\"]),\n consumerChecks: parseConsumerChecks(input[\"consumerChecks\"]),\n dependabotIgnores: parseDependabotIgnores(input[\"dependabotIgnores\"]),\n typescriptAllowlist: parseTypescriptAllowlist(input[\"typescriptAllowlist\"]),\n };\n};\n\ntype ReadToolchainInputsOptions = {\n bunLock?: \"presence\" | \"content\";\n};\n\n/** Dependency graphs stay opaque unless a caller explicitly needs registry identities. */\nexport const readToolchainInputs = (\n root: string,\n { bunLock = \"presence\" }: ReadToolchainInputsOptions = {},\n) => {\n const diagnostics: SharedToolchainDiagnostic[] = [];\n const tracked = readGitTrackedOutput(root, \"staged\")\n .split(\"\\0\")\n // Gitlinks identify submodule directories, never executable script files.\n .filter((entry) => entry !== \"\" && !entry.startsWith(\"160000 \"))\n .map((entry) => entry.slice(entry.indexOf(\"\\t\") + 1));\n const files: Record<string, string> = {};\n const trackedFiles = new Set(tracked);\n const resolvedRoot = realpathSync(root);\n for (const file of tracked) {\n // Only configuration inputs are read; source files can contain arbitrary examples.\n const kind = toolchainInputKind(file);\n const shebangCandidate =\n kind === undefined &&\n path.posix.extname(file) === \"\" &&\n !file\n .split(\"/\")\n .some((part) => part === \"vendor\" || part === \"node_modules\");\n if (kind === undefined && !shebangCandidate) continue;\n try {\n const inputPath = path.join(resolvedRoot, file);\n if (\n kind === \"presence\" &&\n !(file === \"bun.lock\" && bunLock === \"content\")\n ) {\n // The index can retain deleted declarations; presence follows the worktree.\n lstatSync(inputPath);\n files[file] = \"\";\n continue;\n }\n if (shebangCandidate) {\n const input = lstatSync(inputPath);\n if (!input.isFile() && !input.isSymbolicLink()) continue;\n }\n const resolvedFile = realpathSync(inputPath);\n const relative = path.relative(resolvedRoot, resolvedFile);\n if (\n path.isAbsolute(relative) ||\n relative.split(path.sep).at(0) === \"..\" ||\n !trackedFiles.has(relative.split(path.sep).join(\"/\"))\n )\n throw new Error(\"Configuration target is outside the tracked tree\");\n if (shebangCandidate) {\n if (!lstatSync(resolvedFile).isFile()) continue;\n // Bound discovery reads: extensionless files may be large binary artifacts.\n const descriptor = openSync(resolvedFile, \"r\");\n const prefix = Buffer.alloc(512);\n let count: number;\n try {\n count = readSync(descriptor, prefix, 0, prefix.length, 0);\n } finally {\n closeSync(descriptor);\n }\n if (\n toolchainInputKind(file, prefix.toString(\"utf8\", 0, count)) ===\n undefined\n )\n continue;\n }\n files[file] = readFileSync(resolvedFile, \"utf8\");\n } catch (error) {\n if (\n kind === \"presence\" &&\n error instanceof Error &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n )\n continue;\n if (shebangCandidate) continue;\n diagnostics.push({\n rule: \"configuration\",\n path: file,\n line: 1,\n message: \"cannot read tracked configuration file\",\n });\n }\n }\n return { files, trackedFiles, diagnostics };\n};\n\ntype CheckSharedToolchainOptions = {\n root: string;\n policy: ReturnType<typeof parseToolchainPolicy>;\n onDelegated?: ((report: RuntimeDelegation) => void) | undefined;\n onWarning?: ((report: SharedToolchainDiagnostic) => void) | undefined;\n now?: Date | undefined;\n /** Defaults to failing every overdue dated entry; CLIs derive it from the run context. */\n expiryScope?: ExpiryScope | undefined;\n};\n\nexport const checkToolchain = ({\n root,\n policy: sharedPolicy,\n onDelegated,\n onWarning,\n now,\n expiryScope = { kind: \"enforce\" },\n}: CheckSharedToolchainOptions) => {\n const { files, trackedFiles, diagnostics } = readToolchainInputs(root, {\n bunLock: \"content\",\n });\n // Every Bun reference follows the repository's own pin, which must be at\n // or above the shared minimum.\n const policy = {\n ...sharedPolicy,\n bun: repositoryBun(sharedPolicy.bun, files[\"package.json\"]),\n };\n let repository: string | undefined;\n try {\n const origin = execFileSync(\"git\", [\"remote\", \"get-url\", \"origin\"], {\n cwd: root,\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n repository =\n /^(?:https?:\\/\\/github\\.com\\/|git@github\\.com:|ssh:\\/\\/git@github\\.com\\/)([^/]+\\/[^/]+?)(?:\\.git)?\\/?$/.exec(\n origin,\n )?.[1];\n } catch {\n // Repositories without a GitHub origin can still use github.repository.\n }\n\n let configuration = parseToolchainConfiguration({});\n const engineFloors: ResolvedEngineFloor[] = [];\n let dynamicSelectors: DynamicSelector[] = [];\n if (files[\"stll-toolchain.json\"] !== undefined) {\n try {\n configuration = parseToolchainConfiguration(\n JSON.parse(files[\"stll-toolchain.json\"]),\n );\n dynamicSelectors = configuration.dynamicSelectors;\n const expiry = checkRustExceptionExpiry({\n exceptions: configuration.rustExceptions,\n now,\n scope: expiryScope,\n });\n for (const message of expiry.errors)\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message,\n });\n for (const message of expiry.warnings)\n onWarning?.({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message,\n });\n for (const entry of configuration.engineFloors)\n engineFloors.push(resolveEngineFloor(entry, files));\n } catch (error) {\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n const cloud = configuration.cloud;\n const script = files[cloudSetupPath];\n if (cloud === undefined && trackedFiles.has(cloudSetupPath))\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudSetupPath,\n line: 1,\n message:\n \"cloud setup script requires an explicit cloud declaration in stll-toolchain.json\",\n });\n if (cloud !== undefined) {\n if (!hasCloudSessionStartHook(files[cloudClaudeSettingsPath]))\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudClaudeSettingsPath,\n line: 1,\n message: `tracked Claude cloud SessionStart hook is missing, disabled or differs from shared policy; run stll-cloud-setup; if automatic merge is unsafe, ${cloudSessionStartFix}`,\n });\n if (!hasCloudAttribution(files[cloudClaudeSettingsPath]))\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudClaudeSettingsPath,\n line: 1,\n message: `tracked Claude attribution is missing or differs from shared policy; run stll-cloud-setup; if automatic merge is unsafe, ${cloudAttributionFix}`,\n });\n try {\n const nodeVersion = files[\".node-version\"];\n if (nodeVersion === undefined)\n throw new Error(\n \"cloud setup requires a tracked root .node-version with an exact stable release\",\n );\n const expected = generateCloudSetup({\n policy,\n cloud,\n nodeVersion: nodeVersion.trim(),\n files,\n rustExceptions: configuration.rustExceptions,\n });\n if (script !== expected)\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudSetupPath,\n line: 1,\n message:\n \"cloud setup script is missing or differs from shared policy; run stll-cloud-setup\",\n });\n } catch (error) {\n diagnostics.push({\n rule: \"cloud-setup-drift\",\n path: cloudSetupPath,\n line: 1,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n const exercisedFloors = new Set<ResolvedEngineFloor>();\n const mismatchedFloors = new Set<ResolvedEngineFloor>();\n\n const selectorMatches = new Map<DynamicSelector, number>();\n diagnostics.push(\n ...checkConsumerChecks({\n declarations: configuration.consumerChecks,\n files,\n policy,\n }),\n );\n diagnostics.push(\n ...checkPackageFiles({\n files,\n policy,\n typescriptAllowlist: configuration.typescriptAllowlist,\n }),\n );\n const usesBun = Object.entries(files).some(([file, text]) => {\n if (path.posix.basename(file) === \"bun.lock\") return true;\n if (path.posix.basename(file) !== \"package.json\") return false;\n try {\n const manifest: unknown = JSON.parse(text);\n return (\n record(manifest) &&\n typeof manifest[\"packageManager\"] === \"string\" &&\n /^bun(?:@|$)/u.test(manifest[\"packageManager\"])\n );\n } catch {\n // Package diagnostics already reject malformed manifests.\n return false;\n }\n });\n diagnostics.push(\n ...checkFormatter({ files, policy: policy.formatter, usesBun }),\n );\n if (usesBun || files[\"bunfig.toml\"] !== undefined) {\n try {\n if (files[\"bunfig.toml\"] === undefined)\n throw new Error(\n \"Bun repositories require a tracked root bunfig.toml with the five-day quarantine policy; use the documented pinned bunx stll-quarantine --sync bootstrap, then commit bunfig.toml\",\n );\n const result = checkRepositoryQuarantine({\n files,\n now,\n npmrcPresent: trackedFiles.has(\".npmrc\"),\n expiry: expiryScope,\n });\n for (const message of result.errors)\n diagnostics.push({\n rule: \"quarantine-policy\",\n path: \"bunfig.toml\",\n line: 1,\n message,\n });\n for (const message of result.warnings)\n onWarning?.({\n rule: \"quarantine-policy\",\n path: \"bunfig.toml\",\n line: 1,\n message,\n });\n } catch (error) {\n diagnostics.push({\n rule: \"quarantine-policy\",\n path: \"bunfig.toml\",\n line: 1,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n if (files[\"package.json\"] !== undefined) {\n let manifest: unknown;\n try {\n manifest = JSON.parse(files[\"package.json\"]);\n } catch {\n // The package manifest guard reports invalid JSON.\n }\n diagnostics.push(...checkNodeProjects({ root, manifest, trackedFiles }));\n }\n for (const [file, text] of Object.entries(files))\n diagnostics.push(\n ...checkRuntimeFile({\n file,\n text,\n policy: {\n ...policy,\n packages: { ...policy.packages, typescript: policy.typescript },\n },\n trackedFiles,\n rustExceptions: configuration.rustExceptions,\n dynamicSelectors: dynamicSelectors.filter(\n (entry) => entry.path === file,\n ),\n onDynamicSelector: (entry) =>\n selectorMatches.set(entry, (selectorMatches.get(entry) ?? 0) + 1),\n repository,\n onDelegated,\n engineFloors: engineFloors.filter((entry) => entry.workflow === file),\n onEngineFloor: (entry, status) => {\n if (status === \"mismatch\") mismatchedFloors.add(entry);\n else exercisedFloors.add(entry);\n },\n readFile: (target) => files[target],\n }),\n );\n for (const entry of engineFloors)\n if (!exercisedFloors.has(entry) || mismatchedFloors.has(entry))\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message: `engine floor ${entry.workflow}:${entry.job} requires a setup-node exact patch satisfying ${entry.package} engines.node minimum major ${entry.major}`,\n });\n for (const entry of dynamicSelectors)\n if (selectorMatches.get(entry) !== 1)\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message: `dynamic selector ${entry.path}:${entry.at ?? entry.line} must match exactly one unresolved ${entry.kind} selector`,\n });\n const dependabotIgnores = configuration.dependabotIgnores;\n for (const message of declaredIgnoreConflicts({\n ignores: dependabotIgnores,\n policy: policy.dependabot,\n }))\n diagnostics.push({\n rule: \"configuration\",\n path: \"stll-toolchain.json\",\n line: 1,\n message,\n });\n diagnostics.push(\n ...checkDependabot({\n files,\n policy: policy.dependabot,\n ignores: dependabotIgnores,\n }),\n );\n return diagnostics.filter(\n (diagnostic) => !configuration.disabled.has(diagnostic.rule),\n );\n};\n"],"mappings":"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"}