@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
package/dist/path-fold.js CHANGED
@@ -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.
@@ -36,6 +49,6 @@
36
49
  * Dependency-free on purpose, so pure modules and browser bundles can import it.
37
50
  */
38
51
  export function foldPath(path) {
39
- return path.normalize("NFC").toLowerCase().toUpperCase().toLowerCase().normalize("NFC");
52
+ return path.normalize("NFD").toLowerCase().toUpperCase().toLowerCase().normalize("NFC");
40
53
  }
41
54
  //# sourceMappingURL=path-fold.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-fold.js","sourceRoot":"","sources":["../src/path-fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC"}
1
+ {"version":3,"file":"path-fold.js","sourceRoot":"","sources":["../src/path-fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC"}
package/dist/paths.d.ts CHANGED
@@ -13,6 +13,12 @@ import type { ConceptId } from "./types.js";
13
13
  export declare const RESERVED_FILENAMES: readonly ["index.md", "log.md"];
14
14
  /** Keep locale ordering, but never let distinct spellings depend on insertion order. */
15
15
  export declare function compareStorageKeys(a: string, b: string): number;
16
+ /**
17
+ * Guard a bundle-relative file path that is neither a concept document nor a blob key (a board's
18
+ * conflicted non-document file): canonical and portable, with no traversal or absolute escape.
19
+ * Which files may be written is the caller's rule; this only keeps the path inside the bundle.
20
+ */
21
+ export declare function assertSafeFilePath(rel: string): void;
16
22
  /** Runtime callers must obey the same finite reserved-name type as TypeScript callers. */
17
23
  export declare function assertSafeReservedFilename(name: unknown): asserts name is typeof RESERVED_FILENAMES[number];
18
24
  /** Normalize any separators to forward slashes and collapse duplicate slashes. */
@@ -22,6 +28,14 @@ export declare function toPosix(p: string): string;
22
28
  * (`index.md` / `log.md`) at ANY directory level.
23
29
  */
24
30
  export declare function isReservedFile(relPath: string): boolean;
31
+ /** True for a name the filesystem walk never lists or descends into: `.git`, temp files, dot-dirs. */
32
+ export declare function isHiddenWalkEntry(name: string): boolean;
33
+ /** True for a file name in the concept-document namespace, case-insensitively, which a blob listing excludes. */
34
+ export declare function hasMarkdownExtension(name: string): boolean;
35
+ /** Where a bundle-relative path sits relative to the filesystem walk. */
36
+ export type WalkPathClass = "hidden" | "markdown" | "other";
37
+ /** Classify a bundle-relative path by the walk's own rules: any hidden segment hides it, then the final segment's extension decides. */
38
+ export declare function classifyWalkPath(relPath: string): WalkPathClass;
25
39
  /**
26
40
  * Concept ID from a bundle-relative markdown file path: normalize separators,
27
41
  * drop a leading `./` or `/`, and strip the trailing `.md`.
@@ -60,6 +74,20 @@ export type NonCanonicalDocumentId = "segment_whitespace" | "format_character" |
60
74
  * while storage keys them as two.
61
75
  */
62
76
  export declare function nonCanonicalDocumentId(id: string): NonCanonicalDocumentId | null;
77
+ /**
78
+ * Refuse a NEW document id outside its canonical spelling (see {@link nonCanonicalDocumentId}).
79
+ * Callers apply this only where a document is about to be created; existing ids stay readable,
80
+ * writable and deletable. `exists` reports whether the suggested spelling is already a document,
81
+ * so the refusal never steers a create onto it.
82
+ */
83
+ export declare function assertCanonicalNewDocumentId(id: ConceptId, exists?: (candidate: ConceptId) => boolean): void;
84
+ /**
85
+ * Clean `text` toward the canonical spelling: NFC, no format characters except interior joiners,
86
+ * and no whitespace or format character at a segment edge. Canonical text is returned unchanged.
87
+ */
88
+ export declare function canonicalizeIdText(text: string): string;
89
+ /** A canonical, safe spelling of `id`, or undefined when cleaning it leaves no usable id. */
90
+ export declare function suggestCanonicalDocumentId(id: string): string | undefined;
63
91
  /**
64
92
  * Guard a blob key before it is joined onto the bundle root for a filesystem read or
65
93
  * write. Same traversal/absolute-escape shape as {@link assertSafeConceptId}, PLUS
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,iCAAkC,CAAC;AAElE,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAS/D;AAYD,0FAA0F;AAC1F,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAI3G;AAED,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAO5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAGvD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAWvD;AAED,wGAAwG;AACxG,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAK3F;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAMhF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAgBnD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAKvD;AAED,2IAA2I;AAC3I,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,iCAAkC,CAAC;AAElE,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAS/D;AAYD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQpD;AAID,0FAA0F;AAC1F,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAI3G;AAED,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,sGAAsG;AACtG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,iHAAiH;AACjH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5D,wIAAwI;AACxI,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAI/D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAO5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAGvD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAWvD;AAED,wGAAwG;AACxG,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAK3F;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAMhF;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAqB,GAAG,IAAI,CAKzH;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMvD;AAcD,6FAA6F;AAC7F,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAgBnD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAKvD;AAED,2IAA2I;AAC3I,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD"}
package/dist/paths.js CHANGED
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * Everything here is pure and dependency-free, hence directly unit-testable.
10
10
  */
11
- import { InvalidInputError } from "./errors.js";
11
+ import { InvalidInputError, NonCanonicalDocumentIdError } from "./errors.js";
12
12
  /** The two OKF reserved filenames, valid at any directory level (§3.1). */
13
13
  export const RESERVED_FILENAMES = ["index.md", "log.md"];
14
14
  /** Keep locale ordering, but never let distinct spellings depend on insertion order. */
@@ -33,6 +33,23 @@ function assertPortablePath(value, label) {
33
33
  throw new InvalidInputError(`${label} must be canonical and bundle-relative.`);
34
34
  }
35
35
  }
36
+ /**
37
+ * Guard a bundle-relative file path that is neither a concept document nor a blob key (a board's
38
+ * conflicted non-document file): canonical and portable, with no traversal or absolute escape.
39
+ * Which files may be written is the caller's rule; this only keeps the path inside the bundle.
40
+ */
41
+ export function assertSafeFilePath(rel) {
42
+ if (typeof rel !== "string" || rel.trim() === "")
43
+ throw new InvalidInputError("File path must be a non-empty string.");
44
+ assertPortablePath(rel, "File path");
45
+ // Never a repository's metadata, a private-state root, or a reserved OKF file, whatever the case.
46
+ if (rel.split("/").some((segment) => UNWRITABLE_FILE_SEGMENTS.has(segment.toLowerCase()))) {
47
+ throw new InvalidInputError("File path must not enter .git or a private-state folder.");
48
+ }
49
+ if (isReservedFile(rel.toLowerCase()))
50
+ throw new InvalidInputError("File path must not name a reserved OKF file.");
51
+ }
52
+ const UNWRITABLE_FILE_SEGMENTS = new Set([".git", ".superbee-state", ".agentstate"]);
36
53
  /** Runtime callers must obey the same finite reserved-name type as TypeScript callers. */
37
54
  export function assertSafeReservedFilename(name) {
38
55
  if (!RESERVED_FILENAMES.includes(name)) {
@@ -51,6 +68,21 @@ export function isReservedFile(relPath) {
51
68
  const base = toPosix(relPath).split("/").pop() ?? "";
52
69
  return RESERVED_FILENAMES.includes(base);
53
70
  }
71
+ /** True for a name the filesystem walk never lists or descends into: `.git`, temp files, dot-dirs. */
72
+ export function isHiddenWalkEntry(name) {
73
+ return name.startsWith(".");
74
+ }
75
+ /** True for a file name in the concept-document namespace, case-insensitively, which a blob listing excludes. */
76
+ export function hasMarkdownExtension(name) {
77
+ return name.toLowerCase().endsWith(".md");
78
+ }
79
+ /** Classify a bundle-relative path by the walk's own rules: any hidden segment hides it, then the final segment's extension decides. */
80
+ export function classifyWalkPath(relPath) {
81
+ const segments = toPosix(relPath).split("/").filter((segment) => segment !== "");
82
+ if (segments.some(isHiddenWalkEntry))
83
+ return "hidden";
84
+ return hasMarkdownExtension(segments.at(-1) ?? "") ? "markdown" : "other";
85
+ }
54
86
  /**
55
87
  * Concept ID from a bundle-relative markdown file path: normalize separators,
56
88
  * drop a leading `./` or `/`, and strip the trailing `.md`.
@@ -117,6 +149,55 @@ export function nonCanonicalDocumentId(id) {
117
149
  return "not_nfc";
118
150
  return null;
119
151
  }
152
+ /**
153
+ * Refuse a NEW document id outside its canonical spelling (see {@link nonCanonicalDocumentId}).
154
+ * Callers apply this only where a document is about to be created; existing ids stay readable,
155
+ * writable and deletable. `exists` reports whether the suggested spelling is already a document,
156
+ * so the refusal never steers a create onto it.
157
+ */
158
+ export function assertCanonicalNewDocumentId(id, exists = () => false) {
159
+ const why = nonCanonicalDocumentId(id);
160
+ if (why === null)
161
+ return;
162
+ const suggested = suggestCanonicalDocumentId(id);
163
+ throw new NonCanonicalDocumentIdError(id, why, suggested === undefined ? undefined : { id: suggested, exists: exists(suggested) });
164
+ }
165
+ /**
166
+ * Clean `text` toward the canonical spelling: NFC, no format characters except interior joiners,
167
+ * and no whitespace or format character at a segment edge. Canonical text is returned unchanged.
168
+ */
169
+ export function canonicalizeIdText(text) {
170
+ return text
171
+ .normalize("NFC")
172
+ .split("/")
173
+ .map((segment) => trimIdEdge(trimIdEdge(segment).replace(/(?![\u200c\u200d])\p{Cf}/gu, "")))
174
+ .join("/");
175
+ }
176
+ const ID_EDGE_CHAR = /^[\s\p{Cf}]$/u;
177
+ /** Trim whitespace and format characters from both ends in linear time (no backtracking regex). */
178
+ function trimIdEdge(segment) {
179
+ const chars = Array.from(segment);
180
+ let start = 0;
181
+ let end = chars.length;
182
+ while (start < end && ID_EDGE_CHAR.test(chars[start]))
183
+ start += 1;
184
+ while (end > start && ID_EDGE_CHAR.test(chars[end - 1]))
185
+ end -= 1;
186
+ return chars.slice(start, end).join("");
187
+ }
188
+ /** A canonical, safe spelling of `id`, or undefined when cleaning it leaves no usable id. */
189
+ export function suggestCanonicalDocumentId(id) {
190
+ const candidate = canonicalizeIdText(id);
191
+ if (candidate === id || nonCanonicalDocumentId(candidate) !== null)
192
+ return undefined;
193
+ try {
194
+ assertSafeConceptId(candidate);
195
+ }
196
+ catch {
197
+ return undefined;
198
+ }
199
+ return isReservedFile(pathFromConceptId(candidate)) ? undefined : candidate;
200
+ }
120
201
  /**
121
202
  * Guard a blob key before it is joined onto the bundle root for a filesystem read or
122
203
  * write. Same traversal/absolute-escape shape as {@link assertSafeConceptId}, PLUS
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE7E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC;AAElE,wFAAwF;AACxF,MAAM,UAAU,kBAAkB,CAAC,CAAS,EAAE,CAAS;IACrD,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AACpC,CAAC;AAED,yFAAyF;AACzF,SAAS,kBAAkB,CAAC,KAAa,EAAE,KAAa;IACtD,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,iBAAiB,CAAC,GAAG,KAAK,0DAA0D,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;QACtH,MAAM,IAAI,iBAAiB,CAAC,GAAG,KAAK,yCAAyC,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,iBAAiB,CAAC,uCAAuC,CAAC,CAAC;IACvH,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACrC,kGAAkG;IAClG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;QAC1F,MAAM,IAAI,iBAAiB,CAAC,0DAA0D,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,8CAA8C,CAAC,CAAC;AACrH,CAAC;AAED,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC;AAE1G,0FAA0F;AAC1F,MAAM,UAAU,0BAA0B,CAAC,IAAa;IACtD,IAAI,CAAE,kBAAyC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,iBAAiB,CAAC,+CAA+C,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACrD,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAKD,wIAAwI;AACxI,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;IACjF,IAAI,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;SAC1B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,GAAG,CAAC;SACpC,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAa;IAC7C,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE,KAAK,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAa;IAC/C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,iBAAiB,CAAC,wCAAwC,CAAC,CAAC;IACxE,CAAC;IACD,kBAAkB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,iBAAiB,CACzB,qEAAqE,EAAE,mDAAmD,CAC3H,CAAC;IACJ,CAAC;AACH,CAAC;AAKD,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAC1C,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAU;IAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,oBAAoB,CAAC;IACxF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACvH,IAAI,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,EAAa,EAAE,SAA4C,GAAG,EAAE,CAAC,KAAK;IACjH,MAAM,GAAG,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IACzB,MAAM,SAAS,GAAG,0BAA0B,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,IAAI,2BAA2B,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACrI,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,SAAS,CAAC,KAAK,CAAC;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC,CAAC;SAC3F,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,YAAY,GAAG,eAAe,CAAC;AAErC,mGAAmG;AACnG,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,OAAO,KAAK,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IACnE,OAAO,GAAG,GAAG,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;QAAE,GAAG,IAAI,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,0BAA0B,CAAC,EAAU;IACnD,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,SAAS,KAAK,EAAE,IAAI,sBAAsB,CAAC,SAAS,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACrF,IAAI,CAAC;QACH,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,iBAAiB,CAAC,sCAAsC,CAAC,CAAC;IACtE,CAAC;IACD,kBAAkB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,iBAAiB,CAAC,qDAAqD,GAAG,IAAI,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,iBAAiB,CACzB,aAAa,GAAG,uEAAuE;YACrF,qFAAqF;YACrF,UAAU,CACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,iBAAiB,CAAC,2CAA2C,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,GAAG,KAAK,EAAE;QAAE,kBAAkB,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;AACrE,CAAC;AAED,2IAA2I;AAC3I,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,GAAG,IAAI,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC"}
@@ -50,6 +50,7 @@
50
50
  * This module carries types and pure helpers only: no behaviour, no Node builtins, so it
51
51
  * bundles for the browser (see `test/browser-bundle.test.ts`).
52
52
  */
53
+ import type { MalformedDocumentCode } from "./frontmatter-contract.js";
53
54
  import type { ConceptId, Frontmatter, OkfDocument, QueryFilter, Version } from "./types.js";
54
55
  import type { ValidationWarning } from "./validation.js";
55
56
  /** Which execution implementation answers a runtime's verbs. */
@@ -135,6 +136,12 @@ export interface RefusedDeletions {
135
136
  /** The heads digest of the listing that was refused. */
136
137
  digest: string;
137
138
  }
139
+ /** A document the authority serves whose frontmatter the working copy cannot store. */
140
+ export interface UnstorableDocument {
141
+ id: ConceptId;
142
+ code: MalformedDocumentCode;
143
+ message: string;
144
+ }
138
145
  /** How the runtime's last sync ended; see {@link PlatformSyncStatus.lastSync}. */
139
146
  export interface PlatformSyncOutcome {
140
147
  /** False when the sync rejected (a carrier failure, or an authority answer the runtime could not apply). */
@@ -143,6 +150,8 @@ export interface PlatformSyncOutcome {
143
150
  error?: string;
144
151
  /** The deletions the last completed pull refused; present until a pull applies or clears them. */
145
152
  refusedDeletions?: RefusedDeletions;
153
+ /** The documents the last bootstrap or completed pull left out; present until a pull can store them. */
154
+ unstorable?: UnstorableDocument[];
146
155
  }
147
156
  export interface PlatformSyncOptions {
148
157
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAkLH,sDAAsD;AACtD,MAAM,UAAU,eAAe,CAAC,UAAsB;IACpD,QAAQ,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,KAAK,kBAAkB;YACrB,OAAO,QAAQ,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,SAAS,CAAC;QACnB,KAAK,gBAAgB;YACnB,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,iBAAiB,CAAC,UAAsB;IACtD,OAAO,UAAU,CAAC,KAAK,KAAK,kBAAkB,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,eAAwB,OAAO;IAC/E,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,IAAoB,EAAE,SAAiB;IACpF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAoB,EAAE,MAAsB,EAAE,SAAiB;IAC7G,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACvE,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,YAAoB,EAAE,UAAkB,EAAE,MAAc;IACzG,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,UAAU,GAAG,YAAY,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;IACnO,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IACzF,IAAI,UAAU,GAAG,CAAC,GAAG,YAAY;QAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACjG,OAAO,SAAS,CAAC;AACnB,CAAC;AACD,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,OAAyB,EAAE,QAAsC;IAC9F,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;AACxJ,CAAC"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AA4LH,sDAAsD;AACtD,MAAM,UAAU,eAAe,CAAC,UAAsB;IACpD,QAAQ,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,KAAK,kBAAkB;YACrB,OAAO,QAAQ,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,SAAS,CAAC;QACnB,KAAK,gBAAgB;YACnB,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,iBAAiB,CAAC,UAAsB;IACtD,OAAO,UAAU,CAAC,KAAK,KAAK,kBAAkB,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,eAAwB,OAAO;IAC/E,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,IAAoB,EAAE,SAAiB;IACpF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAoB,EAAE,MAAsB,EAAE,SAAiB;IAC7G,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACvE,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,YAAoB,EAAE,UAAkB,EAAE,MAAc;IACzG,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,UAAU,GAAG,YAAY,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;IACnO,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IACzF,IAAI,UAAU,GAAG,CAAC,GAAG,YAAY;QAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACjG,OAAO,SAAS,CAAC;AACnB,CAAC;AACD,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,OAAyB,EAAE,QAAsC;IAC9F,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;AACxJ,CAAC"}
@@ -5,4 +5,10 @@ import type { Frontmatter } from "./types.js";
5
5
  * constructs a Node Buffer while parsing even a string, so it cannot execute in a Worker runtime.
6
6
  */
7
7
  export declare function parseLeadingFrontmatter(raw: string, context?: string): Frontmatter;
8
+ /**
9
+ * Refuse markdown whose leading frontmatter a frontmatter limit refuses, before it is stored as
10
+ * is. Throws {@link FrontmatterRefusedError} carrying the limit's code. Invalid YAML is not refused
11
+ * here: readers of reserved files already treat it as an unreadable marker and fall back.
12
+ */
13
+ export declare function assertStorableFrontmatter(raw: string): void;
8
14
  //# sourceMappingURL=portable-frontmatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"portable-frontmatter.d.ts","sourceRoot":"","sources":["../src/portable-frontmatter.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAM1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAelF"}
1
+ {"version":3,"file":"portable-frontmatter.d.ts","sourceRoot":"","sources":["../src/portable-frontmatter.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAO1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAelF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAa3D"}
@@ -1,6 +1,8 @@
1
1
  /** Browser/Worker-safe parsing for the bundle-root OKF edition marker. */
2
- import yaml from "js-yaml";
2
+ import { loadBoundedYaml } from "./bounded-yaml.js";
3
+ import { FrontmatterRefusedError } from "./errors.js";
3
4
  import { MalformedDocumentError } from "./frontmatter-contract.js";
5
+ import { parseFrontmatter } from "./frontmatter.js";
4
6
  import { splitLeadingFrontmatter } from "./frontmatter-splitter.js";
5
7
  /**
6
8
  * Parse only a leading YAML frontmatter block. This deliberately avoids gray-matter: that package
@@ -11,7 +13,7 @@ export function parseLeadingFrontmatter(raw, context) {
11
13
  if (!("yamlSource" in split))
12
14
  return {};
13
15
  try {
14
- const parsed = yaml.safeLoad(split.yamlSource);
16
+ const parsed = loadBoundedYaml(split.yamlSource);
15
17
  if (parsed === undefined || parsed === null)
16
18
  return {};
17
19
  if (typeof parsed !== "object" || Array.isArray(parsed)) {
@@ -25,4 +27,26 @@ export function parseLeadingFrontmatter(raw, context) {
25
27
  throw new MalformedDocumentError(context, error);
26
28
  }
27
29
  }
30
+ /**
31
+ * Refuse markdown whose leading frontmatter a frontmatter limit refuses, before it is stored as
32
+ * is. Throws {@link FrontmatterRefusedError} carrying the limit's code. Invalid YAML is not refused
33
+ * here: readers of reserved files already treat it as an unreadable marker and fall back.
34
+ */
35
+ export function assertStorableFrontmatter(raw) {
36
+ try {
37
+ parseLeadingFrontmatter(raw);
38
+ // Reserved files are also read with the document schema, which keeps timestamps as strings
39
+ // and so measures them differently; refuse whatever either reader would refuse.
40
+ const split = splitLeadingFrontmatter(raw);
41
+ if ("yamlSource" in split)
42
+ parseFrontmatter(split.yamlSource);
43
+ }
44
+ catch (error) {
45
+ if (error instanceof MalformedDocumentError && error.code !== "FRONTMATTER_MALFORMED") {
46
+ throw new FrontmatterRefusedError(error.code, error.detail);
47
+ }
48
+ if (!(error instanceof MalformedDocumentError))
49
+ throw error;
50
+ }
51
+ }
28
52
  //# sourceMappingURL=portable-frontmatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"portable-frontmatter.js","sourceRoot":"","sources":["../src/portable-frontmatter.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW,EAAE,OAAgB;IACnE,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC;QAAE,OAAO,EAAiB,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAiB,CAAC;QACtE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,MAAqB,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,sBAAsB;YAAE,MAAM,KAAK,CAAC;QACzD,MAAM,IAAI,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"portable-frontmatter.js","sourceRoot":"","sources":["../src/portable-frontmatter.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW,EAAE,OAAgB;IACnE,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC;QAAE,OAAO,EAAiB,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAiB,CAAC;QACtE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,MAAqB,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,sBAAsB;YAAE,MAAM,KAAK,CAAC;QACzD,MAAM,IAAI,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,IAAI,CAAC;QACH,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC7B,2FAA2F;QAC3F,gFAAgF;QAChF,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,YAAY,IAAI,KAAK;YAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,sBAAsB,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;YACtF,MAAM,IAAI,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,YAAY,sBAAsB,CAAC;YAAE,MAAM,KAAK,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -3,8 +3,8 @@ import type { Bundle, ConceptId, OkfDocument } from "../types.js";
3
3
  import type { ValidationWarning } from "../validation.js";
4
4
  import { type RecipeStampIdentity, type RecipeStampState, type ConventionStampState } from "./stamp.js";
5
5
  /** Per-doc apply outcome: `changed: false` means the doc already existed (idempotent no-op), or —
6
- * when `legacy_present`/`migration_required` names a doc — that a legacy-LOCATED counterpart
7
- * already occupies the artifact's slot (working, or awaiting migration, respectively). */
6
+ * when `legacy_present` names a doc — that a legacy-LOCATED counterpart already occupies the
7
+ * artifact's slot. */
8
8
  export interface RecipeDocResult {
9
9
  id: ConceptId;
10
10
  changed: boolean;
@@ -12,10 +12,6 @@ export interface RecipeDocResult {
12
12
  source_differs?: true;
13
13
  /** Set when creation was skipped because this existing legacy-located doc satisfies the artifact. */
14
14
  legacy_present?: ConceptId;
15
- /** NON-SUCCESS skip: the counterpart still carries the RETIRED legacy names, so it
16
- * no longer works at runtime — the bundle needs the migration script before this artifact is
17
- * genuinely satisfied. Named alongside a receipt-level warning carrying the remedy. */
18
- migration_required?: ConceptId;
19
15
  }
20
16
  export interface RecipePageResult {
21
17
  registry_id: ConceptId;
@@ -28,7 +24,8 @@ export interface RecipePageResult {
28
24
  registry: ConceptId;
29
25
  entry: string;
30
26
  };
31
- /** See {@link RecipeDocResult.migration_required} — the page-pair variant. */
27
+ /** NON-SUCCESS skip: the legacy-located counterpart still carries the RETIRED names, so it no
28
+ * longer registers at runtime. Named alongside a receipt-level warning carrying the remedy. */
32
29
  migration_required?: {
33
30
  registry: ConceptId;
34
31
  entry: string;
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/recipe-lifecycle/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/recipe-lifecycle/install.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  // Recipe installation: create-only, expect-absent CAS per artifact through the shared document
2
2
  // mutation boundary, so a built-in and an external recipe install through the same function and
3
3
  // an existing document is never overwritten. Storage-neutral: no Node globals or builtins.
4
+ import { LEGACY_PAGE_MIGRATION_HELP } from "../bundle-health/legacy-page.js";
4
5
  import { query, readBlob, readBundleOkfVersion, readDoc, writeBlob } from "../bundle-ops.js";
5
6
  import { checkConnectorAgainstKinds, CONNECTORS_PREFIX } from "../connectors.js";
6
7
  import { resolveContentType } from "../content-type.js";
@@ -15,7 +16,7 @@ import { RECIPE_PROGRESS_STATUS_TOKEN } from "../recipes.js";
15
16
  import { VersionConflict } from "../versioning.js";
16
17
  import { ConnectorTargetUnsatisfied, RecipeAssetConflict, RecipeEditionChanged, RecipeInputError } from "./errors.js";
17
18
  import { RECIPE_STAMP_KEY, normalizeDefinitionBody, recipeStampIdentity, recipeStampState, conventionStampState, withRecipeStamp, worstRecipeStampState, } from "./stamp.js";
18
- import { findLegacyViewConvention, governsKind, legacyEntryAlias, legacyRegistryAlias, VIEW_KIND_NAME, } from "./legacy-aliases.js";
19
+ import { legacyEntryAlias, legacyRegistryAlias } from "./legacy-aliases.js";
19
20
  function materializeRecipeBody(body, storageField) {
20
21
  return body.replaceAll(RECIPE_PROGRESS_STATUS_TOKEN, storageField);
21
22
  }
@@ -185,35 +186,17 @@ export async function installRecipe(bundle, recipe, options = {}) {
185
186
  await assertConnectorTargets(bundle, recipe, okfVersion);
186
187
  await assertPortableTargetsCompatible(bundle, recipe, okfVersion);
187
188
  // Legacy-alias probes (see the module comment above the alias helpers): resolved lazily, once.
188
- const legacyConventionId = recipe.docs.some((d) => governsKind(d, VIEW_KIND_NAME))
189
- ? await findLegacyViewConvention(bundle)
190
- : null;
191
189
  let legacyRegistryDocs = null;
192
190
  const legacyRegistryDoc = async (id) => {
193
191
  legacyRegistryDocs ??= new Map((await query(bundle, { prefix: PAGE_REGISTRY_PREFIX })).map((doc) => [doc.id, doc]));
194
192
  return legacyRegistryDocs.get(id);
195
193
  };
196
194
  const migrationWarnings = [];
197
- const migrationHelp = "run `node scripts/migrate-legacy-view-names.mjs --dir <bundle-root>` from the Superbee repository root to migrate it in place";
198
195
  const docs = [];
199
196
  const stamps = [];
200
197
  const restampIds = [];
201
198
  const foreignIds = [];
202
199
  for (const d of recipe.docs) {
203
- if (legacyConventionId !== null && governsKind(d, VIEW_KIND_NAME)) {
204
- // A convention still governing the RETIRED legacy name is unmigrated state: skip creating
205
- // the current-name convention (never two conventions for one kind), but as an explicit
206
- // NON-SUCCESS — not a satisfied-looking skip.
207
- docs.push({ id: d.id, changed: false, migration_required: legacyConventionId });
208
- stamps.push("missing");
209
- migrationWarnings.push({
210
- code: "MIGRATION_REQUIRED",
211
- message: `'${legacyConventionId}' still governs the retired legacy 'Page' kind name — ` +
212
- `'${d.id}' was not installed; ${migrationHelp}`,
213
- severity: "warning",
214
- });
215
- continue;
216
- }
217
200
  // The stamp lands in the convention's own create: it exists exactly when the convention does.
218
201
  let doc = d;
219
202
  let changed = true;
@@ -322,7 +305,7 @@ export async function installRecipe(bundle, recipe, options = {}) {
322
305
  migrationWarnings.push({
323
306
  code: "MIGRATION_REQUIRED",
324
307
  message: `'${registryAlias}' holds this artifact's slot but still carries the retired legacy names ` +
325
- `and does not register — '${page.registry.id}' was not installed; ${migrationHelp}`,
308
+ `and does not register — '${page.registry.id}' was not installed; ${LEGACY_PAGE_MIGRATION_HELP}`,
326
309
  severity: "warning",
327
310
  });
328
311
  }