@superbee/core 0.2.0-pre.3 → 0.2.0-pre.31

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 (538) hide show
  1. package/README.md +1084 -0
  2. package/dist/artifact-contract.d.ts +90 -0
  3. package/dist/artifact-contract.d.ts.map +1 -0
  4. package/dist/artifact-contract.js +205 -0
  5. package/dist/artifact-contract.js.map +1 -0
  6. package/dist/backend.d.ts +19 -1
  7. package/dist/backend.d.ts.map +1 -1
  8. package/dist/backend.js +83 -36
  9. package/dist/backend.js.map +1 -1
  10. package/dist/blob-contract.d.ts +80 -0
  11. package/dist/blob-contract.d.ts.map +1 -0
  12. package/dist/blob-contract.js +131 -0
  13. package/dist/blob-contract.js.map +1 -0
  14. package/dist/blob-journal.d.ts +302 -0
  15. package/dist/blob-journal.d.ts.map +1 -0
  16. package/dist/blob-journal.js +540 -0
  17. package/dist/blob-journal.js.map +1 -0
  18. package/dist/body-replace-guards.d.ts +52 -0
  19. package/dist/body-replace-guards.d.ts.map +1 -0
  20. package/dist/body-replace-guards.js +176 -0
  21. package/dist/body-replace-guards.js.map +1 -0
  22. package/dist/builtin-recipes/content.d.ts +93 -0
  23. package/dist/builtin-recipes/content.d.ts.map +1 -0
  24. package/dist/builtin-recipes/content.js +288 -0
  25. package/dist/builtin-recipes/content.js.map +1 -0
  26. package/dist/builtin-recipes.d.ts +10 -0
  27. package/dist/builtin-recipes.d.ts.map +1 -0
  28. package/dist/builtin-recipes.js +97 -0
  29. package/dist/builtin-recipes.js.map +1 -0
  30. package/dist/bundle-health/index.d.ts +14 -0
  31. package/dist/bundle-health/index.d.ts.map +1 -0
  32. package/dist/bundle-health/index.js +12 -0
  33. package/dist/bundle-health/index.js.map +1 -0
  34. package/dist/bundle-health/kind-findings.d.ts +44 -0
  35. package/dist/bundle-health/kind-findings.d.ts.map +1 -0
  36. package/dist/bundle-health/kind-findings.js +68 -0
  37. package/dist/bundle-health/kind-findings.js.map +1 -0
  38. package/dist/bundle-health/legacy-page.d.ts +39 -0
  39. package/dist/bundle-health/legacy-page.d.ts.map +1 -0
  40. package/dist/bundle-health/legacy-page.js +50 -0
  41. package/dist/bundle-health/legacy-page.js.map +1 -0
  42. package/dist/bundle-health/report.d.ts +202 -0
  43. package/dist/bundle-health/report.d.ts.map +1 -0
  44. package/dist/bundle-health/report.js +438 -0
  45. package/dist/bundle-health/report.js.map +1 -0
  46. package/dist/bundle-ops.d.ts +1 -1
  47. package/dist/bundle-ops.d.ts.map +1 -1
  48. package/dist/bundle-ops.js +2 -2
  49. package/dist/bundle-ops.js.map +1 -1
  50. package/dist/bundle.d.ts +2 -1
  51. package/dist/bundle.d.ts.map +1 -1
  52. package/dist/bundle.js +3 -3
  53. package/dist/bundle.js.map +1 -1
  54. package/dist/code-point-order.d.ts +8 -0
  55. package/dist/code-point-order.d.ts.map +1 -0
  56. package/dist/code-point-order.js +20 -0
  57. package/dist/code-point-order.js.map +1 -0
  58. package/dist/connector-request.d.ts +87 -0
  59. package/dist/connector-request.d.ts.map +1 -0
  60. package/dist/connector-request.js +370 -0
  61. package/dist/connector-request.js.map +1 -0
  62. package/dist/connectors.d.ts +262 -0
  63. package/dist/connectors.d.ts.map +1 -0
  64. package/dist/connectors.js +1179 -0
  65. package/dist/connectors.js.map +1 -0
  66. package/dist/cross-bundle.d.ts +135 -0
  67. package/dist/cross-bundle.d.ts.map +1 -0
  68. package/dist/cross-bundle.js +186 -0
  69. package/dist/cross-bundle.js.map +1 -0
  70. package/dist/dependencies.d.ts +94 -0
  71. package/dist/dependencies.d.ts.map +1 -0
  72. package/dist/dependencies.js +180 -0
  73. package/dist/dependencies.js.map +1 -0
  74. package/dist/document-codec.d.ts +5 -1
  75. package/dist/document-codec.d.ts.map +1 -1
  76. package/dist/document-codec.js +7 -4
  77. package/dist/document-codec.js.map +1 -1
  78. package/dist/document-field-actions.d.ts +31 -1
  79. package/dist/document-field-actions.d.ts.map +1 -1
  80. package/dist/document-field-actions.js +137 -34
  81. package/dist/document-field-actions.js.map +1 -1
  82. package/dist/document-mutation.d.ts +22 -10
  83. package/dist/document-mutation.d.ts.map +1 -1
  84. package/dist/document-mutation.js +61 -27
  85. package/dist/document-mutation.js.map +1 -1
  86. package/dist/document-write-policy.d.ts.map +1 -1
  87. package/dist/document-write-policy.js +4 -2
  88. package/dist/document-write-policy.js.map +1 -1
  89. package/dist/domain-model.d.ts +73 -0
  90. package/dist/domain-model.d.ts.map +1 -0
  91. package/dist/domain-model.js +169 -0
  92. package/dist/domain-model.js.map +1 -0
  93. package/dist/engine.d.ts +16 -8
  94. package/dist/engine.d.ts.map +1 -1
  95. package/dist/engine.js +42 -4
  96. package/dist/engine.js.map +1 -1
  97. package/dist/file-journaled-backend-internal.d.ts +21 -0
  98. package/dist/file-journaled-backend-internal.d.ts.map +1 -0
  99. package/dist/file-journaled-backend-internal.js +12 -0
  100. package/dist/file-journaled-backend-internal.js.map +1 -0
  101. package/dist/file-journaled-backend.d.ts +160 -0
  102. package/dist/file-journaled-backend.d.ts.map +1 -0
  103. package/dist/file-journaled-backend.js +1345 -0
  104. package/dist/file-journaled-backend.js.map +1 -0
  105. package/dist/filesystem-host.d.ts +15 -0
  106. package/dist/filesystem-host.d.ts.map +1 -0
  107. package/dist/filesystem-host.js +20 -0
  108. package/dist/filesystem-host.js.map +1 -0
  109. package/dist/filesystem-identity.d.ts +86 -4
  110. package/dist/filesystem-identity.d.ts.map +1 -1
  111. package/dist/filesystem-identity.js +338 -102
  112. package/dist/filesystem-identity.js.map +1 -1
  113. package/dist/filesystem-lock.d.ts +16 -3
  114. package/dist/filesystem-lock.d.ts.map +1 -1
  115. package/dist/filesystem-lock.js +323 -77
  116. package/dist/filesystem-lock.js.map +1 -1
  117. package/dist/filesystem-push-role.d.ts +77 -0
  118. package/dist/filesystem-push-role.d.ts.map +1 -0
  119. package/dist/filesystem-push-role.js +165 -0
  120. package/dist/filesystem-push-role.js.map +1 -0
  121. package/dist/filesystem.d.ts +17 -0
  122. package/dist/filesystem.d.ts.map +1 -0
  123. package/dist/filesystem.js +18 -0
  124. package/dist/filesystem.js.map +1 -0
  125. package/dist/governed-body-write.d.ts +106 -0
  126. package/dist/governed-body-write.d.ts.map +1 -0
  127. package/dist/governed-body-write.js +251 -0
  128. package/dist/governed-body-write.js.map +1 -0
  129. package/dist/host-policy-snapshot.d.ts +9 -0
  130. package/dist/host-policy-snapshot.d.ts.map +1 -0
  131. package/dist/host-policy-snapshot.js +33 -0
  132. package/dist/host-policy-snapshot.js.map +1 -0
  133. package/dist/host-text.d.ts +31 -0
  134. package/dist/host-text.d.ts.map +1 -0
  135. package/dist/host-text.js +77 -0
  136. package/dist/host-text.js.map +1 -0
  137. package/dist/hosted-client/binding.d.ts +7 -0
  138. package/dist/hosted-client/binding.d.ts.map +1 -0
  139. package/dist/hosted-client/binding.js +10 -0
  140. package/dist/hosted-client/binding.js.map +1 -0
  141. package/dist/hosted-client/blob-delivery.d.ts +67 -0
  142. package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
  143. package/dist/hosted-client/blob-delivery.js +169 -0
  144. package/dist/hosted-client/blob-delivery.js.map +1 -0
  145. package/dist/hosted-client/blob-write.d.ts +386 -0
  146. package/dist/hosted-client/blob-write.d.ts.map +1 -0
  147. package/dist/hosted-client/blob-write.js +770 -0
  148. package/dist/hosted-client/blob-write.js.map +1 -0
  149. package/dist/hosted-client/bundle-listing.d.ts +46 -0
  150. package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
  151. package/dist/hosted-client/bundle-listing.js +36 -0
  152. package/dist/hosted-client/bundle-listing.js.map +1 -0
  153. package/dist/hosted-client/client.d.ts +219 -0
  154. package/dist/hosted-client/client.d.ts.map +1 -0
  155. package/dist/hosted-client/client.js +309 -0
  156. package/dist/hosted-client/client.js.map +1 -0
  157. package/dist/hosted-client/directory.d.ts +46 -0
  158. package/dist/hosted-client/directory.d.ts.map +1 -0
  159. package/dist/hosted-client/directory.js +74 -0
  160. package/dist/hosted-client/directory.js.map +1 -0
  161. package/dist/hosted-client/errors.d.ts +26 -0
  162. package/dist/hosted-client/errors.d.ts.map +1 -0
  163. package/dist/hosted-client/errors.js +35 -0
  164. package/dist/hosted-client/errors.js.map +1 -0
  165. package/dist/hosted-client/inbox.d.ts +320 -0
  166. package/dist/hosted-client/inbox.d.ts.map +1 -0
  167. package/dist/hosted-client/inbox.js +379 -0
  168. package/dist/hosted-client/inbox.js.map +1 -0
  169. package/dist/hosted-client/index.d.ts +30 -0
  170. package/dist/hosted-client/index.d.ts.map +1 -0
  171. package/dist/hosted-client/index.js +32 -0
  172. package/dist/hosted-client/index.js.map +1 -0
  173. package/dist/hosted-client/journal.d.ts +103 -0
  174. package/dist/hosted-client/journal.d.ts.map +1 -0
  175. package/dist/hosted-client/journal.js +464 -0
  176. package/dist/hosted-client/journal.js.map +1 -0
  177. package/dist/hosted-client/node.d.ts +74 -0
  178. package/dist/hosted-client/node.d.ts.map +1 -0
  179. package/dist/hosted-client/node.js +219 -0
  180. package/dist/hosted-client/node.js.map +1 -0
  181. package/dist/hosted-client/reference.d.ts +12 -0
  182. package/dist/hosted-client/reference.d.ts.map +1 -0
  183. package/dist/hosted-client/reference.js +29 -0
  184. package/dist/hosted-client/reference.js.map +1 -0
  185. package/dist/hosted-client/write.d.ts +217 -0
  186. package/dist/hosted-client/write.d.ts.map +1 -0
  187. package/dist/hosted-client/write.js +418 -0
  188. package/dist/hosted-client/write.js.map +1 -0
  189. package/dist/hosted-transport/answer-rows.d.ts +243 -0
  190. package/dist/hosted-transport/answer-rows.d.ts.map +1 -0
  191. package/dist/hosted-transport/answer-rows.js +454 -0
  192. package/dist/hosted-transport/answer-rows.js.map +1 -0
  193. package/dist/hosted-transport/blob-reads.d.ts +35 -0
  194. package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
  195. package/dist/hosted-transport/blob-reads.js +179 -0
  196. package/dist/hosted-transport/blob-reads.js.map +1 -0
  197. package/dist/hosted-transport/blob-write.d.ts +34 -0
  198. package/dist/hosted-transport/blob-write.d.ts.map +1 -0
  199. package/dist/hosted-transport/blob-write.js +115 -0
  200. package/dist/hosted-transport/blob-write.js.map +1 -0
  201. package/dist/hosted-transport/carrier.d.ts +151 -0
  202. package/dist/hosted-transport/carrier.d.ts.map +1 -0
  203. package/dist/hosted-transport/carrier.js +260 -0
  204. package/dist/hosted-transport/carrier.js.map +1 -0
  205. package/dist/hosted-transport/history-pages.d.ts +55 -0
  206. package/dist/hosted-transport/history-pages.d.ts.map +1 -0
  207. package/dist/hosted-transport/history-pages.js +69 -0
  208. package/dist/hosted-transport/history-pages.js.map +1 -0
  209. package/dist/hosted-transport/index.d.ts +18 -0
  210. package/dist/hosted-transport/index.d.ts.map +1 -0
  211. package/dist/hosted-transport/index.js +18 -0
  212. package/dist/hosted-transport/index.js.map +1 -0
  213. package/dist/hosted-transport/operations.d.ts +85 -0
  214. package/dist/hosted-transport/operations.d.ts.map +1 -0
  215. package/dist/hosted-transport/operations.js +128 -0
  216. package/dist/hosted-transport/operations.js.map +1 -0
  217. package/dist/hosted-transport/paged-reads.d.ts +87 -0
  218. package/dist/hosted-transport/paged-reads.d.ts.map +1 -0
  219. package/dist/hosted-transport/paged-reads.js +238 -0
  220. package/dist/hosted-transport/paged-reads.js.map +1 -0
  221. package/dist/hosted-transport/read-adapter.d.ts +256 -0
  222. package/dist/hosted-transport/read-adapter.d.ts.map +1 -0
  223. package/dist/hosted-transport/read-adapter.js +568 -0
  224. package/dist/hosted-transport/read-adapter.js.map +1 -0
  225. package/dist/hosted-transport/root-write.d.ts +114 -0
  226. package/dist/hosted-transport/root-write.d.ts.map +1 -0
  227. package/dist/hosted-transport/root-write.js +171 -0
  228. package/dist/hosted-transport/root-write.js.map +1 -0
  229. package/dist/hosted-transport/whole-document-transport.d.ts +204 -0
  230. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -0
  231. package/dist/hosted-transport/whole-document-transport.js +447 -0
  232. package/dist/hosted-transport/whole-document-transport.js.map +1 -0
  233. package/dist/index.d.ts +34 -10
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +26 -8
  236. package/dist/index.js.map +1 -1
  237. package/dist/indexeddb-backend.d.ts +28 -37
  238. package/dist/indexeddb-backend.d.ts.map +1 -1
  239. package/dist/indexeddb-backend.js +467 -113
  240. package/dist/indexeddb-backend.js.map +1 -1
  241. package/dist/journaled-backend.d.ts +232 -15
  242. package/dist/journaled-backend.d.ts.map +1 -1
  243. package/dist/journaled-backend.js +254 -55
  244. package/dist/journaled-backend.js.map +1 -1
  245. package/dist/kind-authoring.d.ts +170 -0
  246. package/dist/kind-authoring.d.ts.map +1 -0
  247. package/dist/kind-authoring.js +451 -0
  248. package/dist/kind-authoring.js.map +1 -0
  249. package/dist/kind-conformance-error.d.ts +15 -0
  250. package/dist/kind-conformance-error.d.ts.map +1 -0
  251. package/dist/kind-conformance-error.js +20 -0
  252. package/dist/kind-conformance-error.js.map +1 -0
  253. package/dist/kind-coverage.d.ts +99 -0
  254. package/dist/kind-coverage.d.ts.map +1 -0
  255. package/dist/kind-coverage.js +186 -0
  256. package/dist/kind-coverage.js.map +1 -0
  257. package/dist/kind-field-mutation.d.ts +4 -0
  258. package/dist/kind-field-mutation.d.ts.map +1 -1
  259. package/dist/kind-field-mutation.js +28 -3
  260. package/dist/kind-field-mutation.js.map +1 -1
  261. package/dist/kinds-load.js +4 -4
  262. package/dist/kinds-load.js.map +1 -1
  263. package/dist/kinds.d.ts +65 -2
  264. package/dist/kinds.d.ts.map +1 -1
  265. package/dist/kinds.js +341 -21
  266. package/dist/kinds.js.map +1 -1
  267. package/dist/link-types.d.ts +26 -0
  268. package/dist/link-types.d.ts.map +1 -0
  269. package/dist/link-types.js +57 -0
  270. package/dist/link-types.js.map +1 -0
  271. package/dist/links.d.ts +21 -3
  272. package/dist/links.d.ts.map +1 -1
  273. package/dist/links.js +213 -14
  274. package/dist/links.js.map +1 -1
  275. package/dist/managed-document-metadata.d.ts +2 -0
  276. package/dist/managed-document-metadata.d.ts.map +1 -0
  277. package/dist/managed-document-metadata.js +9 -0
  278. package/dist/managed-document-metadata.js.map +1 -0
  279. package/dist/memory-backend.d.ts.map +1 -1
  280. package/dist/memory-backend.js +6 -2
  281. package/dist/memory-backend.js.map +1 -1
  282. package/dist/paths.d.ts +16 -0
  283. package/dist/paths.d.ts.map +1 -1
  284. package/dist/paths.js +25 -0
  285. package/dist/paths.js.map +1 -1
  286. package/dist/platform.d.ts +13 -2
  287. package/dist/platform.d.ts.map +1 -1
  288. package/dist/platform.js +16 -0
  289. package/dist/platform.js.map +1 -1
  290. package/dist/portable-export.d.ts +119 -0
  291. package/dist/portable-export.d.ts.map +1 -0
  292. package/dist/portable-export.js +501 -0
  293. package/dist/portable-export.js.map +1 -0
  294. package/dist/publication-filesystem.d.ts +1 -1
  295. package/dist/publication-filesystem.d.ts.map +1 -1
  296. package/dist/publication-filesystem.js +1 -1
  297. package/dist/publication-filesystem.js.map +1 -1
  298. package/dist/qualified-links.d.ts +67 -0
  299. package/dist/qualified-links.d.ts.map +1 -0
  300. package/dist/qualified-links.js +117 -0
  301. package/dist/qualified-links.js.map +1 -0
  302. package/dist/query-filter.d.ts +16 -2
  303. package/dist/query-filter.d.ts.map +1 -1
  304. package/dist/query-filter.js +40 -1
  305. package/dist/query-filter.js.map +1 -1
  306. package/dist/query-order.d.ts +22 -0
  307. package/dist/query-order.d.ts.map +1 -0
  308. package/dist/query-order.js +42 -0
  309. package/dist/query-order.js.map +1 -0
  310. package/dist/recipe-lifecycle/errors.d.ts +96 -0
  311. package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
  312. package/dist/recipe-lifecycle/errors.js +122 -0
  313. package/dist/recipe-lifecycle/errors.js.map +1 -0
  314. package/dist/recipe-lifecycle/evolution.d.ts +112 -0
  315. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
  316. package/dist/recipe-lifecycle/evolution.js +941 -0
  317. package/dist/recipe-lifecycle/evolution.js.map +1 -0
  318. package/dist/recipe-lifecycle/index.d.ts +30 -0
  319. package/dist/recipe-lifecycle/index.d.ts.map +1 -0
  320. package/dist/recipe-lifecycle/index.js +26 -0
  321. package/dist/recipe-lifecycle/index.js.map +1 -0
  322. package/dist/recipe-lifecycle/install.d.ts +155 -0
  323. package/dist/recipe-lifecycle/install.d.ts.map +1 -0
  324. package/dist/recipe-lifecycle/install.js +594 -0
  325. package/dist/recipe-lifecycle/install.js.map +1 -0
  326. package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
  327. package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
  328. package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
  329. package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
  330. package/dist/recipe-lifecycle/stamp.d.ts +151 -0
  331. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
  332. package/dist/recipe-lifecycle/stamp.js +364 -0
  333. package/dist/recipe-lifecycle/stamp.js.map +1 -0
  334. package/dist/recipe-set-preflight.d.ts +139 -0
  335. package/dist/recipe-set-preflight.d.ts.map +1 -0
  336. package/dist/recipe-set-preflight.js +536 -0
  337. package/dist/recipe-set-preflight.js.map +1 -0
  338. package/dist/recipes.d.ts +29 -1
  339. package/dist/recipes.d.ts.map +1 -1
  340. package/dist/recipes.js +137 -1
  341. package/dist/recipes.js.map +1 -1
  342. package/dist/record-overlay/apply.d.ts +43 -0
  343. package/dist/record-overlay/apply.d.ts.map +1 -0
  344. package/dist/record-overlay/apply.js +527 -0
  345. package/dist/record-overlay/apply.js.map +1 -0
  346. package/dist/record-overlay/canonical.d.ts +22 -0
  347. package/dist/record-overlay/canonical.d.ts.map +1 -0
  348. package/dist/record-overlay/canonical.js +47 -0
  349. package/dist/record-overlay/canonical.js.map +1 -0
  350. package/dist/record-overlay/digest.d.ts +4 -0
  351. package/dist/record-overlay/digest.d.ts.map +1 -0
  352. package/dist/record-overlay/digest.js +11 -0
  353. package/dist/record-overlay/digest.js.map +1 -0
  354. package/dist/record-overlay/errors.d.ts +44 -0
  355. package/dist/record-overlay/errors.d.ts.map +1 -0
  356. package/dist/record-overlay/errors.js +55 -0
  357. package/dist/record-overlay/errors.js.map +1 -0
  358. package/dist/record-overlay/findings.d.ts +5 -0
  359. package/dist/record-overlay/findings.d.ts.map +1 -0
  360. package/dist/record-overlay/findings.js +83 -0
  361. package/dist/record-overlay/findings.js.map +1 -0
  362. package/dist/record-overlay/index.d.ts +23 -0
  363. package/dist/record-overlay/index.d.ts.map +1 -0
  364. package/dist/record-overlay/index.js +21 -0
  365. package/dist/record-overlay/index.js.map +1 -0
  366. package/dist/record-overlay/plan.d.ts +12 -0
  367. package/dist/record-overlay/plan.d.ts.map +1 -0
  368. package/dist/record-overlay/plan.js +285 -0
  369. package/dist/record-overlay/plan.js.map +1 -0
  370. package/dist/record-overlay/policy.d.ts +69 -0
  371. package/dist/record-overlay/policy.d.ts.map +1 -0
  372. package/dist/record-overlay/policy.js +228 -0
  373. package/dist/record-overlay/policy.js.map +1 -0
  374. package/dist/record-overlay/redact.d.ts +3 -0
  375. package/dist/record-overlay/redact.d.ts.map +1 -0
  376. package/dist/record-overlay/redact.js +27 -0
  377. package/dist/record-overlay/redact.js.map +1 -0
  378. package/dist/record-overlay/signal-kind.d.ts +30 -0
  379. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  380. package/dist/record-overlay/signal-kind.js +38 -0
  381. package/dist/record-overlay/signal-kind.js.map +1 -0
  382. package/dist/record-overlay/signal-text.d.ts +45 -0
  383. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  384. package/dist/record-overlay/signal-text.js +116 -0
  385. package/dist/record-overlay/signal-text.js.map +1 -0
  386. package/dist/record-overlay/source-index.d.ts +19 -0
  387. package/dist/record-overlay/source-index.d.ts.map +1 -0
  388. package/dist/record-overlay/source-index.js +102 -0
  389. package/dist/record-overlay/source-index.js.map +1 -0
  390. package/dist/record-overlay/types.d.ts +291 -0
  391. package/dist/record-overlay/types.d.ts.map +1 -0
  392. package/dist/record-overlay/types.js +2 -0
  393. package/dist/record-overlay/types.js.map +1 -0
  394. package/dist/remote-backend.d.ts +67 -67
  395. package/dist/remote-backend.d.ts.map +1 -1
  396. package/dist/remote-backend.js +168 -201
  397. package/dist/remote-backend.js.map +1 -1
  398. package/dist/remote-document-codec.d.ts +2 -1
  399. package/dist/remote-document-codec.d.ts.map +1 -1
  400. package/dist/remote-document-codec.js +3 -2
  401. package/dist/remote-document-codec.js.map +1 -1
  402. package/dist/remote-error.d.ts +38 -0
  403. package/dist/remote-error.d.ts.map +1 -0
  404. package/dist/remote-error.js +59 -0
  405. package/dist/remote-error.js.map +1 -0
  406. package/dist/remote-operations.d.ts +0 -40
  407. package/dist/remote-operations.d.ts.map +1 -1
  408. package/dist/remote-operations.js +26 -6
  409. package/dist/remote-operations.js.map +1 -1
  410. package/dist/remote-parsers.d.ts +86 -0
  411. package/dist/remote-parsers.d.ts.map +1 -0
  412. package/dist/remote-parsers.js +181 -0
  413. package/dist/remote-parsers.js.map +1 -0
  414. package/dist/remote.d.ts +5 -2
  415. package/dist/remote.d.ts.map +1 -1
  416. package/dist/remote.js +5 -1
  417. package/dist/remote.js.map +1 -1
  418. package/dist/search/backend-source.d.ts +6 -0
  419. package/dist/search/backend-source.d.ts.map +1 -0
  420. package/dist/search/backend-source.js +33 -0
  421. package/dist/search/backend-source.js.map +1 -0
  422. package/dist/search/contract.d.ts +151 -0
  423. package/dist/search/contract.d.ts.map +1 -0
  424. package/dist/search/contract.js +78 -0
  425. package/dist/search/contract.js.map +1 -0
  426. package/dist/search/errors.d.ts +30 -0
  427. package/dist/search/errors.d.ts.map +1 -0
  428. package/dist/search/errors.js +50 -0
  429. package/dist/search/errors.js.map +1 -0
  430. package/dist/search/identity.d.ts +12 -0
  431. package/dist/search/identity.d.ts.map +1 -0
  432. package/dist/search/identity.js +90 -0
  433. package/dist/search/identity.js.map +1 -0
  434. package/dist/search/index.d.ts +16 -0
  435. package/dist/search/index.d.ts.map +1 -0
  436. package/dist/search/index.js +15 -0
  437. package/dist/search/index.js.map +1 -0
  438. package/dist/search/memory-source.d.ts +36 -0
  439. package/dist/search/memory-source.d.ts.map +1 -0
  440. package/dist/search/memory-source.js +235 -0
  441. package/dist/search/memory-source.js.map +1 -0
  442. package/dist/search/rank.d.ts +34 -0
  443. package/dist/search/rank.d.ts.map +1 -0
  444. package/dist/search/rank.js +129 -0
  445. package/dist/search/rank.js.map +1 -0
  446. package/dist/search/row-text.d.ts +38 -0
  447. package/dist/search/row-text.d.ts.map +1 -0
  448. package/dist/search/row-text.js +88 -0
  449. package/dist/search/row-text.js.map +1 -0
  450. package/dist/search/search.d.ts +28 -0
  451. package/dist/search/search.d.ts.map +1 -0
  452. package/dist/search/search.js +257 -0
  453. package/dist/search/search.js.map +1 -0
  454. package/dist/search/source.d.ts +67 -0
  455. package/dist/search/source.d.ts.map +1 -0
  456. package/dist/search/source.js +2 -0
  457. package/dist/search/source.js.map +1 -0
  458. package/dist/search/text.d.ts +47 -0
  459. package/dist/search/text.d.ts.map +1 -0
  460. package/dist/search/text.js +150 -0
  461. package/dist/search/text.js.map +1 -0
  462. package/dist/site-capabilities.d.ts +345 -0
  463. package/dist/site-capabilities.d.ts.map +1 -0
  464. package/dist/site-capabilities.js +724 -0
  465. package/dist/site-capabilities.js.map +1 -0
  466. package/dist/source-engine/guard.d.ts +78 -0
  467. package/dist/source-engine/guard.d.ts.map +1 -0
  468. package/dist/source-engine/guard.js +423 -0
  469. package/dist/source-engine/guard.js.map +1 -0
  470. package/dist/source-engine/index.d.ts +26 -0
  471. package/dist/source-engine/index.d.ts.map +1 -0
  472. package/dist/source-engine/index.js +21 -0
  473. package/dist/source-engine/index.js.map +1 -0
  474. package/dist/source-engine/machine-state.d.ts +74 -0
  475. package/dist/source-engine/machine-state.d.ts.map +1 -0
  476. package/dist/source-engine/machine-state.js +48 -0
  477. package/dist/source-engine/machine-state.js.map +1 -0
  478. package/dist/source-engine/observe.d.ts +18 -0
  479. package/dist/source-engine/observe.d.ts.map +1 -0
  480. package/dist/source-engine/observe.js +620 -0
  481. package/dist/source-engine/observe.js.map +1 -0
  482. package/dist/source-engine/overlay.d.ts +49 -0
  483. package/dist/source-engine/overlay.d.ts.map +1 -0
  484. package/dist/source-engine/overlay.js +114 -0
  485. package/dist/source-engine/overlay.js.map +1 -0
  486. package/dist/source-engine/robots.d.ts +53 -0
  487. package/dist/source-engine/robots.d.ts.map +1 -0
  488. package/dist/source-engine/robots.js +158 -0
  489. package/dist/source-engine/robots.js.map +1 -0
  490. package/dist/source-engine/types.d.ts +287 -0
  491. package/dist/source-engine/types.d.ts.map +1 -0
  492. package/dist/source-engine/types.js +2 -0
  493. package/dist/source-engine/types.js.map +1 -0
  494. package/dist/source-harness/conformance.d.ts +16 -0
  495. package/dist/source-harness/conformance.d.ts.map +1 -0
  496. package/dist/source-harness/conformance.js +266 -0
  497. package/dist/source-harness/conformance.js.map +1 -0
  498. package/dist/source-harness/fixture.d.ts +95 -0
  499. package/dist/source-harness/fixture.d.ts.map +1 -0
  500. package/dist/source-harness/fixture.js +273 -0
  501. package/dist/source-harness/fixture.js.map +1 -0
  502. package/dist/source-harness/index.d.ts +22 -0
  503. package/dist/source-harness/index.d.ts.map +1 -0
  504. package/dist/source-harness/index.js +19 -0
  505. package/dist/source-harness/index.js.map +1 -0
  506. package/dist/source-harness/peer.d.ts +74 -0
  507. package/dist/source-harness/peer.d.ts.map +1 -0
  508. package/dist/source-harness/peer.js +106 -0
  509. package/dist/source-harness/peer.js.map +1 -0
  510. package/dist/source-profiles/index.d.ts +31 -0
  511. package/dist/source-profiles/index.d.ts.map +1 -0
  512. package/dist/source-profiles/index.js +206 -0
  513. package/dist/source-profiles/index.js.map +1 -0
  514. package/dist/source-profiles/link-header.d.ts +6 -0
  515. package/dist/source-profiles/link-header.d.ts.map +1 -0
  516. package/dist/source-profiles/link-header.js +131 -0
  517. package/dist/source-profiles/link-header.js.map +1 -0
  518. package/dist/storage.d.ts +6 -2
  519. package/dist/storage.d.ts.map +1 -1
  520. package/dist/storage.js +4 -1
  521. package/dist/storage.js.map +1 -1
  522. package/dist/types.d.ts +38 -5
  523. package/dist/types.d.ts.map +1 -1
  524. package/dist/types.js +0 -10
  525. package/dist/types.js.map +1 -1
  526. package/dist/uncertain-write.d.ts +161 -19
  527. package/dist/uncertain-write.d.ts.map +1 -1
  528. package/dist/uncertain-write.js +90 -31
  529. package/dist/uncertain-write.js.map +1 -1
  530. package/dist/versioning.d.ts +9 -4
  531. package/dist/versioning.d.ts.map +1 -1
  532. package/dist/versioning.js +9 -4
  533. package/dist/versioning.js.map +1 -1
  534. package/dist/write-identity.d.ts +5 -0
  535. package/dist/write-identity.d.ts.map +1 -0
  536. package/dist/write-identity.js +9 -0
  537. package/dist/write-identity.js.map +1 -0
  538. package/package.json +107 -2
@@ -0,0 +1,52 @@
1
+ import { InvalidInputError } from "./errors.js";
2
+ import type { KindConvention } from "./kinds.js";
3
+ import type { Bundle, Link, OkfDocument } from "./types.js";
4
+ export declare const BODY_PREVIEW_LIMIT = 1000;
5
+ export declare const BODY_PREVIEW_TRUNCATION_MARKER = "[superbee:body-preview-truncated]";
6
+ export declare const BODY_PREVIEW_TRUNCATION_SIGNATURE: RegExp;
7
+ export declare const BODY_PREVIEW_KEY = "body_preview";
8
+ export declare const BODY_PREVIEW_RESERVED_KEYS: readonly string[];
9
+ export declare function attachBodyPreview(rec: Record<string, unknown>, body: string, fullBodyHelp: readonly string[]): void;
10
+ export type BodyPreviewFinding = {
11
+ reason: "preview_marker";
12
+ marker: string;
13
+ notice: string;
14
+ } | {
15
+ reason: "stored_body_preview";
16
+ preview_limit: number;
17
+ supplied_body_chars: number;
18
+ stored_body_chars: number;
19
+ };
20
+ /** Unchanged serialized bodies and stored notices carried by a preserving append are safe. */
21
+ export declare function bodyPreviewFinding(existing: OkfDocument, nextBody: string): BodyPreviewFinding | undefined;
22
+ export type BodyReplaceFinding = BodyPreviewFinding | {
23
+ reason: "dropped_links";
24
+ dropped_links: Link[];
25
+ };
26
+ export declare class BodyReplaceError extends InvalidInputError {
27
+ readonly id: string;
28
+ readonly finding: BodyReplaceFinding;
29
+ readonly storedCarriesNotice: boolean;
30
+ constructor(id: string, finding: BodyReplaceFinding, storedCarriesNotice?: boolean);
31
+ }
32
+ export interface BodyReplacePosture {
33
+ acceptTruncatedBody?: boolean;
34
+ replaceLinks?: boolean;
35
+ }
36
+ /** Capture explicit per-write intent; truthy values and unknown flags never grant an override. */
37
+ export declare function captureBodyReplacePosture(value: unknown): BodyReplacePosture | undefined;
38
+ /** Exact pairs consume first; target mode then admits retext while preserving occurrence counts.
39
+ * Exact-edge mode is available to authorities that protect relationship text as well. */
40
+ export declare function computeDroppedLinks(existingLinks: readonly Link[], nextLinks: readonly Link[], mode?: "target" | "exact-edge"): Link[];
41
+ export declare function droppedLinks(_bundle: Bundle, existing: OkfDocument, nextBody: string): Link[];
42
+ export declare function guardTruncatedBodyPreview(existing: OkfDocument, nextBody: string, acceptTruncatedBody: boolean): void;
43
+ export declare function guardDroppedLinks(bundle: Bundle, existing: OkfDocument, nextBody: string, replaceLinks: boolean): void;
44
+ export declare function guardBodyReplace(bundle: Bundle, existing: OkfDocument, nextBody: string, posture?: BodyReplacePosture): void;
45
+ /** A scalar patch cannot replace a declared list, even when the stored field is absent. */
46
+ export declare class TypedListPatchError extends InvalidInputError {
47
+ readonly field: string;
48
+ readonly fieldType: "string-list" | "https-url-list";
49
+ constructor(field: string, fieldType: "string-list" | "https-url-list");
50
+ }
51
+ export declare function assertTypedListPatch(kind: KindConvention, storageField: string): void;
52
+ //# sourceMappingURL=body-replace-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-replace-guards.d.ts","sourceRoot":"","sources":["../src/body-replace-guards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /** Storage-neutral body replacement policy and portable preview identity. */
2
+ import { normalizeDocumentBodyForStorage } from "./frontmatter.js";
3
+ import { parseLinksFromDoc } from "./links.js";
4
+ import { InvalidInputError } from "./errors.js";
5
+ export const BODY_PREVIEW_LIMIT = 1000;
6
+ export const BODY_PREVIEW_TRUNCATION_MARKER = "[superbee:body-preview-truncated]";
7
+ function previewTruncationNotice(omitted) {
8
+ return `${BODY_PREVIEW_TRUNCATION_MARKER} ${omitted} more character(s) are NOT shown`;
9
+ }
10
+ export const BODY_PREVIEW_TRUNCATION_SIGNATURE = /\[superbee:body-preview-truncated\]\s+\d+\s+more\s+characters?\(?s?\)?\s+are\s+NOT\s+shown/i;
11
+ export const BODY_PREVIEW_KEY = "body_preview";
12
+ export const BODY_PREVIEW_RESERVED_KEYS = [
13
+ "body",
14
+ BODY_PREVIEW_KEY,
15
+ "body_truncated",
16
+ "body_chars",
17
+ "help",
18
+ ];
19
+ export function attachBodyPreview(rec, body, fullBodyHelp) {
20
+ if (body.length <= BODY_PREVIEW_LIMIT) {
21
+ rec.body = body;
22
+ return;
23
+ }
24
+ const omitted = body.length - BODY_PREVIEW_LIMIT;
25
+ rec[BODY_PREVIEW_KEY] =
26
+ `${body.slice(0, BODY_PREVIEW_LIMIT)}\n\n${previewTruncationNotice(omitted)} — this value is a ` +
27
+ `preview, not the document body; use this record's help to read the complete body before ` +
28
+ `rewriting it.`;
29
+ rec.body_truncated = true;
30
+ rec.body_chars = body.length;
31
+ rec.help = [...fullBodyHelp];
32
+ }
33
+ function matchesPreviewSlice(candidate, preview) {
34
+ if (candidate === preview)
35
+ return true;
36
+ const trimmed = preview.trimEnd();
37
+ return trimmed !== "" && candidate.trimEnd() === trimmed;
38
+ }
39
+ function firstForeignNotice(storedBody, nextBody) {
40
+ const preservesStoredBody = nextBody.includes(storedBody.trimEnd());
41
+ const every = new RegExp(BODY_PREVIEW_TRUNCATION_SIGNATURE.source, `${BODY_PREVIEW_TRUNCATION_SIGNATURE.flags}g`);
42
+ for (const match of nextBody.matchAll(every)) {
43
+ if (!(preservesStoredBody && storedBody.includes(match[0])))
44
+ return match[0];
45
+ }
46
+ return undefined;
47
+ }
48
+ function isSameStoredBody(nextBody, existingBody) {
49
+ return normalizeDocumentBodyForStorage(nextBody) === normalizeDocumentBodyForStorage(existingBody);
50
+ }
51
+ /** Unchanged serialized bodies and stored notices carried by a preserving append are safe. */
52
+ export function bodyPreviewFinding(existing, nextBody) {
53
+ if (isSameStoredBody(nextBody, existing.body))
54
+ return;
55
+ const notice = firstForeignNotice(existing.body, nextBody);
56
+ if (notice !== undefined)
57
+ return { reason: "preview_marker", marker: BODY_PREVIEW_TRUNCATION_MARKER, notice };
58
+ if (existing.body.length > BODY_PREVIEW_LIMIT && matchesPreviewSlice(nextBody, existing.body.slice(0, BODY_PREVIEW_LIMIT))) {
59
+ return { reason: "stored_body_preview", preview_limit: BODY_PREVIEW_LIMIT, supplied_body_chars: nextBody.length, stored_body_chars: existing.body.length };
60
+ }
61
+ }
62
+ export class BodyReplaceError extends InvalidInputError {
63
+ id;
64
+ finding;
65
+ storedCarriesNotice;
66
+ constructor(id, finding, storedCarriesNotice = false) {
67
+ super(`Body replacement of '${id}' refused: ${finding.reason}.`);
68
+ this.name = "BodyReplaceError";
69
+ this.id = id;
70
+ this.finding = finding;
71
+ this.storedCarriesNotice = storedCarriesNotice;
72
+ }
73
+ }
74
+ /** Capture explicit per-write intent; truthy values and unknown flags never grant an override. */
75
+ export function captureBodyReplacePosture(value) {
76
+ if (value === undefined)
77
+ return;
78
+ if (value === null || typeof value !== "object" || Array.isArray(value) || ![Object.prototype, null].includes(Object.getPrototypeOf(value))) {
79
+ throw new InvalidInputError("bodyReplace must be an object with boolean acceptTruncatedBody and/or replaceLinks fields.");
80
+ }
81
+ const captured = {};
82
+ for (const key of Reflect.ownKeys(value)) {
83
+ if (key !== "acceptTruncatedBody" && key !== "replaceLinks")
84
+ throw new InvalidInputError("Unknown bodyReplace field.");
85
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
86
+ if (!("value" in descriptor) || typeof descriptor.value !== "boolean")
87
+ throw new InvalidInputError(`bodyReplace.${key} must be a boolean.`);
88
+ captured[key] = descriptor.value;
89
+ }
90
+ return captured;
91
+ }
92
+ /** Exact pairs consume first; target mode then admits retext while preserving occurrence counts.
93
+ * Exact-edge mode is available to authorities that protect relationship text as well. */
94
+ export function computeDroppedLinks(existingLinks, nextLinks, mode = "target") {
95
+ const nextByTarget = new Map();
96
+ for (const l of nextLinks) {
97
+ const key = mode === "exact-edge" ? JSON.stringify([l.from, l.to]) : l.to;
98
+ const bucket = nextByTarget.get(key);
99
+ if (bucket)
100
+ bucket.push(l);
101
+ else
102
+ nextByTarget.set(key, [l]);
103
+ }
104
+ const existingByTarget = new Map();
105
+ for (const l of existingLinks) {
106
+ const key = mode === "exact-edge" ? JSON.stringify([l.from, l.to]) : l.to;
107
+ const bucket = existingByTarget.get(key);
108
+ if (bucket)
109
+ bucket.push(l);
110
+ else
111
+ existingByTarget.set(key, [l]);
112
+ }
113
+ const dropped = [];
114
+ for (const [target, oldOccurrences] of existingByTarget) {
115
+ const available = [...(nextByTarget.get(target) ?? [])]; // mutable, consumed as occurrences pair off
116
+ const unmatchedExact = [];
117
+ // Pass 1: exact (target,text) — consume one matching new occurrence per old occurrence.
118
+ for (const old of oldOccurrences) {
119
+ const idx = available.findIndex((n) => n.text === old.text);
120
+ if (idx >= 0)
121
+ available.splice(idx, 1);
122
+ else
123
+ unmatchedExact.push(old);
124
+ }
125
+ // Pass 2: retext — any leftover old occurrence pairs with any leftover same-target occurrence,
126
+ // regardless of text; anything still left over after that is a real drop.
127
+ for (const old of unmatchedExact) {
128
+ if (mode === "target" && available.length > 0)
129
+ available.shift();
130
+ else
131
+ dropped.push(old);
132
+ }
133
+ }
134
+ return dropped;
135
+ }
136
+ export function droppedLinks(_bundle, existing, nextBody) {
137
+ return computeDroppedLinks(parseLinksFromDoc(existing), parseLinksFromDoc({ ...existing, body: nextBody }));
138
+ }
139
+ export function guardTruncatedBodyPreview(existing, nextBody, acceptTruncatedBody) {
140
+ if (acceptTruncatedBody)
141
+ return;
142
+ const finding = bodyPreviewFinding(existing, nextBody);
143
+ if (finding)
144
+ throw new BodyReplaceError(existing.id, finding, BODY_PREVIEW_TRUNCATION_SIGNATURE.test(existing.body));
145
+ }
146
+ export function guardDroppedLinks(bundle, existing, nextBody, replaceLinks) {
147
+ if (replaceLinks || isSameStoredBody(nextBody, existing.body))
148
+ return;
149
+ const dropped = droppedLinks(bundle, existing, nextBody);
150
+ if (dropped.length)
151
+ throw new BodyReplaceError(existing.id, { reason: "dropped_links", dropped_links: dropped });
152
+ }
153
+ export function guardBodyReplace(bundle, existing, nextBody, posture) {
154
+ if (isSameStoredBody(nextBody, existing.body))
155
+ return;
156
+ guardTruncatedBodyPreview(existing, nextBody, Boolean(posture?.acceptTruncatedBody));
157
+ guardDroppedLinks(bundle, existing, nextBody, Boolean(posture?.replaceLinks));
158
+ }
159
+ /** A scalar patch cannot replace a declared list, even when the stored field is absent. */
160
+ export class TypedListPatchError extends InvalidInputError {
161
+ field;
162
+ fieldType;
163
+ constructor(field, fieldType) {
164
+ super(`'${field}' is a ${fieldType} field; use an explicit whole-list replacement.`);
165
+ this.name = "TypedListPatchError";
166
+ this.field = field;
167
+ this.fieldType = fieldType;
168
+ }
169
+ }
170
+ export function assertTypedListPatch(kind, storageField) {
171
+ const types = kind.fields.types ?? {};
172
+ const type = Object.hasOwn(types, storageField) ? types[storageField] : undefined;
173
+ if (type === "string-list" || type === "https-url-list")
174
+ throw new TypedListPatchError(storageField, type);
175
+ }
176
+ //# sourceMappingURL=body-replace-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-replace-guards.js","sourceRoot":"","sources":["../src/body-replace-guards.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,MAAM,CAAC,MAAM,8BAA8B,GAAG,mCAAmC,CAAC;AAElF,SAAS,uBAAuB,CAAC,OAAe;IAC9C,OAAO,GAAG,8BAA8B,IAAI,OAAO,kCAAkC,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAC5C,6FAA6F,CAAC;AAEhG,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE/C,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,MAAM;IACN,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,MAAM;CACP,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAC/B,GAA4B,EAC5B,IAAY,EACZ,YAA+B;IAE/B,IAAI,IAAI,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC;IACjD,GAAG,CAAC,gBAAgB,CAAC;QACnB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,OAAO,uBAAuB,CAAC,OAAO,CAAC,qBAAqB;YAChG,0FAA0F;YAC1F,eAAe,CAAC;IAClB,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB,EAAE,OAAe;IAC7D,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAClC,OAAO,OAAO,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC;AAC3D,CAAC;AAGD,SAAS,kBAAkB,CAAC,UAAkB,EAAE,QAAgB;IAC9D,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,iCAAiC,CAAC,MAAM,EAAE,GAAG,iCAAiC,CAAC,KAAK,GAAG,CAAC,CAAC;IAClH,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,CAAC,mBAAmB,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD,SAAS,gBAAgB,CAAC,QAAgB,EAAE,YAAoB;IAC9D,OAAO,+BAA+B,CAAC,QAAQ,CAAC,KAAK,+BAA+B,CAAC,YAAY,CAAC,CAAC;AACrG,CAAC;AAOD,8FAA8F;AAC9F,MAAM,UAAU,kBAAkB,CAAC,QAAqB,EAAE,QAAgB;IACxE,IAAI,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO;IACtD,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,8BAA8B,EAAE,MAAM,EAAE,CAAC;IAC9G,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,kBAAkB,IAAI,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC;QAC3H,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7J,CAAC;AACH,CAAC;AAGD,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IAC5C,EAAE,CAAS;IACX,OAAO,CAAqB;IAC5B,mBAAmB,CAAU;IACtC,YAAY,EAAU,EAAE,OAA2B,EAAE,mBAAmB,GAAG,KAAK;QAC9E,KAAK,CAAC,wBAAwB,EAAE,cAAc,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAAC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACvF,CAAC;CACF;AAMD,kGAAkG;AAClG,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5I,MAAM,IAAI,iBAAiB,CAAC,4FAA4F,CAAC,CAAC;IAC5H,CAAC;IACD,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,IAAI,GAAG,KAAK,qBAAqB,IAAI,GAAG,KAAK,cAAc;YAAE,MAAM,IAAI,iBAAiB,CAAC,4BAA4B,CAAC,CAAC;QACvH,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAE,CAAC;QAChE,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,iBAAiB,CAAC,eAAe,GAAG,qBAAqB,CAAC,CAAC;QAC5I,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;yFACyF;AACzF,MAAM,UAAU,mBAAmB,CAAC,aAA8B,EAAE,SAA0B,EAAE,OAAgC,QAAQ;IACtI,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACtB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACtB,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,OAAO,GAAW,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,4CAA4C;QACrG,MAAM,cAAc,GAAW,EAAE,CAAC;QAElC,wFAAwF;QACxF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,GAAG,IAAI,CAAC;gBAAE,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;gBAClC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,+FAA+F;QAC/F,0EAA0E;QAC1E,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,IAAI,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS,CAAC,KAAK,EAAE,CAAC;;gBAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,QAAqB,EAAE,QAAgB;IACnF,OAAO,mBAAmB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC9G,CAAC;AACD,MAAM,UAAU,yBAAyB,CAAC,QAAqB,EAAE,QAAgB,EAAE,mBAA4B;IAC7G,IAAI,mBAAmB;QAAE,OAAO;IAChC,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,OAAO;QAAE,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,iCAAiC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACvH,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAqB,EAAE,QAAgB,EAAE,YAAqB;IAC9G,IAAI,YAAY,IAAI,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO;IACtE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;AACnH,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,QAAqB,EAAE,QAAgB,EAAE,OAA4B;IACpH,IAAI,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO;IACtD,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACrF,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,2FAA2F;AAC3F,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IAC/C,KAAK,CAAS;IACd,SAAS,CAAmC;IACrD,YAAY,KAAa,EAAE,SAA2C;QACpE,KAAK,CAAC,IAAI,KAAK,UAAU,SAAS,iDAAiD,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IACjD,CAAC;CACF;AACD,MAAM,UAAU,oBAAoB,CAAC,IAAoB,EAAE,YAAoB;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,gBAAgB;QAAE,MAAM,IAAI,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,93 @@
1
+ /** Optional shipped recipe content; generic bundle creation never imports this module. */
2
+ import { type KindConvention } from "../kinds.js";
3
+ /**
4
+ * The `Context Note` kind convention (moved VERBATIM from core's `CONTEXT_NOTE_KIND`, Recipes Unit
5
+ * A). `governs`/`title` are stamped from the locally-defined `CONTEXT_NOTE_TYPE` above — the type
6
+ * this recipe governs, authored via the GENERIC path (`new "Context Note" <id>` + `doc read`/`doc
7
+ * update`/`doc write`; there is no bespoke note command or codec anymore). `description` is
8
+ * declared OPTIONAL (not required) because a `new "Context Note"` instance can legitimately carry
9
+ * an empty one, and a kind must not fail its own convention's producer. `sections` declares ONLY
10
+ * `Summary` — the one heading the recipe SCAFFOLDS on every `new "Context Note"` create — for the
11
+ * same producer-must-pass reason: a summary-only note is the most common legitimate shape, and
12
+ * declaring additional headings would make `status` flag every minimal note with
13
+ * KIND_SECTION_MISSING noise — alert fatigue on the primary path. The seed's BODY carries a worked
14
+ * multi-section/`fields.values` example for authors of OTHER kinds to copy.
15
+ */
16
+ export declare const CONTEXT_NOTE_KIND: KindConvention;
17
+ /**
18
+ * The seed's prose body (`conventions/context-note.md`) is deliberately doubled up as the
19
+ * IN-BUNDLE authoring reference for kind conventions: every produced bundle that applies this
20
+ * recipe (via `init`'s default, or an explicit `recipe add context-notes`) ships one worked
21
+ * example of the ONE correct shape, right where an agent discovering `conventions/` will find it —
22
+ * not just in a doc an agent may never read. Bodies are prose (the registry only parses
23
+ * frontmatter, per `parseConventionDoc`), so a fenced YAML example here is inert to the parser
24
+ * and purely illustrative. The source uses one explicit logical-field token so the recipe
25
+ * materializer (core's `materializeRecipeForEdition`, which owns the token's interpretation) can
26
+ * teach the physical workflow coordinate appropriate to the target OKF edition; `recipes.test.ts`
27
+ * pins that an installed body equals `CONTEXT_NOTE_SEED_BODY` and carries no token.
28
+ */
29
+ export declare const CONTEXT_NOTE_SEED_BODY_LOGICAL: string;
30
+ /** V0.1 materialization retained for tests and direct recipe-content consumers. */
31
+ export declare const CONTEXT_NOTE_SEED_BODY: string;
32
+ /** One-line description, shown by `recipes` and the command reference — the built-in `context-notes`
33
+ * recipe's `recipe.md` manifest `summary:`. */
34
+ export declare const CONTEXT_NOTES_SUMMARY = "Declares the built-in Context Note kind convention (title/timestamp required, 24h freshness horizon)";
35
+ /** The prose body of the built-in `context-notes` recipe's `recipe.md` manifest doc — NOT parsed by
36
+ * `parseRecipeFiles` (only the manifest's frontmatter is read), purely descriptive for a human or
37
+ * agent who reads the recipe folder directly (built-in or, via a future `eject`, on disk). */
38
+ export declare const RECIPE_DESC_BODY: string;
39
+ /**
40
+ * The `Task` kind convention — the first DOMAIN recipe on the pluggable-recipe foundation
41
+ * (Recipes Unit B was the plumbing; this is the first thing built on it). The built-in now carries
42
+ * agent-readable purpose and field guidance; recipe application remains expect-absent, so an
43
+ * existing hand-authored Task convention is preserved rather than upgraded in place. No `sections`
44
+ * — unlike Context Note, a Task instance is not scaffolded around a fixed body shape; its body is
45
+ * free-form task description, and declaring expected headings here would just be lint noise on
46
+ * the common one-line task.
47
+ */
48
+ export declare const TASK_KIND: KindConvention;
49
+ /**
50
+ * The seed's prose body (`conventions/task.md`) explains how the generic primitives compose into
51
+ * task tracking. Composed entirely from EXISTING lite primitives (link graph as DAG, CAS write as claim,
52
+ * `list --type`/`status` as query/lint) — no bespoke task engine, no new verb. The CLI's task-aware
53
+ * columns, claim, and runnable/blocked projections are a separate concern, not part of this recipe.
54
+ */
55
+ export declare const TASK_SEED_BODY: string;
56
+ /** One-line description, shown by `recipes` and the command reference — the built-in
57
+ * `work-tracking` recipe's `recipe.md` manifest `summary:`. */
58
+ export declare const WORK_TRACKING_SUMMARY = "Declares the built-in Task kind convention (title/progress_status required, workflow enum, 'depends on' link type, 30d freshness horizon)";
59
+ /** The prose body of the built-in `work-tracking` recipe's `recipe.md` manifest doc — NOT parsed
60
+ * by `parseRecipeFiles` (only the manifest's frontmatter is read), purely descriptive. */
61
+ export declare const WORK_TRACKING_DESC_BODY: string;
62
+ /**
63
+ * The `Roadmap` kind convention — the SPINE: a single top-level roadmap doc that `contains` the
64
+ * bundle's Roadmap Items via typed links. Frontmatter faithful to the board's hand-authored
65
+ * `conventions/roadmap` (no `path` — the spine is one doc, conventionally the bundle-root
66
+ * `roadmap`, not a scaffolded family; no freshness horizon; `title` is the only required field).
67
+ */
68
+ export declare const ROADMAP_KIND: KindConvention;
69
+ /** The `conventions/roadmap.md` prose body. */
70
+ export declare const ROADMAP_SEED_BODY: string;
71
+ /**
72
+ * The `Roadmap Item` kind convention — a durable line of work spanning multiple tasks.
73
+ * Frontmatter faithful to the board's hand-authored `conventions/roadmap-item`: scaffolded under
74
+ * `roadmap-items/`, `contains` its Tasks, `status` is the three-state item lifecycle (coarser than
75
+ * Task's five-state enum on purpose — an item's granular progress is the derived task rollup, not
76
+ * a stored field).
77
+ */
78
+ export declare const ROADMAP_ITEM_KIND: KindConvention;
79
+ /** The `conventions/roadmap-item.md` prose body. */
80
+ export declare const ROADMAP_ITEM_SEED_BODY: string;
81
+ /** One-line description, shown by `recipes` and the command reference — the built-in `roadmap`
82
+ * recipe's `recipe.md` manifest `summary:`. */
83
+ export declare const ROADMAP_SUMMARY = "Declares the Roadmap + Roadmap Item kind conventions (typed 'contains' links, roadmap \u2192 item \u2192 task; item progress_status enum queued/active/done) \u2014 work-tracking's companion";
84
+ /** The prose body of the built-in `roadmap` recipe's `recipe.md` manifest doc — NOT parsed by
85
+ * `parseRecipeFiles` (only the manifest's frontmatter is read), purely descriptive. Its "Pairing
86
+ * the Task kind" section is the RECORDED resolution of this unit's expects_inbound design
87
+ * question: recipes apply via expect-absent CAS and can never patch an EXISTING `conventions/task`
88
+ * doc, and `kind field` edits only `fields.{required,optional,values}` — so the Task-side
89
+ * `expects_inbound` pairing is a documented one-step opt-in (pull → edit → promote, the
90
+ * CLI's one sanctioned convention-schema edit route), not a silent recipe patch. The chain below
91
+ * is pinned by a test that literally executes it (recipes.test.ts). */
92
+ export declare const ROADMAP_DESC_BODY: string;
93
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/builtin-recipes/content.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAMzE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAmB/B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B,QA+ClC,CAAC;AAMV,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,QAGlC,CAAC;AAEF;+CAC+C;AAC/C,eAAO,MAAM,qBAAqB,yGACsE,CAAC;AAEzG;;8FAE8F;AAC9F,eAAO,MAAM,gBAAgB,QAMI,CAAC;AAMlC;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,EAAE,cAkCvB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAQe,CAAC;AAE3C;+DAC+D;AAC/D,eAAO,MAAM,qBAAqB,8IAC2G,CAAC;AAE9I;0FAC0F;AAC1F,eAAO,MAAM,uBAAuB,QAQb,CAAC;AAQxB;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,cAW1B,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,QAMgB,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAiB/B,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,QAOmB,CAAC;AAEvD;+CAC+C;AAC/C,eAAO,MAAM,eAAe,kMACsJ,CAAC;AAEnL;;;;;;;uEAOuE;AACvE,eAAO,MAAM,iBAAiB,QAyBd,CAAC"}
@@ -0,0 +1,288 @@
1
+ /** Optional shipped recipe content; generic bundle creation never imports this module. */
2
+ import { PROGRESS_STATUS_FIELD } from "../kinds.js";
3
+ import { RECIPE_PROGRESS_STATUS_TOKEN } from "../recipes.js";
4
+ /** The recipe defines the type it governs; generic engine operations do not special-case it. */
5
+ const CONTEXT_NOTE_TYPE = "Context Note";
6
+ /**
7
+ * The `Context Note` kind convention (moved VERBATIM from core's `CONTEXT_NOTE_KIND`, Recipes Unit
8
+ * A). `governs`/`title` are stamped from the locally-defined `CONTEXT_NOTE_TYPE` above — the type
9
+ * this recipe governs, authored via the GENERIC path (`new "Context Note" <id>` + `doc read`/`doc
10
+ * update`/`doc write`; there is no bespoke note command or codec anymore). `description` is
11
+ * declared OPTIONAL (not required) because a `new "Context Note"` instance can legitimately carry
12
+ * an empty one, and a kind must not fail its own convention's producer. `sections` declares ONLY
13
+ * `Summary` — the one heading the recipe SCAFFOLDS on every `new "Context Note"` create — for the
14
+ * same producer-must-pass reason: a summary-only note is the most common legitimate shape, and
15
+ * declaring additional headings would make `status` flag every minimal note with
16
+ * KIND_SECTION_MISSING noise — alert fatigue on the primary path. The seed's BODY carries a worked
17
+ * multi-section/`fields.values` example for authors of OTHER kinds to copy.
18
+ */
19
+ export const CONTEXT_NOTE_KIND = {
20
+ id: "conventions/context-note",
21
+ title: CONTEXT_NOTE_TYPE,
22
+ governs: CONTEXT_NOTE_TYPE,
23
+ path: "context-notes/",
24
+ fields: {
25
+ required: ["title", "timestamp"],
26
+ optional: ["description", "tags"],
27
+ values: {},
28
+ valueDescriptions: {},
29
+ terminal: {},
30
+ descriptions: {},
31
+ },
32
+ sections: ["Summary"],
33
+ freshnessHorizon: "24h",
34
+ // Context Notes are transient cross-session scratch — collapse them by default in browse listings
35
+ // so they never swamp durable knowledge (designs/document-discovery Decision 1). Per-bundle
36
+ // overridable by dropping the key; every other kind stays expanded.
37
+ browseCollapsed: true,
38
+ };
39
+ /**
40
+ * The seed's prose body (`conventions/context-note.md`) is deliberately doubled up as the
41
+ * IN-BUNDLE authoring reference for kind conventions: every produced bundle that applies this
42
+ * recipe (via `init`'s default, or an explicit `recipe add context-notes`) ships one worked
43
+ * example of the ONE correct shape, right where an agent discovering `conventions/` will find it —
44
+ * not just in a doc an agent may never read. Bodies are prose (the registry only parses
45
+ * frontmatter, per `parseConventionDoc`), so a fenced YAML example here is inert to the parser
46
+ * and purely illustrative. The source uses one explicit logical-field token so the recipe
47
+ * materializer (core's `materializeRecipeForEdition`, which owns the token's interpretation) can
48
+ * teach the physical workflow coordinate appropriate to the target OKF edition; `recipes.test.ts`
49
+ * pins that an installed body equals `CONTEXT_NOTE_SEED_BODY` and carries no token.
50
+ */
51
+ export const CONTEXT_NOTE_SEED_BODY_LOGICAL = "# Context Note\n\n" +
52
+ "An agent's cross-session orientation note: what happened, what was decided, and what's " +
53
+ "still open. Create one with `new \"Context Note\" <id>` (scaffolds the `# Summary` section " +
54
+ "under `context-notes/`), read it with `doc read`, and edit it with `doc update` / `doc " +
55
+ "write`. This recipe retains `timestamp` as an explicit compatibility field and uses the " +
56
+ "Superbee-specific `freshness_horizon` Kind extension so `superbee status` can surface notes " +
57
+ "older than 24h. In an OKF v0.2 bundle, `generated.at` remains the standard meaningful-change " +
58
+ "clock when provenance is present.\n\n" +
59
+ "## Declaring a kind convention\n\n" +
60
+ "A kind convention is a plain OKF doc (`type: Convention`) living under `conventions/`. Its " +
61
+ "FRONTMATTER is the only part core parses (this prose is not). Supported frontmatter keys:\n\n" +
62
+ "- `governs` (required, non-empty) — the `type` value this convention governs.\n" +
63
+ "- `title` (optional) — display title; defaults to `governs`.\n" +
64
+ "- `description` (optional) — the kind's purpose and intended use.\n" +
65
+ "- `path` (optional) — canonical bundle-relative path prefix instances are scaffolded under " +
66
+ "(e.g. `roadmap/`).\n" +
67
+ "- `fields.required` — list of field names an instance MUST carry (non-empty).\n" +
68
+ "- `fields.optional` — list of field names an instance MAY carry.\n" +
69
+ "- `fields.descriptions` — a MAP of `field name -> human guidance` for declared fields.\n" +
70
+ "- `fields.values` — a MAP of `field name -> list of allowed values`. This is the ONLY place " +
71
+ "an enum constraint goes — never a top-level `enum:`/`enums:`/`values:`/`constraints:` key, " +
72
+ "and never a field named directly at the top level either.\n" +
73
+ "- `sections` — list of expected level-1 (`# Heading`) body-section names. Declare only the " +
74
+ "headings EVERY instance must carry (this Context Note kind declares just `Summary`, the one " +
75
+ "section `new \"Context Note\"` scaffolds and every instance carries).\n" +
76
+ "- `freshness_horizon` — a Superbee Kind extension using `<n>(m|h|d)`, e.g. `24h`, `30d`, `15m`.\n\n" +
77
+ "Worked example (a `Roadmap Item` kind, with an enum-restricted field and expected sections):\n\n" +
78
+ "```yaml\n" +
79
+ "---\n" +
80
+ "type: Convention\n" +
81
+ "title: Roadmap Item\n" +
82
+ "governs: Roadmap Item\n" +
83
+ "description: A durable line of work that groups related tasks.\n" +
84
+ "path: roadmap/\n" +
85
+ "fields:\n" +
86
+ ` required: [title, ${RECIPE_PROGRESS_STATUS_TOKEN}]\n` +
87
+ " optional: [horizon]\n" +
88
+ " values:\n" +
89
+ ` ${RECIPE_PROGRESS_STATUS_TOKEN}: [planned, active, done]\n` +
90
+ " descriptions:\n" +
91
+ " title: A concise summary of the outcome.\n" +
92
+ ` ${RECIPE_PROGRESS_STATUS_TOKEN}: The roadmap item's current workflow progress.\n` +
93
+ " horizon: The expected delivery window.\n" +
94
+ "sections: [Why, \"Done when\"]\n" +
95
+ "freshness_horizon: 30d\n" +
96
+ "---\n" +
97
+ "```\n";
98
+ function materializeRecipeBody(body, storageField) {
99
+ return body.replaceAll(RECIPE_PROGRESS_STATUS_TOKEN, storageField);
100
+ }
101
+ /** V0.1 materialization retained for tests and direct recipe-content consumers. */
102
+ export const CONTEXT_NOTE_SEED_BODY = materializeRecipeBody(CONTEXT_NOTE_SEED_BODY_LOGICAL, "status");
103
+ /** One-line description, shown by `recipes` and the command reference — the built-in `context-notes`
104
+ * recipe's `recipe.md` manifest `summary:`. */
105
+ export const CONTEXT_NOTES_SUMMARY = "Declares the built-in Context Note kind convention (title/timestamp required, 24h freshness horizon)";
106
+ /** The prose body of the built-in `context-notes` recipe's `recipe.md` manifest doc — NOT parsed by
107
+ * `parseRecipeFiles` (only the manifest's frontmatter is read), purely descriptive for a human or
108
+ * agent who reads the recipe folder directly (built-in or, via a future `eject`, on disk). */
109
+ export const RECIPE_DESC_BODY = "# Context Notes\n\n" +
110
+ "Installs the `Context Note` kind convention: a lightweight cross-session orientation note — " +
111
+ "what happened, what was decided, what's still open. Declares the `Context Note` type's " +
112
+ "required fields, the `# Summary` scaffold section, and a 24h freshness horizon.\n\n" +
113
+ "Applied by default on `init` (opt out with `init --recipe none`), or on demand with " +
114
+ "`recipe add context-notes`.\n";
115
+ /** The `type` value the work-tracking recipe governs — mirrors `CONTEXT_NOTE_TYPE`'s pattern (a
116
+ * recipe is exactly the thing that DEFINES the type it governs). */
117
+ const TASK_TYPE = "Task";
118
+ /**
119
+ * The `Task` kind convention — the first DOMAIN recipe on the pluggable-recipe foundation
120
+ * (Recipes Unit B was the plumbing; this is the first thing built on it). The built-in now carries
121
+ * agent-readable purpose and field guidance; recipe application remains expect-absent, so an
122
+ * existing hand-authored Task convention is preserved rather than upgraded in place. No `sections`
123
+ * — unlike Context Note, a Task instance is not scaffolded around a fixed body shape; its body is
124
+ * free-form task description, and declaring expected headings here would just be lint noise on
125
+ * the common one-line task.
126
+ */
127
+ export const TASK_KIND = {
128
+ id: "conventions/task",
129
+ title: TASK_TYPE,
130
+ governs: TASK_TYPE,
131
+ description: "A concrete unit of work that can be claimed, prioritized, assigned, and completed.",
132
+ path: "tasks/",
133
+ // The typed-edge vocabulary (decisions/typed-links-carrier): a task's dependency edge is a
134
+ // link whose display text is exactly "depends on", targeting another Task. Declared here so
135
+ // `kinds` teaches the vocabulary to any agent that orients — discovery shipped; validation
136
+ // is a future consumer.
137
+ links: { "depends on": TASK_TYPE },
138
+ // The claim coordinates (research/atomic-shared-task-claim-design): declaring them is what
139
+ // lets sync's converge report a lost claim as ownership and withdraw the re-apply route,
140
+ // instead of presenting the race as an ordinary content conflict. Logical names; the
141
+ // edition's coordinate policy resolves them onto storage keys.
142
+ claim: { ownerField: "assignee", stateField: "progress_status" },
143
+ fields: {
144
+ required: ["title", PROGRESS_STATUS_FIELD],
145
+ optional: ["priority", "assignee", "description"],
146
+ values: { [PROGRESS_STATUS_FIELD]: ["todo", "in_progress", "blocked", "done", "canceled"] },
147
+ valueDescriptions: {},
148
+ // The terminal declaration (tasks/status-terminal-declaration.md): done/canceled are the
149
+ // states past which a Task is no longer open — machinery (list --open, the status sweep's
150
+ // exclusion + sort) ships together with the declaration for every new bundle.
151
+ terminal: { [PROGRESS_STATUS_FIELD]: ["done", "canceled"] },
152
+ descriptions: {
153
+ title: "A concise human-readable summary of the work.",
154
+ [PROGRESS_STATUS_FIELD]: "The task's current workflow state.",
155
+ priority: "Relative urgency used to order the work; follow the bundle's adopted priority scale.",
156
+ assignee: "The person or agent currently responsible for the task.",
157
+ description: "The task's scope, context, acceptance criteria, and other working details.",
158
+ },
159
+ },
160
+ freshnessHorizon: "30d",
161
+ };
162
+ /**
163
+ * The seed's prose body (`conventions/task.md`) explains how the generic primitives compose into
164
+ * task tracking. Composed entirely from EXISTING lite primitives (link graph as DAG, CAS write as claim,
165
+ * `list --type`/`status` as query/lint) — no bespoke task engine, no new verb. The CLI's task-aware
166
+ * columns, claim, and runnable/blocked projections are a separate concern, not part of this recipe.
167
+ */
168
+ export const TASK_SEED_BODY = "# Task\n\n" +
169
+ "A unit of work, composed entirely from lite primitives — no bespoke task engine.\n" +
170
+ "A task is a `type: Task` doc; its logical `progress_status` is a validated enum; its DEPENDENCIES are\n" +
171
+ "typed `depends on` cross-links to prerequisite task docs (the declared link type —\n" +
172
+ "the link graph IS the DAG, and `link show <id> --text \"depends on\"` shows both\n" +
173
+ "directions); an atomic CLAIM is a compare-and-swap write flipping `progress_status` to\n" +
174
+ "`in_progress` (a second claimer gets a VersionConflict). Query with `list --type Task`;\n" +
175
+ "lint/orphans/staleness via `status`.\n";
176
+ /** One-line description, shown by `recipes` and the command reference — the built-in
177
+ * `work-tracking` recipe's `recipe.md` manifest `summary:`. */
178
+ export const WORK_TRACKING_SUMMARY = "Declares the built-in Task kind convention (title/progress_status required, workflow enum, 'depends on' link type, 30d freshness horizon)";
179
+ /** The prose body of the built-in `work-tracking` recipe's `recipe.md` manifest doc — NOT parsed
180
+ * by `parseRecipeFiles` (only the manifest's frontmatter is read), purely descriptive. */
181
+ export const WORK_TRACKING_DESC_BODY = "# Work Tracking\n\n" +
182
+ "Installs the `Task` kind convention: a unit of work with a validated logical `progress_status` enum " +
183
+ "(todo/in_progress/blocked/done/canceled), scaffolded under `tasks/`. Status/priority/assignee " +
184
+ "are FIELDS of Task, not separate conventions or a bespoke task verb — dependencies, claiming, " +
185
+ "and querying all compose from existing generic primitives (`link add`, CAS `doc update`, " +
186
+ "`list --type Task`, `status`).\n\n" +
187
+ "Applied on demand with `recipe add work-tracking` (not part of `init`'s default — that stays " +
188
+ "`context-notes`).\n";
189
+ /** The `type` values the roadmap recipe governs — extracted from the project's own board (the
190
+ * hand-authored `conventions/roadmap` + `conventions/roadmap-item` docs), the same
191
+ * dogfood-then-package path work-tracking took. */
192
+ const ROADMAP_TYPE = "Roadmap";
193
+ const ROADMAP_ITEM_TYPE = "Roadmap Item";
194
+ /**
195
+ * The `Roadmap` kind convention — the SPINE: a single top-level roadmap doc that `contains` the
196
+ * bundle's Roadmap Items via typed links. Frontmatter faithful to the board's hand-authored
197
+ * `conventions/roadmap` (no `path` — the spine is one doc, conventionally the bundle-root
198
+ * `roadmap`, not a scaffolded family; no freshness horizon; `title` is the only required field).
199
+ */
200
+ export const ROADMAP_KIND = {
201
+ id: "conventions/roadmap",
202
+ title: ROADMAP_TYPE,
203
+ governs: ROADMAP_TYPE,
204
+ // The typed-edge vocabulary: the spine's ownership edge is a link whose display text is exactly
205
+ // "contains", targeting a Roadmap Item — declared so `kinds` teaches it and `link add`'s graph
206
+ // lint validates it.
207
+ links: { contains: ROADMAP_ITEM_TYPE },
208
+ // No status field on the spine, so nothing to declare terminal (Brian's ruling on the
209
+ // task board's `tasks/status-terminal-declaration.md`).
210
+ fields: { required: ["title"], optional: [], values: {}, valueDescriptions: {}, terminal: {}, descriptions: {} },
211
+ };
212
+ /** The `conventions/roadmap.md` prose body. */
213
+ export const ROADMAP_SEED_BODY = "# Roadmap\n\n" +
214
+ "The spine document: a single top-level roadmap doc that CONTAINS the bundle's Roadmap\n" +
215
+ "Items via typed links carrying the text `contains` (`link add <roadmap> <item> --text\n" +
216
+ "contains`), making the whole roadmap → item → task chain one filtered query per hop\n" +
217
+ "(`link show <id> --text contains`). Progress is DERIVED, never stored: list the\n" +
218
+ "contained items and read their statuses.\n";
219
+ /**
220
+ * The `Roadmap Item` kind convention — a durable line of work spanning multiple tasks.
221
+ * Frontmatter faithful to the board's hand-authored `conventions/roadmap-item`: scaffolded under
222
+ * `roadmap-items/`, `contains` its Tasks, `status` is the three-state item lifecycle (coarser than
223
+ * Task's five-state enum on purpose — an item's granular progress is the derived task rollup, not
224
+ * a stored field).
225
+ */
226
+ export const ROADMAP_ITEM_KIND = {
227
+ id: "conventions/roadmap-item",
228
+ title: ROADMAP_ITEM_TYPE,
229
+ governs: ROADMAP_ITEM_TYPE,
230
+ path: "roadmap-items/",
231
+ links: { contains: "Task" },
232
+ linkDescriptions: { contains: "Tasks whose delivery is governed by this roadmap commitment." },
233
+ fields: {
234
+ required: ["title", PROGRESS_STATUS_FIELD],
235
+ optional: ["description", "sequence"],
236
+ values: { [PROGRESS_STATUS_FIELD]: ["queued", "active", "done"] },
237
+ valueDescriptions: {},
238
+ // Brian's ruling (task board `tasks/status-terminal-declaration.md`): a done Roadmap Item
239
+ // hides from `list --open`, consistent with Task's done/canceled.
240
+ terminal: { [PROGRESS_STATUS_FIELD]: ["done"] },
241
+ descriptions: {},
242
+ },
243
+ };
244
+ /** The `conventions/roadmap-item.md` prose body. */
245
+ export const ROADMAP_ITEM_SEED_BODY = "# Roadmap Item\n\n" +
246
+ "A durable line of work spanning multiple tasks — the granular form of the single\n" +
247
+ "roadmap spine doc. An item CONTAINS its tasks via links carrying the text `contains`;\n" +
248
+ "backlinks from a task answer \"which item owns this\". An item's progress is DERIVED,\n" +
249
+ "never stored: list its contained tasks and read their workflow states (the rollup). `progress_status`\n" +
250
+ "tracks the item itself: `queued` (not started) → `active` (any contained task moving)\n" +
251
+ "→ `done` (all contained tasks done or canceled).\n";
252
+ /** One-line description, shown by `recipes` and the command reference — the built-in `roadmap`
253
+ * recipe's `recipe.md` manifest `summary:`. */
254
+ export const ROADMAP_SUMMARY = "Declares the Roadmap + Roadmap Item kind conventions (typed 'contains' links, roadmap → item → task; item progress_status enum queued/active/done) — work-tracking's companion";
255
+ /** The prose body of the built-in `roadmap` recipe's `recipe.md` manifest doc — NOT parsed by
256
+ * `parseRecipeFiles` (only the manifest's frontmatter is read), purely descriptive. Its "Pairing
257
+ * the Task kind" section is the RECORDED resolution of this unit's expects_inbound design
258
+ * question: recipes apply via expect-absent CAS and can never patch an EXISTING `conventions/task`
259
+ * doc, and `kind field` edits only `fields.{required,optional,values}` — so the Task-side
260
+ * `expects_inbound` pairing is a documented one-step opt-in (pull → edit → promote, the
261
+ * CLI's one sanctioned convention-schema edit route), not a silent recipe patch. The chain below
262
+ * is pinned by a test that literally executes it (recipes.test.ts). */
263
+ export const ROADMAP_DESC_BODY = "# Roadmap\n\n" +
264
+ "Installs the `Roadmap` and `Roadmap Item` kind conventions: roadmap-items-as-docs. A single\n" +
265
+ "`Roadmap` spine doc CONTAINS `Roadmap Item` docs; each item CONTAINS its `Task` docs — all\n" +
266
+ "via typed links carrying the text `contains`, so the whole roadmap → item → task chain is\n" +
267
+ "one filtered query per hop (`link show <id> --text contains`). An item's progress is derived\n" +
268
+ "from its contained tasks' statuses, never stored.\n\n" +
269
+ "Applied on demand with `recipe add roadmap` (not part of `init`'s default — that stays\n" +
270
+ "`context-notes`). Composes with the `work-tracking` recipe (the `Task` kind this recipe's\n" +
271
+ "`contains` vocabulary points at) — apply both for the full chain.\n\n" +
272
+ "## Pairing the Task kind (opt-in, one documented step)\n\n" +
273
+ "The graph lint that answers \"which tasks have no owning Roadmap Item\" reads\n" +
274
+ "`expects_inbound` on the TASK kind's convention (`status` then reports\n" +
275
+ "`missing_expected_links`). A recipe applies via expect-absent CAS and never touches a doc\n" +
276
+ "that already exists, so this recipe cannot patch your bundle's `conventions/task` — the\n" +
277
+ "pairing is a deliberate one-step opt-in on the adopting bundle:\n\n" +
278
+ "```\n" +
279
+ "superbee pull --doc-key conventions/task.md --out task.md\n" +
280
+ "# edit task.md — add to the frontmatter:\n" +
281
+ "# expects_inbound:\n" +
282
+ "# contains: Roadmap Item\n" +
283
+ "superbee promote task.md --doc-key conventions/task.md --expected-version <version from the pull receipt>\n" +
284
+ "```\n\n" +
285
+ "Without this step everything else still works (the `contains` vocabulary and its link-type\n" +
286
+ "validation come from THIS recipe's conventions); only the \"task lacks an owning item\" lint\n" +
287
+ "stays off.\n";
288
+ //# sourceMappingURL=content.js.map