@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 CHANGED
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "README.md",
12
- "sha256": "c2aead6a4abbb122c071a72951923c16dfdd8a34bc10a7bde5efa54916566ccb"
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": "5d783a0c8a66f0b8d2033bdd7c9411afce7d7fe0ecb9954740fc0bceff5284cb"
840
+ "sha256": "a9f77e152e70c489ce40bf1b7a0af370cea73afc95bafc5b5c9811547d7226e1"
841
841
  },
842
842
  {
843
843
  "path": "dist/skills-verify.d.ts.map",
844
- "sha256": "c33fdd67b0bcebd29603a3cae1e1cf42d6c623a14b1d739d344f8bddc1b4018b"
844
+ "sha256": "bd00b8f67335044425ac434e95caf0ed9406e64085bbc65acbdbde559e774034"
845
845
  },
846
846
  {
847
847
  "path": "dist/skills-verify.js",
848
- "sha256": "997859dd8031a42dc38254b0de1ae955ceed44045eeb0361da1be5a173884098"
848
+ "sha256": "0bd0815ff7d1b8e0ee4165b3f1849751755eb3d373a8cee65f39ccb101d6fd47"
849
849
  },
850
850
  {
851
851
  "path": "dist/skills-verify.js.map",
852
- "sha256": "5de16efcefd4fe13d6ddc0e5f009b218baffa86e8d9335323ec12cef7dc0cad2"
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": "fed3e8ccedb0ebdbf75029dec7ae2a4b47868781fc934dd0efd459fc24f7dc00"
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": "552295d4e087c6732b28630a34ed0bdc007cd5f3be7971110b55e42bef0736e0"
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": "5791d1f0abf7facecfe1477a5313fc7fca69df4c47332b2be3cd4798bca8b7a0"
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": "BAwmQoipNFePzURJ+UR5D84CqHpSGcVPeCUHAkttaWzPGeh8Sjz0x3awQ8DFds6VsoaUA1igyoSzoajUDOcFDA=="
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
 
@@ -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":"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"}
1
+ {"version":3,"file":"skills-verify.d.ts","sourceRoot":"","sources":["../src/skills-verify.ts"],"names":[],"mappings":"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"}
@@ -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
- const MAX_BURIED_DEPTH = 4; // enough to catch extended/<name>/SKILL.md without walking the world
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-backed CONTAINER (`<dir>/.claude-plugin/plugin.json`) is a plugin-shaped layout.
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 = !registers && hasPluginManifest(dir);
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? The dir name of every nested SKILL.md.
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 candidates = [...new Set(inner.map((f) => basename(join(f, '..'))))];
269
- containers.push({ dir: name, candidates });
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 `version` rather than set it to undefined.
359
- return typeof p.version === 'string' ? { name, version: p.version } : { name };
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 is forgiven ONLY if the SESSION says that plugin loaded.
497
- // Matching on skill NAMES was wrong: one incidental collision with an unrelated plugin's skill
498
- // (e.g. `deep-research`) forgave the whole container, and the gate PASSED the broken
499
- // health-advisor 1.2.0 (MEASURED reproducer: `dz skills-verify` against that published
500
- // install). `init.plugins` names what actually loaded, so ask that instead.
501
- const loadedPlugins = new Set(facts.plugins.map((p) => p.name));
502
- // Only the LOADED-PLUGIN list counts. A namespaced-name fallback (`<dir>:<skill>` present in the
503
- // listing) was still name-based evidence — the very class that made the gate pass a broken install
504
- // and `init.plugins` already covers every legitimate case.
505
- const deadContainers = scan.containers.filter((c) => c.candidates.length > 0 && !loadedPlugins.has(c.dir));
506
- if (deadContainers.length > 0) {
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: `${deadContainers.length} plugin-shaped container(s) did not load ` +
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: scan.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: scan.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.131",
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/memory": "0.2.9",
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": "c2aead6a4abbb122c071a72951923c16dfdd8a34bc10a7bde5efa54916566ccb"
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": "5d783a0c8a66f0b8d2033bdd7c9411afce7d7fe0ecb9954740fc0bceff5284cb"
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": "c33fdd67b0bcebd29603a3cae1e1cf42d6c623a14b1d739d344f8bddc1b4018b"
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": "997859dd8031a42dc38254b0de1ae955ceed44045eeb0361da1be5a173884098"
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": "5de16efcefd4fe13d6ddc0e5f009b218baffa86e8d9335323ec12cef7dc0cad2"
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": "fed3e8ccedb0ebdbf75029dec7ae2a4b47868781fc934dd0efd459fc24f7dc00"
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": "552295d4e087c6732b28630a34ed0bdc007cd5f3be7971110b55e42bef0736e0"
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": "5791d1f0abf7facecfe1477a5313fc7fca69df4c47332b2be3cd4798bca8b7a0"
3708
+ "content": "b344c0b58ec7d475e88f56fb59de661005d1148fb75c632add83fc94102a22ba"
3709
3709
  }
3710
3710
  ]
3711
3711
  },
@@ -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 { readonly dir: string; readonly candidates: readonly string[] }[];
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
- const MAX_BURIED_DEPTH = 4; // enough to catch extended/<name>/SKILL.md without walking the world
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: { dir: string; candidates: string[] }[] = [];
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-backed CONTAINER (`<dir>/.claude-plugin/plugin.json`) is a plugin-shaped layout.
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 = !registers && hasPluginManifest(dir);
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? The dir name of every nested SKILL.md.
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 candidates = [...new Set(inner.map((f) => basename(join(f, '..'))))];
310
- containers.push({ dir: name, candidates });
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 `version` rather than set it to undefined.
429
- return typeof p.version === 'string' ? { name, version: p.version } : { name };
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 is forgiven ONLY if the SESSION says that plugin loaded.
638
- // Matching on skill NAMES was wrong: one incidental collision with an unrelated plugin's skill
639
- // (e.g. `deep-research`) forgave the whole container, and the gate PASSED the broken
640
- // health-advisor 1.2.0 (MEASURED reproducer: `dz skills-verify` against that published
641
- // install). `init.plugins` names what actually loaded, so ask that instead.
642
- const loadedPlugins = new Set(facts.plugins.map((p) => p.name));
643
- // Only the LOADED-PLUGIN list counts. A namespaced-name fallback (`<dir>:<skill>` present in the
644
- // listing) was still name-based evidence — the very class that made the gate pass a broken install
645
- // and `init.plugins` already covers every legitimate case.
646
- const deadContainers = scan.containers.filter((c) => c.candidates.length > 0 && !loadedPlugins.has(c.dir));
647
- if (deadContainers.length > 0) {
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: scan.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: scan.advisories,
850
+ advisories: allAdvisories,
695
851
  ...common,
696
852
  missing: [],
697
853
  verdict: 'pass',