@stll/oxlint-config 1.0.1 → 1.1.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 (52) hide show
  1. package/README.md +85 -4
  2. package/dist/cloud-setup-cli.cjs +62 -21
  3. package/dist/cloud-setup-cli.cjs.map +1 -1
  4. package/dist/cloud-setup-cli.mjs +63 -22
  5. package/dist/cloud-setup-cli.mjs.map +1 -1
  6. package/dist/consumer-compat-cli.cjs +7 -6
  7. package/dist/consumer-compat-cli.cjs.map +1 -1
  8. package/dist/consumer-compat-cli.mjs +7 -6
  9. package/dist/consumer-compat-cli.mjs.map +1 -1
  10. package/dist/git-tracked-output.cjs +46 -0
  11. package/dist/git-tracked-output.cjs.map +1 -0
  12. package/dist/git-tracked-output.mjs +39 -0
  13. package/dist/git-tracked-output.mjs.map +1 -0
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/publish-build-target-vite-dts-helper.mjs +1 -2
  16. package/dist/publish-build-target-vite-dts-helper2.cjs +5 -5
  17. package/dist/publish-build-target-vite-dts-helper2.cjs.map +1 -1
  18. package/dist/publish-contract-cli.cjs +20 -21
  19. package/dist/publish-contract-cli.cjs.map +1 -1
  20. package/dist/publish-contract-cli.mjs +8 -9
  21. package/dist/publish-contract-cli.mjs.map +1 -1
  22. package/dist/publish-contract.cjs +1 -1
  23. package/dist/publish-contract.cjs.map +1 -1
  24. package/dist/publish-contract.mjs +1 -1
  25. package/dist/rolldown-runtime.cjs +1 -1
  26. package/dist/toolchain-changed.cjs +19 -14
  27. package/dist/toolchain-changed.cjs.map +1 -1
  28. package/dist/toolchain-changed.mjs +21 -16
  29. package/dist/toolchain-changed.mjs.map +1 -1
  30. package/dist/toolchain-check-cli.cjs.map +1 -1
  31. package/dist/toolchain-check-cli.mjs.map +1 -1
  32. package/dist/toolchain-guard.cjs +68 -59
  33. package/dist/toolchain-guard.cjs.map +1 -1
  34. package/dist/toolchain-guard.mjs +75 -66
  35. package/dist/toolchain-guard.mjs.map +1 -1
  36. package/dist/toolchain-inputs.cjs +670 -32
  37. package/dist/toolchain-inputs.cjs.map +1 -1
  38. package/dist/toolchain-inputs.mjs +647 -33
  39. package/dist/toolchain-inputs.mjs.map +1 -1
  40. package/dist/toolchain-schema.cjs +1 -1
  41. package/dist/toolchain-schema.cjs.map +1 -1
  42. package/dist/toolchain-schema.mjs +2 -2
  43. package/dist/typecheck-parity-cli.cjs.map +1 -1
  44. package/dist/typecheck-parity-cli.mjs.map +1 -1
  45. package/dist/typecheck-parity.cjs +8 -7
  46. package/dist/typecheck-parity.cjs.map +1 -1
  47. package/dist/typecheck-parity.mjs +6 -5
  48. package/dist/typecheck-parity.mjs.map +1 -1
  49. package/dist/typecheck-probe-cli.cjs +1 -1
  50. package/dist/typecheck-probe-cli.cjs.map +1 -1
  51. package/dist/typecheck-probe-cli.mjs +1 -1
  52. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"toolchain-check-cli.cjs","names":["parseToolchainPolicy","checkToolchain"],"sources":["../src/toolchain-check-cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { readFileSync } from \"node:fs\";\n\nimport { checkToolchain } from \"./toolchain-guard\";\nimport { parseToolchainPolicy } from \"./toolchain-schema\";\n\ntry {\n const args = process.argv.slice(2);\n if (args.length === 1 && args[0] === \"--help\") {\n process.stdout.write(\n \"Usage: stll-toolchain-check (opt-outs: tracked stll-toolchain.json)\\n\",\n );\n process.exit(0);\n }\n if (args.length !== 0) throw new Error(`unexpected argument: ${args.at(0)}`);\n const policy = parseToolchainPolicy(\n JSON.parse(\n readFileSync(new URL(\"../toolchain.json\", import.meta.url), \"utf8\"),\n ),\n );\n const diagnostics = checkToolchain({\n root: process.cwd(),\n policy,\n onDelegated: ({ path, line, tool, selector, ref }) =>\n process.stdout.write(\n `${path}:${line}: [runtime-delegated] setup-${tool} ${selector} delegates its version to checkout ref ${ref}\\n`,\n ),\n });\n for (const diagnostic of diagnostics)\n process.stderr.write(\n `${diagnostic.path}:${diagnostic.line}: [${diagnostic.rule}] ${diagnostic.message}\\n`,\n );\n if (diagnostics.length > 0) process.exitCode = 1;\n} catch (error) {\n process.stderr.write(\n `toolchain-check:1: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exitCode = 1;\n}\n"],"mappings":";;;;;;AAMA,IAAI;CACF,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;CACjC,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,UAAU;EAC7C,QAAQ,OAAO,MACb,uEACF;EACA,QAAQ,KAAK,CAAC;CAChB;CACA,IAAI,KAAK,WAAW,GAAG,MAAM,IAAI,MAAM,wBAAwB,KAAK,GAAG,CAAC,GAAG;CAC3E,MAAM,SAASA,yBAAAA,qBACb,KAAK,OAAA,GAAA,QAAA,aAAA,CACU,IAAI,IAAI,qBAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,IAAoC,GAAG,MAAM,CACpE,CACF;CACA,MAAM,cAAcC,wBAAAA,eAAe;EACjC,MAAM,QAAQ,IAAI;EAClB;EACA,cAAc,EAAE,MAAM,MAAM,MAAM,UAAU,UAC1C,QAAQ,OAAO,MACb,GAAG,KAAK,GAAG,KAAK,8BAA8B,KAAK,GAAG,SAAS,yCAAyC,IAAI,GAC9G;CACJ,CAAC;CACD,KAAK,MAAM,cAAc,aACvB,QAAQ,OAAO,MACb,GAAG,WAAW,KAAK,GAAG,WAAW,KAAK,KAAK,WAAW,KAAK,IAAI,WAAW,QAAQ,GACpF;CACF,IAAI,YAAY,SAAS,GAAG,QAAQ,WAAW;AACjD,SAAS,OAAO;CACd,QAAQ,OAAO,MACb,sBAAsB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAC/E;CACA,QAAQ,WAAW;AACrB"}
1
+ {"version":3,"file":"toolchain-check-cli.cjs","names":["parseToolchainPolicy","readFileSync","checkToolchain"],"sources":["../src/toolchain-check-cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { readFileSync } from \"node:fs\";\n\nimport { checkToolchain } from \"./toolchain-guard\";\nimport { parseToolchainPolicy } from \"./toolchain-schema\";\n\ntry {\n const args = process.argv.slice(2);\n if (args.length === 1 && args[0] === \"--help\") {\n process.stdout.write(\n \"Usage: stll-toolchain-check (opt-outs: tracked stll-toolchain.json)\\n\",\n );\n process.exit(0);\n }\n if (args.length !== 0) throw new Error(`unexpected argument: ${args.at(0)}`);\n const policy = parseToolchainPolicy(\n JSON.parse(\n readFileSync(new URL(\"../toolchain.json\", import.meta.url), \"utf8\"),\n ),\n );\n const diagnostics = checkToolchain({\n root: process.cwd(),\n policy,\n onDelegated: ({ path, line, tool, selector, ref }) =>\n process.stdout.write(\n `${path}:${line}: [runtime-delegated] setup-${tool} ${selector} delegates its version to checkout ref ${ref}\\n`,\n ),\n });\n for (const diagnostic of diagnostics)\n process.stderr.write(\n `${diagnostic.path}:${diagnostic.line}: [${diagnostic.rule}] ${diagnostic.message}\\n`,\n );\n if (diagnostics.length > 0) process.exitCode = 1;\n} catch (error) {\n process.stderr.write(\n `toolchain-check:1: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exitCode = 1;\n}\n"],"mappings":";;;;;;AAMA,IAAI;CACF,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;CACjC,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,UAAU;EAC7C,QAAQ,OAAO,MACb,uEACF;EACA,QAAQ,KAAK,CAAC;CAChB;CACA,IAAI,KAAK,WAAW,GAAG,MAAM,IAAI,MAAM,wBAAwB,KAAK,GAAG,CAAC,GAAG;CAC3E,MAAM,SAASA,yBAAAA,qBACb,KAAK,OAAA,GACHC,QAAAA,aAAAA,CAAa,IAAI,IAAI,qBAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,IAAoC,GAAG,MAAM,CACpE,CACF;CACA,MAAM,cAAcC,wBAAAA,eAAe;EACjC,MAAM,QAAQ,IAAI;EAClB;EACA,cAAc,EAAE,MAAM,MAAM,MAAM,UAAU,UAC1C,QAAQ,OAAO,MACb,GAAG,KAAK,GAAG,KAAK,8BAA8B,KAAK,GAAG,SAAS,yCAAyC,IAAI,GAC9G;CACJ,CAAC;CACD,KAAK,MAAM,cAAc,aACvB,QAAQ,OAAO,MACb,GAAG,WAAW,KAAK,GAAG,WAAW,KAAK,KAAK,WAAW,KAAK,IAAI,WAAW,QAAQ,GACpF;CACF,IAAI,YAAY,SAAS,GAAG,QAAQ,WAAW;AACjD,SAAS,OAAO;CACd,QAAQ,OAAO,MACb,sBAAsB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAC/E;CACA,QAAQ,WAAW;AACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"toolchain-check-cli.mjs","names":[],"sources":["../src/toolchain-check-cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { readFileSync } from \"node:fs\";\n\nimport { checkToolchain } from \"./toolchain-guard\";\nimport { parseToolchainPolicy } from \"./toolchain-schema\";\n\ntry {\n const args = process.argv.slice(2);\n if (args.length === 1 && args[0] === \"--help\") {\n process.stdout.write(\n \"Usage: stll-toolchain-check (opt-outs: tracked stll-toolchain.json)\\n\",\n );\n process.exit(0);\n }\n if (args.length !== 0) throw new Error(`unexpected argument: ${args.at(0)}`);\n const policy = parseToolchainPolicy(\n JSON.parse(\n readFileSync(new URL(\"../toolchain.json\", import.meta.url), \"utf8\"),\n ),\n );\n const diagnostics = checkToolchain({\n root: process.cwd(),\n policy,\n onDelegated: ({ path, line, tool, selector, ref }) =>\n process.stdout.write(\n `${path}:${line}: [runtime-delegated] setup-${tool} ${selector} delegates its version to checkout ref ${ref}\\n`,\n ),\n });\n for (const diagnostic of diagnostics)\n process.stderr.write(\n `${diagnostic.path}:${diagnostic.line}: [${diagnostic.rule}] ${diagnostic.message}\\n`,\n );\n if (diagnostics.length > 0) process.exitCode = 1;\n} catch (error) {\n process.stderr.write(\n `toolchain-check:1: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exitCode = 1;\n}\n"],"mappings":";;;;;AAMA,IAAI;CACF,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;CACjC,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,UAAU;EAC7C,QAAQ,OAAO,MACb,uEACF;EACA,QAAQ,KAAK,CAAC;CAChB;CACA,IAAI,KAAK,WAAW,GAAG,MAAM,IAAI,MAAM,wBAAwB,KAAK,GAAG,CAAC,GAAG;CAC3E,MAAM,SAAS,qBACb,KAAK,MACH,aAAa,IAAI,IAAI,qBAAqB,OAAO,KAAK,GAAG,GAAG,MAAM,CACpE,CACF;CACA,MAAM,cAAc,eAAe;EACjC,MAAM,QAAQ,IAAI;EAClB;EACA,cAAc,EAAE,MAAM,MAAM,MAAM,UAAU,UAC1C,QAAQ,OAAO,MACb,GAAG,KAAK,GAAG,KAAK,8BAA8B,KAAK,GAAG,SAAS,yCAAyC,IAAI,GAC9G;CACJ,CAAC;CACD,KAAK,MAAM,cAAc,aACvB,QAAQ,OAAO,MACb,GAAG,WAAW,KAAK,GAAG,WAAW,KAAK,KAAK,WAAW,KAAK,IAAI,WAAW,QAAQ,GACpF;CACF,IAAI,YAAY,SAAS,GAAG,QAAQ,WAAW;AACjD,SAAS,OAAO;CACd,QAAQ,OAAO,MACb,sBAAsB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAC/E;CACA,QAAQ,WAAW;AACrB"}
1
+ {"version":3,"file":"toolchain-check-cli.mjs","names":[],"sources":["../src/toolchain-check-cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { readFileSync } from \"node:fs\";\n\nimport { checkToolchain } from \"./toolchain-guard\";\nimport { parseToolchainPolicy } from \"./toolchain-schema\";\n\ntry {\n const args = process.argv.slice(2);\n if (args.length === 1 && args[0] === \"--help\") {\n process.stdout.write(\n \"Usage: stll-toolchain-check (opt-outs: tracked stll-toolchain.json)\\n\",\n );\n process.exit(0);\n }\n if (args.length !== 0) throw new Error(`unexpected argument: ${args.at(0)}`);\n const policy = parseToolchainPolicy(\n JSON.parse(\n readFileSync(new URL(\"../toolchain.json\", import.meta.url), \"utf8\"),\n ),\n );\n const diagnostics = checkToolchain({\n root: process.cwd(),\n policy,\n onDelegated: ({ path, line, tool, selector, ref }) =>\n process.stdout.write(\n `${path}:${line}: [runtime-delegated] setup-${tool} ${selector} delegates its version to checkout ref ${ref}\\n`,\n ),\n });\n for (const diagnostic of diagnostics)\n process.stderr.write(\n `${diagnostic.path}:${diagnostic.line}: [${diagnostic.rule}] ${diagnostic.message}\\n`,\n );\n if (diagnostics.length > 0) process.exitCode = 1;\n} catch (error) {\n process.stderr.write(\n `toolchain-check:1: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exitCode = 1;\n}\n"],"mappings":";;;;;AAMA,IAAI;CACF,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;CACjC,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,UAAU;EAC7C,QAAQ,OAAO,MACb,uEACF;EACA,QAAQ,KAAK,CAAC;CAChB;CACA,IAAI,KAAK,WAAW,GAAG,MAAM,IAAI,MAAM,wBAAwB,KAAK,GAAG,CAAC,GAAG;CAC3E,MAAM,SAAS,qBACb,KAAK,MACH,aAAa,IAAI,IAAI,qBAAqB,YAAY,GAAG,GAAG,MAAM,CACpE,CACF;CACA,MAAM,cAAc,eAAe;EACjC,MAAM,QAAQ,IAAI;EAClB;EACA,cAAc,EAAE,MAAM,MAAM,MAAM,UAAU,UAC1C,QAAQ,OAAO,MACb,GAAG,KAAK,GAAG,KAAK,8BAA8B,KAAK,GAAG,SAAS,yCAAyC,IAAI,GAC9G;CACJ,CAAC;CACD,KAAK,MAAM,cAAc,aACvB,QAAQ,OAAO,MACb,GAAG,WAAW,KAAK,GAAG,WAAW,KAAK,KAAK,WAAW,KAAK,IAAI,WAAW,QAAQ,GACpF;CACF,IAAI,YAAY,SAAS,GAAG,QAAQ,WAAW;AACjD,SAAS,OAAO;CACd,QAAQ,OAAO,MACb,sBAAsB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAC/E;CACA,QAAQ,WAAW;AACrB"}
@@ -1,18 +1,19 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime.cjs");
2
2
  const require_toolchain_inputs = require("./toolchain-inputs.cjs");
3
+ const require_git_tracked_output = require("./git-tracked-output.cjs");
3
4
  const require_toolchain_schema = require("./toolchain-schema.cjs");
4
5
  let node_fs = require("node:fs");
5
6
  let node_child_process = require("node:child_process");
6
7
  let node_path = require("node:path");
7
8
  node_path = require_rolldown_runtime.__toESM(node_path, 1);
8
9
  let semver = require("semver");
10
+ let smol_toml = require("smol-toml");
9
11
  let yaml = require("yaml");
10
12
  let picomatch = require("picomatch");
11
13
  picomatch = require_rolldown_runtime.__toESM(picomatch, 1);
12
- let smol_toml = require("smol-toml");
13
14
  //#endregion
14
15
  //#region src/toolchain-consumer-checks.ts
15
- const consumerRunnerVersion = "1.0.1";
16
+ const consumerRunnerVersion = "1.1.0";
16
17
  const consumerCheckWorkflow = "stella/.github/.github/workflows/package-consumer-compat.yml";
17
18
  const record$7 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
18
19
  const repositoryDirectory = (value) => typeof value === "string" && value !== "" && !value.includes("\\") && !value.includes("${{") && !value.split("").some((character) => {
@@ -194,7 +195,8 @@ const checkConsumerChecks = ({ declarations, files, policy }) => {
194
195
  const fixtureManifest = node_path.default.posix.join(declaration.fixturePath, "consumer-compat.json");
195
196
  const fixtureSource = files[fixtureManifest];
196
197
  if (fixtureSource === void 0) throw new Error(`consumerChecks fixture configuration must be tracked: ${fixtureManifest}`);
197
- const fixtures = require_toolchain_schema.parseConsumerFixtures(JSON.parse(fixtureSource));
198
+ const fixtureConfiguration = JSON.parse(fixtureSource);
199
+ const fixtures = require_toolchain_schema.parseConsumerFixtures(fixtureConfiguration);
198
200
  require_toolchain_schema.assertConsumerFixtureSelection({
199
201
  selected: declaration.packages,
200
202
  fixtures
@@ -1107,14 +1109,15 @@ const shellCommandSegments = (command, grouping = "boundaries") => {
1107
1109
  for (const source of sources) {
1108
1110
  const firstSegment = segments.length;
1109
1111
  segments.push([]);
1110
- for (const { kind, value: word } of shellArgumentTokens(shellTokens(source))) if (kind === "boundary") if ([
1111
- "(",
1112
- ")",
1113
- "{",
1114
- "}"
1115
- ].includes(word) && grouping === "tokens") segments.at(-1)?.push(word);
1116
- else segments.push([]);
1117
- else segments.at(-1)?.push(word);
1112
+ for (const { kind, value: word } of shellArgumentTokens(shellTokens(source))) if (kind === "boundary") {
1113
+ if ([
1114
+ "(",
1115
+ ")",
1116
+ "{",
1117
+ "}"
1118
+ ].includes(word) && grouping === "tokens") segments.at(-1)?.push(word);
1119
+ else segments.push([]);
1120
+ } else segments.at(-1)?.push(word);
1118
1121
  for (const words of segments.slice(firstSegment)) {
1119
1122
  const body = shellCommandBody(words);
1120
1123
  if (body === void 0) continue;
@@ -1608,7 +1611,8 @@ const checkPackageFiles = ({ files, policy }) => {
1608
1611
  if (resolved === specifier) return false;
1609
1612
  if (qualifier === void 0 || (0, semver.validRange)(qualifier) === null) return true;
1610
1613
  if (typeof specifier !== "string") return false;
1611
- const release = (0, semver.valid)(specifier.startsWith("npm:") ? specifier.slice(specifier.lastIndexOf("@") + 1) : specifier);
1614
+ const versionSpecifier = specifier.startsWith("npm:") ? specifier.slice(specifier.lastIndexOf("@") + 1) : specifier;
1615
+ const release = (0, semver.valid)(versionSpecifier);
1612
1616
  return release !== null && (0, semver.satisfies)(release, qualifier);
1613
1617
  }) && typeof resolved === "string" && tsSpecifiers.get(name)?.has(resolved)) add({
1614
1618
  file,
@@ -2203,28 +2207,30 @@ const checkRuntimeFile = ({ file, text, policy, trackedFiles, readFile, reposito
2203
2207
  if (record$1(defaults) && defaults["rust-version"] !== void 0) rustFloor(defaults["rust-version"]);
2204
2208
  const pkg = parsed["package"];
2205
2209
  const version = record$1(pkg) ? pkg["rust-version"] : void 0;
2206
- if (version !== void 0) if (!record$1(version)) rustFloor(version);
2207
- else {
2208
- let inherited;
2209
- if (version["workspace"] === true && record$1(pkg)) {
2210
- const explicit = pkg["workspace"];
2211
- let directory = node_path.default.posix.dirname(file);
2212
- const explicitPath = typeof explicit === "string" && !explicit.includes("\\") && !explicit.includes(":") && !explicit.includes("${{") && !node_path.default.posix.isAbsolute(explicit) ? node_path.default.posix.normalize(node_path.default.posix.join(directory, explicit)) : void 0;
2213
- if (explicit === void 0 || explicitPath !== void 0 && explicitPath !== ".." && !explicitPath.startsWith("../")) {
2214
- if (explicitPath !== void 0) directory = explicitPath;
2215
- while (true) {
2216
- const table = readManifest(node_path.default.posix.join(directory, "Cargo.toml"))?.["workspace"];
2217
- if (record$1(table)) {
2218
- const fields = table["package"];
2219
- inherited = record$1(fields) ? fields["rust-version"] : void 0;
2220
- break;
2210
+ if (version !== void 0) {
2211
+ if (!record$1(version)) rustFloor(version);
2212
+ else {
2213
+ let inherited;
2214
+ if (version["workspace"] === true && record$1(pkg)) {
2215
+ const explicit = pkg["workspace"];
2216
+ let directory = node_path.default.posix.dirname(file);
2217
+ const explicitPath = typeof explicit === "string" && !explicit.includes("\\") && !explicit.includes(":") && !explicit.includes("${{") && !node_path.default.posix.isAbsolute(explicit) ? node_path.default.posix.normalize(node_path.default.posix.join(directory, explicit)) : void 0;
2218
+ if (explicit === void 0 || explicitPath !== void 0 && explicitPath !== ".." && !explicitPath.startsWith("../")) {
2219
+ if (explicitPath !== void 0) directory = explicitPath;
2220
+ while (true) {
2221
+ const table = readManifest(node_path.default.posix.join(directory, "Cargo.toml"))?.["workspace"];
2222
+ if (record$1(table)) {
2223
+ const fields = table["package"];
2224
+ inherited = record$1(fields) ? fields["rust-version"] : void 0;
2225
+ break;
2226
+ }
2227
+ if (explicit !== void 0 || directory === ".") break;
2228
+ directory = node_path.default.posix.dirname(directory);
2221
2229
  }
2222
- if (explicit !== void 0 || directory === ".") break;
2223
- directory = node_path.default.posix.dirname(directory);
2224
2230
  }
2225
2231
  }
2232
+ rustFloor(inherited);
2226
2233
  }
2227
- rustFloor(inherited);
2228
2234
  }
2229
2235
  }
2230
2236
  }
@@ -2845,9 +2851,10 @@ const checkRuntimeFile = ({ file, text, policy, trackedFiles, readFile, reposito
2845
2851
  for (let index = start + 3; index < value.length; index++) {
2846
2852
  const character = value.at(index);
2847
2853
  if (quote !== void 0) {
2848
- if (character === quote) if (quote === "'" && value.at(index + 1) === "'") index++;
2849
- else quote = void 0;
2850
- else if (quote === "\"" && character === "\\") index++;
2854
+ if (character === quote) {
2855
+ if (quote === "'" && value.at(index + 1) === "'") index++;
2856
+ else quote = void 0;
2857
+ } else if (quote === "\"" && character === "\\") index++;
2851
2858
  continue;
2852
2859
  }
2853
2860
  if (character === "'" || character === "\"") quote = character;
@@ -3249,15 +3256,7 @@ const parseToolchainConfiguration = (input) => {
3249
3256
  /** Read one tracked configuration snapshot for guards and policy generation. */
3250
3257
  const readToolchainInputs = (root) => {
3251
3258
  const diagnostics = [];
3252
- const tracked = (0, node_child_process.execFileSync)("git", [
3253
- "ls-files",
3254
- "-z",
3255
- "--cached",
3256
- "--stage"
3257
- ], {
3258
- cwd: root,
3259
- encoding: "utf8"
3260
- }).split("\0").filter((entry) => entry !== "" && !entry.startsWith("160000 ")).map((entry) => entry.slice(entry.indexOf(" ") + 1));
3259
+ const tracked = require_git_tracked_output.readGitTrackedOutput(root, "staged").split("\0").filter((entry) => entry !== "" && !entry.startsWith("160000 ")).map((entry) => entry.slice(entry.indexOf(" ") + 1));
3261
3260
  const files = {};
3262
3261
  const trackedFiles = new Set(tracked);
3263
3262
  const resolvedRoot = (0, node_fs.realpathSync)(root);
@@ -3349,26 +3348,36 @@ const checkToolchain = ({ root, policy, onDelegated }) => {
3349
3348
  line: 1,
3350
3349
  message: "cloud setup script requires an explicit cloud declaration in stll-toolchain.json"
3351
3350
  });
3352
- if (cloud !== void 0) try {
3353
- const nodeVersion = files[".node-version"];
3354
- if (nodeVersion === void 0) throw new Error("cloud setup requires a tracked root .node-version with an exact stable release");
3355
- if (script !== require_toolchain_inputs.generateCloudSetup({
3356
- policy,
3357
- cloud,
3358
- nodeVersion: nodeVersion.trim()
3359
- })) diagnostics.push({
3351
+ if (cloud !== void 0) {
3352
+ if (!require_toolchain_inputs.hasCloudSessionStartHook(files[".claude/settings.json"])) diagnostics.push({
3360
3353
  rule: "cloud-setup-drift",
3361
- path: require_toolchain_inputs.cloudSetupPath,
3354
+ path: require_toolchain_inputs.cloudClaudeSettingsPath,
3362
3355
  line: 1,
3363
- message: "cloud setup script is missing or differs from shared policy; run stll-cloud-setup"
3364
- });
3365
- } catch (error) {
3366
- diagnostics.push({
3367
- rule: "cloud-setup-drift",
3368
- path: require_toolchain_inputs.cloudSetupPath,
3369
- line: 1,
3370
- message: error instanceof Error ? error.message : String(error)
3356
+ message: `tracked Claude cloud SessionStart hook is missing, disabled or differs from shared policy; run stll-cloud-setup; if automatic merge is unsafe, ${require_toolchain_inputs.cloudSessionStartFix}`
3371
3357
  });
3358
+ try {
3359
+ const nodeVersion = files[".node-version"];
3360
+ if (nodeVersion === void 0) throw new Error("cloud setup requires a tracked root .node-version with an exact stable release");
3361
+ if (script !== require_toolchain_inputs.generateCloudSetup({
3362
+ policy,
3363
+ cloud,
3364
+ nodeVersion: nodeVersion.trim(),
3365
+ files,
3366
+ rustExceptions: configuration.rustExceptions
3367
+ })) diagnostics.push({
3368
+ rule: "cloud-setup-drift",
3369
+ path: require_toolchain_inputs.cloudSetupPath,
3370
+ line: 1,
3371
+ message: "cloud setup script is missing or differs from shared policy; run stll-cloud-setup"
3372
+ });
3373
+ } catch (error) {
3374
+ diagnostics.push({
3375
+ rule: "cloud-setup-drift",
3376
+ path: require_toolchain_inputs.cloudSetupPath,
3377
+ line: 1,
3378
+ message: error instanceof Error ? error.message : String(error)
3379
+ });
3380
+ }
3372
3381
  }
3373
3382
  const exercisedFloors = /* @__PURE__ */ new Set();
3374
3383
  const mismatchedFloors = /* @__PURE__ */ new Set();