@dzhechkov/harness-core 0.3.131 → 0.3.132
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/.dz-manifest.json +9 -9
- package/README.md +1 -1
- package/dist/skills-verify.d.ts +13 -0
- package/dist/skills-verify.d.ts.map +1 -1
- package/dist/skills-verify.js +161 -29
- package/dist/skills-verify.js.map +1 -1
- package/package.json +5 -5
- package/sbom.json +8 -8
- package/src/skills-verify.ts +188 -32
package/.dz-manifest.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"path": "README.md",
|
|
12
|
-
"sha256": "
|
|
12
|
+
"sha256": "cb5ff980d92ab4e3703f5a3a5453a2550a68581364510667bf972cb7141ccc5e"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "coverage/coverage-final.json",
|
|
@@ -837,19 +837,19 @@
|
|
|
837
837
|
},
|
|
838
838
|
{
|
|
839
839
|
"path": "dist/skills-verify.d.ts",
|
|
840
|
-
"sha256": "
|
|
840
|
+
"sha256": "a9f77e152e70c489ce40bf1b7a0af370cea73afc95bafc5b5c9811547d7226e1"
|
|
841
841
|
},
|
|
842
842
|
{
|
|
843
843
|
"path": "dist/skills-verify.d.ts.map",
|
|
844
|
-
"sha256": "
|
|
844
|
+
"sha256": "bd00b8f67335044425ac434e95caf0ed9406e64085bbc65acbdbde559e774034"
|
|
845
845
|
},
|
|
846
846
|
{
|
|
847
847
|
"path": "dist/skills-verify.js",
|
|
848
|
-
"sha256": "
|
|
848
|
+
"sha256": "0bd0815ff7d1b8e0ee4165b3f1849751755eb3d373a8cee65f39ccb101d6fd47"
|
|
849
849
|
},
|
|
850
850
|
{
|
|
851
851
|
"path": "dist/skills-verify.js.map",
|
|
852
|
-
"sha256": "
|
|
852
|
+
"sha256": "1faf215390d865a315a05995ffc111c7776f14889dc5b2dc4cae1bc47aded0fd"
|
|
853
853
|
},
|
|
854
854
|
{
|
|
855
855
|
"path": "dist/skills.d.ts",
|
|
@@ -981,7 +981,7 @@
|
|
|
981
981
|
},
|
|
982
982
|
{
|
|
983
983
|
"path": "package.json",
|
|
984
|
-
"sha256": "
|
|
984
|
+
"sha256": "6b3b76ef6283e736c0283c464bcebf2fbd7f3625f9725002023bc8b55a9d655a"
|
|
985
985
|
},
|
|
986
986
|
{
|
|
987
987
|
"path": "src/__tests__/golden-baseline.test.ts",
|
|
@@ -1185,7 +1185,7 @@
|
|
|
1185
1185
|
},
|
|
1186
1186
|
{
|
|
1187
1187
|
"path": "src/skills-verify.ts",
|
|
1188
|
-
"sha256": "
|
|
1188
|
+
"sha256": "fe9e9c87cd4051a294b8a7d249deb6acd61fea31e60be5ca2dd4d688ec624a69"
|
|
1189
1189
|
},
|
|
1190
1190
|
{
|
|
1191
1191
|
"path": "src/skills.ts",
|
|
@@ -1481,7 +1481,7 @@
|
|
|
1481
1481
|
},
|
|
1482
1482
|
{
|
|
1483
1483
|
"path": "test/skills-verify.test.ts",
|
|
1484
|
-
"sha256": "
|
|
1484
|
+
"sha256": "b344c0b58ec7d475e88f56fb59de661005d1148fb75c632add83fc94102a22ba"
|
|
1485
1485
|
},
|
|
1486
1486
|
{
|
|
1487
1487
|
"path": "test/statusline.test.ts",
|
|
@@ -1533,5 +1533,5 @@
|
|
|
1533
1533
|
}
|
|
1534
1534
|
]
|
|
1535
1535
|
},
|
|
1536
|
-
"signature": "
|
|
1536
|
+
"signature": "PMD3xGtVoBbefiYC6xnXmTOagakJa0nKFEBJmKr+S3CtvM+YIdEJhel/C0NZsLpF77qB4McpIwFmExdV1wcWCw=="
|
|
1537
1537
|
}
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ and any other consumer.
|
|
|
17
17
|
| `release` | `collectPackageFacts`, `selectAffectedPackages`, `planReleaseGates`, `classifyGateExecutions`, `buildFailureIssue`, `firstOutputLine` | Pure verified-release engine behind `dz release`: plans 4 HARD gates (tests / `pnpm audit --prod` / `node --check` / bin smoke-boot) as DATA and classifies injected results fail-closed — an unbuilt package (declared `build` script, no dist JS) is a `MISSING_DIST` failure, a template-only pack is a named `SKIP_NO_ARTIFACTS` skip, `selectAffectedPackages` fail-opens to the full set when the changed-file list is unavailable |
|
|
18
18
|
| `parity` | `TARGET_CAPABILITIES`, `PARITY_FEATURES`, `computeParity`, `buildParityMatrix` | Declarative target-parity model behind `dz parity`: verified capability flags per target × feature FORMS with requirements; the feature×target matrix is always COMPUTED (never hand-written), and the model must classify exactly `TARGET_NAMES` — an unclassified new target refuses to compile |
|
|
19
19
|
| `delivery-check` | `PLANE_SPECS`, `collectDeliveryFacts`, `planDeliveryCheck`, `renderDeliveryBrief`, `classifyDelivery`, `renderDeliveryReview` | Pure portable Step-10 Delivery Gate engine behind `dz delivery-check`: the four review planes as shared DATA (prose-identical to the workflow's inline `planePrompts`, held by a drift-guard test), a deterministic plan/classify over injected facts+findings, and the FAIL-CLOSED hand-off verdict — `ready` only off complete, cross-validated, clean evidence; classification reads only numeric severity counts so injected instruction-like text cannot move the verdict. No `child_process`; the only fs is `existsSync` in `collectDeliveryFacts` |
|
|
20
|
-
| `skills-verify` | `scanSkillsLayout`, `parseInitFacts`, `verifyRegistration`, `registrationExitCode`, `renderRegistrationReport` | Pure registration-gate engine behind `dz skills-verify`: a static scan of `.claude/skills/` (which dirs CAN register + the shapes that never can) and a **sealed** verdict over one atomic evidence bundle (`RegistrationEvidence` = the whole scan + a tagged probe result + a provenance record). Cardinality and parse integrity are derived INSIDE from the raw `system/init` stream, so no caller can omit or falsify them. FAIL-CLOSED: an unobservable registration is `inconclusive`, never `pass`; a plugin-shaped container is advisory and its fate is decided by whether the session says that plugin LOADED, never by the layout. Also exports `findNonRegistrableSkillDirs` — the publish-time guard fact behind the `skills-registrable` rule (a pack counts only if it already has one registrable skill; a dir is flagged only when a `SKILL.md` exists inside but below depth 1 — the discriminator was chosen after MEASURING the real packs, since a naive rule flagged ~40 healthy dirs across 9 npx toolkits). No `child_process` — the CLI owns the probe |
|
|
20
|
+
| `skills-verify` | `scanSkillsLayout`, `parseInitFacts`, `verifyRegistration`, `registrationExitCode`, `renderRegistrationReport` | Pure registration-gate engine behind `dz skills-verify`: a static scan of `.claude/skills/` (which dirs CAN register + the shapes that never can) and a **sealed** verdict over one atomic evidence bundle (`RegistrationEvidence` = the whole scan + a tagged probe result + a provenance record). Cardinality and parse integrity are derived INSIDE from the raw `system/init` stream, so no caller can omit or falsify them. FAIL-CLOSED: an unobservable registration is `inconclusive`, never `pass`; a plugin-shaped container is advisory and its fate is decided by whether the session says that plugin LOADED, never by the layout. Also exports `findNonRegistrableSkillDirs` — the publish-time guard fact behind the `skills-registrable` rule (a pack counts only if it already has one registrable skill; a dir is flagged only when a `SKILL.md` exists inside but below depth 1 — the discriminator was chosen after MEASURING the real packs, since a naive rule flagged ~40 healthy dirs across 9 npx toolkits). Plugin containers are attributed by `init.plugins[].path`, never by directory name; a container whose plugin did not load FAILS, one that loaded PASSES with an advisory that its individual skills are unverified (modelling Claude Code's command-name resolution produced a new wrong verdict in every review round — the gap is disclosed, not guessed). No `child_process` — the CLI owns the probe |
|
|
21
21
|
|
|
22
22
|
## The additive guarantee
|
|
23
23
|
|
package/dist/skills-verify.d.ts
CHANGED
|
@@ -46,7 +46,14 @@ export interface StaticScan {
|
|
|
46
46
|
*/
|
|
47
47
|
readonly containers: readonly {
|
|
48
48
|
readonly dir: string;
|
|
49
|
+
/** Absolute path of the container — matched against `init.plugins[].path` (QE5 #1). */
|
|
50
|
+
readonly path: string;
|
|
51
|
+
/** The name the container's OWN manifest declares (may differ from the dir name — QE5 #1b). */
|
|
52
|
+
readonly manifestName: string | null;
|
|
53
|
+
/** Skill names it would provide: discovered on disk AND declared by the manifest (QE5 #4). */
|
|
49
54
|
readonly candidates: readonly string[];
|
|
55
|
+
/** True when the dir ALSO has a depth-1 SKILL.md — a single-skill plugin (QE5 #2). */
|
|
56
|
+
readonly alsoBare: boolean;
|
|
50
57
|
}[];
|
|
51
58
|
/**
|
|
52
59
|
* Set when the scan could not complete (unreadable dir, `.claude/skills` is a file, …). A failed
|
|
@@ -70,11 +77,17 @@ export declare function scanSkillsLayout(projectDir: string): StaticScan;
|
|
|
70
77
|
export interface InitPlugin {
|
|
71
78
|
readonly name: string;
|
|
72
79
|
readonly version?: string;
|
|
80
|
+
/** Where the plugin was loaded FROM — the only identity that cannot be spoofed by a name (QE5 #1). */
|
|
81
|
+
readonly path?: string;
|
|
82
|
+
/** e.g. `telegram@claude-plugins-official`, `health-advisor@skills-dir`. */
|
|
83
|
+
readonly source?: string;
|
|
73
84
|
}
|
|
74
85
|
export interface InitFacts {
|
|
75
86
|
/** Registered skill names. `null` means the key was ABSENT (schema drift) — never "none". */
|
|
76
87
|
readonly skills: readonly string[] | null;
|
|
77
88
|
readonly plugins: readonly InitPlugin[];
|
|
89
|
+
/** False when the `plugins` key was absent or not an array — unreadable, not empty (QE6 #7). */
|
|
90
|
+
readonly pluginsReadable: boolean;
|
|
78
91
|
/** The project the session actually read — the built-in control. */
|
|
79
92
|
readonly cwd: string | null;
|
|
80
93
|
readonly clientVersion: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-verify.d.ts","sourceRoot":"","sources":["../src/skills-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,yFAAyF;AACzF,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,qGAAqG;IACrG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACjD;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"skills-verify.d.ts","sourceRoot":"","sources":["../src/skills-verify.ts"],"names":[],"mappings":"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"}
|
package/dist/skills-verify.js
CHANGED
|
@@ -13,9 +13,12 @@
|
|
|
13
13
|
*
|
|
14
14
|
* FAIL-CLOSED: anything that prevents an honest observation yields `inconclusive`, never `pass`.
|
|
15
15
|
*/
|
|
16
|
-
import { existsSync, lstatSync, readdirSync, realpathSync, statSync } from 'node:fs';
|
|
16
|
+
import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from 'node:fs';
|
|
17
17
|
import { basename, isAbsolute, join, resolve } from 'node:path';
|
|
18
|
-
|
|
18
|
+
// Bounded on purpose: deep enough for every real layout seen (extended/<name>/, skills/<name>/,
|
|
19
|
+
// base/<dep>/), shallow enough not to walk a whole tree. A SKILL.md below this bound is not seen —
|
|
20
|
+
// a stated limit, not a silent one (QE6 #9).
|
|
21
|
+
const MAX_BURIED_DEPTH = 6;
|
|
19
22
|
function findBuriedSkillMd(dir, depth, acc, errors) {
|
|
20
23
|
if (depth > MAX_BURIED_DEPTH)
|
|
21
24
|
return;
|
|
@@ -51,6 +54,28 @@ function findBuriedSkillMd(dir, depth, acc, errors) {
|
|
|
51
54
|
function hasPluginManifest(dir) {
|
|
52
55
|
return existsSync(join(dir, '.claude-plugin', 'plugin.json'));
|
|
53
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Read a container's own `.claude-plugin/plugin.json`: the name it DECLARES and the skill paths it
|
|
59
|
+
* declares. A manifest may point at a custom path deeper than the on-disk walk, which otherwise left
|
|
60
|
+
* the container with zero candidates and restored a vacuous PASS (QE5 #4).
|
|
61
|
+
*/
|
|
62
|
+
function readContainerManifest(dir) {
|
|
63
|
+
try {
|
|
64
|
+
const raw = readFileSync(join(dir, '.claude-plugin', 'plugin.json'), 'utf8');
|
|
65
|
+
const obj = JSON.parse(raw);
|
|
66
|
+
const name = typeof obj.name === 'string' && obj.name ? obj.name : null;
|
|
67
|
+
const declared = Array.isArray(obj.skills)
|
|
68
|
+
? obj.skills
|
|
69
|
+
.filter((x) => typeof x === 'string')
|
|
70
|
+
.map((rel) => basename(rel.replace(/\/+$/, '')))
|
|
71
|
+
.filter(Boolean)
|
|
72
|
+
: [];
|
|
73
|
+
return { name, declared };
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return { name: null, declared: [] }; // unreadable/!JSON: the manifest's INTENT still counts
|
|
77
|
+
}
|
|
78
|
+
}
|
|
54
79
|
/**
|
|
55
80
|
* Does this directory look like it was INTENDED as a skill? A dir with no markdown at all is
|
|
56
81
|
* ordinary content (`scripts/`, `bin/`, `templates/`) — calling it a failed skill is a false FAIL
|
|
@@ -222,9 +247,17 @@ export function scanSkillsLayout(projectDir) {
|
|
|
222
247
|
scanErrors.push(`cannot stat ${dir}: ${error instanceof Error ? error.message : String(error)}`);
|
|
223
248
|
continue;
|
|
224
249
|
}
|
|
250
|
+
// A `SKILL.md` sitting directly in `.claude/skills/` registers nothing, whether it is a FILE or
|
|
251
|
+
// a DIRECTORY — the directory form previously slipped into the ordinary branch (QE6 #6).
|
|
252
|
+
if (name === 'SKILL.md') {
|
|
253
|
+
findings.push({
|
|
254
|
+
dir: '.',
|
|
255
|
+
kind: 'no-skill-md',
|
|
256
|
+
detail: 'SKILL.md sits directly in .claude/skills/ — a skill must live in its own directory to register',
|
|
257
|
+
});
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
225
260
|
if (!isDir) {
|
|
226
|
-
// A SKILL.md dropped directly into .claude/skills/ registers nothing — it is a real defect,
|
|
227
|
-
// not something to skip silently (QE #4).
|
|
228
261
|
if (name === 'SKILL.md') {
|
|
229
262
|
findings.push({
|
|
230
263
|
dir: '.',
|
|
@@ -235,15 +268,21 @@ export function scanSkillsLayout(projectDir) {
|
|
|
235
268
|
continue;
|
|
236
269
|
}
|
|
237
270
|
const registers = hasSkillFile(dir);
|
|
238
|
-
// A manifest
|
|
271
|
+
// A manifest makes this a plugin CONTAINER even when it ALSO has a depth-1 SKILL.md — that is a
|
|
272
|
+
// single-skill plugin, whose skills are namespaced, so expecting the bare name false-FAILs (QE5 #2).
|
|
239
273
|
// It did not register in measured practice, but the class may be supported under workspace
|
|
240
274
|
// trust — so the WHOLE container is advisory. Emitting the generic `no-skill-md` /
|
|
241
275
|
// `buried-skill-md` findings for it killed the layout anyway, which was the over-claim (QE4 #1).
|
|
242
|
-
const isPluginContainer =
|
|
276
|
+
const isPluginContainer = hasPluginManifest(dir);
|
|
243
277
|
const bucket = isPluginContainer ? advisories : findings;
|
|
244
|
-
if (registers) {
|
|
278
|
+
if (registers && !isPluginContainer) {
|
|
245
279
|
registrable.push(name);
|
|
246
280
|
}
|
|
281
|
+
else if (registers && isPluginContainer) {
|
|
282
|
+
// A single-skill plugin: it has a depth-1 SKILL.md AND a manifest, so it registers NAMESPACED.
|
|
283
|
+
// Expecting the bare directory name here was a false FAIL (QE5 #2); the container check below
|
|
284
|
+
// accepts either form.
|
|
285
|
+
}
|
|
247
286
|
else {
|
|
248
287
|
// A dir with no markdown was never meant to be a skill — advisory, not a failure (QE5 #7).
|
|
249
288
|
const intended = looksLikeSkillDir(dir);
|
|
@@ -262,11 +301,26 @@ export function scanSkillsLayout(projectDir) {
|
|
|
262
301
|
// Only a report when the dir registers NOTHING: a dir with its own depth-1 SKILL.md registers
|
|
263
302
|
// fine and a stray manifest beside it is inert, not a blocker (Codex QE #8).
|
|
264
303
|
if (isPluginContainer) {
|
|
265
|
-
// What would this container provide?
|
|
304
|
+
// What would this container provide? Names found on disk UNION names its manifest declares —
|
|
305
|
+
// a manifest may point at a custom path deeper than the walk, which previously left the
|
|
306
|
+
// container with zero candidates and let it slip through (QE5 #4).
|
|
266
307
|
const inner = [];
|
|
267
308
|
findBuriedSkillMd(dir, 1, inner, scanErrors);
|
|
268
|
-
const
|
|
269
|
-
|
|
309
|
+
const manifest = readContainerManifest(dir);
|
|
310
|
+
const candidates = [
|
|
311
|
+
...new Set([
|
|
312
|
+
...inner.map((f) => basename(join(f, '..'))),
|
|
313
|
+
...manifest.declared,
|
|
314
|
+
...(registers ? [manifest.name ?? name] : []), // the single-skill plugin's own skill (QE5 #2)
|
|
315
|
+
]),
|
|
316
|
+
];
|
|
317
|
+
containers.push({
|
|
318
|
+
dir: name,
|
|
319
|
+
path: dir,
|
|
320
|
+
manifestName: manifest.name,
|
|
321
|
+
candidates,
|
|
322
|
+
alsoBare: registers,
|
|
323
|
+
});
|
|
270
324
|
advisories.push({
|
|
271
325
|
dir: name,
|
|
272
326
|
kind: 'plugin-manifest-trap',
|
|
@@ -279,6 +333,18 @@ export function scanSkillsLayout(projectDir) {
|
|
|
279
333
|
// register may legitimately bundle nested SKILL.md files as its own resources — health-advisor
|
|
280
334
|
// 1.2.1 co-locates its base deps under the master exactly so they do NOT register. Only a dir
|
|
281
335
|
// that registers NOTHING while hiding SKILL.md files inside is the 1.2.0 defect shape.
|
|
336
|
+
if (registers && !isPluginContainer) {
|
|
337
|
+
const nested = [];
|
|
338
|
+
findBuriedSkillMd(dir, 1, nested, scanErrors);
|
|
339
|
+
if (nested.length > 0) {
|
|
340
|
+
advisories.push({
|
|
341
|
+
dir: name,
|
|
342
|
+
kind: 'buried-skill-md',
|
|
343
|
+
detail: `${name}/ bundles ${nested.length} nested SKILL.md file(s) as resources — they do NOT register ` +
|
|
344
|
+
`(correct for co-located dependencies; a real skill placed there would be invisible)`,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
}
|
|
282
348
|
if (!registers) {
|
|
283
349
|
const buried = [];
|
|
284
350
|
findBuriedSkillMd(dir, 1, buried, scanErrors);
|
|
@@ -350,18 +416,27 @@ function parseStream(streamText) {
|
|
|
350
416
|
: null
|
|
351
417
|
: null;
|
|
352
418
|
const rawPlugins = obj.plugins;
|
|
419
|
+
// An ABSENT or non-array `plugins` key is unreadable schema, not proof that nothing loaded —
|
|
420
|
+
// with containers present that difference decides FAIL vs INCONCLUSIVE (QE6 #7).
|
|
421
|
+
const pluginsReadable = Array.isArray(rawPlugins);
|
|
353
422
|
const plugins = Array.isArray(rawPlugins)
|
|
354
423
|
? rawPlugins
|
|
355
424
|
.filter((p) => !!p && typeof p === 'object')
|
|
356
425
|
.map((p) => {
|
|
357
426
|
const name = typeof p.name === 'string' ? p.name : '(unnamed)';
|
|
358
|
-
// exactOptionalPropertyTypes: omit
|
|
359
|
-
return
|
|
427
|
+
// exactOptionalPropertyTypes: omit a field rather than set it to undefined.
|
|
428
|
+
return {
|
|
429
|
+
name,
|
|
430
|
+
...(typeof p.version === 'string' ? { version: p.version } : {}),
|
|
431
|
+
...(typeof p.path === 'string' ? { path: p.path } : {}),
|
|
432
|
+
...(typeof p.source === 'string' ? { source: p.source } : {}),
|
|
433
|
+
};
|
|
360
434
|
})
|
|
361
435
|
: [];
|
|
362
436
|
found.push({
|
|
363
437
|
skills,
|
|
364
438
|
plugins,
|
|
439
|
+
pluginsReadable,
|
|
365
440
|
// An empty or relative cwd testifies to nothing — `resolve("")` silently becomes the caller's
|
|
366
441
|
// own cwd and can forge a match (Codex QE #6). Only an absolute path counts as evidence.
|
|
367
442
|
cwd: typeof obj.cwd === 'string' && obj.cwd !== '' && isAbsolute(obj.cwd) ? obj.cwd : null,
|
|
@@ -395,6 +470,11 @@ export function verifyRegistration(evidence, options = {}) {
|
|
|
395
470
|
if (!evidence.scan || !evidence.probe || !evidence.provenance || typeof evidence.projectDir !== 'string') {
|
|
396
471
|
return bad('incomplete evidence (scan, probe, provenance and projectDir are all required)');
|
|
397
472
|
}
|
|
473
|
+
// …and the scan must be SHAPED like a scan: a partial object crashed on `layout.length` (QE6 #8).
|
|
474
|
+
const sc = evidence.scan;
|
|
475
|
+
if (!Array.isArray(sc.findings) || !Array.isArray(sc.registrable) || !Array.isArray(sc.advisories) || !Array.isArray(sc.containers)) {
|
|
476
|
+
return bad('malformed scan (findings, registrable, advisories and containers must all be arrays)');
|
|
477
|
+
}
|
|
398
478
|
const { projectDir, scan, probe, provenance } = evidence;
|
|
399
479
|
// The contract is CANONICAL identity: a lexical `resolve` alone reports a symlinked project as a
|
|
400
480
|
// different one and turns a correct registration into `inconclusive` (QE4 #3).
|
|
@@ -435,6 +515,14 @@ export function verifyRegistration(evidence, options = {}) {
|
|
|
435
515
|
}
|
|
436
516
|
if (scan.scanError !== undefined)
|
|
437
517
|
return fail('inconclusive', `layout scan failed: ${scan.scanError}`);
|
|
518
|
+
// 1b. A load-blocking layout finding is DETERMINISTIC evidence — it needs no session at all.
|
|
519
|
+
// Evaluating it only after the probe meant a definite failure degraded to `inconclusive`
|
|
520
|
+
// whenever `claude` was missing (Codex QE5 #5).
|
|
521
|
+
if (layout.length > 0) {
|
|
522
|
+
return fail('fail', `${layout.length} layout problem(s) can never register — proven from the layout alone`, {
|
|
523
|
+
missing: [],
|
|
524
|
+
});
|
|
525
|
+
}
|
|
438
526
|
// 2. The probe must have produced a stream.
|
|
439
527
|
if (!probe.ok)
|
|
440
528
|
return fail('inconclusive', `probe failed: ${probe.error}`);
|
|
@@ -493,17 +581,58 @@ export function verifyRegistration(evidence, options = {}) {
|
|
|
493
581
|
: `${layout.length} layout problem(s) can never register (alongside ${expected.length} expected skill(s))`,
|
|
494
582
|
};
|
|
495
583
|
}
|
|
496
|
-
// 6b. A plugin-shaped container
|
|
497
|
-
//
|
|
498
|
-
//
|
|
499
|
-
//
|
|
500
|
-
//
|
|
501
|
-
|
|
502
|
-
//
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
584
|
+
// 6b. A plugin-shaped container must be ATTRIBUTED, then its skills must actually be listed.
|
|
585
|
+
//
|
|
586
|
+
// Identity is `path`/`source`, never the display name: matching by name both passed a broken
|
|
587
|
+
// container that shared a name with an unrelated marketplace plugin AND failed a correct
|
|
588
|
+
// container whose directory name differs from the name its manifest declares (Codex QE5 #1).
|
|
589
|
+
// And a loaded plugin is not proof its skills registered — a misconfigured skill can be absent
|
|
590
|
+
// from the authoritative listing while the plugin itself loads fine (QE5 #3).
|
|
591
|
+
if (scan.containers.length > 0 && !facts.pluginsReadable) {
|
|
592
|
+
return fail('inconclusive', 'the init event carried no readable `plugins` list — a container cannot be attributed', {
|
|
593
|
+
...common,
|
|
594
|
+
missing,
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
const containerProblems = [];
|
|
598
|
+
const verifiedContainers = [];
|
|
599
|
+
for (const c of scan.containers) {
|
|
600
|
+
const loaded = facts.plugins.find((p) => {
|
|
601
|
+
if (typeof p.path === 'string' && p.path) {
|
|
602
|
+
try {
|
|
603
|
+
if (resolvePath(p.path) === resolvePath(c.path))
|
|
604
|
+
return true; // strongest: same directory
|
|
605
|
+
}
|
|
606
|
+
catch {
|
|
607
|
+
/* an unresolvable path is simply not a match */
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
// A skills-directory plugin reports `<declared-name>@skills-dir`; fall back to that, then to
|
|
611
|
+
// the declared name itself. The container's DIRECTORY name is never used as identity.
|
|
612
|
+
if (c.manifestName) {
|
|
613
|
+
if (p.source === `${c.manifestName}@skills-dir`)
|
|
614
|
+
return true;
|
|
615
|
+
if (p.name === c.manifestName && (p.source ?? '').endsWith('@skills-dir'))
|
|
616
|
+
return true;
|
|
617
|
+
}
|
|
618
|
+
return false;
|
|
619
|
+
});
|
|
620
|
+
if (!loaded) {
|
|
621
|
+
containerProblems.push(`${c.dir}/ declares a plugin${c.manifestName ? ` (${c.manifestName})` : ''} that did not load — ` +
|
|
622
|
+
`${c.candidates.length} skill(s) inside would register nowhere`);
|
|
623
|
+
continue;
|
|
624
|
+
}
|
|
625
|
+
// It loaded. We deliberately DO NOT verify its individual skills here.
|
|
626
|
+
//
|
|
627
|
+
// Doing so requires reproducing Claude Code's command-name resolution: a plugin skill's
|
|
628
|
+
// frontmatter `name` replaces the final command segment, and a manifest's `skills` field may be a
|
|
629
|
+
// string or point at a directory of children. That contract is undocumented-to-us and moving, and
|
|
630
|
+
// six review rounds showed every attempt to model it produced a NEW false verdict. A narrow
|
|
631
|
+
// promise kept exactly beats a broad promise kept unreliably — so the gate reports the gap
|
|
632
|
+
// instead of guessing (see the advisory below and the README).
|
|
633
|
+
verifiedContainers.push(`${c.dir}/ → plugin "${loaded.name}" loaded`);
|
|
634
|
+
}
|
|
635
|
+
if (containerProblems.length > 0) {
|
|
507
636
|
return {
|
|
508
637
|
expected,
|
|
509
638
|
layout,
|
|
@@ -511,10 +640,7 @@ export function verifyRegistration(evidence, options = {}) {
|
|
|
511
640
|
...common,
|
|
512
641
|
missing,
|
|
513
642
|
verdict: 'fail',
|
|
514
|
-
reason: `${
|
|
515
|
-
deadContainers
|
|
516
|
-
.map((c) => `${c.dir}/ (${c.candidates.length} skill(s) inside, but no such plugin in the session)`)
|
|
517
|
-
.join('; '),
|
|
643
|
+
reason: `${containerProblems.length} plugin container problem(s) — ${containerProblems.join('; ')}`,
|
|
518
644
|
};
|
|
519
645
|
}
|
|
520
646
|
// 7. Provenance must have been CHECKED, and must be unambiguous.
|
|
@@ -528,11 +654,17 @@ export function verifyRegistration(evidence, options = {}) {
|
|
|
528
654
|
return fail('inconclusive', `${ambiguousExpected.length} expected name(s) also exist outside this project (${ambiguousExpected.join(', ')}) — ` +
|
|
529
655
|
'the listing carries names, not provenance, so registration cannot be attributed to this project', { ...common });
|
|
530
656
|
}
|
|
657
|
+
const containerAdvisories = verifiedContainers.map((v) => ({
|
|
658
|
+
dir: v.split('/')[0] ?? v,
|
|
659
|
+
kind: 'plugin-manifest-trap',
|
|
660
|
+
detail: `${v} — its individual skills are NOT verified: a plugin skill's command name depends on frontmatter this gate does not model`,
|
|
661
|
+
}));
|
|
662
|
+
const allAdvisories = [...scan.advisories, ...containerAdvisories];
|
|
531
663
|
if (missing.length > 0) {
|
|
532
664
|
return {
|
|
533
665
|
expected,
|
|
534
666
|
layout,
|
|
535
|
-
advisories:
|
|
667
|
+
advisories: allAdvisories,
|
|
536
668
|
...common,
|
|
537
669
|
missing,
|
|
538
670
|
verdict: 'fail',
|
|
@@ -542,7 +674,7 @@ export function verifyRegistration(evidence, options = {}) {
|
|
|
542
674
|
return {
|
|
543
675
|
expected,
|
|
544
676
|
layout,
|
|
545
|
-
advisories:
|
|
677
|
+
advisories: allAdvisories,
|
|
546
678
|
...common,
|
|
547
679
|
missing: [],
|
|
548
680
|
verdict: 'pass',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-verify.js","sourceRoot":"","sources":["../src/skills-verify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skills-verify.js","sourceRoot":"","sources":["../src/skills-verify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/harness-core",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.132",
|
|
4
4
|
"description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,13 +32,13 @@
|
|
|
32
32
|
"@dzhechkov/adapter-openclaude": "^0.1.0",
|
|
33
33
|
"@dzhechkov/adapter-opencode": "^0.2.0",
|
|
34
34
|
"yaml": "^2.0.0",
|
|
35
|
-
"@dzhechkov/adapter-agents-md": "0.1.1",
|
|
36
35
|
"@dzhechkov/adapter-copilot": "0.1.1",
|
|
36
|
+
"@dzhechkov/adapter-agents-md": "0.1.1",
|
|
37
37
|
"@dzhechkov/adapter-windsurf": "0.1.1",
|
|
38
|
-
"@dzhechkov/adapter-cursor": "0.1.1",
|
|
39
38
|
"@dzhechkov/adapter-gemini": "0.1.1",
|
|
40
|
-
"@dzhechkov/
|
|
41
|
-
"@dzhechkov/core": "0.2.14"
|
|
39
|
+
"@dzhechkov/adapter-cursor": "0.1.1",
|
|
40
|
+
"@dzhechkov/core": "0.2.14",
|
|
41
|
+
"@dzhechkov/memory": "0.2.9"
|
|
42
42
|
},
|
|
43
43
|
"peerDependenciesMeta": {
|
|
44
44
|
"@ruvector/rvf": {
|
package/sbom.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"hashes": [
|
|
26
26
|
{
|
|
27
27
|
"alg": "SHA-256",
|
|
28
|
-
"content": "
|
|
28
|
+
"content": "cb5ff980d92ab4e3703f5a3a5453a2550a68581364510667bf972cb7141ccc5e"
|
|
29
29
|
}
|
|
30
30
|
]
|
|
31
31
|
},
|
|
@@ -2095,7 +2095,7 @@
|
|
|
2095
2095
|
"hashes": [
|
|
2096
2096
|
{
|
|
2097
2097
|
"alg": "SHA-256",
|
|
2098
|
-
"content": "
|
|
2098
|
+
"content": "a9f77e152e70c489ce40bf1b7a0af370cea73afc95bafc5b5c9811547d7226e1"
|
|
2099
2099
|
}
|
|
2100
2100
|
]
|
|
2101
2101
|
},
|
|
@@ -2105,7 +2105,7 @@
|
|
|
2105
2105
|
"hashes": [
|
|
2106
2106
|
{
|
|
2107
2107
|
"alg": "SHA-256",
|
|
2108
|
-
"content": "
|
|
2108
|
+
"content": "bd00b8f67335044425ac434e95caf0ed9406e64085bbc65acbdbde559e774034"
|
|
2109
2109
|
}
|
|
2110
2110
|
]
|
|
2111
2111
|
},
|
|
@@ -2115,7 +2115,7 @@
|
|
|
2115
2115
|
"hashes": [
|
|
2116
2116
|
{
|
|
2117
2117
|
"alg": "SHA-256",
|
|
2118
|
-
"content": "
|
|
2118
|
+
"content": "0bd0815ff7d1b8e0ee4165b3f1849751755eb3d373a8cee65f39ccb101d6fd47"
|
|
2119
2119
|
}
|
|
2120
2120
|
]
|
|
2121
2121
|
},
|
|
@@ -2125,7 +2125,7 @@
|
|
|
2125
2125
|
"hashes": [
|
|
2126
2126
|
{
|
|
2127
2127
|
"alg": "SHA-256",
|
|
2128
|
-
"content": "
|
|
2128
|
+
"content": "1faf215390d865a315a05995ffc111c7776f14889dc5b2dc4cae1bc47aded0fd"
|
|
2129
2129
|
}
|
|
2130
2130
|
]
|
|
2131
2131
|
},
|
|
@@ -2455,7 +2455,7 @@
|
|
|
2455
2455
|
"hashes": [
|
|
2456
2456
|
{
|
|
2457
2457
|
"alg": "SHA-256",
|
|
2458
|
-
"content": "
|
|
2458
|
+
"content": "6b3b76ef6283e736c0283c464bcebf2fbd7f3625f9725002023bc8b55a9d655a"
|
|
2459
2459
|
}
|
|
2460
2460
|
]
|
|
2461
2461
|
},
|
|
@@ -2965,7 +2965,7 @@
|
|
|
2965
2965
|
"hashes": [
|
|
2966
2966
|
{
|
|
2967
2967
|
"alg": "SHA-256",
|
|
2968
|
-
"content": "
|
|
2968
|
+
"content": "fe9e9c87cd4051a294b8a7d249deb6acd61fea31e60be5ca2dd4d688ec624a69"
|
|
2969
2969
|
}
|
|
2970
2970
|
]
|
|
2971
2971
|
},
|
|
@@ -3705,7 +3705,7 @@
|
|
|
3705
3705
|
"hashes": [
|
|
3706
3706
|
{
|
|
3707
3707
|
"alg": "SHA-256",
|
|
3708
|
-
"content": "
|
|
3708
|
+
"content": "b344c0b58ec7d475e88f56fb59de661005d1148fb75c632add83fc94102a22ba"
|
|
3709
3709
|
}
|
|
3710
3710
|
]
|
|
3711
3711
|
},
|
package/src/skills-verify.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* FAIL-CLOSED: anything that prevents an honest observation yields `inconclusive`, never `pass`.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { existsSync, lstatSync, readdirSync, realpathSync, statSync } from 'node:fs';
|
|
17
|
+
import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from 'node:fs';
|
|
18
18
|
import { basename, isAbsolute, join, resolve } from 'node:path';
|
|
19
19
|
|
|
20
20
|
// ── Layer 1: static layout scan ─────────────────────────────────────
|
|
@@ -55,7 +55,17 @@ export interface StaticScan {
|
|
|
55
55
|
* it did not register and that is a failure (QE4 #1 — without this, making the container advisory
|
|
56
56
|
* re-opened the vacuous pass and the gate stopped catching health-advisor 1.2.0).
|
|
57
57
|
*/
|
|
58
|
-
readonly containers: readonly {
|
|
58
|
+
readonly containers: readonly {
|
|
59
|
+
readonly dir: string;
|
|
60
|
+
/** Absolute path of the container — matched against `init.plugins[].path` (QE5 #1). */
|
|
61
|
+
readonly path: string;
|
|
62
|
+
/** The name the container's OWN manifest declares (may differ from the dir name — QE5 #1b). */
|
|
63
|
+
readonly manifestName: string | null;
|
|
64
|
+
/** Skill names it would provide: discovered on disk AND declared by the manifest (QE5 #4). */
|
|
65
|
+
readonly candidates: readonly string[];
|
|
66
|
+
/** True when the dir ALSO has a depth-1 SKILL.md — a single-skill plugin (QE5 #2). */
|
|
67
|
+
readonly alsoBare: boolean;
|
|
68
|
+
}[];
|
|
59
69
|
/**
|
|
60
70
|
* Set when the scan could not complete (unreadable dir, `.claude/skills` is a file, …). A failed
|
|
61
71
|
* scan must NOT read as "a clean empty project" — the classifier turns this into `inconclusive`
|
|
@@ -64,7 +74,10 @@ export interface StaticScan {
|
|
|
64
74
|
readonly scanError?: string;
|
|
65
75
|
}
|
|
66
76
|
|
|
67
|
-
|
|
77
|
+
// Bounded on purpose: deep enough for every real layout seen (extended/<name>/, skills/<name>/,
|
|
78
|
+
// base/<dep>/), shallow enough not to walk a whole tree. A SKILL.md below this bound is not seen —
|
|
79
|
+
// a stated limit, not a silent one (QE6 #9).
|
|
80
|
+
const MAX_BURIED_DEPTH = 6;
|
|
68
81
|
|
|
69
82
|
function findBuriedSkillMd(dir: string, depth: number, acc: string[], errors: string[]): void {
|
|
70
83
|
if (depth > MAX_BURIED_DEPTH) return;
|
|
@@ -98,6 +111,28 @@ function hasPluginManifest(dir: string): boolean {
|
|
|
98
111
|
return existsSync(join(dir, '.claude-plugin', 'plugin.json'));
|
|
99
112
|
}
|
|
100
113
|
|
|
114
|
+
/**
|
|
115
|
+
* Read a container's own `.claude-plugin/plugin.json`: the name it DECLARES and the skill paths it
|
|
116
|
+
* declares. A manifest may point at a custom path deeper than the on-disk walk, which otherwise left
|
|
117
|
+
* the container with zero candidates and restored a vacuous PASS (QE5 #4).
|
|
118
|
+
*/
|
|
119
|
+
function readContainerManifest(dir: string): { name: string | null; declared: string[] } {
|
|
120
|
+
try {
|
|
121
|
+
const raw = readFileSync(join(dir, '.claude-plugin', 'plugin.json'), 'utf8');
|
|
122
|
+
const obj = JSON.parse(raw) as Record<string, unknown>;
|
|
123
|
+
const name = typeof obj.name === 'string' && obj.name ? obj.name : null;
|
|
124
|
+
const declared = Array.isArray(obj.skills)
|
|
125
|
+
? obj.skills
|
|
126
|
+
.filter((x): x is string => typeof x === 'string')
|
|
127
|
+
.map((rel) => basename(rel.replace(/\/+$/, '')))
|
|
128
|
+
.filter(Boolean)
|
|
129
|
+
: [];
|
|
130
|
+
return { name, declared };
|
|
131
|
+
} catch {
|
|
132
|
+
return { name: null, declared: [] }; // unreadable/!JSON: the manifest's INTENT still counts
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
101
136
|
/**
|
|
102
137
|
* Does this directory look like it was INTENDED as a skill? A dir with no markdown at all is
|
|
103
138
|
* ordinary content (`scripts/`, `bin/`, `templates/`) — calling it a failed skill is a false FAIL
|
|
@@ -230,7 +265,13 @@ export function scanSkillsLayout(projectDir: string): StaticScan {
|
|
|
230
265
|
const registrable: string[] = [];
|
|
231
266
|
const findings: SkillLayoutFinding[] = [];
|
|
232
267
|
const advisories: SkillLayoutFinding[] = [];
|
|
233
|
-
const containers: {
|
|
268
|
+
const containers: {
|
|
269
|
+
dir: string;
|
|
270
|
+
path: string;
|
|
271
|
+
manifestName: string | null;
|
|
272
|
+
candidates: string[];
|
|
273
|
+
alsoBare: boolean;
|
|
274
|
+
}[] = [];
|
|
234
275
|
const scanErrors: string[] = [];
|
|
235
276
|
|
|
236
277
|
let entries: string[] = [];
|
|
@@ -261,9 +302,17 @@ export function scanSkillsLayout(projectDir: string): StaticScan {
|
|
|
261
302
|
scanErrors.push(`cannot stat ${dir}: ${error instanceof Error ? error.message : String(error)}`);
|
|
262
303
|
continue;
|
|
263
304
|
}
|
|
305
|
+
// A `SKILL.md` sitting directly in `.claude/skills/` registers nothing, whether it is a FILE or
|
|
306
|
+
// a DIRECTORY — the directory form previously slipped into the ordinary branch (QE6 #6).
|
|
307
|
+
if (name === 'SKILL.md') {
|
|
308
|
+
findings.push({
|
|
309
|
+
dir: '.',
|
|
310
|
+
kind: 'no-skill-md',
|
|
311
|
+
detail: 'SKILL.md sits directly in .claude/skills/ — a skill must live in its own directory to register',
|
|
312
|
+
});
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
264
315
|
if (!isDir) {
|
|
265
|
-
// A SKILL.md dropped directly into .claude/skills/ registers nothing — it is a real defect,
|
|
266
|
-
// not something to skip silently (QE #4).
|
|
267
316
|
if (name === 'SKILL.md') {
|
|
268
317
|
findings.push({
|
|
269
318
|
dir: '.',
|
|
@@ -275,15 +324,20 @@ export function scanSkillsLayout(projectDir: string): StaticScan {
|
|
|
275
324
|
}
|
|
276
325
|
|
|
277
326
|
const registers = hasSkillFile(dir);
|
|
278
|
-
// A manifest
|
|
327
|
+
// A manifest makes this a plugin CONTAINER even when it ALSO has a depth-1 SKILL.md — that is a
|
|
328
|
+
// single-skill plugin, whose skills are namespaced, so expecting the bare name false-FAILs (QE5 #2).
|
|
279
329
|
// It did not register in measured practice, but the class may be supported under workspace
|
|
280
330
|
// trust — so the WHOLE container is advisory. Emitting the generic `no-skill-md` /
|
|
281
331
|
// `buried-skill-md` findings for it killed the layout anyway, which was the over-claim (QE4 #1).
|
|
282
|
-
const isPluginContainer =
|
|
332
|
+
const isPluginContainer = hasPluginManifest(dir);
|
|
283
333
|
const bucket = isPluginContainer ? advisories : findings;
|
|
284
334
|
|
|
285
|
-
if (registers) {
|
|
335
|
+
if (registers && !isPluginContainer) {
|
|
286
336
|
registrable.push(name);
|
|
337
|
+
} else if (registers && isPluginContainer) {
|
|
338
|
+
// A single-skill plugin: it has a depth-1 SKILL.md AND a manifest, so it registers NAMESPACED.
|
|
339
|
+
// Expecting the bare directory name here was a false FAIL (QE5 #2); the container check below
|
|
340
|
+
// accepts either form.
|
|
287
341
|
} else {
|
|
288
342
|
// A dir with no markdown was never meant to be a skill — advisory, not a failure (QE5 #7).
|
|
289
343
|
const intended = looksLikeSkillDir(dir);
|
|
@@ -303,11 +357,26 @@ export function scanSkillsLayout(projectDir: string): StaticScan {
|
|
|
303
357
|
// Only a report when the dir registers NOTHING: a dir with its own depth-1 SKILL.md registers
|
|
304
358
|
// fine and a stray manifest beside it is inert, not a blocker (Codex QE #8).
|
|
305
359
|
if (isPluginContainer) {
|
|
306
|
-
// What would this container provide?
|
|
360
|
+
// What would this container provide? Names found on disk UNION names its manifest declares —
|
|
361
|
+
// a manifest may point at a custom path deeper than the walk, which previously left the
|
|
362
|
+
// container with zero candidates and let it slip through (QE5 #4).
|
|
307
363
|
const inner: string[] = [];
|
|
308
364
|
findBuriedSkillMd(dir, 1, inner, scanErrors);
|
|
309
|
-
const
|
|
310
|
-
|
|
365
|
+
const manifest = readContainerManifest(dir);
|
|
366
|
+
const candidates = [
|
|
367
|
+
...new Set([
|
|
368
|
+
...inner.map((f) => basename(join(f, '..'))),
|
|
369
|
+
...manifest.declared,
|
|
370
|
+
...(registers ? [manifest.name ?? name] : []), // the single-skill plugin's own skill (QE5 #2)
|
|
371
|
+
]),
|
|
372
|
+
];
|
|
373
|
+
containers.push({
|
|
374
|
+
dir: name,
|
|
375
|
+
path: dir,
|
|
376
|
+
manifestName: manifest.name,
|
|
377
|
+
candidates,
|
|
378
|
+
alsoBare: registers,
|
|
379
|
+
});
|
|
311
380
|
advisories.push({
|
|
312
381
|
dir: name,
|
|
313
382
|
kind: 'plugin-manifest-trap',
|
|
@@ -321,6 +390,20 @@ export function scanSkillsLayout(projectDir: string): StaticScan {
|
|
|
321
390
|
// register may legitimately bundle nested SKILL.md files as its own resources — health-advisor
|
|
322
391
|
// 1.2.1 co-locates its base deps under the master exactly so they do NOT register. Only a dir
|
|
323
392
|
// that registers NOTHING while hiding SKILL.md files inside is the 1.2.0 defect shape.
|
|
393
|
+
if (registers && !isPluginContainer) {
|
|
394
|
+
const nested: string[] = [];
|
|
395
|
+
findBuriedSkillMd(dir, 1, nested, scanErrors);
|
|
396
|
+
if (nested.length > 0) {
|
|
397
|
+
advisories.push({
|
|
398
|
+
dir: name,
|
|
399
|
+
kind: 'buried-skill-md',
|
|
400
|
+
detail:
|
|
401
|
+
`${name}/ bundles ${nested.length} nested SKILL.md file(s) as resources — they do NOT register ` +
|
|
402
|
+
`(correct for co-located dependencies; a real skill placed there would be invisible)`,
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
324
407
|
if (!registers) {
|
|
325
408
|
const buried: string[] = [];
|
|
326
409
|
findBuriedSkillMd(dir, 1, buried, scanErrors);
|
|
@@ -351,12 +434,18 @@ export function scanSkillsLayout(projectDir: string): StaticScan {
|
|
|
351
434
|
export interface InitPlugin {
|
|
352
435
|
readonly name: string;
|
|
353
436
|
readonly version?: string;
|
|
437
|
+
/** Where the plugin was loaded FROM — the only identity that cannot be spoofed by a name (QE5 #1). */
|
|
438
|
+
readonly path?: string;
|
|
439
|
+
/** e.g. `telegram@claude-plugins-official`, `health-advisor@skills-dir`. */
|
|
440
|
+
readonly source?: string;
|
|
354
441
|
}
|
|
355
442
|
|
|
356
443
|
export interface InitFacts {
|
|
357
444
|
/** Registered skill names. `null` means the key was ABSENT (schema drift) — never "none". */
|
|
358
445
|
readonly skills: readonly string[] | null;
|
|
359
446
|
readonly plugins: readonly InitPlugin[];
|
|
447
|
+
/** False when the `plugins` key was absent or not an array — unreadable, not empty (QE6 #7). */
|
|
448
|
+
readonly pluginsReadable: boolean;
|
|
360
449
|
/** The project the session actually read — the built-in control. */
|
|
361
450
|
readonly cwd: string | null;
|
|
362
451
|
readonly clientVersion: string | null;
|
|
@@ -420,19 +509,28 @@ function parseStream(streamText: string): StreamParse {
|
|
|
420
509
|
: null;
|
|
421
510
|
|
|
422
511
|
const rawPlugins = obj.plugins;
|
|
512
|
+
// An ABSENT or non-array `plugins` key is unreadable schema, not proof that nothing loaded —
|
|
513
|
+
// with containers present that difference decides FAIL vs INCONCLUSIVE (QE6 #7).
|
|
514
|
+
const pluginsReadable = Array.isArray(rawPlugins);
|
|
423
515
|
const plugins: InitPlugin[] = Array.isArray(rawPlugins)
|
|
424
516
|
? rawPlugins
|
|
425
517
|
.filter((p): p is Record<string, unknown> => !!p && typeof p === 'object')
|
|
426
518
|
.map((p) => {
|
|
427
519
|
const name = typeof p.name === 'string' ? p.name : '(unnamed)';
|
|
428
|
-
// exactOptionalPropertyTypes: omit
|
|
429
|
-
return
|
|
520
|
+
// exactOptionalPropertyTypes: omit a field rather than set it to undefined.
|
|
521
|
+
return {
|
|
522
|
+
name,
|
|
523
|
+
...(typeof p.version === 'string' ? { version: p.version } : {}),
|
|
524
|
+
...(typeof p.path === 'string' ? { path: p.path } : {}),
|
|
525
|
+
...(typeof p.source === 'string' ? { source: p.source } : {}),
|
|
526
|
+
};
|
|
430
527
|
})
|
|
431
528
|
: [];
|
|
432
529
|
|
|
433
530
|
found.push({
|
|
434
531
|
skills,
|
|
435
532
|
plugins,
|
|
533
|
+
pluginsReadable,
|
|
436
534
|
// An empty or relative cwd testifies to nothing — `resolve("")` silently becomes the caller's
|
|
437
535
|
// own cwd and can forge a match (Codex QE #6). Only an absolute path counts as evidence.
|
|
438
536
|
cwd: typeof obj.cwd === 'string' && obj.cwd !== '' && isAbsolute(obj.cwd) ? obj.cwd : null,
|
|
@@ -516,6 +614,11 @@ export function verifyRegistration(evidence: RegistrationEvidence, options: Skil
|
|
|
516
614
|
if (!evidence.scan || !evidence.probe || !evidence.provenance || typeof evidence.projectDir !== 'string') {
|
|
517
615
|
return bad('incomplete evidence (scan, probe, provenance and projectDir are all required)');
|
|
518
616
|
}
|
|
617
|
+
// …and the scan must be SHAPED like a scan: a partial object crashed on `layout.length` (QE6 #8).
|
|
618
|
+
const sc = evidence.scan as Partial<StaticScan>;
|
|
619
|
+
if (!Array.isArray(sc.findings) || !Array.isArray(sc.registrable) || !Array.isArray(sc.advisories) || !Array.isArray(sc.containers)) {
|
|
620
|
+
return bad('malformed scan (findings, registrable, advisories and containers must all be arrays)');
|
|
621
|
+
}
|
|
519
622
|
const { projectDir, scan, probe, provenance } = evidence;
|
|
520
623
|
// The contract is CANONICAL identity: a lexical `resolve` alone reports a symlinked project as a
|
|
521
624
|
// different one and turns a correct registration into `inconclusive` (QE4 #3).
|
|
@@ -561,6 +664,15 @@ export function verifyRegistration(evidence: RegistrationEvidence, options: Skil
|
|
|
561
664
|
}
|
|
562
665
|
if (scan.scanError !== undefined) return fail('inconclusive', `layout scan failed: ${scan.scanError}`);
|
|
563
666
|
|
|
667
|
+
// 1b. A load-blocking layout finding is DETERMINISTIC evidence — it needs no session at all.
|
|
668
|
+
// Evaluating it only after the probe meant a definite failure degraded to `inconclusive`
|
|
669
|
+
// whenever `claude` was missing (Codex QE5 #5).
|
|
670
|
+
if (layout.length > 0) {
|
|
671
|
+
return fail('fail', `${layout.length} layout problem(s) can never register — proven from the layout alone`, {
|
|
672
|
+
missing: [],
|
|
673
|
+
});
|
|
674
|
+
}
|
|
675
|
+
|
|
564
676
|
// 2. The probe must have produced a stream.
|
|
565
677
|
if (!probe.ok) return fail('inconclusive', `probe failed: ${probe.error}`);
|
|
566
678
|
|
|
@@ -634,17 +746,58 @@ export function verifyRegistration(evidence: RegistrationEvidence, options: Skil
|
|
|
634
746
|
};
|
|
635
747
|
}
|
|
636
748
|
|
|
637
|
-
// 6b. A plugin-shaped container
|
|
638
|
-
//
|
|
639
|
-
//
|
|
640
|
-
//
|
|
641
|
-
//
|
|
642
|
-
|
|
643
|
-
//
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
749
|
+
// 6b. A plugin-shaped container must be ATTRIBUTED, then its skills must actually be listed.
|
|
750
|
+
//
|
|
751
|
+
// Identity is `path`/`source`, never the display name: matching by name both passed a broken
|
|
752
|
+
// container that shared a name with an unrelated marketplace plugin AND failed a correct
|
|
753
|
+
// container whose directory name differs from the name its manifest declares (Codex QE5 #1).
|
|
754
|
+
// And a loaded plugin is not proof its skills registered — a misconfigured skill can be absent
|
|
755
|
+
// from the authoritative listing while the plugin itself loads fine (QE5 #3).
|
|
756
|
+
if (scan.containers.length > 0 && !facts.pluginsReadable) {
|
|
757
|
+
return fail('inconclusive', 'the init event carried no readable `plugins` list — a container cannot be attributed', {
|
|
758
|
+
...common,
|
|
759
|
+
missing,
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
const containerProblems: string[] = [];
|
|
764
|
+
const verifiedContainers: string[] = [];
|
|
765
|
+
for (const c of scan.containers) {
|
|
766
|
+
const loaded = facts.plugins.find((p) => {
|
|
767
|
+
if (typeof p.path === 'string' && p.path) {
|
|
768
|
+
try {
|
|
769
|
+
if (resolvePath(p.path) === resolvePath(c.path)) return true; // strongest: same directory
|
|
770
|
+
} catch {
|
|
771
|
+
/* an unresolvable path is simply not a match */
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
// A skills-directory plugin reports `<declared-name>@skills-dir`; fall back to that, then to
|
|
775
|
+
// the declared name itself. The container's DIRECTORY name is never used as identity.
|
|
776
|
+
if (c.manifestName) {
|
|
777
|
+
if (p.source === `${c.manifestName}@skills-dir`) return true;
|
|
778
|
+
if (p.name === c.manifestName && (p.source ?? '').endsWith('@skills-dir')) return true;
|
|
779
|
+
}
|
|
780
|
+
return false;
|
|
781
|
+
});
|
|
782
|
+
|
|
783
|
+
if (!loaded) {
|
|
784
|
+
containerProblems.push(
|
|
785
|
+
`${c.dir}/ declares a plugin${c.manifestName ? ` (${c.manifestName})` : ''} that did not load — ` +
|
|
786
|
+
`${c.candidates.length} skill(s) inside would register nowhere`,
|
|
787
|
+
);
|
|
788
|
+
continue;
|
|
789
|
+
}
|
|
790
|
+
// It loaded. We deliberately DO NOT verify its individual skills here.
|
|
791
|
+
//
|
|
792
|
+
// Doing so requires reproducing Claude Code's command-name resolution: a plugin skill's
|
|
793
|
+
// frontmatter `name` replaces the final command segment, and a manifest's `skills` field may be a
|
|
794
|
+
// string or point at a directory of children. That contract is undocumented-to-us and moving, and
|
|
795
|
+
// six review rounds showed every attempt to model it produced a NEW false verdict. A narrow
|
|
796
|
+
// promise kept exactly beats a broad promise kept unreliably — so the gate reports the gap
|
|
797
|
+
// instead of guessing (see the advisory below and the README).
|
|
798
|
+
verifiedContainers.push(`${c.dir}/ → plugin "${loaded.name}" loaded`);
|
|
799
|
+
}
|
|
800
|
+
if (containerProblems.length > 0) {
|
|
648
801
|
return {
|
|
649
802
|
expected,
|
|
650
803
|
layout,
|
|
@@ -652,11 +805,7 @@ export function verifyRegistration(evidence: RegistrationEvidence, options: Skil
|
|
|
652
805
|
...common,
|
|
653
806
|
missing,
|
|
654
807
|
verdict: 'fail',
|
|
655
|
-
reason:
|
|
656
|
-
`${deadContainers.length} plugin-shaped container(s) did not load — ` +
|
|
657
|
-
deadContainers
|
|
658
|
-
.map((c) => `${c.dir}/ (${c.candidates.length} skill(s) inside, but no such plugin in the session)`)
|
|
659
|
-
.join('; '),
|
|
808
|
+
reason: `${containerProblems.length} plugin container problem(s) — ${containerProblems.join('; ')}`,
|
|
660
809
|
};
|
|
661
810
|
}
|
|
662
811
|
|
|
@@ -676,11 +825,18 @@ export function verifyRegistration(evidence: RegistrationEvidence, options: Skil
|
|
|
676
825
|
);
|
|
677
826
|
}
|
|
678
827
|
|
|
828
|
+
const containerAdvisories: SkillLayoutFinding[] = verifiedContainers.map((v) => ({
|
|
829
|
+
dir: v.split('/')[0] ?? v,
|
|
830
|
+
kind: 'plugin-manifest-trap' as const,
|
|
831
|
+
detail: `${v} — its individual skills are NOT verified: a plugin skill's command name depends on frontmatter this gate does not model`,
|
|
832
|
+
}));
|
|
833
|
+
const allAdvisories = [...scan.advisories, ...containerAdvisories];
|
|
834
|
+
|
|
679
835
|
if (missing.length > 0) {
|
|
680
836
|
return {
|
|
681
837
|
expected,
|
|
682
838
|
layout,
|
|
683
|
-
advisories:
|
|
839
|
+
advisories: allAdvisories,
|
|
684
840
|
...common,
|
|
685
841
|
missing,
|
|
686
842
|
verdict: 'fail',
|
|
@@ -691,7 +847,7 @@ export function verifyRegistration(evidence: RegistrationEvidence, options: Skil
|
|
|
691
847
|
return {
|
|
692
848
|
expected,
|
|
693
849
|
layout,
|
|
694
|
-
advisories:
|
|
850
|
+
advisories: allAdvisories,
|
|
695
851
|
...common,
|
|
696
852
|
missing: [],
|
|
697
853
|
verdict: 'pass',
|