@geonosis/doctor 2.10.0 → 2.11.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.
- package/CHANGELOG.md +241 -0
- package/README.md +80 -38
- package/bin/geonosis-doctor.mjs +164 -17
- package/dist/{chunk-2ZVCJG5R.js → chunk-VWMNCBDP.js} +763 -489
- package/dist/doctor-cli.js +15 -8
- package/dist/index.d.ts +117 -33
- package/dist/index.js +15 -1
- package/package.json +4 -4
package/dist/doctor-cli.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
formatDoctor,
|
|
5
5
|
formatJson,
|
|
6
6
|
runDoctor
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-VWMNCBDP.js";
|
|
8
8
|
|
|
9
9
|
// src/doctor-cli.ts
|
|
10
10
|
import { fstatSync, statSync } from "fs";
|
|
@@ -138,6 +138,10 @@ var ABOUT = {
|
|
|
138
138
|
seams: `The seam globs adoption.seams declares each name a file. A glob whose file was deleted and
|
|
139
139
|
never undeclared measures nothing \u2014 every bump reads 0 deleted, 0 added over it \u2014 and a
|
|
140
140
|
floor's adoption is measured by exactly those files.`,
|
|
141
|
+
formatter: `Whether the repo's own oxfmt would rewrite the kit's rule files under
|
|
142
|
+
.claude/rules/geonosis \u2014 tiers.md among them is generated. \`oxfmt --migrate=prettier\`
|
|
143
|
+
writes ignorePatterns: [], and the first format of a migrated repo did exactly that.
|
|
144
|
+
oxfmt is asked, so its ignore rules are read by the tool that applies them.`,
|
|
141
145
|
exercised: `Every rule a config enables, against the corpus the loaded plugin ships. A rule at
|
|
142
146
|
"error" that can never fire is indistinguishable from a clean tree. The line says what
|
|
143
147
|
its number is evidence ABOUT \u2014 the corpus and the probes, never this tree \u2014 and a rule
|
|
@@ -184,7 +188,7 @@ var USAGE = `geonosis-doctor [--root <dir>] [--only <check,\u2026>] [--json] [--
|
|
|
184
188
|
|
|
185
189
|
${CHECKS.length} questions a version bump is not finished until something has asked. Most are ways
|
|
186
190
|
enforcement has reported green while measuring nothing; drift asks whether the gate is still there
|
|
187
|
-
at all, and
|
|
191
|
+
at all, and observability and deployed ask whether what was reported is what happened.
|
|
188
192
|
|
|
189
193
|
With no arguments it runs every one of them over the working directory. A tree holding no
|
|
190
194
|
package.json and no .oxlintrc.json is REFUSED with exit 2 \u2014 there is nothing there to examine, and a
|
|
@@ -193,13 +197,13 @@ page of SKIPs is not a pass.
|
|
|
193
197
|
${CHECKS.map((check) => ` ${check.padEnd(11)} ${ABOUT[check]}`).join("\n\n")}
|
|
194
198
|
|
|
195
199
|
exercised reads the corpus the loaded plugin ships, and \u2014 when geonosis.json names one under
|
|
196
|
-
doctor.corpus \u2014 the corpus THIS repo ships for its own options.
|
|
197
|
-
|
|
198
|
-
|
|
200
|
+
doctor.corpus \u2014 the corpus THIS repo ships for its own options. A rule whose reach is the repo's
|
|
201
|
+
own vocabulary \u2014 its layer names, its brand, its plugin package root, the within its sagas live
|
|
202
|
+
in \u2014 cannot be answered any other way, while the shipped corpus says acme and layers/core.
|
|
199
203
|
|
|
200
204
|
--print-config-shape every file this reads, and the keys it reads out of each
|
|
201
205
|
|
|
202
|
-
Every run writes .geonosis/envelopes/doctor.json: the
|
|
206
|
+
Every run writes .geonosis/envelopes/doctor.json: the ${CHECKS.length} checks CONSIDERED against the ones this
|
|
203
207
|
run read, with the rest excused by name, so a --only run can never read as a verdict about the whole
|
|
204
208
|
tree. The envelope check SKIPs that one file \u2014 this run is the one writing it.
|
|
205
209
|
|
|
@@ -256,6 +260,9 @@ geonosis.json \u2192 "law"
|
|
|
256
260
|
maxLines number? the ceiling. Undeclared means UNJUDGED, never a default it fires on
|
|
257
261
|
geonosis.json \u2192 "doctor"
|
|
258
262
|
corpus string? the reach corpus this repo ships for its own rule options
|
|
263
|
+
apparatus string[]? directories whose .oxlintrc.json exists to EXERCISE rules over planted
|
|
264
|
+
files \u2014 the source of a corpus, say \u2014 and is not asked which engine its
|
|
265
|
+
manifests presume. A config inside a corpus needs no declaring
|
|
259
266
|
groups object[]? { name, packages } sets of this repo's OWN packages that must resolve
|
|
260
267
|
to one version; declared and empty is a refusal. The kit's own fixed
|
|
261
268
|
group is checked when this is absent
|
|
@@ -336,11 +343,11 @@ var main = async () => {
|
|
|
336
343
|
return report.ok ? 0 : 1;
|
|
337
344
|
};
|
|
338
345
|
try {
|
|
339
|
-
process.
|
|
346
|
+
process.exitCode = await main();
|
|
340
347
|
} catch (error) {
|
|
341
348
|
process.stderr.write(`geonosis-doctor: ${error.message}
|
|
342
349
|
`);
|
|
343
|
-
process.
|
|
350
|
+
process.exitCode = 2;
|
|
344
351
|
}
|
|
345
352
|
export {
|
|
346
353
|
parseDoctorArgs
|
package/dist/index.d.ts
CHANGED
|
@@ -6,12 +6,11 @@ type Overrides = {
|
|
|
6
6
|
/**
|
|
7
7
|
* The questions a bump is not finished until something has asked, in the order a run asks them.
|
|
8
8
|
* The first five are ways enforcement has reported green while measuring nothing; `envelope` asks
|
|
9
|
-
*
|
|
10
|
-
* `
|
|
11
|
-
*
|
|
12
|
-
* settings an unattended run is bounded by, where a rendered file is not a loaded setting.
|
|
9
|
+
* whether a gate read as many things as it was handed; `drift` whether the gate is still there;
|
|
10
|
+
* `observability` and `deployed` whether what was reported is what happened; `rails` the same of
|
|
11
|
+
* the settings an unattended run loads; `exams` and `seams` whether an adoption sees its floors.
|
|
13
12
|
*/
|
|
14
|
-
declare const CHECKS: readonly ["loaded", "group", "exercised", "baseline", "runner", "envelope", "drift", "observability", "deployed", "rails", "exams", "seams"];
|
|
13
|
+
declare const CHECKS: readonly ["loaded", "group", "exercised", "baseline", "runner", "envelope", "drift", "observability", "deployed", "rails", "exams", "seams", "formatter"];
|
|
15
14
|
type CheckName = (typeof CHECKS)[number];
|
|
16
15
|
/**
|
|
17
16
|
* `SKIP` is a first-class answer and is printed like any other: a check whose line is missing reads
|
|
@@ -66,7 +65,7 @@ type RatchetConfig = {
|
|
|
66
65
|
counters: Record<string, unknown>[];
|
|
67
66
|
};
|
|
68
67
|
type DoctorOptions = {
|
|
69
|
-
/** Where `~/.claude`
|
|
68
|
+
/** Where `~/.claude` is, for the plugin registry and user settings; the home dir by default. */
|
|
70
69
|
home?: string;
|
|
71
70
|
/**
|
|
72
71
|
* Present only when a baseline comparison was asked for, because making one is the one part of
|
|
@@ -95,6 +94,30 @@ type DoctorReport = {
|
|
|
95
94
|
root: string;
|
|
96
95
|
};
|
|
97
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Row 585: an `.oxlintrc.json` that exists to EXERCISE rules — the plugin's shipped corpus, a
|
|
99
|
+
* repo's own reach corpus — deliberately holds odd, partial and contradictory configuration,
|
|
100
|
+
* because that is what a fixture tree is for. Judged as though it governed a product it produced
|
|
101
|
+
* twenty-two WARNs about a tree nobody ships, and a reader who learns to skim those is a reader
|
|
102
|
+
* who skims the three lines that mean something.
|
|
103
|
+
*
|
|
104
|
+
* Apparatus is known STRUCTURALLY, never by a path list this package keeps (LAW 6): a config is
|
|
105
|
+
* apparatus when its directory is inside one the doctor already reads as evidence — the corpus
|
|
106
|
+
* the plugin ships (`corpusOfPlugin`), the corpus the repo declares (`geonosis.json` →
|
|
107
|
+
* `doctor.corpus`) — or inside one the repo names as such in `doctor.apparatus`, for a fixture
|
|
108
|
+
* tree that is the SOURCE of a corpus rather than a corpus itself. The default is empty: a repo
|
|
109
|
+
* that declares nothing has every config it holds judged, which is the safe direction — judging
|
|
110
|
+
* apparatus is noise, and ignoring a product config is a hole.
|
|
111
|
+
*
|
|
112
|
+
* The limit, stated: a fixture directory a repo neither ships as a corpus nor declares is still
|
|
113
|
+
* judged, by design.
|
|
114
|
+
*/
|
|
115
|
+
declare const APPARATUS_KEY = "apparatus";
|
|
116
|
+
/** The directories `geonosis.json` names as apparatus, absolute; none when it names none. */
|
|
117
|
+
declare const declaredApparatusOf: (root: string) => string[];
|
|
118
|
+
/** The evidence directory a config sits in, if it sits in one at all. */
|
|
119
|
+
declare const evidenceHolding: (config: DiscoveredConfig, evidence: readonly string[]) => string | undefined;
|
|
120
|
+
|
|
98
121
|
/**
|
|
99
122
|
* `origin/main`, when the repo has one. Never invented: a comparison against a ref that is not
|
|
100
123
|
* there would either crash or, worse, be reported as a comparison that found nothing.
|
|
@@ -157,8 +180,8 @@ declare const READERS: Record<string, string>;
|
|
|
157
180
|
*
|
|
158
181
|
* Every line here is something that reads as green from the outside: a job that cannot run, a suite
|
|
159
182
|
* nothing runs, a directory nothing reaches, a law nobody finishes, a plugin nobody installed, a
|
|
160
|
-
* block nothing reads.
|
|
161
|
-
*
|
|
183
|
+
* block nothing reads. Most checks ask whether a gate measures what it names; this one asks whether
|
|
184
|
+
* it is still there at all.
|
|
162
185
|
*/
|
|
163
186
|
declare const checkDrift: ({ readers, root, userSettings, workspaces }: {
|
|
164
187
|
/**
|
|
@@ -222,6 +245,27 @@ declare const checkExercised: ({ config, corpus, entry, oxlint, repoCorpus, root
|
|
|
222
245
|
root: string;
|
|
223
246
|
}) => Promise<Finding>;
|
|
224
247
|
|
|
248
|
+
type Constructible = {
|
|
249
|
+
create: (context: unknown) => unknown;
|
|
250
|
+
};
|
|
251
|
+
/**
|
|
252
|
+
* The option a rule says it is missing when constructed with these options, or undefined.
|
|
253
|
+
*
|
|
254
|
+
* Two shapes, because the doctor reads whatever plugin a config's directory resolves: a rule that
|
|
255
|
+
* THROWS its refusal from `create()` (the plugin up to 2.10.0, and any third-party plugin written
|
|
256
|
+
* that way), and a rule that answers a visitor which REPORTS the refusal on `Program` (the plugin
|
|
257
|
+
* from 2.11.0 — one attributable finding a run, in place of a throw that erased its neighbours).
|
|
258
|
+
* No filename: this is a question about the config, not a pass over a file, and a rule that has
|
|
259
|
+
* already answered for one file answers a fileless probe every time (#202).
|
|
260
|
+
*/
|
|
261
|
+
declare const missingOptionOf: (rule: Constructible, options: unknown[]) => string | undefined;
|
|
262
|
+
|
|
263
|
+
declare const checkRequiredOptions: ({ config, entry }: {
|
|
264
|
+
config: DiscoveredConfig;
|
|
265
|
+
/** The plugin module oxlint loads from this config's directory. */
|
|
266
|
+
entry: string;
|
|
267
|
+
}) => Promise<Finding[]>;
|
|
268
|
+
|
|
225
269
|
/**
|
|
226
270
|
* The packages that version as ONE number — the kit's method floor, as data a consumer's tree can
|
|
227
271
|
* read.
|
|
@@ -243,18 +287,19 @@ type HeldTogether = {
|
|
|
243
287
|
};
|
|
244
288
|
declare const KIT_GROUP: HeldTogether;
|
|
245
289
|
/**
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
290
|
+
* Row 549: this used to read `geonosis.json` for itself, with its own `catch { return undefined
|
|
291
|
+
* }` — a parse error read as "this repo declares no groups", the KIT_GROUP default, rather than a
|
|
292
|
+
* question nobody could answer. Routed through the one reader, `unreadable` throws rather than
|
|
293
|
+
* answering `absent`; `checkGroup` reads the file itself and turns that into a FAIL line the same
|
|
294
|
+
* way `checkSeams` and `checkRails` do, so a run over this repo still finishes.
|
|
250
295
|
*/
|
|
251
296
|
declare const declaredGroupsOf: (root: string) => HeldTogether[] | undefined;
|
|
252
297
|
/**
|
|
253
298
|
* #158 — the group question nothing asked.
|
|
254
299
|
*
|
|
255
|
-
*
|
|
256
|
-
* was green: `loaded` is scoped to the plugin a config names, so a second kit package
|
|
257
|
-
* version is outside every question it asks. This is the consumer-side mirror of
|
|
300
|
+
* A Workers + D1 app carried `@geonosis/visual-diff` at 1.1.0 and 1.4.0 in one tree and every
|
|
301
|
+
* doctor line was green: `loaded` is scoped to the plugin a config names, so a second kit package
|
|
302
|
+
* at a second version is outside every question it asks. This is the consumer-side mirror of
|
|
258
303
|
* `geonosis-release published --group`.
|
|
259
304
|
*
|
|
260
305
|
* Asked of the RESOLVER from each workspace directory, never of `find` over `node_modules` — on
|
|
@@ -273,27 +318,46 @@ declare const checkGroup: ({ groups, root, workspaces }: {
|
|
|
273
318
|
* MEASURED 2026-09-02 (`~/.claude/plugins/installed_plugins.json`, `version: 2`): a map keyed
|
|
274
319
|
* `<plugin>@<marketplace>`, each value a list of installations carrying `version`, `installPath`
|
|
275
320
|
* and the commit it came from. This is the file `claude plugin list` answers from.
|
|
321
|
+
*
|
|
322
|
+
* MEASURED 2026-09-18: an installation also carries `scope` (`user` or `project`) and, at project
|
|
323
|
+
* scope, the `projectPath` it loads in. One machine held `2.10.0` at user scope and `2.6.1` at
|
|
324
|
+
* project scope for another repo, and a doctor that read only `version` reported the second as
|
|
325
|
+
* this repo's drift (a Medusa storefront #13).
|
|
276
326
|
*/
|
|
277
327
|
declare const INSTALLED_PLUGINS = ".claude/plugins/installed_plugins.json";
|
|
278
328
|
/** The plugin this kit publishes. Its own name, the way `FIXED_GROUP` is its own group. */
|
|
279
329
|
declare const PLUGIN_NAME = "geonosis";
|
|
330
|
+
type InstalledPlugin = {
|
|
331
|
+
projectPath?: string;
|
|
332
|
+
scope?: string;
|
|
333
|
+
version: string;
|
|
334
|
+
};
|
|
280
335
|
/**
|
|
281
|
-
* Every
|
|
336
|
+
* Every installation of one plugin this machine has, in the order the record lists them, with
|
|
337
|
+
* the scope each loads at.
|
|
282
338
|
*
|
|
283
339
|
* A name can be installed from more than one marketplace and at more than one scope, so this
|
|
284
|
-
* answers with a list rather than picking one:
|
|
285
|
-
*
|
|
340
|
+
* answers with a list rather than picking one: which of them a session loads is a question about
|
|
341
|
+
* a ROOT, and `loadedAt` answers it.
|
|
286
342
|
*/
|
|
343
|
+
declare const installedPlugins: (home: string, name: string) => InstalledPlugin[];
|
|
344
|
+
/** Every version of one plugin this machine has installed, at any scope. */
|
|
287
345
|
declare const installedPluginVersions: (home: string, name: string) => string[];
|
|
346
|
+
/**
|
|
347
|
+
* The installations that LOAD in a session opened at `root`: a project-scoped install whose
|
|
348
|
+
* `projectPath` is this root wins, and only where none is does the user-scoped install load.
|
|
349
|
+
* A project-scoped install for another path loads nowhere here, whatever its version.
|
|
350
|
+
*/
|
|
351
|
+
declare const loadedAt: (installs: InstalledPlugin[], root: string) => InstalledPlugin[];
|
|
288
352
|
/**
|
|
289
353
|
* #133: a consumer's npm bump does not move the CLAUDE PLUGIN.
|
|
290
354
|
*
|
|
291
355
|
* The hooks, the agents and the skills live in the plugin, and it updates on `claude plugin update`
|
|
292
356
|
* and never on an install — so a repo can be on this release's packages while every session in it
|
|
293
|
-
* runs the hooks of the one before
|
|
294
|
-
*
|
|
357
|
+
* runs the hooks of the one before. That is the declared-versus-loaded question one surface out,
|
|
358
|
+
* and it is this check's to ask.
|
|
295
359
|
*/
|
|
296
|
-
declare const checkClaudePlugin: ({ candidate, home, name, train }: {
|
|
360
|
+
declare const checkClaudePlugin: ({ candidate, home, name, root, train }: {
|
|
297
361
|
/**
|
|
298
362
|
* Whether the packages here are a RELEASE CANDIDATE the registry has never seen — installed from
|
|
299
363
|
* tarballs or a `file:` override. `claude plugin update` reads the marketplace, so it cannot
|
|
@@ -303,6 +367,8 @@ declare const checkClaudePlugin: ({ candidate, home, name, train }: {
|
|
|
303
367
|
candidate?: boolean;
|
|
304
368
|
home?: string;
|
|
305
369
|
name?: string;
|
|
370
|
+
/** The repo being doctored — the root a project-scoped install has to name to load here. */
|
|
371
|
+
root?: string;
|
|
306
372
|
/** The version the package train is on here, or nothing when this tree declares none. */
|
|
307
373
|
train: string | undefined;
|
|
308
374
|
}) => Finding[];
|
|
@@ -335,6 +401,20 @@ declare const checkLoaded: ({ configs, home, root, workspaces }: {
|
|
|
335
401
|
workspaces: Workspace[];
|
|
336
402
|
}) => Promise<Finding[]>;
|
|
337
403
|
|
|
404
|
+
/**
|
|
405
|
+
* The exporter, asked three things: is one configured, can anything reach it, and has anything
|
|
406
|
+
* actually arrived lately.
|
|
407
|
+
*
|
|
408
|
+
* Two of the four lying instruments of `docs/rules-backlog.md` #42 are in this shape — a deploy job
|
|
409
|
+
* that reported success having deployed nothing, and a `/health` that answered ok over an
|
|
410
|
+
* unreachable database. Both leave a green build and a silent project, and neither is visible from
|
|
411
|
+
* inside the process that is not reporting.
|
|
412
|
+
*
|
|
413
|
+
* This check reads a FILE the consumer's sink wrote, and imports nothing of
|
|
414
|
+
* `@geonosis/observability`: a check that needed the library it checks cannot run in the tree where
|
|
415
|
+
* the library is missing, which is the first case it exists to find. The wall is planted in the
|
|
416
|
+
* plugin's `dogfood.bin.test.ts`.
|
|
417
|
+
*/
|
|
338
418
|
/** The record a sink writes on every capture. `@geonosis/observability` exports the same shape. */
|
|
339
419
|
type LastEventRecord = {
|
|
340
420
|
at?: unknown;
|
|
@@ -360,18 +440,14 @@ declare const checkObservability: ({ now, root }: {
|
|
|
360
440
|
}) => Promise<Finding[]>;
|
|
361
441
|
|
|
362
442
|
declare const GEONOSIS_FILE = "geonosis.json";
|
|
443
|
+
|
|
363
444
|
/**
|
|
364
|
-
*
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
*
|
|
368
|
-
* `
|
|
369
|
-
*
|
|
370
|
-
* so it is no evidence either way — and those rules read as firing nowhere in a tree that enforces
|
|
371
|
-
* them perfectly well.
|
|
372
|
-
*
|
|
373
|
-
* A repo answers for its own options by shipping fixtures in its own vocabulary and naming, in that
|
|
374
|
-
* corpus's own manifest, exactly which rules it is evidence about.
|
|
445
|
+
* Row 549: this used to read `geonosis.json` for itself, with its own `catch { return undefined
|
|
446
|
+
* }` — a parse error read as "this repo declares no corpus", the exact collapse `geonosis-file.ts`
|
|
447
|
+
* exists to make unrepresentable (measured 2026-09-17 alongside `deployed`, `seams`, `rails`: a
|
|
448
|
+
* truncated file, a green line). Routed through the one reader, `unreadable` throws rather than
|
|
449
|
+
* answering `absent` — a config nobody can read has not been read, and every question this would
|
|
450
|
+
* answer is answered from a default nobody chose.
|
|
375
451
|
*/
|
|
376
452
|
declare const repoCorpusOf: (root: string) => string | undefined;
|
|
377
453
|
|
|
@@ -379,6 +455,14 @@ declare const formatDoctor: ({ counts, findings, ok, root }: DoctorReport) => st
|
|
|
379
455
|
declare const formatJson: (report: DoctorReport) => string;
|
|
380
456
|
|
|
381
457
|
/**
|
|
458
|
+
* What oxlint would load, asked the only way that answers on every package manager.
|
|
459
|
+
*
|
|
460
|
+
* oxlint resolves a `jsPlugins` specifier from the CONFIG FILE's directory, not the working
|
|
461
|
+
* directory, so the question is asked from a directory and never from the process's cwd. And it is
|
|
462
|
+
* asked of the RESOLVER: counting copies with `find` is a bun/npm check only — on pnpm the entries
|
|
463
|
+
* under `node_modules/@scope/` are symlinks into `.pnpm/`, which keeps every version ever
|
|
464
|
+
* installed, so the same count answers 7 on a correct tree and 0 with the store excluded.
|
|
465
|
+
*
|
|
382
466
|
* `root` is the directory the doctor was HANDED — the boundary a deployed tree actually has. A
|
|
383
467
|
* package on the way up from `dir` but past `root` is not this tree's to see; #373/#386 measured
|
|
384
468
|
* the kit's own workspace two directories above a consumer's checkout read exactly that way.
|
|
@@ -435,4 +519,4 @@ declare const checkRunner: ({ ratchet, root, workspaces }: {
|
|
|
435
519
|
workspaces: Workspace[];
|
|
436
520
|
}) => Finding[];
|
|
437
521
|
|
|
438
|
-
export { CHECKS, COMPOSITION_ROOT, CONFIG_FILE, type CheckName, DEPLOYED_FILE, type DiscoveredConfig, DoctorError, type DoctorOptions, type DoctorReport, ENVELOPES_DIR, FIXED_GROUP, FLOOR_PACKAGES, type Finding, GEONOSIS_FILE, type HeldTogether, INSTALLED_PLUGINS, KIT_GROUP, type LastEventRecord, MANIFEST_FILE, type Manifest, NOT_WRITTEN, NO_ENVELOPES, type ObservabilityConfig, PLUGIN_NAME, RATCHET_FILE, READERS, type RatchetConfig, SCOPE, type Verdict, type Workspace, checkBaseline, checkClaudePlugin, checkDeployed, checkDrift, checkEnvelopes, checkExams, checkExercised, checkGroup, checkLoaded, checkObservability, checkRunner, corpusOfPlugin, declaredFor, declaredGroupsOf, defaultRef, discoverConfigs, discoverWorkspaces, enabledRulesOf, formatDoctor, formatJson, installedPluginVersions, packageDirOf, pluginVersionOf, readConfig, readRatchet, relativePath, relativeToRoot, repoCorpusOf, resolveFrom, runDoctor, satisfies };
|
|
522
|
+
export { APPARATUS_KEY, CHECKS, COMPOSITION_ROOT, CONFIG_FILE, type CheckName, DEPLOYED_FILE, type DiscoveredConfig, DoctorError, type DoctorOptions, type DoctorReport, ENVELOPES_DIR, FIXED_GROUP, FLOOR_PACKAGES, type Finding, GEONOSIS_FILE, type HeldTogether, INSTALLED_PLUGINS, type InstalledPlugin, KIT_GROUP, type LastEventRecord, MANIFEST_FILE, type Manifest, NOT_WRITTEN, NO_ENVELOPES, type ObservabilityConfig, PLUGIN_NAME, RATCHET_FILE, READERS, type RatchetConfig, SCOPE, type Verdict, type Workspace, checkBaseline, checkClaudePlugin, checkDeployed, checkDrift, checkEnvelopes, checkExams, checkExercised, checkGroup, checkLoaded, checkObservability, checkRequiredOptions, checkRunner, corpusOfPlugin, declaredApparatusOf, declaredFor, declaredGroupsOf, defaultRef, discoverConfigs, discoverWorkspaces, enabledRulesOf, evidenceHolding, formatDoctor, formatJson, installedPluginVersions, installedPlugins, loadedAt, missingOptionOf, packageDirOf, pluginVersionOf, readConfig, readRatchet, relativePath, relativeToRoot, repoCorpusOf, resolveFrom, runDoctor, satisfies };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
APPARATUS_KEY,
|
|
2
3
|
CHECKS,
|
|
3
4
|
COMPOSITION_ROOT,
|
|
4
5
|
CONFIG_FILE,
|
|
@@ -27,17 +28,23 @@ import {
|
|
|
27
28
|
checkGroup,
|
|
28
29
|
checkLoaded,
|
|
29
30
|
checkObservability,
|
|
31
|
+
checkRequiredOptions,
|
|
30
32
|
checkRunner,
|
|
31
33
|
corpusOfPlugin,
|
|
34
|
+
declaredApparatusOf,
|
|
32
35
|
declaredFor,
|
|
33
36
|
declaredGroupsOf,
|
|
34
37
|
defaultRef,
|
|
35
38
|
discoverConfigs,
|
|
36
39
|
discoverWorkspaces,
|
|
37
40
|
enabledRulesOf,
|
|
41
|
+
evidenceHolding,
|
|
38
42
|
formatDoctor,
|
|
39
43
|
formatJson,
|
|
40
44
|
installedPluginVersions,
|
|
45
|
+
installedPlugins,
|
|
46
|
+
loadedAt,
|
|
47
|
+
missingOptionOf,
|
|
41
48
|
packageDirOf,
|
|
42
49
|
pluginVersionOf,
|
|
43
50
|
readConfig,
|
|
@@ -48,8 +55,9 @@ import {
|
|
|
48
55
|
resolveFrom,
|
|
49
56
|
runDoctor,
|
|
50
57
|
satisfies
|
|
51
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-VWMNCBDP.js";
|
|
52
59
|
export {
|
|
60
|
+
APPARATUS_KEY,
|
|
53
61
|
CHECKS,
|
|
54
62
|
COMPOSITION_ROOT,
|
|
55
63
|
CONFIG_FILE,
|
|
@@ -78,17 +86,23 @@ export {
|
|
|
78
86
|
checkGroup,
|
|
79
87
|
checkLoaded,
|
|
80
88
|
checkObservability,
|
|
89
|
+
checkRequiredOptions,
|
|
81
90
|
checkRunner,
|
|
82
91
|
corpusOfPlugin,
|
|
92
|
+
declaredApparatusOf,
|
|
83
93
|
declaredFor,
|
|
84
94
|
declaredGroupsOf,
|
|
85
95
|
defaultRef,
|
|
86
96
|
discoverConfigs,
|
|
87
97
|
discoverWorkspaces,
|
|
88
98
|
enabledRulesOf,
|
|
99
|
+
evidenceHolding,
|
|
89
100
|
formatDoctor,
|
|
90
101
|
formatJson,
|
|
91
102
|
installedPluginVersions,
|
|
103
|
+
installedPlugins,
|
|
104
|
+
loadedAt,
|
|
105
|
+
missingOptionOf,
|
|
92
106
|
packageDirOf,
|
|
93
107
|
pluginVersionOf,
|
|
94
108
|
readConfig,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geonosis/doctor",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.1",
|
|
4
4
|
"types": "./dist/index.d.ts",
|
|
5
5
|
"description": "The adoption doctor — declared ≠ loaded, enabled ≠ exercised, a baseline that grew, a runner whose exit code is the only verdict.",
|
|
6
6
|
"keywords": [
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"dist"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@geonosis/lint-parity": "2.
|
|
39
|
+
"@geonosis/lint-parity": "2.11.1"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@geonosis/ratchet": "2.
|
|
42
|
+
"@geonosis/ratchet": "2.11.1"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"oxlint": ">=1.77"
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"access": "public"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
|
-
"build": "tsup",
|
|
54
|
+
"build": "tsx ../../tooling/build-step.ts tsup",
|
|
55
55
|
"typecheck": "tsc --noEmit",
|
|
56
56
|
"lint": "oxlint --config ../../.oxlintrc.json .",
|
|
57
57
|
"test:unit": "vitest run --project unit --root ../.. --passWithNoTests \"$PWD\"",
|