no-mistakes 0.90.0 → 0.91.1

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.
@@ -5,9 +5,17 @@ const { spawn } = require("node:child_process");
5
5
  const { boundedDiagnostic } = require("../planning-impact-cli");
6
6
  const { resolveNativePackage } = require("../scripts/native-package");
7
7
 
8
- const VALUE_OPTIONS = new Set(["--timeout", "--lock-timeout", "--jobs", "--profile", "-j"]);
8
+ const VALUE_OPTIONS = new Set([
9
+ "--timeout",
10
+ "--invocation-timeout-ms",
11
+ "--lock-timeout",
12
+ "--jobs",
13
+ "--profile",
14
+ "-j",
15
+ ]);
9
16
  const FLAG_OPTIONS = new Set(["--fail-on-lock"]);
10
- const INLINE_VALUE_OPTION = /^(?:--(?:timeout|lock-timeout|jobs|profile)=|-j)/u;
17
+ const INLINE_VALUE_OPTION =
18
+ /^(?:--(?:timeout|invocation-timeout-ms|lock-timeout|jobs|profile)=|-j)/u;
11
19
 
12
20
  function firstSubcommand(argv) {
13
21
  const index = firstSubcommandIndex(argv);
@@ -43,6 +43,8 @@ export interface ExecutedPostgresSql {
43
43
  /** True only when all incompleteness is from generated value binds. Parse before classifying reads. */
44
44
  onlyValuePlaceholders: boolean;
45
45
  kind: ExecutedPostgresSqlKind;
46
+ /** Evaluator blocker; null for complete SQL or proven generated value binds. */
47
+ incompleteReason: string | null;
46
48
  }
47
49
 
48
50
  /** Extract configured PostgreSQL executor calls from supplied TS/JS source. */
@@ -1,7 +1,9 @@
1
- /** Controls shared by every analysis invocation. Durations are in seconds. */
1
+ /** Controls shared by every analysis invocation. timeout/lockTimeout use seconds; invocationTimeoutMs uses milliseconds. */
2
2
  export interface InvocationOptions {
3
3
  /** Command execution timeout in whole non-negative seconds. Omit, `0`, or `null` disables it. CLI default remains 30. */
4
4
  timeout?: number | null;
5
+ /** Positive safe-integer native invocation budget in milliseconds, shared by lock acquisition and execution. Never extends timeout or lockTimeout; profile ci disables it. Omit to preserve existing timeout semantics; null is invalid. */
6
+ invocationTimeoutMs?: number;
5
7
  /** Maximum time to wait for the current user's invocation lock (shared across project roots), in whole non-negative seconds. Omit, `0`, or `null` waits indefinitely. CLI default remains 30. */
6
8
  lockTimeout?: number | null;
7
9
  /** Fail immediately instead of waiting when another invocation holds the lock. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "no-mistakes",
3
- "version": "0.90.0",
3
+ "version": "0.91.1",
4
4
  "description": "Deterministic impact maps, test plans, Playwright coverage, and repository checks for coding agents",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -65,9 +65,9 @@
65
65
  }
66
66
  },
67
67
  "optionalDependencies": {
68
- "no-mistakes-darwin-arm64": "0.90.0",
69
- "no-mistakes-linux-arm64-gnu": "0.90.0",
70
- "no-mistakes-linux-x64-gnu": "0.90.0",
71
- "no-mistakes-win32-x64-msvc": "0.90.0"
68
+ "no-mistakes-darwin-arm64": "0.91.1",
69
+ "no-mistakes-linux-arm64-gnu": "0.91.1",
70
+ "no-mistakes-linux-x64-gnu": "0.91.1",
71
+ "no-mistakes-win32-x64-msvc": "0.91.1"
72
72
  }
73
73
  }
@@ -84,4 +84,20 @@ function completeResult(result, requestedReports) {
84
84
  return { reports: [...omitted, ...result.reports] };
85
85
  }
86
86
 
87
- module.exports = { buildRequest, completeResult, isReservedArtifactPath };
87
+ function invocationOptions(options) {
88
+ return Object.fromEntries(
89
+ [
90
+ "timeout",
91
+ "invocationTimeoutMs",
92
+ "lockTimeout",
93
+ "failOnLock",
94
+ "jobs",
95
+ "profile",
96
+ "diagnosticsId",
97
+ ]
98
+ .filter((name) => Object.hasOwn(options, name))
99
+ .map((name) => [name, options[name]]),
100
+ );
101
+ }
102
+
103
+ module.exports = { buildRequest, completeResult, isReservedArtifactPath, invocationOptions };
@@ -14,6 +14,7 @@ const {
14
14
  buildRequest,
15
15
  completeResult,
16
16
  isReservedArtifactPath,
17
+ invocationOptions,
17
18
  } = require("./planning-impact-artifacts-inputs");
18
19
  const { basename, isAbsolute, posix, resolve, win32 } = require("node:path");
19
20
  const { TextDecoder } = require("node:util");
@@ -115,13 +116,6 @@ function decodeManifest(contents) {
115
116
  throw new Error("changed-files manifest must be valid UTF-8");
116
117
  }
117
118
  }
118
- function invocationOptions(options) {
119
- return Object.fromEntries(
120
- ["timeout", "lockTimeout", "failOnLock", "jobs", "profile", "diagnosticsId"]
121
- .filter((name) => Object.hasOwn(options, name))
122
- .map((name) => [name, options[name]]),
123
- );
124
- }
125
119
  function parseChangedFiles(source) {
126
120
  const files = [...new Set(source.split(/\r\n|[\r\n]/u).filter((line) => line.length > 0))];
127
121
  if (!files.length) throw new Error("changed-files manifest is empty");
@@ -26,6 +26,7 @@ function parsePlanningImpactArgs(argv, root) {
26
26
  timeout: { type: "string" },
27
27
  "lock-timeout": { type: "string" },
28
28
  "fail-on-lock": { type: "boolean" },
29
+ "invocation-timeout-ms": { type: "string" },
29
30
  jobs: { type: "string", short: "j" },
30
31
  profile: { type: "string" },
31
32
  help: { type: "boolean", short: "h" },
@@ -51,6 +52,14 @@ function parsePlanningImpactArgs(argv, root) {
51
52
  if (values[flag] !== undefined) options[key] = parseNonNegativeInteger(flag, values[flag]);
52
53
  }
53
54
  if (values["fail-on-lock"]) options.failOnLock = true;
55
+ if (values["invocation-timeout-ms"] !== undefined) {
56
+ options.invocationTimeoutMs = parseNonNegativeInteger(
57
+ "invocation-timeout-ms",
58
+ values["invocation-timeout-ms"],
59
+ );
60
+ if (options.invocationTimeoutMs === 0)
61
+ throw new Error("invocation-timeout-ms must be positive");
62
+ }
54
63
  if (values.profile) options.profile = values.profile;
55
64
  return options;
56
65
  }
package/test-types.d.ts CHANGED
@@ -186,6 +186,7 @@ export interface TestPlanGroup {
186
186
  }
187
187
 
188
188
  export interface TestPlanWarning {
189
+ /** Includes cargo-target-unresolved when a Rust test has no unambiguous enabled Cargo target. */
189
190
  type: string;
190
191
  message: string;
191
192
  file: string;
@@ -204,6 +205,7 @@ export interface TestTargetRow {
204
205
  }
205
206
 
206
207
  export interface TestTargetWarning {
208
+ /** Includes cargo-target-unresolved; such files retain an empty targets array. */
207
209
  type: string;
208
210
  message: string;
209
211
  file: string;