@superbee/core 0.2.0-pre.16 → 0.2.0-pre.19

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 (278) hide show
  1. package/README.md +622 -5
  2. package/dist/blob-journal.d.ts +187 -2
  3. package/dist/blob-journal.d.ts.map +1 -1
  4. package/dist/blob-journal.js +377 -5
  5. package/dist/blob-journal.js.map +1 -1
  6. package/dist/body-replace-guards.d.ts +50 -0
  7. package/dist/body-replace-guards.d.ts.map +1 -0
  8. package/dist/body-replace-guards.js +158 -0
  9. package/dist/body-replace-guards.js.map +1 -0
  10. package/dist/builtin-recipes/content.d.ts +93 -0
  11. package/dist/builtin-recipes/content.d.ts.map +1 -0
  12. package/dist/builtin-recipes/content.js +288 -0
  13. package/dist/builtin-recipes/content.js.map +1 -0
  14. package/dist/builtin-recipes.d.ts +10 -0
  15. package/dist/builtin-recipes.d.ts.map +1 -0
  16. package/dist/builtin-recipes.js +97 -0
  17. package/dist/builtin-recipes.js.map +1 -0
  18. package/dist/bundle-health/index.d.ts +14 -0
  19. package/dist/bundle-health/index.d.ts.map +1 -0
  20. package/dist/bundle-health/index.js +12 -0
  21. package/dist/bundle-health/index.js.map +1 -0
  22. package/dist/bundle-health/kind-findings.d.ts +44 -0
  23. package/dist/bundle-health/kind-findings.d.ts.map +1 -0
  24. package/dist/bundle-health/kind-findings.js +68 -0
  25. package/dist/bundle-health/kind-findings.js.map +1 -0
  26. package/dist/bundle-health/legacy-page.d.ts +39 -0
  27. package/dist/bundle-health/legacy-page.d.ts.map +1 -0
  28. package/dist/bundle-health/legacy-page.js +50 -0
  29. package/dist/bundle-health/legacy-page.js.map +1 -0
  30. package/dist/bundle-health/report.d.ts +202 -0
  31. package/dist/bundle-health/report.d.ts.map +1 -0
  32. package/dist/bundle-health/report.js +438 -0
  33. package/dist/bundle-health/report.js.map +1 -0
  34. package/dist/code-point-order.d.ts +8 -0
  35. package/dist/code-point-order.d.ts.map +1 -0
  36. package/dist/code-point-order.js +20 -0
  37. package/dist/code-point-order.js.map +1 -0
  38. package/dist/connectors.d.ts +223 -0
  39. package/dist/connectors.d.ts.map +1 -0
  40. package/dist/connectors.js +1143 -0
  41. package/dist/connectors.js.map +1 -0
  42. package/dist/document-field-actions.d.ts +18 -0
  43. package/dist/document-field-actions.d.ts.map +1 -1
  44. package/dist/document-field-actions.js +91 -29
  45. package/dist/document-field-actions.js.map +1 -1
  46. package/dist/document-mutation.d.ts +7 -9
  47. package/dist/document-mutation.d.ts.map +1 -1
  48. package/dist/document-mutation.js +16 -16
  49. package/dist/document-mutation.js.map +1 -1
  50. package/dist/file-journaled-backend.d.ts +31 -5
  51. package/dist/file-journaled-backend.d.ts.map +1 -1
  52. package/dist/file-journaled-backend.js +131 -118
  53. package/dist/file-journaled-backend.js.map +1 -1
  54. package/dist/hosted-client/blob-delivery.d.ts +6 -0
  55. package/dist/hosted-client/blob-delivery.d.ts.map +1 -1
  56. package/dist/hosted-client/blob-delivery.js +23 -1
  57. package/dist/hosted-client/blob-delivery.js.map +1 -1
  58. package/dist/hosted-client/blob-write.d.ts +386 -0
  59. package/dist/hosted-client/blob-write.d.ts.map +1 -0
  60. package/dist/hosted-client/blob-write.js +770 -0
  61. package/dist/hosted-client/blob-write.js.map +1 -0
  62. package/dist/hosted-client/client.d.ts +64 -0
  63. package/dist/hosted-client/client.d.ts.map +1 -1
  64. package/dist/hosted-client/client.js +31 -0
  65. package/dist/hosted-client/client.js.map +1 -1
  66. package/dist/hosted-client/directory.d.ts +46 -0
  67. package/dist/hosted-client/directory.d.ts.map +1 -0
  68. package/dist/hosted-client/directory.js +74 -0
  69. package/dist/hosted-client/directory.js.map +1 -0
  70. package/dist/hosted-client/errors.d.ts +10 -0
  71. package/dist/hosted-client/errors.d.ts.map +1 -1
  72. package/dist/hosted-client/errors.js +13 -0
  73. package/dist/hosted-client/errors.js.map +1 -1
  74. package/dist/hosted-client/inbox.d.ts +320 -0
  75. package/dist/hosted-client/inbox.d.ts.map +1 -0
  76. package/dist/hosted-client/inbox.js +379 -0
  77. package/dist/hosted-client/inbox.js.map +1 -0
  78. package/dist/hosted-client/index.d.ts +11 -4
  79. package/dist/hosted-client/index.d.ts.map +1 -1
  80. package/dist/hosted-client/index.js +11 -4
  81. package/dist/hosted-client/index.js.map +1 -1
  82. package/dist/hosted-client/journal.d.ts +103 -0
  83. package/dist/hosted-client/journal.d.ts.map +1 -0
  84. package/dist/hosted-client/journal.js +464 -0
  85. package/dist/hosted-client/journal.js.map +1 -0
  86. package/dist/hosted-client/node.d.ts +5 -1
  87. package/dist/hosted-client/node.d.ts.map +1 -1
  88. package/dist/hosted-client/node.js +6 -1
  89. package/dist/hosted-client/node.js.map +1 -1
  90. package/dist/hosted-client/write.d.ts +28 -2
  91. package/dist/hosted-client/write.d.ts.map +1 -1
  92. package/dist/hosted-client/write.js +33 -11
  93. package/dist/hosted-client/write.js.map +1 -1
  94. package/dist/hosted-transport/answer-rows.d.ts +3 -2
  95. package/dist/hosted-transport/answer-rows.d.ts.map +1 -1
  96. package/dist/hosted-transport/answer-rows.js +1 -1
  97. package/dist/hosted-transport/answer-rows.js.map +1 -1
  98. package/dist/hosted-transport/carrier.d.ts +10 -0
  99. package/dist/hosted-transport/carrier.d.ts.map +1 -1
  100. package/dist/hosted-transport/carrier.js +22 -2
  101. package/dist/hosted-transport/carrier.js.map +1 -1
  102. package/dist/hosted-transport/whole-document-transport.d.ts +1 -1
  103. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -1
  104. package/dist/hosted-transport/whole-document-transport.js +20 -12
  105. package/dist/hosted-transport/whole-document-transport.js.map +1 -1
  106. package/dist/index.d.ts +6 -2
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +4 -2
  109. package/dist/index.js.map +1 -1
  110. package/dist/kind-authoring.d.ts +170 -0
  111. package/dist/kind-authoring.d.ts.map +1 -0
  112. package/dist/kind-authoring.js +451 -0
  113. package/dist/kind-authoring.js.map +1 -0
  114. package/dist/kind-conformance-error.d.ts +15 -0
  115. package/dist/kind-conformance-error.d.ts.map +1 -0
  116. package/dist/kind-conformance-error.js +20 -0
  117. package/dist/kind-conformance-error.js.map +1 -0
  118. package/dist/kinds-load.js +4 -4
  119. package/dist/kinds-load.js.map +1 -1
  120. package/dist/kinds.d.ts +2 -0
  121. package/dist/kinds.d.ts.map +1 -1
  122. package/dist/kinds.js +10 -2
  123. package/dist/kinds.js.map +1 -1
  124. package/dist/paths.d.ts +16 -0
  125. package/dist/paths.d.ts.map +1 -1
  126. package/dist/paths.js +25 -0
  127. package/dist/paths.js.map +1 -1
  128. package/dist/query-filter.d.ts +9 -0
  129. package/dist/query-filter.d.ts.map +1 -1
  130. package/dist/query-filter.js +19 -3
  131. package/dist/query-filter.js.map +1 -1
  132. package/dist/recipe-lifecycle/stamp.d.ts +11 -0
  133. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -1
  134. package/dist/recipe-lifecycle/stamp.js +6 -0
  135. package/dist/recipe-lifecycle/stamp.js.map +1 -1
  136. package/dist/record-overlay/apply.d.ts +43 -0
  137. package/dist/record-overlay/apply.d.ts.map +1 -0
  138. package/dist/record-overlay/apply.js +527 -0
  139. package/dist/record-overlay/apply.js.map +1 -0
  140. package/dist/record-overlay/canonical.d.ts +22 -0
  141. package/dist/record-overlay/canonical.d.ts.map +1 -0
  142. package/dist/record-overlay/canonical.js +47 -0
  143. package/dist/record-overlay/canonical.js.map +1 -0
  144. package/dist/record-overlay/digest.d.ts +4 -0
  145. package/dist/record-overlay/digest.d.ts.map +1 -0
  146. package/dist/record-overlay/digest.js +11 -0
  147. package/dist/record-overlay/digest.js.map +1 -0
  148. package/dist/record-overlay/errors.d.ts +44 -0
  149. package/dist/record-overlay/errors.d.ts.map +1 -0
  150. package/dist/record-overlay/errors.js +55 -0
  151. package/dist/record-overlay/errors.js.map +1 -0
  152. package/dist/record-overlay/findings.d.ts +5 -0
  153. package/dist/record-overlay/findings.d.ts.map +1 -0
  154. package/dist/record-overlay/findings.js +83 -0
  155. package/dist/record-overlay/findings.js.map +1 -0
  156. package/dist/record-overlay/index.d.ts +23 -0
  157. package/dist/record-overlay/index.d.ts.map +1 -0
  158. package/dist/record-overlay/index.js +21 -0
  159. package/dist/record-overlay/index.js.map +1 -0
  160. package/dist/record-overlay/plan.d.ts +12 -0
  161. package/dist/record-overlay/plan.d.ts.map +1 -0
  162. package/dist/record-overlay/plan.js +285 -0
  163. package/dist/record-overlay/plan.js.map +1 -0
  164. package/dist/record-overlay/policy.d.ts +69 -0
  165. package/dist/record-overlay/policy.d.ts.map +1 -0
  166. package/dist/record-overlay/policy.js +228 -0
  167. package/dist/record-overlay/policy.js.map +1 -0
  168. package/dist/record-overlay/redact.d.ts +3 -0
  169. package/dist/record-overlay/redact.d.ts.map +1 -0
  170. package/dist/record-overlay/redact.js +27 -0
  171. package/dist/record-overlay/redact.js.map +1 -0
  172. package/dist/record-overlay/signal-kind.d.ts +30 -0
  173. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  174. package/dist/record-overlay/signal-kind.js +38 -0
  175. package/dist/record-overlay/signal-kind.js.map +1 -0
  176. package/dist/record-overlay/signal-text.d.ts +45 -0
  177. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  178. package/dist/record-overlay/signal-text.js +116 -0
  179. package/dist/record-overlay/signal-text.js.map +1 -0
  180. package/dist/record-overlay/source-index.d.ts +19 -0
  181. package/dist/record-overlay/source-index.d.ts.map +1 -0
  182. package/dist/record-overlay/source-index.js +102 -0
  183. package/dist/record-overlay/source-index.js.map +1 -0
  184. package/dist/record-overlay/types.d.ts +291 -0
  185. package/dist/record-overlay/types.d.ts.map +1 -0
  186. package/dist/record-overlay/types.js +2 -0
  187. package/dist/record-overlay/types.js.map +1 -0
  188. package/dist/remote-operations.js +5 -2
  189. package/dist/remote-operations.js.map +1 -1
  190. package/dist/search/contract.d.ts +151 -0
  191. package/dist/search/contract.d.ts.map +1 -0
  192. package/dist/search/contract.js +78 -0
  193. package/dist/search/contract.js.map +1 -0
  194. package/dist/search/errors.d.ts +30 -0
  195. package/dist/search/errors.d.ts.map +1 -0
  196. package/dist/search/errors.js +50 -0
  197. package/dist/search/errors.js.map +1 -0
  198. package/dist/search/identity.d.ts +12 -0
  199. package/dist/search/identity.d.ts.map +1 -0
  200. package/dist/search/identity.js +90 -0
  201. package/dist/search/identity.js.map +1 -0
  202. package/dist/search/index.d.ts +15 -0
  203. package/dist/search/index.d.ts.map +1 -0
  204. package/dist/search/index.js +14 -0
  205. package/dist/search/index.js.map +1 -0
  206. package/dist/search/memory-source.d.ts +25 -0
  207. package/dist/search/memory-source.d.ts.map +1 -0
  208. package/dist/search/memory-source.js +230 -0
  209. package/dist/search/memory-source.js.map +1 -0
  210. package/dist/search/rank.d.ts +34 -0
  211. package/dist/search/rank.d.ts.map +1 -0
  212. package/dist/search/rank.js +129 -0
  213. package/dist/search/rank.js.map +1 -0
  214. package/dist/search/row-text.d.ts +38 -0
  215. package/dist/search/row-text.d.ts.map +1 -0
  216. package/dist/search/row-text.js +88 -0
  217. package/dist/search/row-text.js.map +1 -0
  218. package/dist/search/search.d.ts +28 -0
  219. package/dist/search/search.d.ts.map +1 -0
  220. package/dist/search/search.js +240 -0
  221. package/dist/search/search.js.map +1 -0
  222. package/dist/search/source.d.ts +67 -0
  223. package/dist/search/source.d.ts.map +1 -0
  224. package/dist/search/source.js +2 -0
  225. package/dist/search/source.js.map +1 -0
  226. package/dist/search/text.d.ts +47 -0
  227. package/dist/search/text.d.ts.map +1 -0
  228. package/dist/search/text.js +148 -0
  229. package/dist/search/text.js.map +1 -0
  230. package/dist/source-engine/guard.d.ts +82 -0
  231. package/dist/source-engine/guard.d.ts.map +1 -0
  232. package/dist/source-engine/guard.js +396 -0
  233. package/dist/source-engine/guard.js.map +1 -0
  234. package/dist/source-engine/index.d.ts +24 -0
  235. package/dist/source-engine/index.d.ts.map +1 -0
  236. package/dist/source-engine/index.js +20 -0
  237. package/dist/source-engine/index.js.map +1 -0
  238. package/dist/source-engine/machine-state.d.ts +74 -0
  239. package/dist/source-engine/machine-state.d.ts.map +1 -0
  240. package/dist/source-engine/machine-state.js +48 -0
  241. package/dist/source-engine/machine-state.js.map +1 -0
  242. package/dist/source-engine/observe.d.ts +18 -0
  243. package/dist/source-engine/observe.d.ts.map +1 -0
  244. package/dist/source-engine/observe.js +598 -0
  245. package/dist/source-engine/observe.js.map +1 -0
  246. package/dist/source-engine/robots.d.ts +53 -0
  247. package/dist/source-engine/robots.d.ts.map +1 -0
  248. package/dist/source-engine/robots.js +158 -0
  249. package/dist/source-engine/robots.js.map +1 -0
  250. package/dist/source-engine/types.d.ts +285 -0
  251. package/dist/source-engine/types.d.ts.map +1 -0
  252. package/dist/source-engine/types.js +2 -0
  253. package/dist/source-engine/types.js.map +1 -0
  254. package/dist/source-harness/conformance.d.ts +16 -0
  255. package/dist/source-harness/conformance.d.ts.map +1 -0
  256. package/dist/source-harness/conformance.js +265 -0
  257. package/dist/source-harness/conformance.js.map +1 -0
  258. package/dist/source-harness/fixture.d.ts +95 -0
  259. package/dist/source-harness/fixture.d.ts.map +1 -0
  260. package/dist/source-harness/fixture.js +261 -0
  261. package/dist/source-harness/fixture.js.map +1 -0
  262. package/dist/source-harness/index.d.ts +22 -0
  263. package/dist/source-harness/index.d.ts.map +1 -0
  264. package/dist/source-harness/index.js +19 -0
  265. package/dist/source-harness/index.js.map +1 -0
  266. package/dist/source-harness/peer.d.ts +74 -0
  267. package/dist/source-harness/peer.d.ts.map +1 -0
  268. package/dist/source-harness/peer.js +106 -0
  269. package/dist/source-harness/peer.js.map +1 -0
  270. package/dist/storage.d.ts +2 -1
  271. package/dist/storage.d.ts.map +1 -1
  272. package/dist/storage.js +1 -1
  273. package/dist/storage.js.map +1 -1
  274. package/dist/uncertain-write.d.ts +39 -6
  275. package/dist/uncertain-write.d.ts.map +1 -1
  276. package/dist/uncertain-write.js +25 -3
  277. package/dist/uncertain-write.js.map +1 -1
  278. package/package.json +33 -1
@@ -0,0 +1,438 @@
1
+ /**
2
+ * The bundle health report: every finding `superbee status` prints, computed from one bundle read.
3
+ *
4
+ * Composition only: Kind conformance is `validateAgainstKind`, links are `parseLinksFromDoc` and
5
+ * `parseQualifiedLinks`, staleness is `freshness()`, View registrations are `parseRegistration`.
6
+ * One `loadKinds`, one lenient `query`, two prefix-scoped `listBlobs` and one root-index read per
7
+ * call; every finding derives in memory from those results. Orphans and both graph lints come from
8
+ * the edge sets built while scanning for unresolved links, never a per-document backlink query.
9
+ *
10
+ * Findings are data, never errors: a document whose frontmatter does not parse is a `malformed`
11
+ * row, and an unresolved link is information (OKF permits links to knowledge not yet written).
12
+ *
13
+ * Top-level report keys are camelCase; row keys are snake_case, the rows `superbee status` prints.
14
+ */
15
+ import { listBlobs, query, readBundleOkfVersion } from "../bundle-ops.js";
16
+ import { createLocalResolver, resolveQualifiedLinks } from "../cross-bundle.js";
17
+ import { BUNDLE_NAME_DOC_ID, BUNDLE_NAME_DOC_TYPE, DEPENDENCIES_DOC_ID, DEPENDENCIES_DOC_TYPE, declaredBundleId, parseDependencies, } from "../dependencies.js";
18
+ import { freshness, invalidLegacyTimestamp, staleAfterInstant } from "../freshness.js";
19
+ import { MalformedDocumentError } from "../frontmatter-contract.js";
20
+ import { freshnessHorizonMs, isKindFieldValidationWarning, isTerminal, projectKindValidationWarnings, validateAgainstKind, } from "../kinds.js";
21
+ import { loadKinds } from "../kinds-load.js";
22
+ import { collectLinkDeclarations, localEdgeQualifiedDeclaration, qualifiedEdgeViolation } from "../link-types.js";
23
+ import { parseLinksFromDoc } from "../links.js";
24
+ import { isOkfLifecycleStatus } from "../okf-lifecycle.js";
25
+ import { invalidOkfTimestamps } from "../okf-timestamps.js";
26
+ import { isAnyEntryKey, isAnyRegistryId, isPageTypeName, isViewEntryVersion, parseRegistration, VIEW_ENTRY_PREFIX, } from "../page.js";
27
+ import { isQualifiedHref, parseQualifiedLinks } from "../qualified-links.js";
28
+ import { trustTierCounts } from "../verification.js";
29
+ import { hasLegacyBridgeField, isLegacyPageConvention, isLegacyPageDoc, isLegacyRegistryDocId, LEGACY_PAGE_BLOB_PREFIX, } from "./legacy-page.js";
30
+ /** A document's `type`, or "" when absent or not a string: the one place this coercion happens. */
31
+ function docType(doc) {
32
+ return typeof doc.frontmatter.type === "string" ? doc.frontmatter.type : "";
33
+ }
34
+ /** Preserve ordinary YAML value shapes while keeping unsupported JSON values legible. */
35
+ function diagnosticValue(value) {
36
+ try {
37
+ return JSON.parse(JSON.stringify(value, (_key, item) => typeof item === "number" && !Number.isFinite(item) ? `<${String(item)}>` : item));
38
+ }
39
+ catch {
40
+ // YAML aliases can form cycles; the report must still name the offending document.
41
+ return `<non-JSON ${Array.isArray(value) ? "array" : typeof value}: circular or too deeply nested>`;
42
+ }
43
+ }
44
+ /**
45
+ * Documents that define the bundle's operating model or identity rather than participating as
46
+ * concept instances. Their lack of inbound concept links is intentional, so they are never orphans.
47
+ */
48
+ function isGraphDefinition(doc) {
49
+ const type = docType(doc);
50
+ return type === "Convention" ||
51
+ isPageTypeName(type) ||
52
+ isLegacyPageDoc(doc.frontmatter) ||
53
+ (type === "Reference" && doc.id.startsWith("references/")) ||
54
+ (type === BUNDLE_NAME_DOC_TYPE && doc.id === BUNDLE_NAME_DOC_ID) ||
55
+ (type === DEPENDENCIES_DOC_TYPE && doc.id === DEPENDENCIES_DOC_ID);
56
+ }
57
+ function okfV02WorkflowStatusCollisions(registry, docs) {
58
+ const affectedByKind = new Map();
59
+ const observedValuesByKind = new Map();
60
+ for (const doc of docs) {
61
+ const value = doc.frontmatter.status;
62
+ if (value === undefined || isOkfLifecycleStatus(value))
63
+ continue;
64
+ const type = docType(doc);
65
+ affectedByKind.set(type, (affectedByKind.get(type) ?? 0) + 1);
66
+ const display = typeof value === "string" ? value : `<${Array.isArray(value) ? "array" : typeof value}>`;
67
+ const observed = observedValuesByKind.get(type) ?? new Set();
68
+ observed.add(display);
69
+ observedValuesByKind.set(type, observed);
70
+ }
71
+ const rows = [];
72
+ for (const kind of [...registry.kinds.values()].sort((a, b) => a.governs.localeCompare(b.governs))) {
73
+ const declaresStatus = kind.fields.required.includes("status") || kind.fields.optional.includes("status");
74
+ if (!declaresStatus)
75
+ continue;
76
+ const declaredValues = kind.fields.values.status;
77
+ const incompatibleValues = (declaredValues ?? []).filter((value) => !isOkfLifecycleStatus(value));
78
+ const affectedDocuments = affectedByKind.get(kind.governs) ?? 0;
79
+ if (declaredValues !== undefined && incompatibleValues.length === 0 && affectedDocuments === 0)
80
+ continue;
81
+ rows.push({
82
+ kind: kind.governs,
83
+ convention: kind.id,
84
+ declaration: declaredValues === undefined ? "unbounded" : "enumerated",
85
+ incompatible_values: incompatibleValues,
86
+ observed_incompatible_values: [...(observedValuesByKind.get(kind.governs) ?? [])].sort(),
87
+ affected_documents: affectedDocuments,
88
+ });
89
+ }
90
+ return rows;
91
+ }
92
+ /**
93
+ * Compute the health report for `bundle`. Read-only: it reads through the bundle's backend and
94
+ * never writes. It throws only what it propagates: `InvalidInputError` for a backend-less bundle in
95
+ * a runtime with no default, backend errors other than `MalformedDocumentError` (a finding), and
96
+ * whatever the `bindings` hook throws.
97
+ */
98
+ export async function bundleHealth(bundle, options = {}) {
99
+ // A document whose frontmatter does not parse is its own finding, never an abort.
100
+ const malformed = [];
101
+ const [registry, docs, legacyBlobKeys, viewBlobKeys, okfVersionRead] = await Promise.all([
102
+ loadKinds(bundle),
103
+ query(bundle, {}, { onSkip: (s) => malformed.push({ id: s.id, reason: s.reason }) }),
104
+ // legacyNaming: blob keys still under the legacy pages/ prefix.
105
+ listBlobs(bundle, LEGACY_PAGE_BLOB_PREFIX),
106
+ // views: the views/ half of the entry-key existence set (the legacy listing is the other half).
107
+ listBlobs(bundle, VIEW_ENTRY_PREFIX),
108
+ readBundleOkfVersion(bundle)
109
+ .then((version) => ({ version }))
110
+ .catch((error) => {
111
+ if (!(error instanceof MalformedDocumentError))
112
+ throw error;
113
+ return { version: undefined, malformed: { id: "index.md", reason: error.message } };
114
+ }),
115
+ ]);
116
+ if ("malformed" in okfVersionRead)
117
+ malformed.unshift(okfVersionRead.malformed);
118
+ const okfVersion = okfVersionRead.version;
119
+ const byId = new Set(docs.map((d) => d.id));
120
+ const docsById = new Map(docs.map((d) => [d.id, d]));
121
+ // Kind lint, per violation; conformance debt regroups the same pass by document and keeps only
122
+ // frontmatter-level codes (a missing body section names no field an update could set).
123
+ const kindLint = [];
124
+ const conformanceDebtDocs = new Map(); // id -> type, first seen (docs is id-sorted)
125
+ for (const doc of docs) {
126
+ const kind = registry.kinds.get(docType(doc));
127
+ if (!kind)
128
+ continue;
129
+ for (const w of projectKindValidationWarnings(okfVersion, kind, validateAgainstKind(doc, kind))) {
130
+ kindLint.push({ id: doc.id, field: w.field ?? "", code: w.code });
131
+ if (isKindFieldValidationWarning(w) && !conformanceDebtDocs.has(doc.id)) {
132
+ conformanceDebtDocs.set(doc.id, docType(doc));
133
+ }
134
+ }
135
+ }
136
+ // The declared typed-edge vocabulary, shared with `link add`'s write-time lint.
137
+ const linkTypeDeclarations = collectLinkDeclarations(registry);
138
+ const unresolvedLinks = [];
139
+ const inbound = new Set();
140
+ const outbound = new Set();
141
+ // id -> resolved inbound edges from OTHER documents (a self-link rescues nothing).
142
+ const inboundEdges = new Map();
143
+ const linkTypeViolations = [];
144
+ const crossLinkTypeViolations = [];
145
+ for (const doc of docs) {
146
+ for (const l of parseLinksFromDoc(doc)) {
147
+ // A malformed `okf:` href without `//` also parses as a local link; it counts once, as a
148
+ // cross-bundle invalid_ref, never as a local edge.
149
+ if (isQualifiedHref(l.href))
150
+ continue;
151
+ // A local link under a qualified declaration is a cross-bundle type violation whether or not
152
+ // its local target exists.
153
+ const qualifiedDeclaration = localEdgeQualifiedDeclaration(linkTypeDeclarations.get(l.text), docType(doc));
154
+ if (qualifiedDeclaration) {
155
+ crossLinkTypeViolations.push({
156
+ from: doc.id,
157
+ href: l.href,
158
+ text: l.text,
159
+ expected: `${qualifiedDeclaration.governs} -> ${qualifiedDeclaration.target}`,
160
+ });
161
+ }
162
+ // Any non-self link is an intentional outgoing edge; an unresolved one has its own finding,
163
+ // so it must not also make its source an orphan.
164
+ if (l.to !== doc.id)
165
+ outbound.add(doc.id);
166
+ if (!byId.has(l.to)) {
167
+ unresolvedLinks.push({ from: doc.id, href: l.href });
168
+ continue;
169
+ }
170
+ if (l.to !== doc.id) {
171
+ inbound.add(l.to);
172
+ const list = inboundEdges.get(l.to) ?? [];
173
+ list.push({ text: l.text, sourceType: docType(doc) });
174
+ inboundEdges.set(l.to, list);
175
+ }
176
+ // A resolved edge whose text is a declared link type its source or target does not conform to.
177
+ const declared = linkTypeDeclarations.get(l.text);
178
+ if (declared && declared.length > 0 && !qualifiedDeclaration) {
179
+ const sourceType = docType(doc);
180
+ const targetType = docType(docsById.get(l.to));
181
+ const matched = declared.find((d) => d.governs === sourceType) ?? declared[0];
182
+ const sourceOk = declared.some((d) => d.governs === sourceType);
183
+ const targetOk = targetType === matched.target;
184
+ if (!sourceOk || !targetOk) {
185
+ linkTypeViolations.push({
186
+ from: doc.id,
187
+ to: l.to,
188
+ text: l.text,
189
+ expected: `${matched.governs} -> ${matched.target}`,
190
+ });
191
+ }
192
+ }
193
+ }
194
+ }
195
+ // Cross-bundle links, parsed from the documents already in hand.
196
+ const qualifiedLinks = [];
197
+ for (const doc of docs) {
198
+ for (const q of parseQualifiedLinks(doc)) {
199
+ qualifiedLinks.push(q);
200
+ if (!q.ref)
201
+ continue;
202
+ const violation = qualifiedEdgeViolation(linkTypeDeclarations.get(q.text), docType(doc), q.ref.alias);
203
+ if (violation) {
204
+ crossLinkTypeViolations.push({
205
+ from: doc.id,
206
+ href: q.href,
207
+ text: q.text,
208
+ expected: `${violation.governs} -> ${violation.target}`,
209
+ });
210
+ }
211
+ }
212
+ }
213
+ const dependenciesDoc = docsById.get(DEPENDENCIES_DOC_ID);
214
+ const hasCrossBundle = dependenciesDoc !== undefined || qualifiedLinks.length > 0;
215
+ const selfBundleId = declaredBundleId(docsById.get(BUNDLE_NAME_DOC_ID)) ?? options.selfBundleId;
216
+ const declaredDeps = parseDependencies(dependenciesDoc, selfBundleId === undefined ? {} : { selfBundleId });
217
+ // Binding runs here, after every read and on this one parse, so a malformed or absent declaration
218
+ // stays a finding and a self alias is already dropped when the binder sees the declaration.
219
+ const bindings = typeof options.bindings === "function"
220
+ ? await options.bindings(declaredDeps)
221
+ : options.bindings ?? new Map();
222
+ let crossBundle = null;
223
+ if (hasCrossBundle) {
224
+ let unchecked = 0;
225
+ const checked = qualifiedLinks.filter((q) => {
226
+ const unbound = q.ref !== null && declaredDeps.dependencies.has(q.ref.alias) && !bindings.has(q.ref.alias);
227
+ if (unbound)
228
+ unchecked++;
229
+ return !unbound;
230
+ });
231
+ const resolver = createLocalResolver({ dependencies: declaredDeps.dependencies, rejected: declaredDeps.rejected, bindings });
232
+ // One probe per bound alias rides the same resolve call, so each binding's verdict (identity,
233
+ // pin) comes from the resolver and its copy is still read in one batch.
234
+ const probeAliases = [...bindings.keys()];
235
+ const probes = probeAliases.map((alias) => {
236
+ const ref = { alias, id: BUNDLE_NAME_DOC_ID };
237
+ return { from: BUNDLE_NAME_DOC_ID, text: "", href: "", ref };
238
+ });
239
+ const results = await resolveQualifiedLinks(resolver, [...checked, ...probes]);
240
+ const verdictByAlias = new Map();
241
+ results.slice(checked.length).forEach((r, i) => {
242
+ const resolution = r.resolution;
243
+ const state = resolution.state === "resolved" || resolution.reason === "target_missing" ? "ok" : resolution.reason;
244
+ verdictByAlias.set(probeAliases[i], state);
245
+ });
246
+ const unresolved = [];
247
+ for (const { link, resolution } of results.slice(0, checked.length)) {
248
+ if (resolution.state === "resolved")
249
+ continue;
250
+ unresolved.push({ from: link.from, href: link.href, reason: resolution.reason, detail: resolution.detail });
251
+ }
252
+ const dependencies = [];
253
+ for (const entry of declaredDeps.dependencies.values()) {
254
+ dependencies.push({
255
+ alias: entry.alias,
256
+ bundle_id: entry.bundle_id,
257
+ state: verdictByAlias.get(entry.alias) ?? "unbound",
258
+ bound: bindings.get(entry.alias)?.label ?? null,
259
+ pin: entry.pin?.value ?? null,
260
+ });
261
+ }
262
+ crossBundle = {
263
+ links: qualifiedLinks.length,
264
+ unchecked,
265
+ unresolved,
266
+ dependencies,
267
+ problems: declaredDeps.problems.map((p) => ({ code: p.code, alias: p.alias ?? null, detail: p.detail })),
268
+ };
269
+ }
270
+ // Orphans are isolated content documents inside an established graph: a bundle with no resolved
271
+ // edge has not adopted graph structure yet, roots with outbound edges are intentional, and
272
+ // definition documents are classified above.
273
+ const orphans = [];
274
+ if (inbound.size > 0) {
275
+ for (const doc of docs) {
276
+ if (!inbound.has(doc.id) && !outbound.has(doc.id) && !isGraphDefinition(doc)) {
277
+ orphans.push({ id: doc.id, type: docType(doc) });
278
+ }
279
+ }
280
+ }
281
+ // One freshness authority handles both standard v0.2 `stale_after` and optional Kind horizons.
282
+ const now = options.now ?? new Date();
283
+ const stale = [];
284
+ const noTimestamp = [];
285
+ const invalidStaleAfter = [];
286
+ const invalidTimestamps = [];
287
+ const invalidLegacyTimestamps = [];
288
+ for (const doc of docs) {
289
+ const invalidLegacy = invalidLegacyTimestamp(doc.frontmatter, okfVersion);
290
+ if (invalidLegacy) {
291
+ invalidLegacyTimestamps.push({ id: doc.id, type: docType(doc), field: invalidLegacy.field, value: diagnosticValue(invalidLegacy.value) });
292
+ }
293
+ if (okfVersion === "0.2") {
294
+ for (const { field, value } of invalidOkfTimestamps(doc.frontmatter)) {
295
+ invalidTimestamps.push({ id: doc.id, type: docType(doc), field, value: diagnosticValue(value) });
296
+ }
297
+ }
298
+ const kind = registry.kinds.get(docType(doc));
299
+ const horizonMs = kind ? freshnessHorizonMs(kind) : undefined;
300
+ const hasStaleAfter = okfVersion === "0.2" && Object.hasOwn(doc.frontmatter, "stale_after");
301
+ const staleAfterIsInvalid = hasStaleAfter && staleAfterInstant(doc.frontmatter.stale_after) === null;
302
+ if (staleAfterIsInvalid) {
303
+ invalidStaleAfter.push({ id: doc.id, type: docType(doc), value: diagnosticValue(doc.frontmatter.stale_after) });
304
+ }
305
+ // A readable stale_after is a string: staleAfterInstant accepts strings only.
306
+ const staleAfter = hasStaleAfter && !staleAfterIsInvalid
307
+ ? doc.frontmatter.stale_after
308
+ : undefined;
309
+ if (horizonMs === undefined && staleAfter === undefined)
310
+ continue;
311
+ const result = freshness(doc, { maxAgeMs: horizonMs, now, okfVersion });
312
+ if (result.verdict === "empty" && horizonMs !== undefined) {
313
+ noTimestamp.push({ id: doc.id, type: docType(doc) });
314
+ }
315
+ else if (result.verdict === "stale") {
316
+ stale.push({
317
+ id: doc.id,
318
+ ...(result.ageMs === undefined ? {} : { age_ms: result.ageMs }),
319
+ ...(horizonMs === undefined ? {} : { horizon_ms: horizonMs }),
320
+ ...(staleAfter === undefined ? {} : { stale_after: staleAfter }),
321
+ });
322
+ }
323
+ }
324
+ // OKF v0.2 trust tiers (SPEC 5.3); v0.1 defines no trust family.
325
+ const trust = okfVersion === "0.2" && docs.length > 0 ? trustTierCounts(docs) : null;
326
+ // Inbound expectations: one row per instance of a Kind declaring `expects_inbound` that lacks a
327
+ // conforming inbound edge. An instance whose Kind declares a terminal set it currently matches is
328
+ // skipped and counted, never silently dropped.
329
+ const missingExpectedRanked = [];
330
+ let terminalSkipped = 0;
331
+ for (const doc of docs) {
332
+ const kind = registry.kinds.get(docType(doc));
333
+ if (!kind?.expectsInbound)
334
+ continue;
335
+ const terminalDeclared = Object.keys(kind.fields.terminal).length > 0;
336
+ if (terminalDeclared && isTerminal(kind, doc.frontmatter)) {
337
+ terminalSkipped++;
338
+ continue;
339
+ }
340
+ const edges = inboundEdges.get(doc.id) ?? [];
341
+ const missing = Object.entries(kind.expectsInbound)
342
+ .filter(([text, sourceKind]) => !edges.some((e) => e.text === text && e.sourceType === sourceKind))
343
+ .map(([text]) => text);
344
+ if (missing.length === 0)
345
+ continue;
346
+ const declaresStatus = kind.fields.required.includes("status") || kind.fields.optional.includes("status");
347
+ const row = declaresStatus
348
+ ? { id: doc.id, status: doc.frontmatter.status, missing }
349
+ : { id: doc.id, missing };
350
+ // Non-terminal instances sort first: by the declared terminal set when the Kind has one, else
351
+ // by the historical status === "done" fallback.
352
+ const sortsFirst = terminalDeclared ? isTerminal(kind, doc.frontmatter) : row.status === "done";
353
+ missingExpectedRanked.push({ row, sortsFirst });
354
+ }
355
+ missingExpectedRanked.sort((a, b) => {
356
+ if (a.sortsFirst !== b.sortsFirst)
357
+ return a.sortsFirst ? 1 : -1;
358
+ return String(a.row.id).localeCompare(String(b.row.id));
359
+ });
360
+ const missingExpectedLinks = missingExpectedRanked.map((e) => e.row);
361
+ // legacyNaming: retired names the runtime no longer accepts, plus legacy locations (still
362
+ // recognized, reported as information). Documents count only under the legacy registry prefix,
363
+ // blob keys only under the legacy entry prefix.
364
+ const legacyNaming = {
365
+ pageTyped: docs.filter((doc) => isLegacyPageDoc(doc.frontmatter)).map((doc) => ({ id: doc.id })),
366
+ bridgeField: docs.filter((doc) => hasLegacyBridgeField(doc.frontmatter)).map((doc) => ({ id: doc.id })),
367
+ pageConvention: docs.filter((doc) => isLegacyPageConvention(doc.frontmatter)).map((doc) => ({ id: doc.id })),
368
+ legacyPrefix: [
369
+ ...docs.filter((doc) => isLegacyRegistryDocId(doc.id)).map((doc) => ({ id: doc.id, store: "doc" })),
370
+ ...legacyBlobKeys
371
+ .slice()
372
+ .sort()
373
+ .map((key) => ({ id: key, store: "blob" })),
374
+ ],
375
+ };
376
+ // The View surface, recognized with the same predicates the ui launcher uses (legacy locations
377
+ // included; a Page-typed document is a legacyNaming finding instead). Entry existence derives
378
+ // from the two prefix-scoped listings above, never a per-registration probe.
379
+ const entryBlobKeys = new Set([...viewBlobKeys, ...legacyBlobKeys]);
380
+ const views = { typed: 0, danglingEntries: [], invalidRegistrations: [] };
381
+ for (const doc of docs) {
382
+ if (!isPageTypeName(doc.frontmatter.type))
383
+ continue;
384
+ views.typed++;
385
+ const registration = parseRegistration(doc.id, doc.frontmatter);
386
+ if (registration) {
387
+ if (!entryBlobKeys.has(registration.entry)) {
388
+ views.danglingEntries.push({ id: registration.id, entry: registration.entry });
389
+ }
390
+ continue;
391
+ }
392
+ // The document declares the View kind name but fails the registration grammar; name each
393
+ // failing leg with the grammar helpers parseRegistration composes.
394
+ const legs = [];
395
+ if (!isAnyRegistryId(doc.id))
396
+ legs.push("id");
397
+ if (!isAnyEntryKey(doc.frontmatter.entry))
398
+ legs.push("entry");
399
+ if (Object.hasOwn(doc.frontmatter, "entry_version") &&
400
+ !isViewEntryVersion(doc.frontmatter.entry_version)) {
401
+ legs.push("entry_version");
402
+ }
403
+ views.invalidRegistrations.push({ id: doc.id, problem: legs.join("+") });
404
+ }
405
+ const statusCollisions = okfV02WorkflowStatusCollisions(registry, docs);
406
+ const okfUpgrade = okfVersion === "0.1" && statusCollisions.length > 0
407
+ ? {
408
+ statusFieldRows: statusCollisions,
409
+ affectedDocuments: statusCollisions.reduce((total, row) => total + row.affected_documents, 0),
410
+ }
411
+ : null;
412
+ return {
413
+ okfVersion,
414
+ docs: docs.length,
415
+ kinds: registry.kinds.size,
416
+ malformed,
417
+ kindLint,
418
+ conformanceDebt: registry.kinds.size > 0 ? [...conformanceDebtDocs].map(([id, type]) => ({ id, type })) : null,
419
+ registryWarnings: registry.warnings,
420
+ unresolvedLinks,
421
+ orphans,
422
+ linkTypeViolations,
423
+ crossLinkTypeViolations,
424
+ missingExpectedLinks,
425
+ terminalSkipped,
426
+ stale,
427
+ noTimestamp,
428
+ invalidStaleAfter,
429
+ invalidTimestamps,
430
+ invalidLegacyTimestamps,
431
+ trust,
432
+ views,
433
+ crossBundle,
434
+ okfUpgrade,
435
+ legacyNaming,
436
+ };
437
+ }
438
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/bundle-health/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The one string order for lists Superbee treats as sets (a declared `string-list` or
3
+ * `https-url-list` a connector owns): Unicode code point order. JavaScript's default `sort()`
4
+ * orders UTF-16 code units, which puts an astral character (an emoji, common in labels) before
5
+ * U+E000 to U+FFFF. A lone surrogate orders by its own value. Storage-neutral.
6
+ */
7
+ export declare function compareCodePoints(a: string, b: string): number;
8
+ //# sourceMappingURL=code-point-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-point-order.d.ts","sourceRoot":"","sources":["../src/code-point-order.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAW9D"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The one string order for lists Superbee treats as sets (a declared `string-list` or
3
+ * `https-url-list` a connector owns): Unicode code point order. JavaScript's default `sort()`
4
+ * orders UTF-16 code units, which puts an astral character (an emoji, common in labels) before
5
+ * U+E000 to U+FFFF. A lone surrogate orders by its own value. Storage-neutral.
6
+ */
7
+ export function compareCodePoints(a, b) {
8
+ let i = 0;
9
+ let j = 0;
10
+ while (i < a.length && j < b.length) {
11
+ const x = a.codePointAt(i);
12
+ const y = b.codePointAt(j);
13
+ if (x !== y)
14
+ return x < y ? -1 : 1;
15
+ i += x > 0xffff ? 2 : 1;
16
+ j += y > 0xffff ? 2 : 1;
17
+ }
18
+ return i < a.length ? 1 : j < b.length ? -1 : 0;
19
+ }
20
+ //# sourceMappingURL=code-point-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-point-order.js","sourceRoot":"","sources":["../src/code-point-order.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC"}