@shrkcrft/inspector 0.1.0-alpha.31 → 0.1.0-alpha.32

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.
Files changed (134) hide show
  1. package/dist/agent-task-prep.d.ts.map +1 -1
  2. package/dist/agent-task-prep.js +9 -1
  3. package/dist/codemod-assist.d.ts.map +1 -1
  4. package/dist/codemod-assist.js +3 -1
  5. package/dist/comment-syntax.d.ts +15 -0
  6. package/dist/comment-syntax.d.ts.map +1 -0
  7. package/dist/comment-syntax.js +15 -0
  8. package/dist/contribution-load-failures.d.ts +18 -2
  9. package/dist/contribution-load-failures.d.ts.map +1 -1
  10. package/dist/contribution-load-failures.js +20 -3
  11. package/dist/contributions-report.js +2 -2
  12. package/dist/convention-applicability.d.ts +46 -0
  13. package/dist/convention-applicability.d.ts.map +1 -0
  14. package/dist/convention-applicability.js +247 -0
  15. package/dist/convention-filter-level.d.ts +13 -0
  16. package/dist/convention-filter-level.d.ts.map +1 -0
  17. package/dist/convention-filter-level.js +13 -0
  18. package/dist/convention-registry.d.ts +29 -4
  19. package/dist/convention-registry.d.ts.map +1 -1
  20. package/dist/convention-registry.js +58 -23
  21. package/dist/custom-checks.d.ts.map +1 -1
  22. package/dist/custom-checks.js +6 -4
  23. package/dist/decision-records.d.ts +4 -0
  24. package/dist/decision-records.d.ts.map +1 -1
  25. package/dist/decision-records.js +165 -66
  26. package/dist/declared-reference-coverage.d.ts +1 -1
  27. package/dist/declared-reference-coverage.d.ts.map +1 -1
  28. package/dist/declared-reference-coverage.js +6 -1
  29. package/dist/feedback-ingestion.d.ts.map +1 -1
  30. package/dist/feedback-ingestion.js +7 -1
  31. package/dist/file-languages.d.ts +9 -0
  32. package/dist/file-languages.d.ts.map +1 -0
  33. package/dist/file-languages.js +91 -0
  34. package/dist/fix-preview.d.ts.map +1 -1
  35. package/dist/fix-preview.js +78 -17
  36. package/dist/fuzzy-impact.d.ts.map +1 -1
  37. package/dist/fuzzy-impact.js +2 -1
  38. package/dist/git-helpers.d.ts +29 -4
  39. package/dist/git-helpers.d.ts.map +1 -1
  40. package/dist/git-helpers.js +69 -10
  41. package/dist/i-contribution-file-validation.d.ts +8 -0
  42. package/dist/i-contribution-file-validation.d.ts.map +1 -1
  43. package/dist/i-convention-applicability-reason.d.ts +29 -0
  44. package/dist/i-convention-applicability-reason.d.ts.map +1 -0
  45. package/dist/i-convention-applicability-reason.js +1 -0
  46. package/dist/i-convention-applicability.d.ts +9 -0
  47. package/dist/i-convention-applicability.d.ts.map +1 -0
  48. package/dist/i-convention-applicability.js +1 -0
  49. package/dist/i-convention-scope.d.ts +19 -0
  50. package/dist/i-convention-scope.d.ts.map +1 -0
  51. package/dist/i-convention-scope.js +1 -0
  52. package/dist/i-file-language.d.ts +11 -0
  53. package/dist/i-file-language.d.ts.map +1 -0
  54. package/dist/i-file-language.js +1 -0
  55. package/dist/i-not-applicable-convention.d.ts +17 -0
  56. package/dist/i-not-applicable-convention.d.ts.map +1 -0
  57. package/dist/i-not-applicable-convention.js +1 -0
  58. package/dist/i-reference-pack-origin.d.ts +13 -0
  59. package/dist/i-reference-pack-origin.d.ts.map +1 -0
  60. package/dist/i-reference-pack-origin.js +1 -0
  61. package/dist/i-stale-path-hint-input.d.ts +18 -0
  62. package/dist/i-stale-path-hint-input.d.ts.map +1 -0
  63. package/dist/i-stale-path-hint-input.js +1 -0
  64. package/dist/i-unverifiable-remedy-group.d.ts +10 -0
  65. package/dist/i-unverifiable-remedy-group.d.ts.map +1 -0
  66. package/dist/i-unverifiable-remedy-group.js +1 -0
  67. package/dist/index.d.ts +17 -0
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +25 -0
  70. package/dist/knowledge-authoring.d.ts +1 -1
  71. package/dist/knowledge-authoring.d.ts.map +1 -1
  72. package/dist/knowledge-authoring.js +7 -6
  73. package/dist/knowledge-contribution-slots.d.ts +18 -0
  74. package/dist/knowledge-contribution-slots.d.ts.map +1 -0
  75. package/dist/knowledge-contribution-slots.js +25 -0
  76. package/dist/knowledge-entry-rejections.d.ts +17 -0
  77. package/dist/knowledge-entry-rejections.d.ts.map +1 -0
  78. package/dist/knowledge-entry-rejections.js +79 -0
  79. package/dist/knowledge-entry-verdict-record.d.ts +12 -0
  80. package/dist/knowledge-entry-verdict-record.d.ts.map +1 -1
  81. package/dist/knowledge-min-referenced-valve.d.ts +12 -0
  82. package/dist/knowledge-min-referenced-valve.d.ts.map +1 -0
  83. package/dist/knowledge-min-referenced-valve.js +12 -0
  84. package/dist/knowledge-rejected-entry.d.ts +28 -0
  85. package/dist/knowledge-rejected-entry.d.ts.map +1 -0
  86. package/dist/knowledge-rejected-entry.js +1 -0
  87. package/dist/knowledge-rename-command.d.ts +20 -0
  88. package/dist/knowledge-rename-command.d.ts.map +1 -0
  89. package/dist/knowledge-rename-command.js +34 -0
  90. package/dist/knowledge-rename-verb.d.ts +11 -0
  91. package/dist/knowledge-rename-verb.d.ts.map +1 -0
  92. package/dist/knowledge-rename-verb.js +11 -0
  93. package/dist/knowledge-rename.d.ts +1 -1
  94. package/dist/knowledge-rename.d.ts.map +1 -1
  95. package/dist/knowledge-rename.js +6 -5
  96. package/dist/knowledge-stale-gate.d.ts +2 -0
  97. package/dist/knowledge-stale-gate.d.ts.map +1 -1
  98. package/dist/knowledge-stale-gate.js +75 -3
  99. package/dist/knowledge-stale-quality-gate.d.ts.map +1 -1
  100. package/dist/knowledge-stale-quality-gate.js +34 -4
  101. package/dist/knowledge-stale.d.ts +10 -0
  102. package/dist/knowledge-stale.d.ts.map +1 -1
  103. package/dist/knowledge-stale.js +227 -33
  104. package/dist/knowledge-unverifiable-remedy.d.ts +56 -0
  105. package/dist/knowledge-unverifiable-remedy.d.ts.map +1 -0
  106. package/dist/knowledge-unverifiable-remedy.js +0 -0
  107. package/dist/pack-contributions-inventory.d.ts.map +1 -1
  108. package/dist/pack-contributions-inventory.js +4 -2
  109. package/dist/propose-knowledge.js +3 -2
  110. package/dist/reference-pack-origin.d.ts +18 -0
  111. package/dist/reference-pack-origin.d.ts.map +1 -0
  112. package/dist/reference-pack-origin.js +38 -0
  113. package/dist/repository-stats.d.ts.map +1 -1
  114. package/dist/repository-stats.js +3 -77
  115. package/dist/resolve-project-config.d.ts.map +1 -1
  116. package/dist/resolve-project-config.js +10 -1
  117. package/dist/self-config-doctor-v2.d.ts +1 -1
  118. package/dist/self-config-doctor-v2.d.ts.map +1 -1
  119. package/dist/self-config-doctor-v2.js +76 -12
  120. package/dist/self-config-doctor.d.ts.map +1 -1
  121. package/dist/self-config-doctor.js +2 -1
  122. package/dist/sharkcraft-inspector.d.ts.map +1 -1
  123. package/dist/sharkcraft-inspector.js +52 -12
  124. package/dist/stale-path-hint.d.ts +3 -0
  125. package/dist/stale-path-hint.d.ts.map +1 -0
  126. package/dist/stale-path-hint.js +47 -0
  127. package/dist/template-authoring.d.ts +1 -1
  128. package/dist/template-authoring.d.ts.map +1 -1
  129. package/dist/template-authoring.js +2 -1
  130. package/dist/validate-contribution-file.d.ts.map +1 -1
  131. package/dist/validate-contribution-file.js +15 -10
  132. package/dist/why-file.d.ts.map +1 -1
  133. package/dist/why-file.js +5 -4
  134. package/package.json +17 -17
@@ -17,6 +17,7 @@
17
17
  * Scope: update + remove only. `scaffold` / `add` already ship at
18
18
  * `packages/cli/src/commands/templates.command.ts`.
19
19
  */
20
+ import { knowledgeReferences } from '@shrkcrft/knowledge';
20
21
  export const TEMPLATE_AUTHORING_SCHEMA = 'sharkcraft.template-authoring/v1';
21
22
  export var TemplateAuthoringOperation;
22
23
  (function (TemplateAuthoringOperation) {
@@ -214,7 +215,7 @@ function findReverseReferences(templateId, ctx) {
214
215
  const out = [];
215
216
  // Knowledge entries referencing this template via `references[kind=template]`.
216
217
  for (const k of ctx.knowledgeEntries ?? []) {
217
- for (const ref of k.references ?? []) {
218
+ for (const ref of knowledgeReferences(k)) {
218
219
  if (ref.kind === 'template' && ref.id === templateId) {
219
220
  out.push({
220
221
  fromKind: 'knowledge',
@@ -1 +1 @@
1
- {"version":3,"file":"validate-contribution-file.d.ts","sourceRoot":"","sources":["../src/validate-contribution-file.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAsEvF,uDAAuD;AACvD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAyI/G"}
1
+ {"version":3,"file":"validate-contribution-file.d.ts","sourceRoot":"","sources":["../src/validate-contribution-file.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AA+DvF,uDAAuD;AACvD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAoJ/G"}
@@ -22,7 +22,7 @@
22
22
  */
23
23
  import { existsSync } from 'node:fs';
24
24
  import { importModuleViaLoader, readContributionExport, RejectionCause } from '@shrkcrft/core';
25
- import { MarkdownKnowledgeLoader, TypeScriptKnowledgeLoader } from '@shrkcrft/knowledge';
25
+ import { MarkdownKnowledgeLoader, TypeScriptKnowledgeLoader, validateKnowledgeEntries } from '@shrkcrft/knowledge';
26
26
  import { loadTemplatesFromFile } from '@shrkcrft/templates';
27
27
  import { loadPipelinesFromFile } from '@shrkcrft/pipelines';
28
28
  import { loadPresetsFromFile } from '@shrkcrft/presets';
@@ -34,6 +34,7 @@ import { conventionRejectionReasons } from "./convention-registry.js";
34
34
  import { decisionRejectionReasons } from "./decision-records.js";
35
35
  import { delegateRecipeRejectionReasons } from "./delegate-pack-recipes.js";
36
36
  import { feedbackRuleRejectionReasons } from "./feedback-ingestion.js";
37
+ import { isKnowledgeContributionSlot } from "./knowledge-contribution-slots.js";
37
38
  import { migrationProfileRejectionReasons } from "./migration-profile-registry.js";
38
39
  import { packHelperRejectionReasons } from "./pack-helper-registry.js";
39
40
  import { contributionKindForSlot } from "./pack-contributions-inventory.js";
@@ -63,13 +64,6 @@ const REGISTRY_SLOTS = {
63
64
  agentTestFiles: { singleObject: false, reasons: testDefinitionRejectionReasons },
64
65
  delegateRecipeFiles: { namedKeys: ['delegateRecipes'], reasons: delegateRecipeRejectionReasons, dedupe: true },
65
66
  };
66
- const KNOWLEDGE_SLOTS = new Set([
67
- 'knowledgeFiles',
68
- 'ruleFiles',
69
- 'pathFiles',
70
- 'pathConventionFiles',
71
- 'docsFiles',
72
- ]);
73
67
  const GATE_PLANE_SLOTS = new Set([
74
68
  'wiringRuleFiles',
75
69
  'registryFiles',
@@ -102,14 +96,25 @@ export async function validateContributionFile(slot, file) {
102
96
  });
103
97
  if (!existsSync(file))
104
98
  return done([], [], 'the file does not exist');
105
- if (KNOWLEDGE_SLOTS.has(slot)) {
99
+ // THE knowledge slots (round 15 follow-up, F11): the slot says "knowledge";
100
+ // which knowledge loader reads the file is the inspection's own choice (the
101
+ // same `canLoad` order). A file neither loader reads is `unvalidated` — the
102
+ // consumer skips it as an "unsupported contribution file".
103
+ if (isKnowledgeContributionSlot(slot)) {
106
104
  const ts = new TypeScriptKnowledgeLoader();
107
105
  const md = new MarkdownKnowledgeLoader();
108
106
  const loader = ts.canLoad(file) ? ts : md.canLoad(file) ? md : null;
109
107
  if (!loader)
110
108
  return { ...done([], []), unvalidated: true };
111
109
  const r = await loader.load(file);
112
- return done(r.entries.map((e) => e.id), r.rejected ?? [], importError(r.warnings));
110
+ // …and THE validator the consumer's inspection runs, over what the loader
111
+ // ACCEPTED (round 15): an issue that keeps the entry — a non-list
112
+ // `references` crashed every consumer verb while `--load` said "No issues".
113
+ const entryIssues = validateKnowledgeEntries(r.entries, { isPackContributed: () => true }).issues;
114
+ return {
115
+ ...done(r.entries.map((e) => e.id), r.rejected ?? [], importError(r.warnings)),
116
+ ...(entryIssues.length > 0 ? { entryIssues } : {}),
117
+ };
113
118
  }
114
119
  if (slot === 'templateFiles') {
115
120
  const r = await loadTemplatesFromFile(file);
@@ -1 +1 @@
1
- {"version":3,"file":"why-file.d.ts","sourceRoot":"","sources":["../src/why-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"why-file.d.ts","sourceRoot":"","sources":["../src/why-file.ts"],"names":[],"mappings":"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"}
package/dist/why-file.js CHANGED
@@ -17,6 +17,7 @@ import { existsSync, statSync } from 'node:fs';
17
17
  import * as nodePath from 'node:path';
18
18
  import { boundaryRuleCovers, boundaryRuleSeverity, matchesAny } from '@shrkcrft/boundaries';
19
19
  import { deriveApplicability } from '@shrkcrft/rules';
20
+ import { knowledgeAnchors, knowledgeReferences } from '@shrkcrft/knowledge';
20
21
  export const WHY_FILE_SCHEMA = 'sharkcraft.why/v1';
21
22
  export function buildWhyReport(input) {
22
23
  const limit = input.limit ?? 10;
@@ -113,14 +114,14 @@ function matchPathConventions(inspection, target) {
113
114
  function ruleReasonForFile(r, target, inferredPackage, inferredLayer) {
114
115
  const rel = target.relativePath;
115
116
  // 1. Explicit file/directory references that cover the target.
116
- for (const ref of r.references ?? []) {
117
+ for (const ref of knowledgeReferences(r)) {
117
118
  const p = (ref.path ?? '').replace(/^\.\//, '');
118
119
  if ((ref.kind === 'file' || ref.kind === 'directory') && p && pathCovers(rel, p)) {
119
120
  return ref.kind === 'directory' ? `directory reference ${p}` : `file reference ${p}`;
120
121
  }
121
122
  }
122
123
  // 1b. Anchors that point at a covering path.
123
- for (const a of r.anchors ?? []) {
124
+ for (const a of knowledgeAnchors(r)) {
124
125
  const p = (a.path ?? '').replace(/^\.\//, '');
125
126
  if (p && pathCovers(rel, p))
126
127
  return `anchor path ${p}`;
@@ -147,7 +148,7 @@ function ruleReasonForFile(r, target, inferredPackage, inferredLayer) {
147
148
  // 3. Package reference / scope-or-tag equal to the inferred package or layer.
148
149
  const labels = [...(r.scope ?? []), ...(r.tags ?? [])];
149
150
  if (inferredPackage) {
150
- for (const ref of r.references ?? []) {
151
+ for (const ref of knowledgeReferences(r)) {
151
152
  if (ref.kind === 'package' && ref.id && samePath(ref.id, inferredPackage)) {
152
153
  return `package reference ${ref.id}`;
153
154
  }
@@ -216,7 +217,7 @@ function matchKnowledge(inspection, target, limit) {
216
217
  const rel = target.relativePath.toLowerCase();
217
218
  const out = [];
218
219
  for (const k of inspection.knowledgeEntries) {
219
- const refs = (k.references ?? []).map((r) => r.path ?? '');
220
+ const refs = knowledgeReferences(k).map((r) => r.path ?? '');
220
221
  const refMatch = refs.some((p) => p.toLowerCase() === rel || p.toLowerCase().endsWith(`/${basename}`));
221
222
  const contentMatch = ((k.content ?? '') + ' ' + (k.title ?? '')).toLowerCase().includes(basename);
222
223
  if (!refMatch && !contentMatch)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shrkcrft/inspector",
3
- "version": "0.1.0-alpha.31",
3
+ "version": "0.1.0-alpha.32",
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.31",
46
- "@shrkcrft/config": "^0.1.0-alpha.31",
47
- "@shrkcrft/workspace": "^0.1.0-alpha.31",
48
- "@shrkcrft/knowledge": "^0.1.0-alpha.31",
49
- "@shrkcrft/rules": "^0.1.0-alpha.31",
50
- "@shrkcrft/paths": "^0.1.0-alpha.31",
51
- "@shrkcrft/templates": "^0.1.0-alpha.31",
52
- "@shrkcrft/context": "^0.1.0-alpha.31",
53
- "@shrkcrft/pipelines": "^0.1.0-alpha.31",
54
- "@shrkcrft/packs": "^0.1.0-alpha.31",
55
- "@shrkcrft/presets": "^0.1.0-alpha.31",
56
- "@shrkcrft/boundaries": "^0.1.0-alpha.31",
57
- "@shrkcrft/generator": "^0.1.0-alpha.31",
58
- "@shrkcrft/importer": "^0.1.0-alpha.31",
59
- "@shrkcrft/plugin-api": "^0.1.0-alpha.31",
60
- "@shrkcrft/dashboard-api": "^0.1.0-alpha.31",
45
+ "@shrkcrft/core": "^0.1.0-alpha.32",
46
+ "@shrkcrft/config": "^0.1.0-alpha.32",
47
+ "@shrkcrft/workspace": "^0.1.0-alpha.32",
48
+ "@shrkcrft/knowledge": "^0.1.0-alpha.32",
49
+ "@shrkcrft/rules": "^0.1.0-alpha.32",
50
+ "@shrkcrft/paths": "^0.1.0-alpha.32",
51
+ "@shrkcrft/templates": "^0.1.0-alpha.32",
52
+ "@shrkcrft/context": "^0.1.0-alpha.32",
53
+ "@shrkcrft/pipelines": "^0.1.0-alpha.32",
54
+ "@shrkcrft/packs": "^0.1.0-alpha.32",
55
+ "@shrkcrft/presets": "^0.1.0-alpha.32",
56
+ "@shrkcrft/boundaries": "^0.1.0-alpha.32",
57
+ "@shrkcrft/generator": "^0.1.0-alpha.32",
58
+ "@shrkcrft/importer": "^0.1.0-alpha.32",
59
+ "@shrkcrft/plugin-api": "^0.1.0-alpha.32",
60
+ "@shrkcrft/dashboard-api": "^0.1.0-alpha.32",
61
61
  "typescript": "^5.6.0"
62
62
  },
63
63
  "publishConfig": {