@skill-map/cli 0.38.0 → 0.39.0

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.
@@ -7,7 +7,7 @@
7
7
  * and each kind's code carries its own fuller type where needed.
8
8
  *
9
9
  * **Spec § A.6, qualified ids.** Every extension is keyed in the registry
10
- * by `<pluginId>/<id>` (e.g. `core/annotations`, `core/slash`,
10
+ * by `<pluginId>/<id>` (e.g. `core/annotations`, `core/slash-command`,
11
11
  * `my-plugin/my-extractor`). `IExtension.id` carries the **short** id as authored;
12
12
  * `IExtension.pluginId` carries the namespace; the registry composes the
13
13
  * qualifier internally and exposes lookup APIs that operate on either form
@@ -490,7 +490,7 @@ interface IExtensionBase {
490
490
  * This alias survives because:
491
491
  * - claude-specific code legitimately wants to switch on the four
492
492
  * hard-coded values (filter widgets, kind-aware UI cards, the
493
- * `validate-all` built-in rule that maps each kind to its
493
+ * `schema-violation` built-in rule that maps each kind to its
494
494
  * frontmatter schema);
495
495
  * - sorting helpers want a stable `KIND_ORDER` for the canonical
496
496
  * catalog;
@@ -560,7 +560,7 @@ interface LinkLocation {
560
560
  * target), or when the same extractor walks an extractor-internal
561
561
  * dedup boundary. Today the merged edge's `trigger` / `location`
562
562
  * mirror the FIRST occurrence; the array carries every site so the
563
- * `core/redundant-target-reference` analyzer can flag multi-form
563
+ * `core/reference-redundant` analyzer can flag multi-form
564
564
  * references and rename operations can find every author surface.
565
565
  */
566
566
  interface LinkOccurrence {
@@ -722,7 +722,7 @@ interface Link {
722
722
  * same `(source, target, kind, normalizedTrigger)` key. Empty / absent
723
723
  * for legacy emits or for synthetic links (frontmatter-driven
724
724
  * references, sidecar annotations) that have no body position. The
725
- * `core/redundant-target-reference` analyzer walks this array to
725
+ * `core/reference-redundant` analyzer walks this array to
726
726
  * detect multi-form references to the same target from one body.
727
727
  */
728
728
  occurrences?: LinkOccurrence[];
@@ -2156,7 +2156,7 @@ interface IProvider extends IExtensionBase {
2156
2156
  *
2157
2157
  * Two consumers share the catalog:
2158
2158
  *
2159
- * 1. The `core/reserved-name` analyzer scans every user node and
2159
+ * 1. The `core/name-reserved` analyzer scans every user node and
2160
2160
  * emits a `warn` issue when the node's normalised identifiers
2161
2161
  * (per `IProviderKind.identifiers`) intersect the reserved list
2162
2162
  * for its provider + kind. The user file is silently shadowed
@@ -2433,7 +2433,7 @@ interface IAnalyzerContext {
2433
2433
  * Step 9.6.6, raw parsed sidecar root keyed by `node.path`. Populated
2434
2434
  * by the orchestrator alongside the public `Node.sidecar` overlay so
2435
2435
  * analyzers that inspect plugin namespaces (e.g. the built-in
2436
- * `core/unknown-field` Analyzer) can walk the full tree without
2436
+ * `core/annotation-field-unknown` Analyzer) can walk the full tree without
2437
2437
  * re-reading the file from disk. Absent (or `undefined` per node)
2438
2438
  * when no sidecar accompanies the node, or when the sidecar failed
2439
2439
  * to parse. Treat as read-only.
@@ -2463,7 +2463,7 @@ interface IAnalyzerContext {
2463
2463
  /**
2464
2464
  * Absolute paths of `*.md` files under the project's
2465
2465
  * `.skill-map/jobs/` that no `state_jobs.filePath` references, the
2466
- * built-in `core/job-orphan-file` analyzer projects each as a `warn`
2466
+ * built-in `core/job-file-orphan` analyzer projects each as a `warn`
2467
2467
  * issue. Pre-computed by the driving adapter (CLI / BFF) inside its
2468
2468
  * already-open storage transaction (mirrors the `orphanSidecars`
2469
2469
  * pattern: detection lives outside the analyzer, the analyzer only
@@ -2478,7 +2478,7 @@ interface IAnalyzerContext {
2478
2478
  * adapter walks each configured path before the scan and collects
2479
2479
  * every existing file's absolute path here. Files in this set are
2480
2480
  * NOT indexed as graph nodes, the only consumer is
2481
- * `core/broken-ref`, which suppresses its `warn` issue when a
2481
+ * `core/reference-broken`, which suppresses its `warn` issue when a
2482
2482
  * path-style link target falls into the set. Absent / empty when
2483
2483
  * the operator left `scan.referencePaths` empty or when the
2484
2484
  * adapter does not maintain the side index. Treat as read-only.
@@ -2492,7 +2492,7 @@ interface IAnalyzerContext {
2492
2492
  * computed once per scan by the orchestrator (mirroring the same
2493
2493
  * set threaded to the post-walk confidence-lift transform), so
2494
2494
  * analyzers consume it without re-deriving every node's
2495
- * identifiers. The single consumer today is `core/reserved-name`,
2495
+ * identifiers. The single consumer today is `core/name-reserved`,
2496
2496
  * which projects one warn issue per entry; future analyzers MAY
2497
2497
  * read the set for cross-rule cohesion (e.g. an action that
2498
2498
  * suggests rename targets). Absent for legacy callers (older
@@ -2503,7 +2503,7 @@ interface IAnalyzerContext {
2503
2503
  * Absolute path of the scan's project root (cwd of the invocation).
2504
2504
  * Threaded into the analyzer pass so an analyzer that needs to
2505
2505
  * resolve a relative `link.target` to an absolute filesystem path
2506
- * (today only `core/broken-ref`, when consulting
2506
+ * (today only `core/reference-broken`, when consulting
2507
2507
  * `referenceablePaths`) does not have to derive it from
2508
2508
  * `nodes[0].path` heuristics. Absent for legacy callers (older
2509
2509
  * `runScan` sites that never wired the field through). Always an
@@ -3153,7 +3153,7 @@ interface RunScanOptions {
3153
3153
  /**
3154
3154
  * Step 9.6.6, runtime catalog of plugin-contributed annotation keys
3155
3155
  * (the same shape `kernel.getRegisteredAnnotationKeys()` returns).
3156
- * Threaded into the rule pass so `core/unknown-field` can
3156
+ * Threaded into the rule pass so `core/annotation-field-unknown` can
3157
3157
  * legitimise registered plugin namespaces / root keys without
3158
3158
  * re-walking the manifests. Absent → empty catalog (every plugin
3159
3159
  * key is treated as unknown). Built-in catalog from
@@ -3271,7 +3271,7 @@ interface RunScanOptions {
3271
3271
  * Pre-computed absolute paths of orphan job MD files (files under
3272
3272
  * `.skill-map/jobs/` whose absolute path appears nowhere in
3273
3273
  * `state_jobs.filePath`). Threaded into the rule pass so the
3274
- * built-in `core/job-orphan-file` rule can project each as a `warn`
3274
+ * built-in `core/job-file-orphan` rule can project each as a `warn`
3275
3275
  * issue without the kernel reaching for the storage port or doing
3276
3276
  * its own FS walk. The driving adapter (CLI, BFF) computes this
3277
3277
  * inside its already-open storage transaction via
@@ -3286,7 +3286,7 @@ interface RunScanOptions {
3286
3286
  * Side set of absolute file paths the operator opted into for
3287
3287
  * link-validation purposes via `scan.referencePaths`. Threaded
3288
3288
  * through to `IAnalyzerContext.referenceablePaths` so the built-in
3289
- * `core/broken-ref` rule can suppress its `warn` for path-style
3289
+ * `core/reference-broken` rule can suppress its `warn` for path-style
3290
3290
  * links whose target lands in the set. Files are NOT walked by
3291
3291
  * the kernel, the driving adapter populates the set before
3292
3292
  * calling `runScan`. Absent / empty when the operator left
@@ -101,7 +101,7 @@ import cl100k_base from "js-tiktoken/ranks/cl100k_base";
101
101
  // package.json
102
102
  var package_default = {
103
103
  name: "@skill-map/cli",
104
- version: "0.38.0",
104
+ version: "0.39.0",
105
105
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
106
106
  license: "MIT",
107
107
  type: "module",
@@ -1426,7 +1426,8 @@ function recomputeLinkCounts(nodes, links) {
1426
1426
  for (const link of links) {
1427
1427
  const source = byPath2.get(link.source);
1428
1428
  if (source) source.linksOutCount += 1;
1429
- const target = byPath2.get(link.target);
1429
+ const targetKey = link.resolvedTarget ?? link.target;
1430
+ const target = byPath2.get(targetKey);
1430
1431
  if (target) target.linksInCount += 1;
1431
1432
  }
1432
1433
  }