@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
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * Schema: sharkcraft.knowledge-rename/v2.
8
8
  */
9
+ import { knowledgeAnchors, knowledgeReferences, } from '@shrkcrft/knowledge';
9
10
  export const KNOWLEDGE_RENAME_SCHEMA = 'sharkcraft.knowledge-rename/v2';
10
11
  function clone(v) {
11
12
  return JSON.parse(JSON.stringify(v));
@@ -13,14 +14,14 @@ function clone(v) {
13
14
  export function buildRenameSymbolPlan(inspection, opts) {
14
15
  const matches = [];
15
16
  for (const entry of inspection.knowledgeEntries) {
16
- for (const ref of entry.references ?? []) {
17
+ for (const ref of knowledgeReferences(entry)) {
17
18
  if (ref.kind === 'symbol' && ref.symbol === opts.from) {
18
19
  const after = clone(ref);
19
20
  after.symbol = opts.to;
20
21
  matches.push({ entryId: entry.id, field: 'reference', before: ref, after });
21
22
  }
22
23
  }
23
- for (const anchor of entry.anchors ?? []) {
24
+ for (const anchor of knowledgeAnchors(entry)) {
24
25
  if (anchor.kind === 'symbol' && anchor.symbol === opts.from) {
25
26
  const after = clone(anchor);
26
27
  after.symbol = opts.to;
@@ -39,14 +40,14 @@ export function buildRenameSymbolPlan(inspection, opts) {
39
40
  export function buildRenameFilePlan(inspection, opts) {
40
41
  const matches = [];
41
42
  for (const entry of inspection.knowledgeEntries) {
42
- for (const ref of entry.references ?? []) {
43
+ for (const ref of knowledgeReferences(entry)) {
43
44
  if (ref.path === opts.from) {
44
45
  const after = clone(ref);
45
46
  after.path = opts.to;
46
47
  matches.push({ entryId: entry.id, field: 'reference', before: ref, after });
47
48
  }
48
49
  }
49
- for (const anchor of entry.anchors ?? []) {
50
+ for (const anchor of knowledgeAnchors(entry)) {
50
51
  if (anchor.path === opts.from) {
51
52
  const after = clone(anchor);
52
53
  after.path = opts.to;
@@ -65,7 +66,7 @@ export function buildRenameFilePlan(inspection, opts) {
65
66
  export function buildAnchorUpdatePlan(inspection, opts) {
66
67
  const matches = [];
67
68
  for (const entry of inspection.knowledgeEntries) {
68
- for (const anchor of entry.anchors ?? []) {
69
+ for (const anchor of knowledgeAnchors(entry)) {
69
70
  if (anchor.id !== opts.anchorId)
70
71
  continue;
71
72
  const after = clone(anchor);
@@ -26,6 +26,8 @@ import { type IKnowledgeStaleReport } from './knowledge-stale.js';
26
26
  import type { IKnowledgeStaleGateFlags } from './knowledge-stale-gate-flags.js';
27
27
  import type { IKnowledgeStaleGateInput } from './knowledge-stale-gate-input.js';
28
28
  import type { IKnowledgeStaleGate } from './knowledge-stale-gate-result.js';
29
+ /** The stale-check rule of the knowledge entries the loader refused (round 15 follow-up, F3). */
30
+ export declare const KNOWLEDGE_REJECTED_RULE_ID = "knowledge-rejected-entries";
29
31
  /**
30
32
  * Every `--fail-on` category. `all` keeps its historical meaning (any stale or
31
33
  * missing reference); the round-11 categories are opt-in BY NAME, so no
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-stale-gate.d.ts","sourceRoot":"","sources":["../src/knowledge-stale-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAqC,KAAK,eAAe,EAAyB,MAAM,gBAAgB,CAAC;AAGhH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAU5E;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAazD,CAAC;AAKF,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK7D;AAED,wCAAwC;AACxC,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AA6CD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,wBAAwB,GAC9B,mBAAmB,CA4RrB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,cAAc,EAAE,OAAO,EACvB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,MAAM,GAAG,SAAS,CASpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE;IACzC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC7D,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,GAAG,wBAAwB,CA8B3B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,CASnF"}
1
+ {"version":3,"file":"knowledge-stale-gate.d.ts","sourceRoot":"","sources":["../src/knowledge-stale-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAqC,KAAK,eAAe,EAAyB,MAAM,gBAAgB,CAAC;AAGhH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAQ5E,iGAAiG;AACjG,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAOvE;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAazD,CAAC;AAKF,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK7D;AAED,wCAAwC;AACxC,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AAiDD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,wBAAwB,GAC9B,mBAAmB,CA8VrB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,cAAc,EAAE,OAAO,EACvB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,MAAM,GAAG,SAAS,CASpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE;IACzC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC7D,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,GAAG,wBAAwB,CA8B3B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,CASnF"}
@@ -3,7 +3,12 @@ import { formatKnowledgeReference } from '@shrkcrft/knowledge';
3
3
  import { declaredReferenceCoverage } from "./declared-reference-coverage.js";
4
4
  import { KnowledgeEntryVerdict } from "./knowledge-entry-verdict.js";
5
5
  import { ReferenceCheckOutcome } from "./knowledge-stale.js";
6
+ import { KnowledgeMinReferencedValve } from "./knowledge-min-referenced-valve.js";
7
+ import { REJECTED_AT_LOAD } from "./knowledge-entry-rejections.js";
8
+ import { unverifiableEntryRemedy, unverifiableRemedy } from "./knowledge-unverifiable-remedy.js";
6
9
  import { ReferenceFailure } from "./reference-failure.js";
10
+ /** The stale-check rule of the knowledge entries the loader refused (round 15 follow-up, F3). */
11
+ export const KNOWLEDGE_REJECTED_RULE_ID = 'knowledge-rejected-entries';
7
12
  /** The proposed exits (the CLI's `ExitCode` values; the inspector cannot import the CLI). */
8
13
  const VERIFIED_PASS = 0;
9
14
  const FAILURE = 1;
@@ -75,6 +80,10 @@ function emptyScopeReason(report, input) {
75
80
  if (report.entries === 0 && failed.length > 0) {
76
81
  return `${plural(failed.length, 'knowledge file', 'knowledge files')} never loaded — ${loadFailureList(failed)} — so no knowledge was loaded`;
77
82
  }
83
+ // Round 15 follow-up (F3): entries WERE declared — the loader refused them all.
84
+ if (report.entries === 0 && report.rejectedEntries.length > 0) {
85
+ return `every declared knowledge entry (${report.rejectedEntries.length}) was rejected at load, so none was checked`;
86
+ }
78
87
  if (report.entries === 0)
79
88
  return 'no knowledge entries are declared';
80
89
  const alsoFailed = failed.length > 0 ? `, and ${plural(failed.length, 'knowledge file', 'knowledge files')} never loaded (${loadFailureList(failed)})` : '';
@@ -110,6 +119,12 @@ export function evaluateKnowledgeStaleGate(report, input) {
110
119
  const invalidRefs = declaredRefs.filter((c) => c.outcome === ReferenceCheckOutcome.Invalid);
111
120
  const invalidAnchors = report.anchorChecks.filter((a) => a.outcome === ReferenceCheckOutcome.Invalid);
112
121
  const invalidCount = invalidRefs.length + invalidAnchors.length;
122
+ // Round 15 follow-up (F3): entries the LOADER refused. INVALID-class: never
123
+ // in scope, never checked — a coverage shortfall of their own rule (exit 2),
124
+ // a failure under `--fail-on invalid` (exit 1). No valve accepts them:
125
+ // `--min-referenced` accepts the run's unverifiable remainder and
126
+ // `--allow-empty` an empty scope, never this rule.
127
+ const rejected = report.rejectedEntries;
113
128
  const reasons = [];
114
129
  // The historical modes, unchanged (they are mutually exclusive by design).
115
130
  if (input.ci) {
@@ -162,6 +177,9 @@ export function evaluateKnowledgeStaleGate(report, input) {
162
177
  if (failOn.has('invalid') && invalidCount > 0) {
163
178
  reasons.push(`${plural(invalidCount, 'malformed reference', 'malformed references')} (--fail-on=invalid)`);
164
179
  }
180
+ if (failOn.has('invalid') && rejected.length > 0) {
181
+ reasons.push(`${plural(rejected.length, 'knowledge entry', 'knowledge entries')} rejected at load (--fail-on=invalid)`);
182
+ }
165
183
  const requireRefs = input.requireReferences || failOn.has('unverifiable');
166
184
  if (requireRefs && cov.unverifiable > 0) {
167
185
  reasons.push(`${plural(cov.unverifiable, 'entry declares', 'entries declare')} no checkable reference (--require-references)`);
@@ -243,11 +261,16 @@ export function evaluateKnowledgeStaleGate(report, input) {
243
261
  const rules = [];
244
262
  if (cov.entriesInScope > 0) {
245
263
  const violations = [];
264
+ // The file declaring each knowledge entry — a violation names the file to
265
+ // edit (round 15: a Markdown entry's, its .md).
266
+ const declaredIn = new Map(report.entryVerdicts.map((v) => [v.entryId, v.source]));
246
267
  for (const c of [...report.referenceChecks, ...assetFailing, ...(failOn.has('implicit') ? implicitFailing : [])]) {
247
268
  if (!isFailing(c.outcome))
248
269
  continue;
270
+ const file = c.assetKind ? undefined : declaredIn.get(c.entryId);
249
271
  violations.push({
250
272
  id: c.entryId,
273
+ ...(file !== undefined ? { file } : {}),
251
274
  message: `${formatKnowledgeReference(c.reference)} — ${c.message}`,
252
275
  ...(c.suggestion ? { hint: c.suggestion } : {}),
253
276
  });
@@ -272,7 +295,9 @@ export function evaluateKnowledgeStaleGate(report, input) {
272
295
  violations.push({
273
296
  id: v.entryId,
274
297
  file: v.source,
275
- message: `UNVERIFIABLE (${v.reason ?? 'no checkable reference'}) — declare references[]`,
298
+ // THE per-entry remedy (round 15 closing, A4): an entry whose
299
+ // references exist but are malformed read "declare references[]".
300
+ message: `UNVERIFIABLE (${v.reason ?? 'no checkable reference'}) — ${unverifiableEntryRemedy(v)}`,
276
301
  });
277
302
  }
278
303
  }
@@ -303,6 +328,40 @@ export function evaluateKnowledgeStaleGate(report, input) {
303
328
  ...(waiver !== undefined ? { unitAcceptance: waiver } : {}),
304
329
  });
305
330
  }
331
+ // Round 15 follow-up (F3): knowledge entries the loader REFUSED — their own
332
+ // rule, pushed at ANY scope and corpus size (a clean sweep of the rest, a
333
+ // changeset, `--allow-empty` or `--min-referenced` never covers them). By
334
+ // default `skipped` — nothing was checked, the shortfall settles the run to
335
+ // 2 — and `failed` under `--fail-on invalid`, the INVALID-class contract of a
336
+ // malformed reference.
337
+ if (rejected.length > 0) {
338
+ const failing = failOn.has('invalid');
339
+ rules.push({
340
+ id: KNOWLEDGE_REJECTED_RULE_ID,
341
+ type: 'knowledge',
342
+ status: failing ? 'failed' : 'skipped',
343
+ severity: 'error',
344
+ counts: { rejected: rejected.length },
345
+ violations: failing
346
+ ? rejected.map((r) => ({
347
+ id: r.label,
348
+ file: r.source,
349
+ message: `REJECTED AT LOAD${r.pack !== undefined ? ` (pack ${r.pack})` : ''} — ${r.message}`,
350
+ }))
351
+ : [],
352
+ ...(failing
353
+ ? {}
354
+ : { skipReason: `${plural(rejected.length, 'knowledge entry was', 'knowledge entries were')} rejected at load — never checked` }),
355
+ coverage: {
356
+ unit: 'knowledge entries',
357
+ expected: rejected.length,
358
+ examined: 0,
359
+ unexamined: rejected.slice(0, COVERAGE_LABEL_CAP).map((r) => r.label),
360
+ unexaminedTotal: rejected.length,
361
+ reason: `${REJECTED_AT_LOAD} — the loader refused them (\`shrk self-config doctor\` names why); no valve accepts them`,
362
+ },
363
+ });
364
+ }
306
365
  // Knowledge-bearing files that never loaded: their own rule, so the envelope
307
366
  // names each one and the shortfall rides into the settled verdict whatever
308
367
  // the rest of the corpus proved. `error` — a source that could not be read is
@@ -331,15 +390,28 @@ export function evaluateKnowledgeStaleGate(report, input) {
331
390
  },
332
391
  });
333
392
  }
334
- const notVerifiedLead = loadFailures.length > 0
393
+ // A refused entry's sentence rides next to whichever lead the run has — it is
394
+ // never the whole story, and never dropped from it (round 15 follow-up, F3).
395
+ const rejectedLead = rejected.length > 0
396
+ ? `${plural(rejected.length, 'knowledge entry was', 'knowledge entries were')} rejected at load and never checked (listed above as INVALID): ${rejected
397
+ .slice(0, LOAD_FAILURES_NAMED)
398
+ .map((r) => r.label)
399
+ .join(', ')}${rejected.length > LOAD_FAILURES_NAMED ? ` (+${rejected.length - LOAD_FAILURES_NAMED} more)` : ''} — fix each (\`shrk self-config doctor\` names why); \`--fail-on invalid\` makes this a failure, and no valve accepts it.`
400
+ : undefined;
401
+ const loadLead = loadFailures.length > 0
335
402
  ? `${plural(loadFailures.length, 'knowledge file', 'knowledge files')} never loaded, so ${loadFailures.length === 1 ? 'its entries were' : 'their entries were'} never checked: ${loadFailureList(loadFailures)}. Fix the file (\`shrk doctor\` names the error) — --allow-empty never accepts a load failure.`
403
+ : undefined;
404
+ const restLead = loadFailures.length > 0
405
+ ? undefined
336
406
  : discoveryFailed
337
407
  ? `Loaded 0 knowledge entries from ${d.resolvedRoot} — nothing was checked.`
338
408
  : cov.entriesInScope > 0 && cov.unverifiable > 0
339
- ? `${plural(cov.unverifiable, 'entry', 'entries')} of ${cov.entriesInScope} (${formatPct(cov.unverifiable / cov.entriesInScope)}) ${cov.unverifiable === 1 ? 'declares' : 'declare'} no checkable reference, so ${cov.unverifiable === 1 ? 'it was' : 'they were'} never checked. Declare references[] (ids listed above), or accept a floor explicitly with --min-referenced <ratio>.`
409
+ ? `${plural(cov.unverifiable, 'entry', 'entries')} of ${cov.entriesInScope} (${formatPct(cov.unverifiable / cov.entriesInScope)}) ${cov.unverifiable === 1 ? 'declares' : 'declare'} no checkable reference, so ${cov.unverifiable === 1 ? 'it was' : 'they were'} never checked. ${unverifiableRemedy(report.entryVerdicts, KnowledgeMinReferencedValve.Flag)}`
340
410
  : invalidCount > 0
341
411
  ? `${plural(invalidCount, 'reference is', 'references are')} MALFORMED (listed above as INVALID) and ${invalidCount === 1 ? 'was' : 'were'} never checked — fix the kind or the missing field; \`--fail-on invalid\` makes this a failure.`
342
412
  : undefined;
413
+ const leads = [loadLead, rejectedLead, restLead].filter((l) => l !== undefined);
414
+ const notVerifiedLead = leads.length > 0 ? leads.join(' ') : undefined;
343
415
  return {
344
416
  proposed,
345
417
  reasons,
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-stale-quality-gate.d.ts","sourceRoot":"","sources":["../src/knowledge-stale-quality-gate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AAKzD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,qBAAqB,EACjC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAgF7B"}
1
+ {"version":3,"file":"knowledge-stale-quality-gate.d.ts","sourceRoot":"","sources":["../src/knowledge-stale-quality-gate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AAQzD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,qBAAqB,EACjC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA2G7B"}
@@ -1,11 +1,16 @@
1
1
  import { describeInspectionDiscovery } from "./inspection-discovery.js";
2
+ import { knowledgeRejectedEntries } from "./knowledge-entry-rejections.js";
2
3
  import { buildKnowledgeStaleReport } from "./knowledge-stale.js";
3
4
  import { evaluateKnowledgeStaleGate, formatPct, knowledgeStaleGateInput, settleKnowledgeStaleGate, } from "./knowledge-stale-gate.js";
5
+ import { KnowledgeMinReferencedValve } from "./knowledge-min-referenced-valve.js";
6
+ import { unverifiableFileRemedies, unverifiableRemedy } from "./knowledge-unverifiable-remedy.js";
4
7
  import { warmReferenceRegistries } from "./reference-registry.js";
5
8
  /** The quality-bundle gate id of the knowledge stale-check. */
6
9
  export const KNOWLEDGE_STALE_GATE_ID = 'knowledge-stale';
7
10
  /** Unverifiable entry ids carried in the gate's data (the verb's JSON has all of them). */
8
11
  const UNVERIFIABLE_IDS_SHOWN = 20;
12
+ /** Refused entries named in the notes before the rest are summarised. */
13
+ const REJECTED_NOTES_SHOWN = 5;
9
14
  /**
10
15
  * The knowledge stale-check as ONE quality gate — decided by THE gate the verb
11
16
  * settles (`evaluateKnowledgeStaleGate` + `settleKnowledgeStaleGate`), with the
@@ -30,9 +35,12 @@ export async function knowledgeStaleQualityGate(inspection, changedFiles) {
30
35
  const base = { id: KNOWLEDGE_STALE_GATE_ID, label: 'Knowledge stale-check', runsShell: false };
31
36
  const discovery = describeInspectionDiscovery(inspection);
32
37
  // A knowledge file that failed to load is never a deliberate skip — the
33
- // corpus is partial (or gone), and the gate says so.
38
+ // corpus is partial (or gone), and the gate says so. Neither is a corpus
39
+ // whose entries the loader REFUSED (round 15 follow-up, F3): they were
40
+ // declared, and nothing they claim was checked.
34
41
  const loadFailed = discovery.knowledgeLoadFailures.length > 0;
35
- if (inspection.knowledgeEntries.length === 0 && !loadFailed) {
42
+ const refused = knowledgeRejectedEntries(inspection).length > 0;
43
+ if (inspection.knowledgeEntries.length === 0 && !loadFailed && !refused) {
36
44
  return {
37
45
  ...base,
38
46
  passed: true,
@@ -46,7 +54,7 @@ export async function knowledgeStaleQualityGate(inspection, changedFiles) {
46
54
  // A bare warm keeps any command resolver a CLI caller already injected.
47
55
  await warmReferenceRegistries(inspection);
48
56
  const report = buildKnowledgeStaleReport(inspection, changedFiles ? { changedFiles } : {});
49
- if (changedFiles && report.entriesInScope === 0 && !loadFailed) {
57
+ if (changedFiles && report.entriesInScope === 0 && !loadFailed && report.rejectedEntries.length === 0) {
50
58
  return {
51
59
  ...base,
52
60
  passed: true,
@@ -75,6 +83,7 @@ export async function knowledgeStaleQualityGate(inspection, changedFiles) {
75
83
  const settled = settleKnowledgeStaleGate(gate);
76
84
  const c = report.coverage;
77
85
  const share = c.entriesInScope > 0 ? formatPct(c.unverifiable / c.entriesInScope) : '0%';
86
+ const rejected = report.rejectedEntries;
78
87
  return {
79
88
  ...base,
80
89
  // 1 fails; 2 "passed" over PART of its scope (`partial`), which the one
@@ -83,17 +92,38 @@ export async function knowledgeStaleQualityGate(inspection, changedFiles) {
83
92
  blocking: true,
84
93
  executed: true,
85
94
  notes: [
86
- `entries in scope ${c.entriesInScope} · verified ${c.verified} · stale ${c.stale} · unverifiable ${c.unverifiable} (${share})`,
95
+ `entries in scope ${c.entriesInScope} · verified ${c.verified} · stale ${c.stale} · unverifiable ${c.unverifiable} (${share})${rejected.length > 0 ? ` · rejected at load ${rejected.length}` : ''}`,
87
96
  ...gate.reasons,
88
97
  ...settled.shortfalls.map((s) => `NOT VERIFIED — ${s}`),
98
+ // Round 15 follow-up (F3): each entry the loader refused, named with the
99
+ // file to fix — the same wording as the stale-check's INVALID row.
100
+ ...rejected
101
+ .slice(0, REJECTED_NOTES_SHOWN)
102
+ .map((r) => `${r.label} (${r.source}${r.pack !== undefined ? `, pack ${r.pack}` : ''}) — ${r.message}`),
103
+ ...(rejected.length > REJECTED_NOTES_SHOWN
104
+ ? [`… ${rejected.length - REJECTED_NOTES_SHOWN} more rejected at load (\`shrk knowledge stale-check\` lists all)`]
105
+ : []),
106
+ // Round 15: the fix, in THIS surface's terms — quality refuses
107
+ // `--min-referenced`, so the valve it names is the config key.
108
+ ...(settled.exit === 2 && c.unverifiable > 0
109
+ ? [
110
+ `remedy: ${unverifiableRemedy(report.entryVerdicts, KnowledgeMinReferencedValve.Config)}`,
111
+ ...unverifiableFileRemedies(report.entryVerdicts),
112
+ ]
113
+ : []),
89
114
  ...settled.accepted,
90
115
  ],
91
116
  data: {
92
117
  coverage: c,
93
118
  unverifiableIds: report.unverifiableIds.slice(0, UNVERIFIABLE_IDS_SHOWN),
119
+ // Round 15 follow-up (F3): refused entries, capped like the ids above.
120
+ rejectedEntries: rejected.slice(0, UNVERIFIABLE_IDS_SHOWN),
94
121
  failureCounts: report.failureCounts,
95
122
  settledExit: settled.exit,
96
123
  shortfalls: settled.shortfalls,
124
+ // What an explicit valve accepted (`knowledgeCheck.minReferenced`, a
125
+ // waiver) — `shrk quality` hoists it into the run's `accepted`.
126
+ accepted: settled.accepted,
97
127
  ...(settled.exit === 2 ? { partial: true } : {}),
98
128
  },
99
129
  };
@@ -30,6 +30,7 @@ import type { IKnowledgeKindBucket } from './knowledge-kind-bucket.js';
30
30
  import type { IKnowledgeReferenceKindBucket } from './knowledge-reference-kind-bucket.js';
31
31
  import type { IKnowledgeStaleAdvisory } from './knowledge-stale-advisory.js';
32
32
  import type { IKnowledgeAgedEntry } from './knowledge-aged-entry.js';
33
+ import type { IKnowledgeRejectedEntry } from './knowledge-rejected-entry.js';
33
34
  import { ReferenceAssetKind } from './reference-asset-kind.js';
34
35
  export declare const KNOWLEDGE_STALE_SCHEMA = "sharkcraft.knowledge-stale/v1";
35
36
  export declare enum ReferenceCheckOutcome {
@@ -165,6 +166,15 @@ export interface IKnowledgeStaleReport {
165
166
  entryVerdicts: ReadonlyArray<IKnowledgeEntryVerdictRecord>;
166
167
  /** Every unverifiable entry id in scope (renderers cap; this never does). */
167
168
  unverifiableIds: ReadonlyArray<string>;
169
+ /**
170
+ * Round 15 follow-up (F3): knowledge-family entries the LOADER REFUSED (THE
171
+ * rejection channel, `knowledgeRejectedEntries`). Never in {@link entries} or
172
+ * {@link entryVerdicts} — nothing they claim was read, let alone checked — so
173
+ * the verdict counts each one UNEXAMINED (an INVALID-class row; `--fail-on
174
+ * invalid` makes it a failure). Never narrowed by `changedFiles`: a refused
175
+ * entry's references were never read, so no changeset can prove it untouched.
176
+ */
177
+ rejectedEntries: ReadonlyArray<IKnowledgeRejectedEntry>;
168
178
  /** Non-ok checks per {@link ReferenceFailure} — knowledge references, anchors and other assets. */
169
179
  failureCounts: Readonly<Record<ReferenceFailure, number>>;
170
180
  /** Per asset kind. `scanned: 0` means NOT IN SWEEP — say so, never render it as clean zeros. */
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-stale.d.ts","sourceRoot":"","sources":["../src/knowledge-stale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,EAIL,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAevE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE,oBAAY,qBAAqB;IAC/B,EAAE,OAAO;IACT,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,qFAAqF;IACrF,OAAO,YAAY;IACnB;;;;;;OAMG;IACH,OAAO,YAAY;CACpB;AAED,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED;;;;;;;;;GASG;AACH,oBAAY,cAAc;IACxB,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,UAAU,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC9C,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC;;;;OAIG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kGAAkG;IAClG,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,uGAAuG;IACvG,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,sBAAsB,CAAC;IACtC,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACzF,eAAe,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACzD,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACnD,iGAAiG;IACjG,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,EAAE,uBAAuB,CAAC;IAClC,iEAAiE;IACjE,aAAa,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAC;IAC3D,6EAA6E;IAC7E,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,mGAAmG;IACnG,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,gGAAgG;IAChG,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACxE,2FAA2F;IAC3F,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC5D,+DAA+D;IAC/D,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC,CAAC;IACzE;;;;;OAKG;IACH,oBAAoB,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAC9D,2CAA2C;IAC3C,UAAU,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACnD;;;;OAIG;IACH,WAAW,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACtG,+CAA+C;IAC/C,GAAG,CAAC,EAAE;QACJ,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,oBAAoB;QACpB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAClD,6CAA6C;QAC7C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;KAC/C,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,2BAA2B;IAC1C,8EAA8E;IAC9E,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAqtBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAEpE;AAwGD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE,2BAAgC,GACxC,qBAAqB,CA6XvB"}
1
+ {"version":3,"file":"knowledge-stale.d.ts","sourceRoot":"","sources":["../src/knowledge-stale.ts"],"names":[],"mappings":"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"}