@superbee/core 0.2.0-pre.41 → 0.2.0-pre.42

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 (264) hide show
  1. package/README.md +50 -9
  2. package/dist/backend.d.ts +17 -1
  3. package/dist/backend.d.ts.map +1 -1
  4. package/dist/backend.js +41 -6
  5. package/dist/backend.js.map +1 -1
  6. package/dist/body-pages.d.ts +20 -0
  7. package/dist/body-pages.d.ts.map +1 -0
  8. package/dist/body-pages.js +56 -0
  9. package/dist/body-pages.js.map +1 -0
  10. package/dist/body-replace-guards.d.ts +29 -3
  11. package/dist/body-replace-guards.d.ts.map +1 -1
  12. package/dist/body-replace-guards.js +112 -19
  13. package/dist/body-replace-guards.js.map +1 -1
  14. package/dist/bounded-yaml.d.ts +28 -0
  15. package/dist/bounded-yaml.d.ts.map +1 -0
  16. package/dist/bounded-yaml.js +182 -0
  17. package/dist/bounded-yaml.js.map +1 -0
  18. package/dist/builtin-recipes/site.d.ts +5 -0
  19. package/dist/builtin-recipes/site.d.ts.map +1 -0
  20. package/dist/builtin-recipes/site.js +83 -0
  21. package/dist/builtin-recipes/site.js.map +1 -0
  22. package/dist/builtin-recipes.d.ts.map +1 -1
  23. package/dist/builtin-recipes.js +22 -0
  24. package/dist/builtin-recipes.js.map +1 -1
  25. package/dist/bundle-health/index.d.ts +2 -2
  26. package/dist/bundle-health/index.d.ts.map +1 -1
  27. package/dist/bundle-health/index.js +1 -1
  28. package/dist/bundle-health/index.js.map +1 -1
  29. package/dist/bundle-health/legacy-page.d.ts +8 -26
  30. package/dist/bundle-health/legacy-page.d.ts.map +1 -1
  31. package/dist/bundle-health/legacy-page.js +10 -35
  32. package/dist/bundle-health/legacy-page.js.map +1 -1
  33. package/dist/bundle-health/report.d.ts +0 -16
  34. package/dist/bundle-health/report.d.ts.map +1 -1
  35. package/dist/bundle-health/report.js +24 -54
  36. package/dist/bundle-health/report.js.map +1 -1
  37. package/dist/bundle-ops.d.ts +4 -1
  38. package/dist/bundle-ops.d.ts.map +1 -1
  39. package/dist/bundle-ops.js +6 -2
  40. package/dist/bundle-ops.js.map +1 -1
  41. package/dist/bundle.d.ts +1 -1
  42. package/dist/bundle.d.ts.map +1 -1
  43. package/dist/bundle.js +1 -1
  44. package/dist/bundle.js.map +1 -1
  45. package/dist/cross-bundle.d.ts +2 -2
  46. package/dist/cross-bundle.js +2 -2
  47. package/dist/document-codec.d.ts +3 -1
  48. package/dist/document-codec.d.ts.map +1 -1
  49. package/dist/document-codec.js +3 -1
  50. package/dist/document-codec.js.map +1 -1
  51. package/dist/document-mutation.d.ts.map +1 -1
  52. package/dist/document-mutation.js +39 -9
  53. package/dist/document-mutation.js.map +1 -1
  54. package/dist/document-scan.d.ts +23 -0
  55. package/dist/document-scan.d.ts.map +1 -0
  56. package/dist/document-scan.js +70 -0
  57. package/dist/document-scan.js.map +1 -0
  58. package/dist/document-transfer.d.ts +110 -4
  59. package/dist/document-transfer.d.ts.map +1 -1
  60. package/dist/document-transfer.js +490 -30
  61. package/dist/document-transfer.js.map +1 -1
  62. package/dist/engine.d.ts +4 -19
  63. package/dist/engine.d.ts.map +1 -1
  64. package/dist/engine.js +7 -47
  65. package/dist/engine.js.map +1 -1
  66. package/dist/errors.d.ts +37 -1
  67. package/dist/errors.d.ts.map +1 -1
  68. package/dist/errors.js +75 -3
  69. package/dist/errors.js.map +1 -1
  70. package/dist/file-journaled-backend.d.ts.map +1 -1
  71. package/dist/file-journaled-backend.js +2 -2
  72. package/dist/file-journaled-backend.js.map +1 -1
  73. package/dist/filesystem-identity.d.ts +9 -0
  74. package/dist/filesystem-identity.d.ts.map +1 -1
  75. package/dist/filesystem-identity.js +186 -64
  76. package/dist/filesystem-identity.js.map +1 -1
  77. package/dist/filesystem-lock.d.ts +2 -2
  78. package/dist/filesystem-lock.d.ts.map +1 -1
  79. package/dist/filesystem-lock.js +81 -14
  80. package/dist/filesystem-lock.js.map +1 -1
  81. package/dist/filesystem-temp-name.d.ts +9 -0
  82. package/dist/filesystem-temp-name.d.ts.map +1 -0
  83. package/dist/filesystem-temp-name.js +20 -0
  84. package/dist/filesystem-temp-name.js.map +1 -0
  85. package/dist/filesystem.d.ts +6 -0
  86. package/dist/filesystem.d.ts.map +1 -1
  87. package/dist/filesystem.js +2 -1
  88. package/dist/filesystem.js.map +1 -1
  89. package/dist/frontmatter-contract.d.ts +14 -0
  90. package/dist/frontmatter-contract.d.ts.map +1 -1
  91. package/dist/frontmatter-contract.js +22 -0
  92. package/dist/frontmatter-contract.js.map +1 -1
  93. package/dist/frontmatter-splitter.d.ts +6 -0
  94. package/dist/frontmatter-splitter.d.ts.map +1 -1
  95. package/dist/frontmatter-splitter.js +8 -0
  96. package/dist/frontmatter-splitter.js.map +1 -1
  97. package/dist/frontmatter.d.ts +8 -1
  98. package/dist/frontmatter.d.ts.map +1 -1
  99. package/dist/frontmatter.js +43 -7
  100. package/dist/frontmatter.js.map +1 -1
  101. package/dist/hosted-client/client.d.ts +22 -5
  102. package/dist/hosted-client/client.d.ts.map +1 -1
  103. package/dist/hosted-client/client.js +57 -10
  104. package/dist/hosted-client/client.js.map +1 -1
  105. package/dist/hosted-client/index.d.ts +1 -0
  106. package/dist/hosted-client/index.d.ts.map +1 -1
  107. package/dist/hosted-client/index.js +1 -0
  108. package/dist/hosted-client/index.js.map +1 -1
  109. package/dist/hosted-client/view-content.d.ts +107 -0
  110. package/dist/hosted-client/view-content.d.ts.map +1 -0
  111. package/dist/hosted-client/view-content.js +155 -0
  112. package/dist/hosted-client/view-content.js.map +1 -0
  113. package/dist/hosted-transport/carrier.d.ts +1 -1
  114. package/dist/hosted-transport/carrier.d.ts.map +1 -1
  115. package/dist/hosted-transport/carrier.js +27 -18
  116. package/dist/hosted-transport/carrier.js.map +1 -1
  117. package/dist/hosted-transport/read-adapter.d.ts +1 -2
  118. package/dist/hosted-transport/read-adapter.d.ts.map +1 -1
  119. package/dist/hosted-transport/read-adapter.js.map +1 -1
  120. package/dist/identity-fold.d.ts +12 -14
  121. package/dist/identity-fold.d.ts.map +1 -1
  122. package/dist/identity-fold.js +17 -15
  123. package/dist/identity-fold.js.map +1 -1
  124. package/dist/index-projection.d.ts +2 -1
  125. package/dist/index-projection.d.ts.map +1 -1
  126. package/dist/index-projection.js +14 -5
  127. package/dist/index-projection.js.map +1 -1
  128. package/dist/index.d.ts +24 -15
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +19 -15
  131. package/dist/index.js.map +1 -1
  132. package/dist/indexeddb-backend.d.ts.map +1 -1
  133. package/dist/indexeddb-backend.js +2 -2
  134. package/dist/indexeddb-backend.js.map +1 -1
  135. package/dist/json-data.d.ts +3 -0
  136. package/dist/json-data.d.ts.map +1 -0
  137. package/dist/json-data.js +19 -0
  138. package/dist/json-data.js.map +1 -0
  139. package/dist/kind-authoring.d.ts +18 -0
  140. package/dist/kind-authoring.d.ts.map +1 -1
  141. package/dist/kind-authoring.js +54 -4
  142. package/dist/kind-authoring.js.map +1 -1
  143. package/dist/kind-coverage.d.ts +1 -0
  144. package/dist/kind-coverage.d.ts.map +1 -1
  145. package/dist/kind-coverage.js +4 -5
  146. package/dist/kind-coverage.js.map +1 -1
  147. package/dist/kind-undeclared-fields.d.ts +70 -0
  148. package/dist/kind-undeclared-fields.d.ts.map +1 -0
  149. package/dist/kind-undeclared-fields.js +120 -0
  150. package/dist/kind-undeclared-fields.js.map +1 -0
  151. package/dist/kinds-load.d.ts.map +1 -1
  152. package/dist/kinds-load.js +4 -1
  153. package/dist/kinds-load.js.map +1 -1
  154. package/dist/kinds.d.ts +9 -0
  155. package/dist/kinds.d.ts.map +1 -1
  156. package/dist/kinds.js +20 -0
  157. package/dist/kinds.js.map +1 -1
  158. package/dist/link-findings.d.ts +130 -0
  159. package/dist/link-findings.d.ts.map +1 -0
  160. package/dist/link-findings.js +272 -0
  161. package/dist/link-findings.js.map +1 -0
  162. package/dist/link-types.d.ts +7 -0
  163. package/dist/link-types.d.ts.map +1 -1
  164. package/dist/link-types.js +17 -2
  165. package/dist/link-types.js.map +1 -1
  166. package/dist/memory-backend.d.ts.map +1 -1
  167. package/dist/memory-backend.js +2 -2
  168. package/dist/memory-backend.js.map +1 -1
  169. package/dist/page.d.ts +3 -7
  170. package/dist/page.d.ts.map +1 -1
  171. package/dist/page.js +3 -7
  172. package/dist/page.js.map +1 -1
  173. package/dist/path-fold.d.ts +29 -16
  174. package/dist/path-fold.d.ts.map +1 -1
  175. package/dist/path-fold.js +30 -17
  176. package/dist/path-fold.js.map +1 -1
  177. package/dist/paths.d.ts +28 -0
  178. package/dist/paths.d.ts.map +1 -1
  179. package/dist/paths.js +82 -1
  180. package/dist/paths.js.map +1 -1
  181. package/dist/platform.d.ts +9 -0
  182. package/dist/platform.d.ts.map +1 -1
  183. package/dist/platform.js.map +1 -1
  184. package/dist/portable-frontmatter.d.ts +6 -0
  185. package/dist/portable-frontmatter.d.ts.map +1 -1
  186. package/dist/portable-frontmatter.js +26 -2
  187. package/dist/portable-frontmatter.js.map +1 -1
  188. package/dist/recipe-lifecycle/install.d.ts +4 -7
  189. package/dist/recipe-lifecycle/install.d.ts.map +1 -1
  190. package/dist/recipe-lifecycle/install.js +3 -20
  191. package/dist/recipe-lifecycle/install.js.map +1 -1
  192. package/dist/recipe-lifecycle/legacy-aliases.d.ts +1 -13
  193. package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -1
  194. package/dist/recipe-lifecycle/legacy-aliases.js +5 -34
  195. package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -1
  196. package/dist/record-overlay/apply.d.ts.map +1 -1
  197. package/dist/record-overlay/apply.js +0 -4
  198. package/dist/record-overlay/apply.js.map +1 -1
  199. package/dist/record-overlay/findings.d.ts.map +1 -1
  200. package/dist/record-overlay/findings.js +4 -1
  201. package/dist/record-overlay/findings.js.map +1 -1
  202. package/dist/record-overlay/plan.js +3 -3
  203. package/dist/record-overlay/plan.js.map +1 -1
  204. package/dist/record-overlay/signal-text.d.ts +9 -2
  205. package/dist/record-overlay/signal-text.d.ts.map +1 -1
  206. package/dist/record-overlay/signal-text.js +21 -11
  207. package/dist/record-overlay/signal-text.js.map +1 -1
  208. package/dist/remote-backend.d.ts +9 -19
  209. package/dist/remote-backend.d.ts.map +1 -1
  210. package/dist/remote-backend.js +17 -5
  211. package/dist/remote-backend.js.map +1 -1
  212. package/dist/remote-operations.d.ts.map +1 -1
  213. package/dist/remote-operations.js +2 -0
  214. package/dist/remote-operations.js.map +1 -1
  215. package/dist/remote-parsers.d.ts +19 -0
  216. package/dist/remote-parsers.d.ts.map +1 -1
  217. package/dist/remote-parsers.js.map +1 -1
  218. package/dist/remote.d.ts +2 -4
  219. package/dist/remote.d.ts.map +1 -1
  220. package/dist/remote.js +2 -3
  221. package/dist/remote.js.map +1 -1
  222. package/dist/reserved-write.d.ts +9 -0
  223. package/dist/reserved-write.d.ts.map +1 -0
  224. package/dist/reserved-write.js +15 -0
  225. package/dist/reserved-write.js.map +1 -0
  226. package/dist/search/backend-source.d.ts +2 -2
  227. package/dist/search/backend-source.d.ts.map +1 -1
  228. package/dist/search/backend-source.js +30 -6
  229. package/dist/search/backend-source.js.map +1 -1
  230. package/dist/search/contract.d.ts +3 -0
  231. package/dist/search/contract.d.ts.map +1 -1
  232. package/dist/search/contract.js.map +1 -1
  233. package/dist/search/search.d.ts.map +1 -1
  234. package/dist/search/search.js +4 -1
  235. package/dist/search/search.js.map +1 -1
  236. package/dist/search/source.d.ts +3 -0
  237. package/dist/search/source.d.ts.map +1 -1
  238. package/dist/site-manifest.d.ts +49 -0
  239. package/dist/site-manifest.d.ts.map +1 -0
  240. package/dist/site-manifest.js +113 -0
  241. package/dist/site-manifest.js.map +1 -0
  242. package/dist/skip-reasons.d.ts +12 -0
  243. package/dist/skip-reasons.d.ts.map +1 -0
  244. package/dist/skip-reasons.js +15 -0
  245. package/dist/skip-reasons.js.map +1 -0
  246. package/dist/source-engine/driver.d.ts +1 -3
  247. package/dist/source-engine/driver.d.ts.map +1 -1
  248. package/dist/source-engine/driver.js +2 -18
  249. package/dist/source-engine/driver.js.map +1 -1
  250. package/dist/source-profiles/index.d.ts +1 -1
  251. package/dist/source-profiles/index.js +1 -1
  252. package/dist/string-identity-agreement.d.ts +1 -1
  253. package/dist/string-identity-agreement.d.ts.map +1 -1
  254. package/dist/string-identity-agreement.js +6 -0
  255. package/dist/string-identity-agreement.js.map +1 -1
  256. package/dist/system-documents.d.ts +13 -0
  257. package/dist/system-documents.d.ts.map +1 -0
  258. package/dist/system-documents.js +44 -0
  259. package/dist/system-documents.js.map +1 -0
  260. package/dist/types.d.ts +7 -0
  261. package/dist/types.d.ts.map +1 -1
  262. package/dist/validation.d.ts +5 -0
  263. package/dist/validation.d.ts.map +1 -1
  264. package/package.json +19 -7
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Link findings: what a document's body links do, and which of them will not register.
3
+ *
4
+ * Core produces each finding once, as a {@link ValidationWarning} with a fixed `message` per code
5
+ * and the facts in `details`; every surface (CLI, MCP, apps) words its own next step from those.
6
+ * The edge rule itself is `links.ts` ({@link resolveConceptId}); this module only reports on it.
7
+ *
8
+ * Codes:
9
+ * - `LINK_NOT_RECOGNIZED`: written like a link to a document but not a graph edge
10
+ * (a `[[wikilink]]`, a target without `.md`, a reserved file, an invalid id).
11
+ * - `LINK_TARGET_ABSENT`: an edge whose target has no document yet (still legal).
12
+ * - `LINK_TYPE_VIOLATION`, `LINK_TYPE_CASE_VARIANT`: an edge whose text is, or nearly is, a
13
+ * declared link type its source or target does not conform to.
14
+ *
15
+ * Pure apart from the caller-supplied target reader, so it stays backend- and browser-neutral.
16
+ */
17
+ import { collectLinkDeclarations, localEdgeQualifiedDeclaration, localEdgeViolation } from "./link-types.js";
18
+ import { extractMarkdownLinkSpans, isExternalHref, maskMarkdownCode, normalizeSegments, resolveConceptId } from "./links.js";
19
+ import { isReservedFile } from "./paths.js";
20
+ import { isQualifiedHref, parseQualifiedKindTarget } from "./qualified-links.js";
21
+ export const LINK_NOT_RECOGNIZED = "LINK_NOT_RECOGNIZED";
22
+ export const LINK_TARGET_ABSENT = "LINK_TARGET_ABSENT";
23
+ export const LINK_TYPE_VIOLATION = "LINK_TYPE_VIOLATION";
24
+ export const LINK_TYPE_CASE_VARIANT = "LINK_TYPE_CASE_VARIANT";
25
+ const NOT_RECOGNIZED_MESSAGES = {
26
+ wikilink: "A [[wikilink]] is plain text, not a link; write a markdown link whose target ends in .md.",
27
+ "missing-md-extension": "This link's target does not end in .md, so it is not a link to a document.",
28
+ "reserved-target": "This link's target is a reserved file (index.md or log.md), which is never a document.",
29
+ "invalid-target": "This link's target is not a valid document id, so it is not a link to a document.",
30
+ };
31
+ const TARGET_ABSENT_MESSAGE = "No document exists at this link's target yet; the link is kept as a forward declaration.";
32
+ const TYPE_VIOLATION_MESSAGE = "This link's text is a declared link type, but its source or target is not the declared kind.";
33
+ const TYPE_QUALIFIED_MESSAGE = "This link's text is declared as a link into another bundle, but it points inside this bundle.";
34
+ const TYPE_CASE_VARIANT_MESSAGE = "This link's text differs only in case from a declared link type.";
35
+ const WIKILINK = /\[\[([^[\]\n]+)\]\]/g;
36
+ const ANY_SCHEME = /^[a-z][a-z0-9+.-]*:/i;
37
+ function docType(doc) {
38
+ return typeof doc?.frontmatter.type === "string" ? doc.frontmatter.type : "";
39
+ }
40
+ /** The path part of an href: anchor and query dropped, trimmed. */
41
+ function hrefPath(href) {
42
+ return (href.split("#")[0] ?? "").split("?")[0]?.trim() ?? "";
43
+ }
44
+ /** Characters a markdown link target cannot carry unescaped, so a suggestion with one would not register either. */
45
+ const UNREGISTRABLE = /[\s()<>[\]]/;
46
+ /**
47
+ * The suggestion for `href` from `fromId`: the href and the document it names, or nothing when it
48
+ * would not register. A relative href that climbs above the bundle root is suggested in its
49
+ * root-absolute form, since the resolver only reaches that document by clamping at the root.
50
+ */
51
+ function suggestion(fromId, href) {
52
+ if (UNREGISTRABLE.test(href))
53
+ return {};
54
+ const suggestedTo = resolveConceptId(fromId, href);
55
+ if (suggestedTo === null)
56
+ return {};
57
+ if (!href.startsWith("/")) {
58
+ const slash = fromId.lastIndexOf("/");
59
+ const fromDir = slash >= 0 ? fromId.slice(0, slash) : "";
60
+ if (normalizeSegments([...fromDir.split("/"), ...hrefPath(href).split("/")])[0] === "..") {
61
+ return { suggestedHref: `/${suggestedTo}.md`, suggestedTo };
62
+ }
63
+ }
64
+ return { suggestedHref: href, suggestedTo };
65
+ }
66
+ /** True for a relative target written without `/`, `./` or `../`. */
67
+ function isBareRelative(path) {
68
+ return !path.startsWith("/") && !path.startsWith("./") && !path.startsWith("../");
69
+ }
70
+ function notRecognized(reason, fields) {
71
+ return {
72
+ code: LINK_NOT_RECOGNIZED,
73
+ message: NOT_RECOGNIZED_MESSAGES[reason],
74
+ field: "body",
75
+ severity: "warning",
76
+ details: { reason, ...fields },
77
+ };
78
+ }
79
+ /** Why a markdown link that {@link resolveConceptId} drops still looks meant for a document, if it does. */
80
+ function classifyUnresolved(fromId, text, href, at) {
81
+ if (isQualifiedHref(href))
82
+ return undefined; // cross-bundle links have their own grammar and lint
83
+ const path = hrefPath(href);
84
+ if (path === "" || isExternalHref(path) || ANY_SCHEME.test(path))
85
+ return undefined;
86
+ if (path.endsWith(".md")) {
87
+ const resolved = path.startsWith("/") ? path.slice(1) : path;
88
+ return notRecognized(isReservedFile(resolved.replace(/^(\.\.?\/)+/, "")) ? "reserved-target" : "invalid-target", { text, href, ...at });
89
+ }
90
+ const last = path.slice(path.lastIndexOf("/") + 1);
91
+ // A last segment with its own extension is an asset link (a PDF, an image), not a near miss.
92
+ if (last === "" || last.includes("."))
93
+ return undefined;
94
+ return notRecognized("missing-md-extension", { text, href, ...at, ...suggestion(fromId, `${path}.md`) });
95
+ }
96
+ function wikilinkFindings(doc) {
97
+ const masked = maskMarkdownCode(doc.body);
98
+ const out = [];
99
+ for (const match of masked.matchAll(WIKILINK)) {
100
+ const start = match.index;
101
+ const end = start + match[0].length;
102
+ const inner = doc.body.slice(start + 2, end - 2);
103
+ const bar = inner.indexOf("|");
104
+ const target = (bar >= 0 ? inner.slice(0, bar) : inner).trim();
105
+ const text = (bar >= 0 ? inner.slice(bar + 1) : inner).trim();
106
+ const path = hrefPath(target).replace(/^\/+/, "");
107
+ out.push(notRecognized("wikilink", {
108
+ text,
109
+ href: target,
110
+ start,
111
+ end,
112
+ ...(path === "" ? {} : suggestion(doc.id, `/${path.endsWith(".md") ? path : `${path}.md`}`)),
113
+ }));
114
+ }
115
+ return out;
116
+ }
117
+ /**
118
+ * A document's registered edges plus the link-shaped text that will not register
119
+ * (`LINK_NOT_RECOGNIZED`), in body order. Pure; reads nothing. Edges are exactly the graph's,
120
+ * including any written inside code; link-shaped text inside code is never reported, since
121
+ * there it is an example rather than an attempt to link.
122
+ */
123
+ export function inspectDocumentLinks(doc) {
124
+ const links = [];
125
+ const findings = [];
126
+ const outsideCode = new Set(extractMarkdownLinkSpans(doc.body, { skipCode: true }).map((span) => span.start));
127
+ for (const span of extractMarkdownLinkSpans(doc.body)) {
128
+ if (span.image)
129
+ continue;
130
+ const to = resolveConceptId(doc.id, span.href);
131
+ if (to !== null) {
132
+ links.push({ from: doc.id, to, text: span.text, href: span.href });
133
+ continue;
134
+ }
135
+ if (!outsideCode.has(span.start))
136
+ continue;
137
+ const finding = classifyUnresolved(doc.id, span.text, span.href, { start: span.start, end: span.end });
138
+ if (finding)
139
+ findings.push(finding);
140
+ }
141
+ findings.push(...wikilinkFindings(doc));
142
+ findings.sort((a, b) => (a.details.start ?? 0) - (b.details.start ?? 0));
143
+ return { links, findings };
144
+ }
145
+ /**
146
+ * The finding for an edge whose target has no document, or undefined when it has one. The link
147
+ * itself stays legal: dangling links are forward declarations.
148
+ */
149
+ export async function linkTargetAbsentFinding(link, readTarget) {
150
+ if ((await readTarget(link.to)) !== undefined)
151
+ return undefined;
152
+ return { code: LINK_TARGET_ABSENT, message: TARGET_ABSENT_MESSAGE, field: "body", severity: "warning", details: { ...link } };
153
+ }
154
+ async function typeFinding(declarations, link, readTarget) {
155
+ if (declarations.size === 0)
156
+ return undefined;
157
+ const { sourceType, ...where } = link;
158
+ const exact = declarations.get(link.text);
159
+ if (exact && exact.length > 0) {
160
+ // Only an exact match needs the target's actual type; a near miss never pays for the read.
161
+ const target = await readTarget(link.to);
162
+ const targetType = target === undefined ? null : docType(target);
163
+ const qualified = localEdgeQualifiedDeclaration(exact, sourceType);
164
+ if (qualified) {
165
+ return {
166
+ code: LINK_TYPE_VIOLATION,
167
+ message: TYPE_QUALIFIED_MESSAGE,
168
+ field: "body",
169
+ severity: "warning",
170
+ details: {
171
+ ...where,
172
+ declaredBy: qualified.governs,
173
+ declaredTarget: qualified.target,
174
+ sourceType,
175
+ targetType,
176
+ targetAlias: parseQualifiedKindTarget(qualified.target).alias,
177
+ },
178
+ };
179
+ }
180
+ const violated = localEdgeViolation(exact, sourceType, targetType ?? undefined);
181
+ if (!violated)
182
+ return undefined;
183
+ return {
184
+ code: LINK_TYPE_VIOLATION,
185
+ message: TYPE_VIOLATION_MESSAGE,
186
+ field: "body",
187
+ severity: "warning",
188
+ details: { ...where, declaredBy: violated.governs, declaredTarget: violated.target, sourceType, targetType },
189
+ };
190
+ }
191
+ const lower = link.text.toLowerCase();
192
+ for (const declaredText of declarations.keys()) {
193
+ if (declaredText.toLowerCase() === lower) {
194
+ return {
195
+ code: LINK_TYPE_CASE_VARIANT,
196
+ message: TYPE_CASE_VARIANT_MESSAGE,
197
+ field: "body",
198
+ severity: "warning",
199
+ details: { ...where, declaredText },
200
+ };
201
+ }
202
+ }
203
+ return undefined;
204
+ }
205
+ /**
206
+ * Type-conformance finding for one local edge. When `text` exactly matches a declared link type,
207
+ * the source and the target's actual kinds are checked against it (`LINK_TYPE_VIOLATION`; a
208
+ * missing target checks the source only). When `text` matches a declared type only
209
+ * case-insensitively, `LINK_TYPE_CASE_VARIANT` names the declared spelling. Untyped text, or a
210
+ * registry with no `links` declarations, yields undefined without reading anything.
211
+ */
212
+ export function linkTypeFinding(registry, link, readTarget) {
213
+ return typeFinding(collectLinkDeclarations(registry), link, readTarget);
214
+ }
215
+ /**
216
+ * Everything {@link inspectDocumentLinks} reports, plus, per registered edge: an absent target
217
+ * (with a root-absolute suggestion for a bare relative href) and, when `registry` is given, link
218
+ * type conformance. Each distinct target is read at most once. A missing-`.md` suggestion is
219
+ * re-pointed at the bundle-root reading when only that one names an existing document.
220
+ */
221
+ export async function documentLinkReport(doc, opts) {
222
+ const { links, findings } = inspectDocumentLinks(doc);
223
+ const cache = new Map();
224
+ const read = (id) => {
225
+ let pending = cache.get(id);
226
+ if (!pending) {
227
+ pending = opts.readTarget(id);
228
+ cache.set(id, pending);
229
+ }
230
+ return pending;
231
+ };
232
+ const exists = async (id) => (await read(id)) !== undefined;
233
+ const rootReading = (path) => (isBareRelative(path) ? resolveConceptId(doc.id, `/${path}`) : null);
234
+ for (const finding of findings) {
235
+ if (finding.code !== LINK_NOT_RECOGNIZED || finding.details.reason !== "missing-md-extension")
236
+ continue;
237
+ const relative = finding.details.suggestedTo;
238
+ if (relative !== undefined && (await exists(relative)))
239
+ continue;
240
+ const path = `${hrefPath(finding.details.href)}.md`;
241
+ const root = rootReading(path);
242
+ if (root !== null && root !== relative && !UNREGISTRABLE.test(path) && (await exists(root))) {
243
+ finding.details.suggestedHref = `/${path}`;
244
+ finding.details.suggestedTo = root;
245
+ }
246
+ }
247
+ const declarations = opts.registry ? collectLinkDeclarations(opts.registry) : new Map();
248
+ const sourceType = docType(doc);
249
+ const spans = extractMarkdownLinkSpans(doc.body).filter((span) => !span.image && resolveConceptId(doc.id, span.href) !== null);
250
+ for (const [index, link] of links.entries()) {
251
+ if (isQualifiedHref(link.href))
252
+ continue; // a malformed okf: href is a cross-bundle finding, not a local edge
253
+ const span = spans[index];
254
+ const where = { start: span.start, end: span.end };
255
+ const absent = await linkTargetAbsentFinding({ to: link.to, href: link.href, text: link.text, ...where }, read);
256
+ if (absent) {
257
+ const path = hrefPath(link.href);
258
+ const root = rootReading(path);
259
+ if (root !== null && root !== link.to && (await exists(root))) {
260
+ absent.details.suggestedHref = `/${path}`;
261
+ absent.details.suggestedTo = root;
262
+ }
263
+ findings.push(absent);
264
+ }
265
+ const typed = await typeFinding(declarations, { sourceType, text: link.text, to: link.to, ...where }, read);
266
+ if (typed)
267
+ findings.push(typed);
268
+ }
269
+ findings.sort((a, b) => (a.details.start ?? 0) - (b.details.start ?? 0));
270
+ return { links, findings };
271
+ }
272
+ //# sourceMappingURL=link-findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-findings.js","sourceRoot":"","sources":["../src/link-findings.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,13 @@ export declare function collectLinkDeclarations(registry: KindRegistry): Map<str
17
17
  * `KindConvention.links` stays raw strings.
18
18
  */
19
19
  export declare function localEdgeQualifiedDeclaration(declared: readonly LinkTypeDeclaration[] | undefined, sourceType: string): LinkTypeDeclaration | null;
20
+ /**
21
+ * A LOCAL edge whose text is a declared type: the declaration it violates (wrong source kind, or a
22
+ * resolved target of another kind), else null. `targetType` undefined means the target has no
23
+ * document, so only the source half is checked; an empty string is an untyped target. The caller
24
+ * checks {@link localEdgeQualifiedDeclaration} first; this compares kinds only.
25
+ */
26
+ export declare function localEdgeViolation(declared: readonly LinkTypeDeclaration[] | undefined, sourceType: string, targetType: string | undefined): LinkTypeDeclaration | null;
20
27
  /**
21
28
  * A qualified edge (`okf://<alias>/...`) whose text is a declared type: the declaration it violates
22
29
  * (wrong source kind, or a target that is local or names another alias), else null. The target's
@@ -1 +1 @@
1
- {"version":3,"file":"link-types.d.ts","sourceRoot":"","sources":["../src/link-types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,mHAAmH;AACnH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAWlG;AAUD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,EACpD,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,IAAI,CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,EACpD,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,GACxB,mBAAmB,GAAG,IAAI,CAQ5B"}
1
+ {"version":3,"file":"link-types.d.ts","sourceRoot":"","sources":["../src/link-types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,mHAAmH;AACnH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAWlG;AAUD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,EACpD,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,IAAI,CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,EACpD,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,mBAAmB,GAAG,IAAI,CAM5B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,EACpD,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,GACxB,mBAAmB,GAAG,IAAI,CAQ5B"}
@@ -1,6 +1,7 @@
1
1
  // Shared typed-edge vocabulary derivation: flattens a loaded `KindRegistry`'s per-kind `links`
2
- // declarations into one `link-type text -> declaring kind(s)` index. Consumed by the CLI's `link`
3
- // (write-time lint on a just-added edge) and `status` (bundle-wide `link_type_violations` sweep),
2
+ // declarations into one `link-type text -> declaring kind(s)` index. Consumed by link findings
3
+ // (`link-findings.ts`, the write-time lint every surface renders) and `status` (bundle-wide
4
+ // `link_type_violations` sweep),
4
5
  // and by recipe evolution's link-type addition check, so every consumer shares ONE derivation
5
6
  // instead of each carrying its own copy (one registry, no parallel logic).
6
7
  import { parseQualifiedKindTarget } from "./qualified-links.js";
@@ -41,6 +42,20 @@ export function localEdgeQualifiedDeclaration(declared, sourceType) {
41
42
  const matched = declarationFor(declared, sourceType);
42
43
  return parseQualifiedKindTarget(matched.target) === null ? null : matched;
43
44
  }
45
+ /**
46
+ * A LOCAL edge whose text is a declared type: the declaration it violates (wrong source kind, or a
47
+ * resolved target of another kind), else null. `targetType` undefined means the target has no
48
+ * document, so only the source half is checked; an empty string is an untyped target. The caller
49
+ * checks {@link localEdgeQualifiedDeclaration} first; this compares kinds only.
50
+ */
51
+ export function localEdgeViolation(declared, sourceType, targetType) {
52
+ if (!declared || declared.length === 0)
53
+ return null;
54
+ const matched = declarationFor(declared, sourceType);
55
+ const sourceOk = declared.some((d) => d.governs === sourceType);
56
+ const targetOk = targetType === undefined || targetType === matched.target;
57
+ return sourceOk && targetOk ? null : matched;
58
+ }
44
59
  /**
45
60
  * A qualified edge (`okf://<alias>/...`) whose text is a declared type: the declaration it violates
46
61
  * (wrong source kind, or a target that is local or names another alias), else null. The target's
@@ -1 +1 @@
1
- {"version":3,"file":"link-types.js","sourceRoot":"","sources":["../src/link-types.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,kGAAkG;AAClG,kGAAkG;AAClG,8FAA8F;AAC9F,2EAA2E;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAShE;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAsB;IAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,SAAS;QAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,QAAwC,EAAE,UAAkB;IAClF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAC3C,QAAoD,EACpD,UAAkB;IAElB,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAoD,EACpD,UAAkB,EAClB,KAAa,EACb,gBAAyB;IAEzB,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;QACxD,CAAC,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"link-types.js","sourceRoot":"","sources":["../src/link-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory-backend.d.ts","sourceRoot":"","sources":["../src/memory-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAA2L,KAAK,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AAM/Q,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAuCpB;;;;GAIG;AACH,qBAAa,aAAc,YAAW,cAAc;;IASlD,IAAI,cAAc,IAAI,cAAc,CAenC;IAYD,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,4FAA4F;IAC5F,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEjD,IAAI,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAkBxC,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOjD,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsCpF,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBpE,MAAM,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAM3C,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAW/C,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IASrF,aAAa,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,OAAO,CAAC;IAgBb,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAatD,SAAS,CACb,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,OAAO,CAAC;IAyBb,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAYvE,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1C,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAKrD"}
1
+ {"version":3,"file":"memory-backend.d.ts","sourceRoot":"","sources":["../src/memory-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAA2L,KAAK,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AAO/Q,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAuCpB;;;;GAIG;AACH,qBAAa,aAAc,YAAW,cAAc;;IASlD,IAAI,cAAc,IAAI,cAAc,CAenC;IAYD,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,4FAA4F;IAC5F,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEjD,IAAI,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAkBxC,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOjD,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsCpF,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBpE,MAAM,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAM3C,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAW/C,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IASrF,aAAa,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,OAAO,CAAC;IAeb,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAatD,SAAS,CACb,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,OAAO,CAAC;IAyBb,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAYvE,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1C,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAKrD"}
@@ -30,6 +30,7 @@ import { resolveContentType } from "./content-type.js";
30
30
  import { readBundleOkfVersion } from "./engine.js";
31
31
  import { MalformedDocumentError, normalizeDocumentBodyForStorage, parseFrontmatter, stringifyFrontmatter, stringifyWithSerializedFrontmatter } from "./frontmatter.js";
32
32
  import { assertSafeBlobKey, assertSafeConceptId, assertSafeReservedDir, assertSafeReservedFilename, compareStorageKeys } from "./paths.js";
33
+ import { assertStorableReservedWrite } from "./reserved-write.js";
33
34
  import { blobVersion, defaultActor, VersionConflict, versionOfBytes } from "./versioning.js";
34
35
  /** An ENOENT-shaped rejection so missing-document handling matches {@link FilesystemBackend}. */
35
36
  function notFound(id) {
@@ -192,8 +193,7 @@ export class MemoryBackend {
192
193
  return { content, version: versionOfBytes(content) };
193
194
  }
194
195
  async writeReserved(dir, name, content, options = {}) {
195
- assertSafeReservedDir(dir);
196
- assertSafeReservedFilename(name);
196
+ assertStorableReservedWrite(dir, name, content);
197
197
  const key = reservedKey(dir, name);
198
198
  const existing = this.reserved.get(key);
199
199
  const current = existing === undefined ? null : versionOfBytes(existing);
@@ -1 +1 @@
1
- {"version":3,"file":"memory-backend.js","sourceRoot":"","sources":["../src/memory-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-backend.js","sourceRoot":"","sources":["../src/memory-backend.ts"],"names":[],"mappings":"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"}
package/dist/page.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * Pure View registry/entry path grammar shared by every producer and consumer.
3
3
  *
4
- * `View` is the ONLY accepted kind name: the legacy `Page` spelling is no longer read
5
- * (the repo's `migrate-legacy-view-names` script renames legacy content in place). Registry ids
4
+ * `View` is the ONLY accepted kind name: the legacy `Page` spelling is no longer read. Registry ids
6
5
  * are concept ids under `views-registry/` (legacy `pages-registry/` LOCATIONS stay recognized;
7
6
  * relocation is a separate open decision); entries are opaque blob keys under
8
7
  * `views/` (legacy `pages/`). Both retain exact, case-preserving nested paths while
@@ -20,8 +19,7 @@ export declare const VIEW_ENTRY_PREFIX = "views/";
20
19
  /**
21
20
  * The kind names the launcher/registry surfaces accept: exactly `View`. Exact, case-sensitive
22
21
  * match. The legacy `Page` name is deliberately NOT here — a Page-typed doc no longer registers
23
- * anywhere (the CLI's `status` legacy_naming finding is the loud diagnostic for leftover stock,
24
- * and `migrate-legacy-view-names` is the remedy).
22
+ * anywhere.
25
23
  */
26
24
  export declare const PAGE_TYPE_NAMES: readonly ["View"];
27
25
  export type PageTypeName = (typeof PAGE_TYPE_NAMES)[number];
@@ -36,9 +34,7 @@ export declare function resolveBridgeCapability(value: unknown): BridgeCapabilit
36
34
  /**
37
35
  * THE one reader of the registry-doc capability FIELD: `access`, and ONLY `access`. The legacy
38
36
  * `bridge` spelling is no longer read — a doc declaring only `bridge` resolves to `undefined`
39
- * here and fails closed to `none` downstream (the `migrate-legacy-view-names` script renames
40
- * existing stock in place; the CLI's `status` legacy_naming finding flags leftover `bridge`
41
- * fields loudly).
37
+ * here and fails closed to `none` downstream.
42
38
  */
43
39
  export declare function declaredAccessValue(frontmatter: Record<string, unknown>): unknown;
44
40
  /** Resolve a registry doc's declared capability: {@link declaredAccessValue} through the fail-closed {@link resolveBridgeCapability} — an absent or unrecognized `access` yields `none`. */
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,wGAAwG;AACxG,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,eAAe,mBAAoB,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEzE,mGAAmG;AACnG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAIjF;AAED,4LAA4L;AAC5L,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAE5F;AAED,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AA4CD,4IAA4I;AAC5I,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAE1D;AAED,uIAAuI;AACvI,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAE1D;AAED,yHAAyH;AACzH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAEzD;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,0HAA0H;AAC1H,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,wGAAwG;AACxG,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D;AAED,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAElE;AAED,8FAA8F;AAC9F,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,IAAI,EAAE,YAAY,CAAC;IACnB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAiB5G"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,wGAAwG;AACxG,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,eAAe,mBAAoB,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEzE,mGAAmG;AACnG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAExE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAIjF;AAED,4LAA4L;AAC5L,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAE5F;AAED,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AA4CD,4IAA4I;AAC5I,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAE1D;AAED,uIAAuI;AACvI,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAE1D;AAED,yHAAyH;AACzH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAEzD;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,0HAA0H;AAC1H,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,wGAAwG;AACxG,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D;AAED,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAElE;AAED,8FAA8F;AAC9F,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,IAAI,EAAE,YAAY,CAAC;IACnB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAiB5G"}
package/dist/page.js CHANGED
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * Pure View registry/entry path grammar shared by every producer and consumer.
3
3
  *
4
- * `View` is the ONLY accepted kind name: the legacy `Page` spelling is no longer read
5
- * (the repo's `migrate-legacy-view-names` script renames legacy content in place). Registry ids
4
+ * `View` is the ONLY accepted kind name: the legacy `Page` spelling is no longer read. Registry ids
6
5
  * are concept ids under `views-registry/` (legacy `pages-registry/` LOCATIONS stay recognized;
7
6
  * relocation is a separate open decision); entries are opaque blob keys under
8
7
  * `views/` (legacy `pages/`). Both retain exact, case-preserving nested paths while
@@ -22,8 +21,7 @@ export const VIEW_ENTRY_PREFIX = "views/";
22
21
  /**
23
22
  * The kind names the launcher/registry surfaces accept: exactly `View`. Exact, case-sensitive
24
23
  * match. The legacy `Page` name is deliberately NOT here — a Page-typed doc no longer registers
25
- * anywhere (the CLI's `status` legacy_naming finding is the loud diagnostic for leftover stock,
26
- * and `migrate-legacy-view-names` is the remedy).
24
+ * anywhere.
27
25
  */
28
26
  export const PAGE_TYPE_NAMES = ["View"];
29
27
  /** One capability resolver shared by registry parsing and the loopback server's security gates. */
@@ -33,9 +31,7 @@ export function resolveBridgeCapability(value) {
33
31
  /**
34
32
  * THE one reader of the registry-doc capability FIELD: `access`, and ONLY `access`. The legacy
35
33
  * `bridge` spelling is no longer read — a doc declaring only `bridge` resolves to `undefined`
36
- * here and fails closed to `none` downstream (the `migrate-legacy-view-names` script renames
37
- * existing stock in place; the CLI's `status` legacy_naming finding flags leftover `bridge`
38
- * fields loudly).
34
+ * here and fails closed to `none` downstream.
39
35
  */
40
36
  export function declaredAccessValue(frontmatter) {
41
37
  // Own-property-gated: an INHERITED field (a crafted prototype, or a polluted
package/dist/page.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,19 @@
1
1
  /**
2
2
  * The one fold for "would these two paths land on the same file?". The portable export's
3
- * collision check uses it here, and hosts that fence writes or gate pushes import it from
4
- * `@superbee/core/path-fold`, so the checks cannot drift apart.
3
+ * collision check uses it here, the filesystem backend's lock keys and spelling checks and the
4
+ * document transfer's collision checks derive from it (`identity-fold.ts`), and hosts that fence
5
+ * writes or gate pushes import it from `@superbee/core/path-fold`, so the checks cannot drift apart.
5
6
  *
6
- * One definition: NFC, then `toLowerCase()`, `toUpperCase()`, `toLowerCase()`, then NFC again.
7
+ * One definition: NFD, then `toLowerCase()`, `toUpperCase()`, `toLowerCase()`, then NFC.
7
8
  *
8
- * - NFC first: macOS filesystems and Git checkouts treat canonically equivalent spellings (`é` and
9
- * `e` + U+0301) as one name.
9
+ * - NFD first: macOS filesystems, ext4 casefold and Git checkouts treat canonically equivalent
10
+ * spellings (`é` and `e` + U+0301) as one name, and APFS, HFS+ and ext4 casefold all decompose
11
+ * before they compare case. Folding the decomposed form keeps every combining mark in the
12
+ * canonical order those filesystems compare in. That matters for the iota subscript (U+0345,
13
+ * and the precomposed Greek letters that carry it): it sorts after the other marks on its
14
+ * base, and its case mapping is a spacing iota, so folding a composed letter would put a
15
+ * following mark after the iota while the decomposing filesystems keep it before. `ᾩ` + U+034D
16
+ * and `ὡ` + U+034D + `ι` are one name on those filesystems and fold together here.
10
17
  * - The uppercase step: case-insensitive filesystems compare through an uppercase table (NTFS's
11
18
  * `$UpCase`), so any character whose uppercase is an ASCII letter meets that letter. `ſ` (U+017F,
12
19
  * long s) uppercases to `S`, so `referenceſ` is `REFERENCES` to Windows; `toLowerCase()` alone
@@ -15,20 +22,26 @@
15
22
  * the same form as its lowercase. `ẞ` (U+1E9E, capital sharp s) is its own uppercase and
16
23
  * lowercases to `ß`, whose uppercase is `SS`; uppercasing first would stop at `ß` while `ß`
17
24
  * itself folds to `ss`. Lowercasing first sends `ẞ`, `ß`, `SS` and `ss` to one `ss`.
18
- * - The trailing NFC: a case mapping can leave a sequence NFC would compose (the uppercase of `ΐ`,
19
- * U+0390, is decomposed), so the result is recomposed and the fold is idempotent.
25
+ * - The trailing NFC: the result is one canonical spelling, so equal folds are equal strings and
26
+ * the fold is idempotent.
20
27
  *
21
28
  * Every code point then meets its own uppercase and lowercase, and `foldPath(foldPath(p))` is
22
- * `foldPath(p)`. The one exception Unicode itself leaves open is the combining iota subscript
23
- * (U+0345, and the precomposed Greek letters that carry it): uppercasing turns it into a spacing
24
- * capital iota at a different place in the canonical order, so a few spellings of it stay apart.
25
- * No filesystem equates those either. Turkish `İ` (U+0130) lowercases to `i` + U+0307 and keeps its
26
- * dot, so it never meets ASCII `i`; that matches every filesystem, none of which applies Turkish
27
- * casing. Folding more than a filesystem does only refuses more, which is the safe direction for a
28
- * fence and for the export's collision check.
29
+ * `foldPath(p)`. The case mapping of the iota subscript still leaves one pair apart: a subscript
30
+ * followed by another mark and a spacing iota followed by that mark. The decomposing filesystems
31
+ * keep that pair apart too. Turkish `İ` (U+0130) lowercases to `i` + U+0307 and keeps its dot, so
32
+ * it never meets ASCII `i`; that matches every filesystem, none of which applies Turkish casing.
33
+ * Folding more than a filesystem does only refuses more, which is the safe direction for a fence,
34
+ * a lock key and the export's collision check.
29
35
  *
30
- * NFKC is deliberately not used. No filesystem applies compatibility folding (fullwidth `r` stays a
31
- * distinct name everywhere), and NFKC would make the export refuse archives that extract cleanly.
36
+ * Compatibility decomposition (NFKD, NFKC) is deliberately not used. No supported filesystem
37
+ * applies it: APFS and HFS+ store and compare canonical decompositions, ext4 casefold builds its
38
+ * tables from canonical decompositions only and skips the compatibility-tagged ones, and NTFS
39
+ * applies no normalization. Fullwidth `r` and circled `①` stay names distinct from `r` and `1`
40
+ * everywhere, and a compatibility fold would make the export refuse archives that extract cleanly.
41
+ *
42
+ * Not covered: case-insensitive HFS+ also ignores some code points inside a name (U+200C, U+200D,
43
+ * U+FEFF, U+206A and their kind), so it joins `a` + U+200D + `b` with `ab`. This fold keeps
44
+ * those apart.
32
45
  *
33
46
  * `/` has no case mapping and no decomposition, so folding a whole path equals folding each segment.
34
47
  * The agreement rows in `string-identity-agreement.ts` pin this definition for every host.
@@ -1 +1 @@
1
- {"version":3,"file":"path-fold.d.ts","sourceRoot":"","sources":["../src/path-fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C"}
1
+ {"version":3,"file":"path-fold.d.ts","sourceRoot":"","sources":["../src/path-fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C"}