@stll/oxlint-config 1.0.2 → 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 (49) 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.map +1 -1
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/publish-build-target-vite-dts-helper.mjs +1 -2
  13. package/dist/publish-build-target-vite-dts-helper2.cjs +5 -5
  14. package/dist/publish-build-target-vite-dts-helper2.cjs.map +1 -1
  15. package/dist/publish-contract-cli.cjs +17 -16
  16. package/dist/publish-contract-cli.cjs.map +1 -1
  17. package/dist/publish-contract-cli.mjs +6 -5
  18. package/dist/publish-contract-cli.mjs.map +1 -1
  19. package/dist/publish-contract.cjs +1 -1
  20. package/dist/publish-contract.cjs.map +1 -1
  21. package/dist/publish-contract.mjs +1 -1
  22. package/dist/rolldown-runtime.cjs +1 -1
  23. package/dist/toolchain-changed.cjs +19 -14
  24. package/dist/toolchain-changed.cjs.map +1 -1
  25. package/dist/toolchain-changed.mjs +21 -16
  26. package/dist/toolchain-changed.mjs.map +1 -1
  27. package/dist/toolchain-check-cli.cjs.map +1 -1
  28. package/dist/toolchain-check-cli.mjs.map +1 -1
  29. package/dist/toolchain-guard.cjs +66 -50
  30. package/dist/toolchain-guard.cjs.map +1 -1
  31. package/dist/toolchain-guard.mjs +73 -57
  32. package/dist/toolchain-guard.mjs.map +1 -1
  33. package/dist/toolchain-inputs.cjs +670 -32
  34. package/dist/toolchain-inputs.cjs.map +1 -1
  35. package/dist/toolchain-inputs.mjs +647 -33
  36. package/dist/toolchain-inputs.mjs.map +1 -1
  37. package/dist/toolchain-schema.cjs +1 -1
  38. package/dist/toolchain-schema.cjs.map +1 -1
  39. package/dist/toolchain-schema.mjs +2 -2
  40. package/dist/typecheck-parity-cli.cjs.map +1 -1
  41. package/dist/typecheck-parity-cli.mjs.map +1 -1
  42. package/dist/typecheck-parity.cjs +8 -7
  43. package/dist/typecheck-parity.cjs.map +1 -1
  44. package/dist/typecheck-parity.mjs +6 -5
  45. package/dist/typecheck-parity.mjs.map +1 -1
  46. package/dist/typecheck-probe-cli.cjs +1 -1
  47. package/dist/typecheck-probe-cli.cjs.map +1 -1
  48. package/dist/typecheck-probe-cli.mjs +1 -1
  49. 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"}
@@ -7,13 +7,13 @@ let node_child_process = require("node:child_process");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_rolldown_runtime.__toESM(node_path, 1);
9
9
  let semver = require("semver");
10
+ let smol_toml = require("smol-toml");
10
11
  let yaml = require("yaml");
11
12
  let picomatch = require("picomatch");
12
13
  picomatch = require_rolldown_runtime.__toESM(picomatch, 1);
13
- let smol_toml = require("smol-toml");
14
14
  //#endregion
15
15
  //#region src/toolchain-consumer-checks.ts
16
- const consumerRunnerVersion = "1.0.2";
16
+ const consumerRunnerVersion = "1.1.0";
17
17
  const consumerCheckWorkflow = "stella/.github/.github/workflows/package-consumer-compat.yml";
18
18
  const record$7 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
19
19
  const repositoryDirectory = (value) => typeof value === "string" && value !== "" && !value.includes("\\") && !value.includes("${{") && !value.split("").some((character) => {
@@ -195,7 +195,8 @@ const checkConsumerChecks = ({ declarations, files, policy }) => {
195
195
  const fixtureManifest = node_path.default.posix.join(declaration.fixturePath, "consumer-compat.json");
196
196
  const fixtureSource = files[fixtureManifest];
197
197
  if (fixtureSource === void 0) throw new Error(`consumerChecks fixture configuration must be tracked: ${fixtureManifest}`);
198
- const fixtures = require_toolchain_schema.parseConsumerFixtures(JSON.parse(fixtureSource));
198
+ const fixtureConfiguration = JSON.parse(fixtureSource);
199
+ const fixtures = require_toolchain_schema.parseConsumerFixtures(fixtureConfiguration);
199
200
  require_toolchain_schema.assertConsumerFixtureSelection({
200
201
  selected: declaration.packages,
201
202
  fixtures
@@ -1108,14 +1109,15 @@ const shellCommandSegments = (command, grouping = "boundaries") => {
1108
1109
  for (const source of sources) {
1109
1110
  const firstSegment = segments.length;
1110
1111
  segments.push([]);
1111
- for (const { kind, value: word } of shellArgumentTokens(shellTokens(source))) if (kind === "boundary") if ([
1112
- "(",
1113
- ")",
1114
- "{",
1115
- "}"
1116
- ].includes(word) && grouping === "tokens") segments.at(-1)?.push(word);
1117
- else segments.push([]);
1118
- 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);
1119
1121
  for (const words of segments.slice(firstSegment)) {
1120
1122
  const body = shellCommandBody(words);
1121
1123
  if (body === void 0) continue;
@@ -1609,7 +1611,8 @@ const checkPackageFiles = ({ files, policy }) => {
1609
1611
  if (resolved === specifier) return false;
1610
1612
  if (qualifier === void 0 || (0, semver.validRange)(qualifier) === null) return true;
1611
1613
  if (typeof specifier !== "string") return false;
1612
- 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);
1613
1616
  return release !== null && (0, semver.satisfies)(release, qualifier);
1614
1617
  }) && typeof resolved === "string" && tsSpecifiers.get(name)?.has(resolved)) add({
1615
1618
  file,
@@ -2204,28 +2207,30 @@ const checkRuntimeFile = ({ file, text, policy, trackedFiles, readFile, reposito
2204
2207
  if (record$1(defaults) && defaults["rust-version"] !== void 0) rustFloor(defaults["rust-version"]);
2205
2208
  const pkg = parsed["package"];
2206
2209
  const version = record$1(pkg) ? pkg["rust-version"] : void 0;
2207
- if (version !== void 0) if (!record$1(version)) rustFloor(version);
2208
- else {
2209
- let inherited;
2210
- if (version["workspace"] === true && record$1(pkg)) {
2211
- const explicit = pkg["workspace"];
2212
- let directory = node_path.default.posix.dirname(file);
2213
- 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;
2214
- if (explicit === void 0 || explicitPath !== void 0 && explicitPath !== ".." && !explicitPath.startsWith("../")) {
2215
- if (explicitPath !== void 0) directory = explicitPath;
2216
- while (true) {
2217
- const table = readManifest(node_path.default.posix.join(directory, "Cargo.toml"))?.["workspace"];
2218
- if (record$1(table)) {
2219
- const fields = table["package"];
2220
- inherited = record$1(fields) ? fields["rust-version"] : void 0;
2221
- 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);
2222
2229
  }
2223
- if (explicit !== void 0 || directory === ".") break;
2224
- directory = node_path.default.posix.dirname(directory);
2225
2230
  }
2226
2231
  }
2232
+ rustFloor(inherited);
2227
2233
  }
2228
- rustFloor(inherited);
2229
2234
  }
2230
2235
  }
2231
2236
  }
@@ -2846,9 +2851,10 @@ const checkRuntimeFile = ({ file, text, policy, trackedFiles, readFile, reposito
2846
2851
  for (let index = start + 3; index < value.length; index++) {
2847
2852
  const character = value.at(index);
2848
2853
  if (quote !== void 0) {
2849
- if (character === quote) if (quote === "'" && value.at(index + 1) === "'") index++;
2850
- else quote = void 0;
2851
- 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++;
2852
2858
  continue;
2853
2859
  }
2854
2860
  if (character === "'" || character === "\"") quote = character;
@@ -3342,26 +3348,36 @@ const checkToolchain = ({ root, policy, onDelegated }) => {
3342
3348
  line: 1,
3343
3349
  message: "cloud setup script requires an explicit cloud declaration in stll-toolchain.json"
3344
3350
  });
3345
- if (cloud !== void 0) try {
3346
- const nodeVersion = files[".node-version"];
3347
- if (nodeVersion === void 0) throw new Error("cloud setup requires a tracked root .node-version with an exact stable release");
3348
- if (script !== require_toolchain_inputs.generateCloudSetup({
3349
- policy,
3350
- cloud,
3351
- nodeVersion: nodeVersion.trim()
3352
- })) diagnostics.push({
3351
+ if (cloud !== void 0) {
3352
+ if (!require_toolchain_inputs.hasCloudSessionStartHook(files[".claude/settings.json"])) diagnostics.push({
3353
3353
  rule: "cloud-setup-drift",
3354
- path: require_toolchain_inputs.cloudSetupPath,
3354
+ path: require_toolchain_inputs.cloudClaudeSettingsPath,
3355
3355
  line: 1,
3356
- message: "cloud setup script is missing or differs from shared policy; run stll-cloud-setup"
3357
- });
3358
- } catch (error) {
3359
- diagnostics.push({
3360
- rule: "cloud-setup-drift",
3361
- path: require_toolchain_inputs.cloudSetupPath,
3362
- line: 1,
3363
- 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}`
3364
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
+ }
3365
3381
  }
3366
3382
  const exercisedFloors = /* @__PURE__ */ new Set();
3367
3383
  const mismatchedFloors = /* @__PURE__ */ new Set();