plumbbob 0.8.13 → 0.8.17

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 (93) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/lib/agents.js +1 -1
  3. package/dist/lib/check.js +9 -6
  4. package/dist/lib/intent.js +20 -0
  5. package/dist/lib/orient.js +4 -3
  6. package/dist/verbs/checkpoint.js +30 -11
  7. package/dist/verbs/finish.js +24 -8
  8. package/node_modules/checkride/CHANGELOG.md +234 -0
  9. package/node_modules/checkride/README.md +134 -31
  10. package/node_modules/checkride/dist/adapters.d.ts +50 -1
  11. package/node_modules/checkride/dist/adapters.d.ts.map +1 -1
  12. package/node_modules/checkride/dist/adapters.js +123 -7
  13. package/node_modules/checkride/dist/adapters.js.map +1 -1
  14. package/node_modules/checkride/dist/agent-setup/hook.d.ts.map +1 -1
  15. package/node_modules/checkride/dist/agent-setup/hook.js +15 -1
  16. package/node_modules/checkride/dist/agent-setup/hook.js.map +1 -1
  17. package/node_modules/checkride/dist/agent-setup/index.d.ts +0 -1
  18. package/node_modules/checkride/dist/agent-setup/index.d.ts.map +1 -1
  19. package/node_modules/checkride/dist/agent-setup/index.js.map +1 -1
  20. package/node_modules/checkride/dist/baseline/fallow.d.ts +64 -0
  21. package/node_modules/checkride/dist/baseline/fallow.d.ts.map +1 -0
  22. package/node_modules/checkride/dist/baseline/fallow.js +256 -0
  23. package/node_modules/checkride/dist/baseline/fallow.js.map +1 -0
  24. package/node_modules/checkride/dist/baseline/fingerprint.d.ts +4 -6
  25. package/node_modules/checkride/dist/baseline/fingerprint.d.ts.map +1 -1
  26. package/node_modules/checkride/dist/baseline/fingerprint.js +9 -4
  27. package/node_modules/checkride/dist/baseline/fingerprint.js.map +1 -1
  28. package/node_modules/checkride/dist/baseline/index.d.ts +4 -5
  29. package/node_modules/checkride/dist/baseline/index.d.ts.map +1 -1
  30. package/node_modules/checkride/dist/baseline/index.js +2 -2
  31. package/node_modules/checkride/dist/baseline/index.js.map +1 -1
  32. package/node_modules/checkride/dist/{baseline/command.d.ts → baseline-command.d.ts} +11 -9
  33. package/node_modules/checkride/dist/baseline-command.d.ts.map +1 -0
  34. package/node_modules/checkride/dist/{baseline/command.js → baseline-command.js} +9 -7
  35. package/node_modules/checkride/dist/baseline-command.js.map +1 -0
  36. package/node_modules/checkride/dist/cli.d.ts.map +1 -1
  37. package/node_modules/checkride/dist/cli.js +95 -8
  38. package/node_modules/checkride/dist/cli.js.map +1 -1
  39. package/node_modules/checkride/dist/config.d.ts +37 -12
  40. package/node_modules/checkride/dist/config.d.ts.map +1 -1
  41. package/node_modules/checkride/dist/config.js +268 -60
  42. package/node_modules/checkride/dist/config.js.map +1 -1
  43. package/node_modules/checkride/dist/digest/digest.d.ts +0 -6
  44. package/node_modules/checkride/dist/digest/digest.d.ts.map +1 -1
  45. package/node_modules/checkride/dist/digest/digest.js +3 -3
  46. package/node_modules/checkride/dist/digest/digest.js.map +1 -1
  47. package/node_modules/checkride/dist/digest/index.d.ts +1 -2
  48. package/node_modules/checkride/dist/digest/index.d.ts.map +1 -1
  49. package/node_modules/checkride/dist/digest/index.js +1 -1
  50. package/node_modules/checkride/dist/digest/index.js.map +1 -1
  51. package/node_modules/checkride/dist/doctor.d.ts +14 -1
  52. package/node_modules/checkride/dist/doctor.d.ts.map +1 -1
  53. package/node_modules/checkride/dist/doctor.js +124 -55
  54. package/node_modules/checkride/dist/doctor.js.map +1 -1
  55. package/node_modules/checkride/dist/init.d.ts +6 -0
  56. package/node_modules/checkride/dist/init.d.ts.map +1 -1
  57. package/node_modules/checkride/dist/init.js +347 -121
  58. package/node_modules/checkride/dist/init.js.map +1 -1
  59. package/node_modules/checkride/dist/links.d.ts.map +1 -1
  60. package/node_modules/checkride/dist/links.js +8 -9
  61. package/node_modules/checkride/dist/links.js.map +1 -1
  62. package/node_modules/checkride/dist/orchestrator.d.ts +56 -1
  63. package/node_modules/checkride/dist/orchestrator.d.ts.map +1 -1
  64. package/node_modules/checkride/dist/orchestrator.js +506 -138
  65. package/node_modules/checkride/dist/orchestrator.js.map +1 -1
  66. package/node_modules/checkride/dist/pack.d.ts +76 -0
  67. package/node_modules/checkride/dist/pack.d.ts.map +1 -0
  68. package/node_modules/checkride/dist/pack.js +217 -0
  69. package/node_modules/checkride/dist/pack.js.map +1 -0
  70. package/node_modules/checkride/dist/pm/translate.d.ts +18 -10
  71. package/node_modules/checkride/dist/pm/translate.d.ts.map +1 -1
  72. package/node_modules/checkride/dist/pm/translate.js +27 -13
  73. package/node_modules/checkride/dist/pm/translate.js.map +1 -1
  74. package/node_modules/checkride/dist/smoke.d.ts +86 -0
  75. package/node_modules/checkride/dist/smoke.d.ts.map +1 -0
  76. package/node_modules/checkride/dist/smoke.js +346 -0
  77. package/node_modules/checkride/dist/smoke.js.map +1 -0
  78. package/node_modules/checkride/dist/snippets.d.ts +215 -0
  79. package/node_modules/checkride/dist/snippets.d.ts.map +1 -0
  80. package/node_modules/checkride/dist/snippets.js +360 -0
  81. package/node_modules/checkride/dist/snippets.js.map +1 -0
  82. package/node_modules/checkride/package.json +4 -2
  83. package/node_modules/checkride/schema/checkride.config.schema.json +11 -6
  84. package/package.json +3 -2
  85. package/skills/pb-build/SKILL.md +7 -0
  86. package/skills/pb-park/SKILL.md +3 -2
  87. package/skills/pb-plan/SKILL.md +30 -9
  88. package/skills/pb-refine/SKILL.md +21 -6
  89. package/skills/pb-step/SKILL.md +10 -5
  90. package/skills/pb-verify/SKILL.md +12 -1
  91. package/templates/intent.md +55 -11
  92. package/node_modules/checkride/dist/baseline/command.d.ts.map +0 -1
  93. package/node_modules/checkride/dist/baseline/command.js.map +0 -1
@@ -42,6 +42,25 @@ function deepMerge(base, over) {
42
42
  function invalidConfig(reason, cause) {
43
43
  throw new Error(`invalid ${CONFIG_FILE}: ${reason}`, cause ? { cause } : undefined);
44
44
  }
45
+ const ORDER_KEYWORDS = new Set(['first', 'last', 'middle', 'single', 'any']);
46
+ /** A finite number or one of the five order keywords — everything else is a config error. */
47
+ function isOrder(v) {
48
+ return ((typeof v === 'number' && Number.isFinite(v)) ||
49
+ (typeof v === 'string' && ORDER_KEYWORDS.has(v)));
50
+ }
51
+ /**
52
+ * Read (and validate) a config entry's `order`. Returns `undefined` when absent;
53
+ * throws the friendly error on anything that is not a finite number or a keyword
54
+ * (a bogus string, `NaN`, `Infinity`). `context` names the offending check.
55
+ */
56
+ function readOrder(entry, context) {
57
+ if (entry.order === undefined)
58
+ return undefined;
59
+ if (!isOrder(entry.order)) {
60
+ invalidConfig(`'${context}' order must be a finite number or one of first, last, middle, single, any (got ${JSON.stringify(entry.order)})`);
61
+ }
62
+ return entry.order;
63
+ }
45
64
  /**
46
65
  * Read, parse, and fully resolve a config file's `extends` chain into a single
47
66
  * merged object. `stack` holds the absolute paths currently being resolved, so
@@ -49,10 +68,8 @@ function invalidConfig(reason, cause) {
49
68
  * names the file in error messages — the root config's own filename for the
50
69
  * entry point, or a repo-relative path for an inherited base.
51
70
  */
52
- function resolveConfigFile(absPath, stack, label) {
53
- if (stack.includes(absPath)) {
54
- invalidConfig(`circular extends: ${[...stack, absPath].map((p) => relative(process.cwd(), p)).join(' -> ')}`);
55
- }
71
+ /** Read and parse a config file into an object, or throw a friendly error. */
72
+ function parseConfigJson(absPath, label) {
56
73
  let raw;
57
74
  try {
58
75
  raw = JSON.parse(readFileSync(absPath, 'utf8'));
@@ -63,8 +80,14 @@ function resolveConfigFile(absPath, stack, label) {
63
80
  }
64
81
  if (!isPlainObject(raw))
65
82
  invalidConfig(`${label} is not a JSON object`);
66
- const { extends: ext, ...own } = raw;
67
- const specs = ext === undefined ? [] : Array.isArray(ext) ? ext : [ext];
83
+ return raw;
84
+ }
85
+ /** Normalize an `extends` field (absent / single / array) into a list. */
86
+ function normalizeExtends(ext) {
87
+ return ext === undefined ? [] : Array.isArray(ext) ? ext : [ext];
88
+ }
89
+ /** Resolve and left-to-right merge every base config named in `specs`. */
90
+ function resolveExtends(specs, absPath, stack, label) {
68
91
  const require = createRequire(absPath);
69
92
  let merged = {};
70
93
  for (const spec of specs) {
@@ -81,6 +104,14 @@ function resolveConfigFile(absPath, stack, label) {
81
104
  const base = resolveConfigFile(baseAbs, [...stack, absPath], relative(process.cwd(), baseAbs));
82
105
  merged = deepMerge(merged, base);
83
106
  }
107
+ return merged;
108
+ }
109
+ function resolveConfigFile(absPath, stack, label) {
110
+ if (stack.includes(absPath)) {
111
+ invalidConfig(`circular extends: ${[...stack, absPath].map((p) => relative(process.cwd(), p)).join(' -> ')}`);
112
+ }
113
+ const { extends: ext, ...own } = parseConfigJson(absPath, label);
114
+ const merged = resolveExtends(normalizeExtends(ext), absPath, stack, label);
84
115
  return deepMerge(merged, own);
85
116
  }
86
117
  /**
@@ -94,29 +125,115 @@ export function loadConfig(cwd) {
94
125
  return null;
95
126
  return resolveConfigFile(path, [], CONFIG_FILE);
96
127
  }
97
- function byName(name, adapters) {
98
- return adapters.find((a) => a.name === name) ?? null;
128
+ /**
129
+ * Find an adapter by name, preferring one that also fills `slot`. A single tool
130
+ * can fill several slots under one name — `fallow` fills `dead`, `dupes`, and
131
+ * `health` — so `"dupes": "fallow"` must resolve to the dupes adapter, not the
132
+ * first `fallow` in the registry. Falls back to a name-only match so naming a
133
+ * cross-slot adapter (e.g. reusing `oxlint` in a custom slot) still works.
134
+ */
135
+ function byName(name, adapters, slot) {
136
+ return (adapters.find((a) => a.name === name && a.slot === slot) ??
137
+ adapters.find((a) => a.name === name) ??
138
+ null);
99
139
  }
100
- /** First adapter for `slot` whose detect files are present (empty detect = always). */
101
- function detectAdapter(slot, adapters, fileExists) {
140
+ const EMPTY_MANIFEST = { scripts: new Set(), deps: new Set() };
141
+ /** Read `cwd`'s package.json script names and combined dep names; empty on any read/parse failure. */
142
+ function readManifest(cwd) {
143
+ try {
144
+ const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
145
+ return {
146
+ scripts: new Set(Object.keys(pkg.scripts ?? {})),
147
+ deps: new Set([...Object.keys(pkg.dependencies ?? {}), ...Object.keys(pkg.devDependencies ?? {})]),
148
+ };
149
+ }
150
+ catch {
151
+ return EMPTY_MANIFEST;
152
+ }
153
+ }
154
+ /** True when this adapter declares any detection signal (so absence of a match means "off", not "always"). */
155
+ function hasAnySignal(a) {
156
+ return a.detect.length > 0 || a.detectScript !== undefined || (a.detectDeps?.length ?? 0) > 0;
157
+ }
158
+ /** The `detectDeps` package that appears in the manifest, as a named signal, or `null`. */
159
+ function depSignal(a, manifest) {
160
+ const dep = a.detectDeps?.find((d) => manifest.deps.has(d));
161
+ return dep !== undefined ? `dependency '${dep}'` : null;
162
+ }
163
+ /**
164
+ * Which of an adapter's detection signals fires — named for the doctor report —
165
+ * or `null` when none does (D18). Precedence: a present `detect` file, then
166
+ * `detectScript` (`scripts.<name>`), then a `detectDeps` package in
167
+ * dependencies/devDependencies. An adapter with no signals at all (empty
168
+ * `detect`, no `detectScript`/`detectDeps` — a built-in, `publint`, `attw`,
169
+ * `pnpm audit`) is always available.
170
+ */
171
+ function detectionSignal(a, fileExists, manifest) {
172
+ const file = a.detect.find((f) => fileExists(f));
173
+ if (file !== undefined)
174
+ return file;
175
+ if (a.detectScript !== undefined && manifest.scripts.has(a.detectScript))
176
+ return `scripts.${a.detectScript}`;
177
+ return depSignal(a, manifest) ?? (hasAnySignal(a) ? null : 'always available');
178
+ }
179
+ /** First adapter for `slot` whose detection fires, plus the signal that matched (for the report). */
180
+ function detectAdapter(slot, adapters, fileExists, manifest) {
102
181
  for (const a of adapters) {
103
182
  if (a.slot !== slot)
104
183
  continue;
105
- if (a.detect.length === 0 || a.detect.some((f) => fileExists(f)))
106
- return a;
184
+ const via = detectionSignal(a, fileExists, manifest);
185
+ if (via !== null)
186
+ return { adapter: a, via };
107
187
  }
108
188
  return null;
109
189
  }
190
+ /**
191
+ * Why nothing filled `slot` on the detection path. When the slot's adapter gates
192
+ * on a package script (`detectScript`, e.g. `build`), name the missing script so
193
+ * an opted-in-but-scriptless slot stands down with a clear reason; otherwise the
194
+ * generic no-tool message.
195
+ */
196
+ function undetectedReason(slot, adapters) {
197
+ const scripted = adapters.find((a) => a.slot === slot && a.detectScript !== undefined);
198
+ return scripted ? `no '${scripted.detectScript}' script in package.json` : 'no tool detected for slot';
199
+ }
200
+ /**
201
+ * A slot whose adapter is gated on a package script (`detectScript`, e.g. `build`
202
+ * → `scripts.build`) stands down as a skip — never a red check — when that script
203
+ * is absent, however the adapter was selected. Detection already filters the
204
+ * auto-detect path; this also covers an explicit config entry, so a shared preset
205
+ * that names `build` is safe on a repo that has no build script (D18).
206
+ */
207
+ function standDownIfScriptless(check, manifest) {
208
+ const script = check.adapter?.detectScript;
209
+ if (script !== undefined && !manifest.scripts.has(script)) {
210
+ return { ...check, adapter: null, skip: `no '${script}' script in package.json` };
211
+ }
212
+ return check;
213
+ }
214
+ /**
215
+ * Carry the optional fields a config entry (`UseConfig` or `CustomCheck`) shares
216
+ * with an adapter, each spread only when present — so `applyOverrides` and
217
+ * `customAdapter` don't each repeat the include-if-defined dance. `order` is
218
+ * validated here (`slot` names the check in any error).
219
+ */
220
+ function carriedOverrides(src, slot) {
221
+ const order = readOrder(src, slot);
222
+ return {
223
+ ...(src.changedArgs !== undefined ? { changedArgs: src.changedArgs } : {}),
224
+ ...(src.fixArgs !== undefined ? { fixArgs: src.fixArgs } : {}),
225
+ ...(src.timeout !== undefined ? { timeout: src.timeout } : {}),
226
+ ...(order !== undefined ? { order } : {}),
227
+ };
228
+ }
110
229
  function applyOverrides(base, o) {
111
230
  return {
112
231
  ...base,
113
232
  ...(o.command !== undefined ? { command: o.command } : {}),
114
233
  ...(o.args !== undefined ? { args: o.args } : {}),
115
234
  ...(o.outputFile !== undefined ? { outputFile: o.outputFile } : {}),
116
- ...(o.changedArgs !== undefined ? { changedArgs: o.changedArgs } : {}),
117
- ...(o.fixArgs !== undefined ? { fixArgs: o.fixArgs } : {}),
118
- ...(o.timeout !== undefined ? { timeout: o.timeout } : {}),
119
235
  ...(o.description !== undefined ? { description: o.description } : {}),
236
+ ...carriedOverrides(o, base.slot),
120
237
  };
121
238
  }
122
239
  function customAdapter(slot, c) {
@@ -128,72 +245,163 @@ function customAdapter(slot, c) {
128
245
  command: c.command,
129
246
  args: c.args ?? [],
130
247
  outputFile: c.outputFile ?? null,
131
- ...(c.changedArgs !== undefined ? { changedArgs: c.changedArgs } : {}),
132
- ...(c.fixArgs !== undefined ? { fixArgs: c.fixArgs } : {}),
133
- ...(c.timeout !== undefined ? { timeout: c.timeout } : {}),
248
+ ...carriedOverrides(c, slot),
134
249
  devDeps: {},
135
250
  };
136
251
  }
137
- function active(slot, adapter, explicit = false) {
138
- return { slot: slot.name, optIn: slot.optIn ?? false, adapter, skip: null, explicit };
252
+ /** Resolve a check's effective order: adapter (config-overridden) `order` ?? slot `order` ?? `'any'` (D1). */
253
+ function effectiveOrder(slot, adapter) {
254
+ return adapter?.order ?? slot.order ?? 'any';
255
+ }
256
+ function active(slot, adapter, explicit = false, detectedVia) {
257
+ return {
258
+ slot: slot.name,
259
+ optIn: slot.optIn ?? false,
260
+ adapter,
261
+ skip: null,
262
+ order: effectiveOrder(slot, adapter),
263
+ explicit,
264
+ ...(detectedVia !== undefined ? { detectedVia } : {}),
265
+ };
139
266
  }
140
267
  function skipped(slot, reason, explicit = false) {
141
- return { slot: slot.name, optIn: slot.optIn ?? false, adapter: null, skip: reason, explicit };
268
+ return {
269
+ slot: slot.name,
270
+ optIn: slot.optIn ?? false,
271
+ adapter: null,
272
+ skip: reason,
273
+ order: effectiveOrder(slot, null),
274
+ explicit,
275
+ };
142
276
  }
143
- function resolveOne(slot, entry, adapters, fileExists) {
144
- // Any non-`false` config entry is an explicit opt-in for this slot (`false`
145
- // disables it, so it never runs regardless). Detection (no entry) is not.
146
- const explicit = entry !== undefined && entry !== false;
147
- if (entry === false) {
148
- return skipped(slot, 'disabled in checkride.config.json');
277
+ /**
278
+ * Resolve an object-form config entry — `{ use }` (an adapter with overrides) or
279
+ * `{ command }` (a custom adapter) — for `slot`. Returns `null` when the entry is
280
+ * neither, so the caller falls through to detection.
281
+ */
282
+ function resolveObjectEntry(slot, entry, adapters, explicit) {
283
+ if ('use' in entry) {
284
+ const base = byName(entry.use, adapters, slot.name);
285
+ return base
286
+ ? active(slot, applyOverrides(base, entry), explicit)
287
+ : skipped(slot, `configured adapter '${entry.use}' is not in the registry`, explicit);
288
+ }
289
+ if ('command' in entry) {
290
+ return active(slot, customAdapter(slot.name, entry), explicit);
149
291
  }
292
+ return null;
293
+ }
294
+ function resolveConfigOrDetect(slot, entry, adapters, fileExists, manifest, explicit) {
150
295
  if (typeof entry === 'string') {
151
- const adapter = byName(entry, adapters);
296
+ const adapter = byName(entry, adapters, slot.name);
152
297
  return adapter
153
298
  ? active(slot, adapter, explicit)
154
299
  : skipped(slot, `configured adapter '${entry}' is not in the registry`, explicit);
155
300
  }
156
301
  if (entry && typeof entry === 'object') {
157
- if ('use' in entry) {
158
- const base = byName(entry.use, adapters);
159
- return base
160
- ? active(slot, applyOverrides(base, entry), explicit)
161
- : skipped(slot, `configured adapter '${entry.use}' is not in the registry`, explicit);
162
- }
163
- if ('command' in entry) {
164
- return active(slot, customAdapter(slot.name, entry), explicit);
165
- }
302
+ const resolved = resolveObjectEntry(slot, entry, adapters, explicit);
303
+ if (resolved !== null)
304
+ return resolved;
166
305
  }
167
- const detected = detectAdapter(slot.name, adapters, fileExists);
168
- return detected ? active(slot, detected) : skipped(slot, 'no tool detected for slot');
306
+ const detected = detectAdapter(slot.name, adapters, fileExists, manifest);
307
+ if (!detected)
308
+ return skipped(slot, undetectedReason(slot.name, adapters), explicit);
309
+ // Record only a concrete signal (file/script/dep); an always-available adapter
310
+ // matched nothing in particular, so it carries no detection provenance.
311
+ const via = detected.via === 'always available' ? undefined : detected.via;
312
+ return active(slot, detected.adapter, false, via);
313
+ }
314
+ function resolveOne(slot, entry, adapters, fileExists, manifest) {
315
+ // Any non-`false` config entry is an explicit opt-in for this slot (`false`
316
+ // disables it, so it never runs regardless). Detection (no entry) is not.
317
+ const explicit = entry !== undefined && entry !== false;
318
+ if (entry === false) {
319
+ return skipped(slot, 'disabled in checkride.config.json');
320
+ }
321
+ const resolved = resolveConfigOrDetect(slot, entry, adapters, fileExists, manifest, explicit);
322
+ // A script-gated adapter (build) stands down — never red — when its script is
323
+ // absent, even when config named it explicitly (D18).
324
+ return standDownIfScriptless(resolved, manifest);
325
+ }
326
+ /**
327
+ * Resolve a config-only custom check (an object with `command`, keyed by a name
328
+ * not in the catalogue — e.g. a project's `"licenses"` check), or `null` when
329
+ * `entry` is not such a check. Its effective order rides on the resolved check
330
+ * (config `order` ?? `'any'`). A custom check with `detect` files stands down
331
+ * (skipped, not failed) when none of them are present.
332
+ */
333
+ function customCheckEntry(name, entry, fileExists) {
334
+ if (!(entry && typeof entry === 'object' && !('use' in entry) && 'command' in entry))
335
+ return null;
336
+ const detect = entry.detect ?? [];
337
+ if (detect.length > 0 && !detect.some((f) => fileExists(f))) {
338
+ // No adapter carries the order on a skip, so pin it on the synthetic slot.
339
+ const order = readOrder(entry, name);
340
+ return skipped(order !== undefined ? { name, order } : { name }, 'no detect file present');
341
+ }
342
+ return active({ name }, customAdapter(name, entry));
343
+ }
344
+ /**
345
+ * Resolve every config-only custom check (config key order preserved), skipping
346
+ * any name that fills a catalogue slot. Order is baked onto each resolved check;
347
+ * `resolveChecks` sorts the combined list.
348
+ */
349
+ function foldCustomChecks(checks, catalogueNames, fileExists) {
350
+ const customs = [];
351
+ for (const [name, entry] of Object.entries(checks)) {
352
+ if (catalogueNames.has(name))
353
+ continue;
354
+ const resolved = customCheckEntry(name, entry, fileExists);
355
+ if (resolved !== null)
356
+ customs.push(resolved);
357
+ }
358
+ return customs;
359
+ }
360
+ /** Group rank in D1's sequence: firsts (0), the numeric line incl. `'any'`/`'middle'` (1), singles (2), lasts (3). */
361
+ function groupRank(order) {
362
+ if (order === 'first')
363
+ return 0;
364
+ if (order === 'single')
365
+ return 2;
366
+ if (order === 'last')
367
+ return 3;
368
+ return 1; // a number, or 'any'/'middle' — the main line
369
+ }
370
+ /** Position on the numeric line; `'any'`/`'middle'` sit at 0 (v1's conservative placement, D1). */
371
+ function lineValue(order) {
372
+ return typeof order === 'number' ? order : 0;
169
373
  }
170
374
  /**
171
- * Resolve every catalogue slot (in order) to an adapter or a skip reason, and
172
- * fold in any config-only custom checks (an object with a `command`, keyed by a
173
- * name not in the catalogue — e.g. a project's `"licenses"` check). Each custom
174
- * check runs ahead of the catalogue (`order: 'first'`) or after it (`'last'`,
175
- * the default); within a group, config key order is preserved. A custom check
176
- * that declares `detect` files is skipped when none of them are present.
375
+ * Resolve every catalogue slot (in SLOTS order) to an adapter or a skip reason,
376
+ * fold in the config-only custom checks (config key order), then sort into D1's
377
+ * group sequence: firsts, the numeric line ascending (`'any'`/`'middle'` at 0),
378
+ * singles, lasts. The natural order — catalogue before customs — is the stable
379
+ * within-group tie-break, so within any group catalogue members keep SLOTS order
380
+ * and precede customs, which keep config-key order. Execution stays sequential;
381
+ * the scheduler (a later step) waves on the same effective `order`.
177
382
  */
178
383
  export function resolveChecks(input) {
179
384
  const cwd = input.cwd ?? process.cwd();
180
385
  const fileExists = input.fileExists ?? ((file) => existsSync(join(cwd, file)));
386
+ // Read package.json only against an explicit `cwd`; a caller that injects just
387
+ // `fileExists` (a test, `inventory`) wants detection driven by that alone, not
388
+ // the ambient process cwd — so it gets an empty manifest unless one is passed.
389
+ const manifest = input.manifest ?? (input.cwd !== undefined ? readManifest(input.cwd) : EMPTY_MANIFEST);
181
390
  const checks = input.config?.checks ?? {};
182
- const catalogue = input.slots.map((slot) => resolveOne(slot, checks[slot.name], input.adapters, fileExists));
391
+ const catalogue = input.slots.map((slot) => resolveOne(slot, checks[slot.name], input.adapters, fileExists, manifest));
183
392
  const catalogueNames = new Set(input.slots.map((s) => s.name));
184
- const firsts = [];
185
- const lasts = [];
186
- for (const [name, entry] of Object.entries(checks)) {
187
- if (catalogueNames.has(name))
188
- continue;
189
- if (entry && typeof entry === 'object' && !('use' in entry) && 'command' in entry) {
190
- const detect = entry.detect ?? [];
191
- const resolved = detect.length > 0 && !detect.some((f) => fileExists(f))
192
- ? skipped({ name }, 'no detect file present')
193
- : active({ name }, customAdapter(name, entry));
194
- (entry.order === 'first' ? firsts : lasts).push(resolved);
195
- }
196
- }
197
- return [...firsts, ...catalogue, ...lasts];
393
+ const customs = foldCustomChecks(checks, catalogueNames, fileExists);
394
+ return [...catalogue, ...customs]
395
+ .map((check, i) => ({ check, i }))
396
+ .toSorted((a, b) => {
397
+ const orderA = a.check.order ?? 'any';
398
+ const orderB = b.check.order ?? 'any';
399
+ const byGroup = groupRank(orderA) - groupRank(orderB);
400
+ if (byGroup !== 0)
401
+ return byGroup;
402
+ const byLine = lineValue(orderA) - lineValue(orderB);
403
+ return byLine !== 0 ? byLine : a.i - b.i;
404
+ })
405
+ .map(({ check }) => check);
198
406
  }
199
407
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -27,12 +27,6 @@ export type DigestBudget = {
27
27
  /** Max total bytes of the rendered Markdown; whole sections drop past it. */
28
28
  maxBytes: number;
29
29
  };
30
- /**
31
- * Conservative defaults: ~10 findings a slot and an 8 KB ceiling keep even a
32
- * fully-red repo's digest to roughly two thousand tokens — small enough to read
33
- * in one gulp, with the raw files a click away for the rest.
34
- */
35
- export declare const DEFAULT_BUDGET: DigestBudget;
36
30
  /**
37
31
  * Build the Markdown digest for a completed run, or `null` when nothing failed.
38
32
  * A check is "failing" when the summary marks it `ok: false` and not skipped —
@@ -1 +1 @@
1
- {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../src/digest/digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,6EAA6E;AAC7E,eAAO,MAAM,WAAW,cAAc,CAAC;AAEvC,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG;IACzB,sFAAsF;IACtF,eAAe,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,YAAsD,CAAC;AAkEpF;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,MAAM,GAAE,YAA6B,GACpC,MAAM,GAAG,IAAI,CA+Bf;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,MAAM,GAAE,YAA6B,GACpC,OAAO,CAAC,OAAO,CAAC,CASlB"}
1
+ {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../src/digest/digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,6EAA6E;AAC7E,eAAO,MAAM,WAAW,cAAc,CAAC;AAEvC,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG;IACzB,sFAAsF;IACtF,eAAe,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAyEF;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,MAAM,GAAE,YAA6B,GACpC,MAAM,GAAG,IAAI,CA+Bf;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,MAAM,GAAE,YAA6B,GACpC,OAAO,CAAC,OAAO,CAAC,CASlB"}
@@ -28,7 +28,7 @@ export const DIGEST_FILE = 'digest.md';
28
28
  * fully-red repo's digest to roughly two thousand tokens — small enough to read
29
29
  * in one gulp, with the raw files a click away for the rest.
30
30
  */
31
- export const DEFAULT_BUDGET = { maxItemsPerSlot: 10, maxBytes: 8000 };
31
+ const DEFAULT_BUDGET = { maxItemsPerSlot: 10, maxBytes: 8000 };
32
32
  /** Whether a string parses as JSON (mirrors the orchestrator's persist rule). */
33
33
  function isJson(raw) {
34
34
  try {
@@ -79,8 +79,8 @@ function renderSection(run, maxItems) {
79
79
  }
80
80
  return `${heading}\n\nRaw: \`${raw}\` — ${all.length} finding(s)\n\n${lines.join('\n')}\n`;
81
81
  }
82
- // No extractor (fallow, tsc, vitest, …) or a supported adapter that failed
83
- // with no parsed findings: excerpt the tail of the raw text — truncation, not
82
+ // No extractor (tsc, vitest, …) or a supported adapter that failed with no
83
+ // parsed findings: excerpt the tail of the raw text — truncation, not
84
84
  // normalization — and point at the file for the rest.
85
85
  const text = outcome.stdout.trim() ? outcome.stdout : outcome.stderr;
86
86
  const all = contentLines(text);
@@ -1 +1 @@
1
- {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/digest/digest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/digest/digest.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,5 @@
3
3
  * the module's only public surface (C2): siblings import from `../digest`, never
4
4
  * from `./digest.js` directly.
5
5
  */
6
- export type { DigestBudget } from './digest.js';
7
- export { buildDigest, DEFAULT_BUDGET, DIGEST_FILE, writeDigest } from './digest.js';
6
+ export { buildDigest, DIGEST_FILE, writeDigest } from './digest.js';
8
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/digest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/digest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -3,5 +3,5 @@
3
3
  * the module's only public surface (C2): siblings import from `../digest`, never
4
4
  * from `./digest.js` directly.
5
5
  */
6
- export { buildDigest, DEFAULT_BUDGET, DIGEST_FILE, writeDigest } from './digest.js';
6
+ export { buildDigest, DIGEST_FILE, writeDigest } from './digest.js';
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/digest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/digest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -50,10 +50,18 @@ export type DoctorResult = {
50
50
  report: DoctorReport;
51
51
  exitCode: number;
52
52
  };
53
+ /**
54
+ * `env.version` resolves to this when the probe exceeded {@link VERSION_TIMEOUT_MS} —
55
+ * kept distinct from `null` (the probe ran but its output could not be parsed) so
56
+ * `doctor` reports "timed out" rather than misdiagnosing a hung tool as a parse failure.
57
+ */
58
+ export declare const VERSION_TIMED_OUT: unique symbol;
59
+ /** Result of a `<cmd> --version` probe: raw output, `null` if it failed or could not be parsed, or {@link VERSION_TIMED_OUT}. */
60
+ export type VersionProbe = string | typeof VERSION_TIMED_OUT | null;
53
61
  /** Every environment touch, injectable for tests. */
54
62
  export type DoctorEnv = {
55
63
  which: (cmd: string) => Promise<string | null>;
56
- version: (cmd: string, args: string[]) => Promise<string | null>;
64
+ version: (cmd: string, args: string[]) => Promise<VersionProbe>;
57
65
  exists: (path: string) => boolean;
58
66
  canWrite: (dir: string) => Promise<boolean>;
59
67
  readEngines: (cwd: string) => {
@@ -75,6 +83,11 @@ export type DoctorOptions = {
75
83
  config?: CheckrideConfig | null;
76
84
  env?: DoctorEnv;
77
85
  };
86
+ /**
87
+ * A `<cmd> --version` probe that exceeded its timeout: promisified `execFile` rejects
88
+ * with `killed: true` when it kills the child on timeout — the only reason it kills here.
89
+ */
90
+ export declare function isProbeTimeout(err: unknown): boolean;
78
91
  /** Run the doctor against `cwd`; render and return the report. */
79
92
  export declare function runDoctor(options: DoctorOptions): Promise<DoctorResult>;
80
93
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;AAE7E,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IACnD,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,qDAAqD;IACrD,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,4DAA4D;IAC5D,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAUnF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,eAAwC,CAAC;AAEvE,iIAAiI;AACjI,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,iBAAiB,GAAG,IAAI,CAAC;AAEpE,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,QAAQ,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,cAAc,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB,CAAC;AAsBF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEpD;AA+UD,kEAAkE;AAClE,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAoC7E"}