@shrkcrft/inspector 0.1.0-alpha.23 → 0.1.0-alpha.24

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.
@@ -1 +1 @@
1
- {"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../src/coverage-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAOD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,CA6LtF"}
1
+ {"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../src/coverage-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAOD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,CA2NtF"}
@@ -1,4 +1,4 @@
1
- import { hasActionHints } from '@shrkcrft/knowledge';
1
+ import { hasActionHints, hasMeaningfulActionHints, KNOWLEDGE_TYPES_NO_ACTION, } from '@shrkcrft/knowledge';
2
2
  import { resolvePreset, resolvePresetReferences } from '@shrkcrft/presets';
3
3
  import { inspectionReferenceLookup } from "./reference-lookup.js";
4
4
  function pct(covered, total) {
@@ -57,24 +57,47 @@ export function buildCoverageReport(inspection) {
57
57
  missing,
58
58
  });
59
59
  }
60
- // 3. Critical/high knowledge entries with action hints.
60
+ // 3. Critical/high knowledge entries carry a MEANINGFUL action hint.
61
+ // Quality, not mere presence: a hollow/templated hint (a `<command>`
62
+ // placeholder, a lone requiresHumanReview, an empty object) does NOT count,
63
+ // so an agent can't clear the gate with uniform low-value metadata. Entries
64
+ // with no actionable next step are exempt from the denominator — a per-entry
65
+ // author `noAction: true` (the precise lever) OR a purely-descriptive type
66
+ // (business/decision — the conservative floor) — so the target isn't
67
+ // artificially 100% and nobody is pushed to bolt a hollow hint on.
61
68
  {
62
69
  const eligible = inspection.knowledgeEntries.filter((e) => {
63
70
  const p = String(e.priority);
64
71
  return p === 'critical' || p === 'high';
65
72
  });
66
- const total = eligible.length;
73
+ const actionable = eligible.filter((e) => e.noAction !== true && !KNOWLEDGE_TYPES_NO_ACTION.has(e.type));
74
+ const total = actionable.length;
75
+ const knowledgeIds = new Set(inspection.knowledgeEntries.map((x) => x.id));
76
+ const templateIds = new Set(inspection.templates.map((t) => t.id));
67
77
  const missing = [];
68
78
  let covered = 0;
69
- for (const e of eligible) {
70
- if (hasActionHints(e))
79
+ for (const e of actionable) {
80
+ if (hasMeaningfulActionHints(e)) {
71
81
  covered += 1;
72
- else
73
- missing.push(`${e.id} — no actionHints`);
82
+ continue;
83
+ }
84
+ // Reward RESOLVED cross-references: a hint whose related ids actually
85
+ // point at real entries/templates is substantive even without a command.
86
+ const a = e.actionHints;
87
+ const resolvedXref = !!a &&
88
+ ((a.relatedKnowledge?.some((id) => knowledgeIds.has(id)) ?? false) ||
89
+ (a.relatedTemplates?.some((id) => templateIds.has(id)) ?? false));
90
+ if (resolvedXref) {
91
+ covered += 1;
92
+ continue;
93
+ }
94
+ missing.push(hasActionHints(e)
95
+ ? `${e.id} — actionHints present but low-value (templated/empty/unresolved cross-refs)`
96
+ : `${e.id} — no actionHints`);
74
97
  }
75
98
  categories.push({
76
99
  id: 'hint-coverage',
77
- title: 'Critical/high entries carry actionHints',
100
+ title: 'Critical/high entries carry a meaningful actionHint',
78
101
  total,
79
102
  covered,
80
103
  score: pct(covered, total),
@@ -1 +1 @@
1
- {"version":3,"file":"git-helpers.d.ts","sourceRoot":"","sources":["../src/git-helpers.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAWD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAwBpF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAyC/D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,CA6BrF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKjD"}
1
+ {"version":3,"file":"git-helpers.d.ts","sourceRoot":"","sources":["../src/git-helpers.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAqBD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAwBpF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAyC/D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,CA6BrF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKjD"}
@@ -1,8 +1,17 @@
1
1
  import { spawnSync } from 'node:child_process';
2
2
  import { existsSync } from 'node:fs';
3
3
  import * as nodePath from 'node:path';
4
+ // 512 MB — the same generous ceiling @shrkcrft/shared's runGitLines uses. A
5
+ // `diff`/`log --name-only` listing on a large changeset overflows Node's 1 MB
6
+ // default `maxBuffer` and dies with ENOBUFS; a name listing never approaches
7
+ // 512 MB, so this is effectively unbounded while still capping a runaway.
8
+ const GIT_MAX_BUFFER = 512 * 1024 * 1024;
4
9
  function runGit(cwd, args) {
5
- const res = spawnSync('git', args, { cwd, encoding: 'utf8' });
10
+ const res = spawnSync('git', args, {
11
+ cwd,
12
+ encoding: 'utf8',
13
+ maxBuffer: GIT_MAX_BUFFER,
14
+ });
6
15
  return {
7
16
  ok: res.status === 0,
8
17
  stdout: (res.stdout ?? '').toString(),
@@ -1 +1 @@
1
- {"version":3,"file":"pack-quality-score.d.ts","sourceRoot":"","sources":["../src/pack-quality-score.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIvE,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AACtE,eAAO,MAAM,wBAAwB,oCAAoC,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,wBAAwB,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9F,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,CA2BlB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,mBAAmB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAMD,wBAAgB,SAAS,CACvB,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,eAAe,GACpB,iBAAiB,CAmInB;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,qBAAqB,GAAG,iBAAiB,EAAE,CAEpF"}
1
+ {"version":3,"file":"pack-quality-score.d.ts","sourceRoot":"","sources":["../src/pack-quality-score.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIvE,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AACtE,eAAO,MAAM,wBAAwB,oCAAoC,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,wBAAwB,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9F,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,CA2BlB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,mBAAmB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAMD,wBAAgB,SAAS,CACvB,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,eAAe,GACpB,iBAAiB,CAyInB;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,qBAAqB,GAAG,iBAAiB,EAAE,CAEpF"}
@@ -1,4 +1,5 @@
1
1
  import { CONTRIBUTION_FILE_KEYS } from '@shrkcrft/plugin-api';
2
+ import { hasMeaningfulActionHints, KNOWLEDGE_TYPES_NO_ACTION, } from '@shrkcrft/knowledge';
2
3
  import { lintTemplates } from "./template-lint.js";
3
4
  import { lintPipelines } from "./pipeline-lint.js";
4
5
  export const PACK_QUALITY_SCHEMA = 'sharkcraft.pack-quality-score/v1';
@@ -117,15 +118,20 @@ export function scorePack(inspection, pack) {
117
118
  weight: 0.7,
118
119
  notes: pipFromPack.length === 0 ? ['No pipelines contributed'] : [],
119
120
  });
120
- // Action hints presence.
121
+ // Action hints QUALITY (not mere presence): score only entries that carry a
122
+ // substantive, non-templated hint, and exempt purely-descriptive types
123
+ // (business/decision) from the denominator so a pack can't game the gate with
124
+ // hollow metadata on context-only entries.
121
125
  const packEntries = inspection.knowledgeEntries.filter((e) => inspection.entrySources.get(e.id)?.packageName === pack.packageName);
122
- const entriesWithHints = packEntries.filter((e) => e.actionHints !== undefined).length;
126
+ const actionable = packEntries.filter((e) => e.noAction !== true && !KNOWLEDGE_TYPES_NO_ACTION.has(e.type));
127
+ const entriesWithMeaningfulHints = actionable.filter((e) => hasMeaningfulActionHints(e)).length;
128
+ const hollow = actionable.length - entriesWithMeaningfulHints;
123
129
  dims.push({
124
130
  id: 'action-hints',
125
- label: 'Action hints',
126
- score: packEntries.length === 0 ? 70 : Math.round((entriesWithHints / packEntries.length) * 100),
131
+ label: 'Action hints quality',
132
+ score: actionable.length === 0 ? 70 : Math.round((entriesWithMeaningfulHints / actionable.length) * 100),
127
133
  weight: 0.6,
128
- notes: [],
134
+ notes: hollow > 0 ? [`${hollow} entry(ies) lack a meaningful (non-templated) actionHint`] : [],
129
135
  });
130
136
  // Duplicate ids guard.
131
137
  dims.push({
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-project-config.d.ts","sourceRoot":"","sources":["../src/resolve-project-config.ts"],"names":[],"mappings":"AAuBA,OAAO,EAGL,KAAK,QAAQ,EAKb,KAAK,MAAM,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAG1B;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AA+GD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAqDnD"}
1
+ {"version":3,"file":"resolve-project-config.d.ts","sourceRoot":"","sources":["../src/resolve-project-config.ts"],"names":[],"mappings":"AAuBA,OAAO,EAGL,KAAK,QAAQ,EAMb,KAAK,MAAM,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAG1B;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAoHD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAoEnD"}
@@ -22,7 +22,7 @@
22
22
  import { existsSync } from 'node:fs';
23
23
  import * as nodePath from 'node:path';
24
24
  import { importModuleViaLoader, ok, } from '@shrkcrft/core';
25
- import { loadProjectConfig, PolicyRuleSchema, RegistryDeclarationSchema, ReusePrimitiveSchema, WiringRuleSchema, } from '@shrkcrft/config';
25
+ import { loadProjectConfig, PolicyRuleSchema, RegistrationIdiomSchema, RegistryDeclarationSchema, ReusePrimitiveSchema, WiringRuleSchema, } from '@shrkcrft/config';
26
26
  import { discoverPacks } from '@shrkcrft/packs';
27
27
  /**
28
28
  * Generic per-plane load + validate + merge. Seeds the merged map from the
@@ -118,11 +118,19 @@ export async function resolveProjectConfig(cwd) {
118
118
  }
119
119
  const wiringRules = await mergePlane(base.config.wiringRules ?? [], gatherPackContribs(validPacks, 'wiringRuleFiles'), WiringRuleSchema, (r) => r.id, 'wiringRule', diagnostics);
120
120
  const registries = await mergePlane(base.config.registries ?? [], gatherPackContribs(validPacks, 'registryFiles'), RegistryDeclarationSchema, (r) => r.name, 'registry', diagnostics);
121
+ const registrationGraph = await mergePlane(base.config.registrationGraph ?? [], gatherPackContribs(validPacks, 'registrationGraphFiles'), RegistrationIdiomSchema, (r) => r.name, 'registrationIdiom', diagnostics);
121
122
  const policyRules = await mergePlane(base.config.policyRules ?? [], gatherPackContribs(validPacks, 'policyRuleFiles'), PolicyRuleSchema, (r) => r.id, 'policyRule', diagnostics);
122
123
  const reusePrimitives = await mergePlane(base.config.reusePrimitives ?? [], gatherPackContribs(validPacks, 'reusePrimitiveFiles'), ReusePrimitiveSchema, (r) => r.symbol, 'reusePrimitive', diagnostics);
123
124
  return ok({
124
125
  ...base,
125
- config: { ...base.config, wiringRules, registries, policyRules, reusePrimitives },
126
+ config: {
127
+ ...base.config,
128
+ wiringRules,
129
+ registries,
130
+ registrationGraph,
131
+ policyRules,
132
+ reusePrimitives,
133
+ },
126
134
  planeDiagnostics: diagnostics,
127
135
  });
128
136
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shrkcrft/inspector",
3
- "version": "0.1.0-alpha.23",
3
+ "version": "0.1.0-alpha.24",
4
4
  "description": "SharkCraft inspector: project overview, doctor checks, AI-agent instructions.",
5
5
  "license": "MIT",
6
6
  "author": "SharkCraft contributors",
@@ -42,22 +42,22 @@
42
42
  "typecheck": "tsc --noEmit -p tsconfig.json"
43
43
  },
44
44
  "dependencies": {
45
- "@shrkcrft/core": "^0.1.0-alpha.23",
46
- "@shrkcrft/config": "^0.1.0-alpha.23",
47
- "@shrkcrft/workspace": "^0.1.0-alpha.23",
48
- "@shrkcrft/knowledge": "^0.1.0-alpha.23",
49
- "@shrkcrft/rules": "^0.1.0-alpha.23",
50
- "@shrkcrft/paths": "^0.1.0-alpha.23",
51
- "@shrkcrft/templates": "^0.1.0-alpha.23",
52
- "@shrkcrft/context": "^0.1.0-alpha.23",
53
- "@shrkcrft/pipelines": "^0.1.0-alpha.23",
54
- "@shrkcrft/packs": "^0.1.0-alpha.23",
55
- "@shrkcrft/presets": "^0.1.0-alpha.23",
56
- "@shrkcrft/boundaries": "^0.1.0-alpha.23",
57
- "@shrkcrft/generator": "^0.1.0-alpha.23",
58
- "@shrkcrft/importer": "^0.1.0-alpha.23",
59
- "@shrkcrft/plugin-api": "^0.1.0-alpha.23",
60
- "@shrkcrft/dashboard-api": "^0.1.0-alpha.23",
45
+ "@shrkcrft/core": "^0.1.0-alpha.24",
46
+ "@shrkcrft/config": "^0.1.0-alpha.24",
47
+ "@shrkcrft/workspace": "^0.1.0-alpha.24",
48
+ "@shrkcrft/knowledge": "^0.1.0-alpha.24",
49
+ "@shrkcrft/rules": "^0.1.0-alpha.24",
50
+ "@shrkcrft/paths": "^0.1.0-alpha.24",
51
+ "@shrkcrft/templates": "^0.1.0-alpha.24",
52
+ "@shrkcrft/context": "^0.1.0-alpha.24",
53
+ "@shrkcrft/pipelines": "^0.1.0-alpha.24",
54
+ "@shrkcrft/packs": "^0.1.0-alpha.24",
55
+ "@shrkcrft/presets": "^0.1.0-alpha.24",
56
+ "@shrkcrft/boundaries": "^0.1.0-alpha.24",
57
+ "@shrkcrft/generator": "^0.1.0-alpha.24",
58
+ "@shrkcrft/importer": "^0.1.0-alpha.24",
59
+ "@shrkcrft/plugin-api": "^0.1.0-alpha.24",
60
+ "@shrkcrft/dashboard-api": "^0.1.0-alpha.24",
61
61
  "typescript": "^5.6.0"
62
62
  },
63
63
  "publishConfig": {