loci-vault 0.7.0__tar.gz

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 (794) hide show
  1. loci_vault-0.7.0/.githooks/_common.sh +35 -0
  2. loci_vault-0.7.0/.githooks/_install_skills.sh +60 -0
  3. loci_vault-0.7.0/.githooks/post-checkout +11 -0
  4. loci_vault-0.7.0/.githooks/post-merge +9 -0
  5. loci_vault-0.7.0/.githooks/pre-commit +11 -0
  6. loci_vault-0.7.0/.githooks/pre-merge-commit +11 -0
  7. loci_vault-0.7.0/.githooks/pre-push +91 -0
  8. loci_vault-0.7.0/.github/workflows/cla.yml +74 -0
  9. loci_vault-0.7.0/.github/workflows/release.yml +149 -0
  10. loci_vault-0.7.0/.github/workflows/test.yml +67 -0
  11. loci_vault-0.7.0/.gitignore +29 -0
  12. loci_vault-0.7.0/.python-version +1 -0
  13. loci_vault-0.7.0/CLA.md +118 -0
  14. loci_vault-0.7.0/CLAUDE.md +375 -0
  15. loci_vault-0.7.0/CONTRIBUTING.md +127 -0
  16. loci_vault-0.7.0/LICENSE +133 -0
  17. loci_vault-0.7.0/Makefile +236 -0
  18. loci_vault-0.7.0/PKG-INFO +174 -0
  19. loci_vault-0.7.0/README.md +148 -0
  20. loci_vault-0.7.0/SECURITY.md +49 -0
  21. loci_vault-0.7.0/app/design/README.md +251 -0
  22. loci_vault-0.7.0/app/design/SKILL.md +46 -0
  23. loci_vault-0.7.0/app/design/assets/logo/monogram.svg +58 -0
  24. loci_vault-0.7.0/app/design/assets/logo/seal.svg +25 -0
  25. loci_vault-0.7.0/app/design/assets/logo/wordmark-inverse.svg +5 -0
  26. loci_vault-0.7.0/app/design/assets/logo/wordmark.svg +5 -0
  27. loci_vault-0.7.0/app/design/assets/motifs/column.svg +25 -0
  28. loci_vault-0.7.0/app/design/assets/motifs/grain.svg +7 -0
  29. loci_vault-0.7.0/app/design/assets/motifs/meander.svg +44 -0
  30. loci_vault-0.7.0/app/design/colors_and_type.css +369 -0
  31. loci_vault-0.7.0/app/design/instrument-shell.css +315 -0
  32. loci_vault-0.7.0/app/design/preview/01-wordmark.html +14 -0
  33. loci_vault-0.7.0/app/design/preview/02-monogram.html +16 -0
  34. loci_vault-0.7.0/app/design/preview/03-seal.html +16 -0
  35. loci_vault-0.7.0/app/design/preview/04-meander.html +10 -0
  36. loci_vault-0.7.0/app/design/preview/05-colors-outer.html +20 -0
  37. loci_vault-0.7.0/app/design/preview/06-colors-inner.html +45 -0
  38. loci_vault-0.7.0/app/design/preview/07-colors-types.html +20 -0
  39. loci_vault-0.7.0/app/design/preview/08-type-display.html +15 -0
  40. loci_vault-0.7.0/app/design/preview/09-type-body.html +10 -0
  41. loci_vault-0.7.0/app/design/preview/10-type-inner.html +16 -0
  42. loci_vault-0.7.0/app/design/preview/11-spacing.html +19 -0
  43. loci_vault-0.7.0/app/design/preview/12-radii.html +17 -0
  44. loci_vault-0.7.0/app/design/preview/13-elevation.html +17 -0
  45. loci_vault-0.7.0/app/design/preview/14-buttons.html +20 -0
  46. loci_vault-0.7.0/app/design/preview/15-inputs.html +15 -0
  47. loci_vault-0.7.0/app/design/preview/16-chips.html +23 -0
  48. loci_vault-0.7.0/app/design/preview/17-card-node.html +19 -0
  49. loci_vault-0.7.0/app/design/preview/18-card-plate.html +16 -0
  50. loci_vault-0.7.0/app/design/preview/19-icons.html +18 -0
  51. loci_vault-0.7.0/app/design/preview/20-list.html +18 -0
  52. loci_vault-0.7.0/app/design/preview/22-graph.html +185 -0
  53. loci_vault-0.7.0/app/design/preview/23-bezel.html +47 -0
  54. loci_vault-0.7.0/app/design/preview/24-reticle.html +31 -0
  55. loci_vault-0.7.0/app/design/preview/25-folio.html +33 -0
  56. loci_vault-0.7.0/app/design/scraps/sketch-2026-04-25T21-06-25-05rb1g.napkin +6 -0
  57. loci_vault-0.7.0/app/design/topology/app.jsx +122 -0
  58. loci_vault-0.7.0/app/design/topology/atoms.jsx +165 -0
  59. loci_vault-0.7.0/app/design/topology/browser-window.jsx +114 -0
  60. loci_vault-0.7.0/app/design/topology/colors_and_type.css +2 -0
  61. loci_vault-0.7.0/app/design/topology/meander.svg +44 -0
  62. loci_vault-0.7.0/app/design/topology/monogram.svg +58 -0
  63. loci_vault-0.7.0/app/design/topology/screens.jsx +924 -0
  64. loci_vault-0.7.0/app/design/topology/styles.css +596 -0
  65. loci_vault-0.7.0/app/design/topology/tweaks-panel.jsx +568 -0
  66. loci_vault-0.7.0/app/design/topology/vault-data.js +97 -0
  67. loci_vault-0.7.0/app/design/topology/wordmark-inverse.svg +5 -0
  68. loci_vault-0.7.0/app/design/topology-vibe.html +26 -0
  69. loci_vault-0.7.0/app/design/ui_kits/inner-shell/README.md +17 -0
  70. loci_vault-0.7.0/app/design/ui_kits/inner-shell/components.jsx +210 -0
  71. loci_vault-0.7.0/app/design/ui_kits/inner-shell/editor.jsx +117 -0
  72. loci_vault-0.7.0/app/design/ui_kits/inner-shell/graph-view.jsx +485 -0
  73. loci_vault-0.7.0/app/design/ui_kits/inner-shell/index.html +118 -0
  74. loci_vault-0.7.0/app/design/ui_kits/inner-shell/right-rail.jsx +181 -0
  75. loci_vault-0.7.0/app/design/ui_kits/inner-shell/vault-data.js +97 -0
  76. loci_vault-0.7.0/app/design/ui_kits/instrument-shell/README.md +43 -0
  77. loci_vault-0.7.0/app/design/ui_kits/instrument-shell/components.jsx +165 -0
  78. loci_vault-0.7.0/app/design/ui_kits/instrument-shell/index.html +141 -0
  79. loci_vault-0.7.0/app/design/ui_kits/outer-shell/README.md +18 -0
  80. loci_vault-0.7.0/app/design/ui_kits/outer-shell/components.jsx +72 -0
  81. loci_vault-0.7.0/app/design/ui_kits/outer-shell/index.html +117 -0
  82. loci_vault-0.7.0/app/index.html +13 -0
  83. loci_vault-0.7.0/app/package-lock.json +3194 -0
  84. loci_vault-0.7.0/app/package.json +23 -0
  85. loci_vault-0.7.0/app/public/monogram.svg +58 -0
  86. loci_vault-0.7.0/app/src/App.jsx +327 -0
  87. loci_vault-0.7.0/app/src/components/CommandBar.jsx +103 -0
  88. loci_vault-0.7.0/app/src/components/CommandPalette.jsx +139 -0
  89. loci_vault-0.7.0/app/src/components/Corners.jsx +9 -0
  90. loci_vault-0.7.0/app/src/components/FrontmatterGrid.jsx +32 -0
  91. loci_vault-0.7.0/app/src/components/FrontmatterPills.jsx +44 -0
  92. loci_vault-0.7.0/app/src/components/GraphView.jsx +451 -0
  93. loci_vault-0.7.0/app/src/components/HeaderStrip.jsx +23 -0
  94. loci_vault-0.7.0/app/src/components/Icon.jsx +47 -0
  95. loci_vault-0.7.0/app/src/components/Meridian.jsx +3 -0
  96. loci_vault-0.7.0/app/src/components/NodeDetail.jsx +300 -0
  97. loci_vault-0.7.0/app/src/components/NodeRow.jsx +20 -0
  98. loci_vault-0.7.0/app/src/components/NodeViewer.jsx +106 -0
  99. loci_vault-0.7.0/app/src/components/RelationChip.jsx +15 -0
  100. loci_vault-0.7.0/app/src/components/Reticle.jsx +3 -0
  101. loci_vault-0.7.0/app/src/components/RightRail.jsx +225 -0
  102. loci_vault-0.7.0/app/src/components/TagChip.jsx +14 -0
  103. loci_vault-0.7.0/app/src/components/TypeChip.jsx +20 -0
  104. loci_vault-0.7.0/app/src/components/TypeDot.jsx +10 -0
  105. loci_vault-0.7.0/app/src/components/VaultIndex.jsx +204 -0
  106. loci_vault-0.7.0/app/src/components/VaultRail.jsx +245 -0
  107. loci_vault-0.7.0/app/src/constants.js +17 -0
  108. loci_vault-0.7.0/app/src/hooks/useDebounce.js +10 -0
  109. loci_vault-0.7.0/app/src/lib/api.js +136 -0
  110. loci_vault-0.7.0/app/src/lib/markdown.jsx +76 -0
  111. loci_vault-0.7.0/app/src/lib/markdownLinks.js +44 -0
  112. loci_vault-0.7.0/app/src/lib/markdownLinks.test.js +70 -0
  113. loci_vault-0.7.0/app/src/main.jsx +21 -0
  114. loci_vault-0.7.0/app/vite.config.js +84 -0
  115. loci_vault-0.7.0/config.sample.yml +19 -0
  116. loci_vault-0.7.0/dev-vault-seed/adaptive-archive-ledger-and-pattern.md +34 -0
  117. loci_vault-0.7.0/dev-vault-seed/adaptive-cache-pattern-and-protocol.md +35 -0
  118. loci_vault-0.7.0/dev-vault-seed/adaptive-compass-ledger-and-meridian.md +36 -0
  119. loci_vault-0.7.0/dev-vault-seed/adaptive-compass-outline-and-budget.md +34 -0
  120. loci_vault-0.7.0/dev-vault-seed/adaptive-corridor-season-and-ledger.md +33 -0
  121. loci_vault-0.7.0/dev-vault-seed/adaptive-draft-compass-and-cache.md +30 -0
  122. loci_vault-0.7.0/dev-vault-seed/adaptive-draft-kernel-and-compass.md +34 -0
  123. loci_vault-0.7.0/dev-vault-seed/adaptive-draft-meeting.md +33 -0
  124. loci_vault-0.7.0/dev-vault-seed/adaptive-handle-meeting.md +32 -0
  125. loci_vault-0.7.0/dev-vault-seed/adaptive-harbour-workshop-and-garden.md +31 -0
  126. loci_vault-0.7.0/dev-vault-seed/adaptive-harbour.md +31 -0
  127. loci_vault-0.7.0/dev-vault-seed/adaptive-index-workshop-and-protocol.md +32 -0
  128. loci_vault-0.7.0/dev-vault-seed/adaptive-kernel-garden-and-threshold.md +39 -0
  129. loci_vault-0.7.0/dev-vault-seed/adaptive-ledger-outline-and-register.md +35 -0
  130. loci_vault-0.7.0/dev-vault-seed/adaptive-loop-kernel-and-pattern.md +31 -0
  131. loci_vault-0.7.0/dev-vault-seed/adaptive-loop-lattice-and-loop.md +31 -0
  132. loci_vault-0.7.0/dev-vault-seed/adaptive-register-draft-and-lattice.md +40 -0
  133. loci_vault-0.7.0/dev-vault-seed/adaptive-threshold-budget-and-lattice.md +35 -0
  134. loci_vault-0.7.0/dev-vault-seed/aiko-tanaka.md +41 -0
  135. loci_vault-0.7.0/dev-vault-seed/ambient-archive-field-and-register.md +31 -0
  136. loci_vault-0.7.0/dev-vault-seed/ambient-draft-kernel-and-meridian.md +35 -0
  137. loci_vault-0.7.0/dev-vault-seed/ambient-garden-field-and-season.md +31 -0
  138. loci_vault-0.7.0/dev-vault-seed/ambient-garden-orbit-and-harbour.md +38 -0
  139. loci_vault-0.7.0/dev-vault-seed/ambient-handle-corridor-and-field.md +38 -0
  140. loci_vault-0.7.0/dev-vault-seed/ambient-index-register-and-loop.md +35 -0
  141. loci_vault-0.7.0/dev-vault-seed/ambient-ledger-threshold-and-compass.md +37 -0
  142. loci_vault-0.7.0/dev-vault-seed/ambient-meridian-garden-and-budget.md +32 -0
  143. loci_vault-0.7.0/dev-vault-seed/ambient-pattern-workshop-and-kernel.md +33 -0
  144. loci_vault-0.7.0/dev-vault-seed/ambient-protocol-lattice-and-archive.md +34 -0
  145. loci_vault-0.7.0/dev-vault-seed/ambient-register-index-and-kernel.md +33 -0
  146. loci_vault-0.7.0/dev-vault-seed/ambient-register-meeting.md +34 -0
  147. loci_vault-0.7.0/dev-vault-seed/ambient-register-orbit-and-meridian.md +31 -0
  148. loci_vault-0.7.0/dev-vault-seed/ambient-season-harbour-and-margin.md +33 -0
  149. loci_vault-0.7.0/dev-vault-seed/archive-the-borrowed-lattice.md +35 -0
  150. loci_vault-0.7.0/dev-vault-seed/archive-the-brittle-kernel.md +34 -0
  151. loci_vault-0.7.0/dev-vault-seed/archive-the-layered-kernel.md +37 -0
  152. loci_vault-0.7.0/dev-vault-seed/archive-the-narrow-ledger.md +34 -0
  153. loci_vault-0.7.0/dev-vault-seed/archive-the-narrow-outline.md +33 -0
  154. loci_vault-0.7.0/dev-vault-seed/archive-the-portable-ledger.md +39 -0
  155. loci_vault-0.7.0/dev-vault-seed/archive-the-practical-field.md +33 -0
  156. loci_vault-0.7.0/dev-vault-seed/archive-the-practical-pattern.md +31 -0
  157. loci_vault-0.7.0/dev-vault-seed/archive-the-quiet-margin.md +37 -0
  158. loci_vault-0.7.0/dev-vault-seed/aster-field-guides.md +39 -0
  159. loci_vault-0.7.0/dev-vault-seed/audit-the-durable-kernel.md +38 -0
  160. loci_vault-0.7.0/dev-vault-seed/audit-the-narrow-outline.md +35 -0
  161. loci_vault-0.7.0/dev-vault-seed/audit-the-plain-compass.md +41 -0
  162. loci_vault-0.7.0/dev-vault-seed/audit-the-slow-kernel.md +32 -0
  163. loci_vault-0.7.0/dev-vault-seed/basalt-foundry.md +42 -0
  164. loci_vault-0.7.0/dev-vault-seed/batumi.md +43 -0
  165. loci_vault-0.7.0/dev-vault-seed/bergen.md +37 -0
  166. loci_vault-0.7.0/dev-vault-seed/borrowed-compass.md +31 -0
  167. loci_vault-0.7.0/dev-vault-seed/borrowed-draft-orbit-and-cache.md +30 -0
  168. loci_vault-0.7.0/dev-vault-seed/borrowed-handle.md +37 -0
  169. loci_vault-0.7.0/dev-vault-seed/borrowed-harbour-handle-and-cache.md +39 -0
  170. loci_vault-0.7.0/dev-vault-seed/borrowed-index-lattice-and-register.md +38 -0
  171. loci_vault-0.7.0/dev-vault-seed/borrowed-kernel-ledger-and-cache.md +35 -0
  172. loci_vault-0.7.0/dev-vault-seed/borrowed-ledger-kernel-and-meridian.md +39 -0
  173. loci_vault-0.7.0/dev-vault-seed/borrowed-outline-corridor-and-corridor.md +34 -0
  174. loci_vault-0.7.0/dev-vault-seed/borrowed-pattern-kernel-and-index.md +36 -0
  175. loci_vault-0.7.0/dev-vault-seed/borrowed-pattern-project.md +34 -0
  176. loci_vault-0.7.0/dev-vault-seed/borrowed-protocol-lattice-and-workshop.md +43 -0
  177. loci_vault-0.7.0/dev-vault-seed/borrowed-workshop.md +28 -0
  178. loci_vault-0.7.0/dev-vault-seed/brittle-budget-margin-and-draft.md +34 -0
  179. loci_vault-0.7.0/dev-vault-seed/brittle-cache-meeting.md +33 -0
  180. loci_vault-0.7.0/dev-vault-seed/brittle-compass-budget-and-compass.md +28 -0
  181. loci_vault-0.7.0/dev-vault-seed/brittle-compass-index-and-handle.md +32 -0
  182. loci_vault-0.7.0/dev-vault-seed/brittle-compass-meeting.md +32 -0
  183. loci_vault-0.7.0/dev-vault-seed/brittle-corridor-meeting.md +32 -0
  184. loci_vault-0.7.0/dev-vault-seed/brittle-draft-protocol-and-field.md +34 -0
  185. loci_vault-0.7.0/dev-vault-seed/brittle-harbour-draft-and-compass.md +36 -0
  186. loci_vault-0.7.0/dev-vault-seed/brittle-kernel-workshop-and-harbour.md +34 -0
  187. loci_vault-0.7.0/dev-vault-seed/brittle-lattice.md +34 -0
  188. loci_vault-0.7.0/dev-vault-seed/brittle-ledger-workshop-and-pattern.md +29 -0
  189. loci_vault-0.7.0/dev-vault-seed/brittle-orbit-signal-and-garden.md +37 -0
  190. loci_vault-0.7.0/dev-vault-seed/brittle-outline-kernel-and-threshold.md +29 -0
  191. loci_vault-0.7.0/dev-vault-seed/brittle-outline-meeting.md +40 -0
  192. loci_vault-0.7.0/dev-vault-seed/brittle-pattern-cache-and-ledger.md +34 -0
  193. loci_vault-0.7.0/dev-vault-seed/brittle-protocol-outline-and-harbour.md +36 -0
  194. loci_vault-0.7.0/dev-vault-seed/brittle-register-compass-and-compass.md +34 -0
  195. loci_vault-0.7.0/dev-vault-seed/brittle-workshop-orbit-and-compass.md +36 -0
  196. loci_vault-0.7.0/dev-vault-seed/cinder-hill-observatory.md +39 -0
  197. loci_vault-0.7.0/dev-vault-seed/clara-voss.md +41 -0
  198. loci_vault-0.7.0/dev-vault-seed/compare-the-adaptive-outline.md +40 -0
  199. loci_vault-0.7.0/dev-vault-seed/compare-the-borrowed-harbour.md +34 -0
  200. loci_vault-0.7.0/dev-vault-seed/compare-the-hidden-ledger.md +32 -0
  201. loci_vault-0.7.0/dev-vault-seed/compare-the-local-harbour.md +33 -0
  202. loci_vault-0.7.0/dev-vault-seed/compare-the-local-ledger.md +39 -0
  203. loci_vault-0.7.0/dev-vault-seed/compare-the-stable-pattern.md +36 -0
  204. loci_vault-0.7.0/dev-vault-seed/daniel-brenner.md +44 -0
  205. loci_vault-0.7.0/dev-vault-seed/document-the-local-budget.md +34 -0
  206. loci_vault-0.7.0/dev-vault-seed/document-the-minimal-field.md +38 -0
  207. loci_vault-0.7.0/dev-vault-seed/document-the-recursive-threshold.md +37 -0
  208. loci_vault-0.7.0/dev-vault-seed/document-the-restless-threshold.md +32 -0
  209. loci_vault-0.7.0/dev-vault-seed/document-the-sparse-signal.md +34 -0
  210. loci_vault-0.7.0/dev-vault-seed/draft-the-ambient-kernel.md +43 -0
  211. loci_vault-0.7.0/dev-vault-seed/draft-the-hidden-ledger.md +32 -0
  212. loci_vault-0.7.0/dev-vault-seed/draft-the-layered-protocol.md +37 -0
  213. loci_vault-0.7.0/dev-vault-seed/draft-the-minimal-threshold.md +38 -0
  214. loci_vault-0.7.0/dev-vault-seed/draft-the-plain-season.md +36 -0
  215. loci_vault-0.7.0/dev-vault-seed/draft-the-portable-handle.md +33 -0
  216. loci_vault-0.7.0/dev-vault-seed/draft-the-practical-loop.md +43 -0
  217. loci_vault-0.7.0/dev-vault-seed/draft-the-stable-ledger.md +28 -0
  218. loci_vault-0.7.0/dev-vault-seed/durable-cache-cache-and-workshop.md +33 -0
  219. loci_vault-0.7.0/dev-vault-seed/durable-compass-harbour-and-season.md +40 -0
  220. loci_vault-0.7.0/dev-vault-seed/durable-field-corridor-and-field.md +33 -0
  221. loci_vault-0.7.0/dev-vault-seed/durable-field-garden-and-meridian.md +34 -0
  222. loci_vault-0.7.0/dev-vault-seed/durable-field-protocol-and-outline.md +33 -0
  223. loci_vault-0.7.0/dev-vault-seed/durable-kernel-budget-and-archive.md +36 -0
  224. loci_vault-0.7.0/dev-vault-seed/durable-lattice-season-and-garden.md +39 -0
  225. loci_vault-0.7.0/dev-vault-seed/durable-margin-archive-and-harbour.md +36 -0
  226. loci_vault-0.7.0/dev-vault-seed/durable-meridian-field-and-season.md +36 -0
  227. loci_vault-0.7.0/dev-vault-seed/durable-outline-orbit-and-archive.md +31 -0
  228. loci_vault-0.7.0/dev-vault-seed/durable-pattern-budget-and-kernel.md +39 -0
  229. loci_vault-0.7.0/dev-vault-seed/durable-pattern-kernel-and-meridian.md +34 -0
  230. loci_vault-0.7.0/dev-vault-seed/durable-pattern-project.md +33 -0
  231. loci_vault-0.7.0/dev-vault-seed/durable-protocol-margin-and-field.md +29 -0
  232. loci_vault-0.7.0/dev-vault-seed/durable-season-garden-and-garden.md +33 -0
  233. loci_vault-0.7.0/dev-vault-seed/durable-season-outline-and-kernel.md +30 -0
  234. loci_vault-0.7.0/dev-vault-seed/durable-workshop-corridor-and-handle.md +28 -0
  235. loci_vault-0.7.0/dev-vault-seed/durable-workshop-meridian-and-protocol.md +37 -0
  236. loci_vault-0.7.0/dev-vault-seed/fathom-instruments.md +39 -0
  237. loci_vault-0.7.0/dev-vault-seed/ferrous-works.md +32 -0
  238. loci_vault-0.7.0/dev-vault-seed/freya-nilsen.md +46 -0
  239. loci_vault-0.7.0/dev-vault-seed/ghent.md +39 -0
  240. loci_vault-0.7.0/dev-vault-seed/greywater-research.md +45 -0
  241. loci_vault-0.7.0/dev-vault-seed/halden-institute.md +40 -0
  242. loci_vault-0.7.0/dev-vault-seed/halifax.md +41 -0
  243. loci_vault-0.7.0/dev-vault-seed/henrik-dahl.md +51 -0
  244. loci_vault-0.7.0/dev-vault-seed/hidden-draft-ledger-and-draft.md +35 -0
  245. loci_vault-0.7.0/dev-vault-seed/hidden-draft-threshold-and-threshold.md +36 -0
  246. loci_vault-0.7.0/dev-vault-seed/hidden-field-outline-and-corridor.md +35 -0
  247. loci_vault-0.7.0/dev-vault-seed/hidden-garden-threshold-and-lattice.md +28 -0
  248. loci_vault-0.7.0/dev-vault-seed/hidden-handle-outline-and-loop.md +35 -0
  249. loci_vault-0.7.0/dev-vault-seed/hidden-index-threshold-and-orbit.md +42 -0
  250. loci_vault-0.7.0/dev-vault-seed/hidden-meridian-archive-and-protocol.md +34 -0
  251. loci_vault-0.7.0/dev-vault-seed/hidden-meridian-meridian-and-corridor.md +39 -0
  252. loci_vault-0.7.0/dev-vault-seed/hidden-outline-garden-and-season.md +31 -0
  253. loci_vault-0.7.0/dev-vault-seed/hidden-pattern.md +32 -0
  254. loci_vault-0.7.0/dev-vault-seed/hidden-protocol-meridian-and-margin.md +33 -0
  255. loci_vault-0.7.0/dev-vault-seed/hidden-register-project.md +40 -0
  256. loci_vault-0.7.0/dev-vault-seed/hidden-season-meeting.md +39 -0
  257. loci_vault-0.7.0/dev-vault-seed/hidden-threshold-ledger-and-lattice.md +36 -0
  258. loci_vault-0.7.0/dev-vault-seed/how-to-archive-a-borrowed-pattern.md +35 -0
  259. loci_vault-0.7.0/dev-vault-seed/how-to-archive-a-sparse-field.md +43 -0
  260. loci_vault-0.7.0/dev-vault-seed/how-to-archive-a-sparse-signal.md +43 -0
  261. loci_vault-0.7.0/dev-vault-seed/how-to-audit-a-stable-harbour.md +39 -0
  262. loci_vault-0.7.0/dev-vault-seed/how-to-compare-a-plain-index.md +39 -0
  263. loci_vault-0.7.0/dev-vault-seed/how-to-compare-a-plain-pattern.md +38 -0
  264. loci_vault-0.7.0/dev-vault-seed/how-to-compare-a-restless-signal.md +42 -0
  265. loci_vault-0.7.0/dev-vault-seed/how-to-document-a-hidden-field.md +42 -0
  266. loci_vault-0.7.0/dev-vault-seed/how-to-draft-a-stable-archive.md +40 -0
  267. loci_vault-0.7.0/dev-vault-seed/how-to-migrate-a-local-threshold.md +41 -0
  268. loci_vault-0.7.0/dev-vault-seed/how-to-migrate-a-portable-lattice.md +37 -0
  269. loci_vault-0.7.0/dev-vault-seed/how-to-review-a-adaptive-archive.md +41 -0
  270. loci_vault-0.7.0/dev-vault-seed/how-to-sketch-a-durable-meridian.md +43 -0
  271. loci_vault-0.7.0/dev-vault-seed/how-to-sketch-a-restless-kernel.md +34 -0
  272. loci_vault-0.7.0/dev-vault-seed/how-to-trace-a-borrowed-margin.md +37 -0
  273. loci_vault-0.7.0/dev-vault-seed/how-to-trace-a-layered-outline.md +45 -0
  274. loci_vault-0.7.0/dev-vault-seed/how-to-trace-a-quiet-meridian.md +41 -0
  275. loci_vault-0.7.0/dev-vault-seed/ibrahim-sow.md +35 -0
  276. loci_vault-0.7.0/dev-vault-seed/kyoto.md +36 -0
  277. loci_vault-0.7.0/dev-vault-seed/lantern-row-books.md +34 -0
  278. loci_vault-0.7.0/dev-vault-seed/larkspur-collective.md +49 -0
  279. loci_vault-0.7.0/dev-vault-seed/late-archive-loop-and-corridor.md +32 -0
  280. loci_vault-0.7.0/dev-vault-seed/late-archive.md +35 -0
  281. loci_vault-0.7.0/dev-vault-seed/late-cache-lattice-and-ledger.md +41 -0
  282. loci_vault-0.7.0/dev-vault-seed/late-compass-threshold-and-archive.md +43 -0
  283. loci_vault-0.7.0/dev-vault-seed/late-garden-field-and-meridian.md +42 -0
  284. loci_vault-0.7.0/dev-vault-seed/late-kernel-meeting.md +40 -0
  285. loci_vault-0.7.0/dev-vault-seed/late-lattice-garden-and-archive.md +34 -0
  286. loci_vault-0.7.0/dev-vault-seed/late-ledger-lattice-and-margin.md +34 -0
  287. loci_vault-0.7.0/dev-vault-seed/late-meridian-garden-and-signal.md +35 -0
  288. loci_vault-0.7.0/dev-vault-seed/late-orbit-draft-and-pattern.md +30 -0
  289. loci_vault-0.7.0/dev-vault-seed/late-orbit-kernel-and-pattern.md +29 -0
  290. loci_vault-0.7.0/dev-vault-seed/late-pattern-outline-and-workshop.md +37 -0
  291. loci_vault-0.7.0/dev-vault-seed/late-register-loop-and-protocol.md +32 -0
  292. loci_vault-0.7.0/dev-vault-seed/late-threshold-meridian-and-loop.md +35 -0
  293. loci_vault-0.7.0/dev-vault-seed/layered-archive-pattern-and-field.md +41 -0
  294. loci_vault-0.7.0/dev-vault-seed/layered-budget-threshold-and-archive.md +31 -0
  295. loci_vault-0.7.0/dev-vault-seed/layered-compass-kernel-and-margin.md +32 -0
  296. loci_vault-0.7.0/dev-vault-seed/layered-draft-corridor-and-protocol.md +31 -0
  297. loci_vault-0.7.0/dev-vault-seed/layered-draft.md +32 -0
  298. loci_vault-0.7.0/dev-vault-seed/layered-garden-pattern-and-cache.md +37 -0
  299. loci_vault-0.7.0/dev-vault-seed/layered-handle-handle-and-margin.md +33 -0
  300. loci_vault-0.7.0/dev-vault-seed/layered-harbour-archive-and-outline.md +35 -0
  301. loci_vault-0.7.0/dev-vault-seed/layered-index-ledger-and-index.md +30 -0
  302. loci_vault-0.7.0/dev-vault-seed/layered-lattice-outline-and-outline.md +34 -0
  303. loci_vault-0.7.0/dev-vault-seed/layered-ledger-handle-and-ledger.md +39 -0
  304. loci_vault-0.7.0/dev-vault-seed/layered-loop-kernel-and-threshold.md +36 -0
  305. loci_vault-0.7.0/dev-vault-seed/layered-meridian-signal-and-harbour.md +36 -0
  306. loci_vault-0.7.0/dev-vault-seed/layered-outline-field-and-harbour.md +38 -0
  307. loci_vault-0.7.0/dev-vault-seed/layered-outline-pattern-and-margin.md +35 -0
  308. loci_vault-0.7.0/dev-vault-seed/layered-protocol-loop-and-meridian.md +37 -0
  309. loci_vault-0.7.0/dev-vault-seed/layered-signal-index-and-corridor.md +37 -0
  310. loci_vault-0.7.0/dev-vault-seed/layered-threshold-protocol-and-loop.md +32 -0
  311. loci_vault-0.7.0/dev-vault-seed/layered-threshold.md +39 -0
  312. loci_vault-0.7.0/dev-vault-seed/leo-fontaine.md +51 -0
  313. loci_vault-0.7.0/dev-vault-seed/lisbon.md +41 -0
  314. loci_vault-0.7.0/dev-vault-seed/ljubljana.md +41 -0
  315. loci_vault-0.7.0/dev-vault-seed/local-archive-compass-and-signal.md +34 -0
  316. loci_vault-0.7.0/dev-vault-seed/local-cache-archive-and-pattern.md +43 -0
  317. loci_vault-0.7.0/dev-vault-seed/local-cache-draft-and-lattice.md +37 -0
  318. loci_vault-0.7.0/dev-vault-seed/local-cache.md +35 -0
  319. loci_vault-0.7.0/dev-vault-seed/local-corridor-project-2.md +36 -0
  320. loci_vault-0.7.0/dev-vault-seed/local-corridor-project.md +35 -0
  321. loci_vault-0.7.0/dev-vault-seed/local-garden-garden-and-index.md +31 -0
  322. loci_vault-0.7.0/dev-vault-seed/local-garden-project.md +37 -0
  323. loci_vault-0.7.0/dev-vault-seed/local-kernel-meeting.md +36 -0
  324. loci_vault-0.7.0/dev-vault-seed/local-lattice-register-and-signal.md +34 -0
  325. loci_vault-0.7.0/dev-vault-seed/local-ledger-field-and-signal.md +32 -0
  326. loci_vault-0.7.0/dev-vault-seed/local-margin.md +36 -0
  327. loci_vault-0.7.0/dev-vault-seed/local-meridian-workshop-and-season.md +29 -0
  328. loci_vault-0.7.0/dev-vault-seed/local-protocol-outline-and-index.md +37 -0
  329. loci_vault-0.7.0/dev-vault-seed/local-register-cache-and-kernel.md +35 -0
  330. loci_vault-0.7.0/dev-vault-seed/local-threshold-register-and-season.md +40 -0
  331. loci_vault-0.7.0/dev-vault-seed/mara-lindqvist.md +39 -0
  332. loci_vault-0.7.0/dev-vault-seed/measure-the-borrowed-register.md +36 -0
  333. loci_vault-0.7.0/dev-vault-seed/measure-the-brittle-season.md +38 -0
  334. loci_vault-0.7.0/dev-vault-seed/measure-the-durable-ledger.md +39 -0
  335. loci_vault-0.7.0/dev-vault-seed/meridian-press.md +41 -0
  336. loci_vault-0.7.0/dev-vault-seed/migrate-the-brittle-compass.md +29 -0
  337. loci_vault-0.7.0/dev-vault-seed/migrate-the-restless-harbour.md +33 -0
  338. loci_vault-0.7.0/dev-vault-seed/migrate-the-slow-ledger.md +32 -0
  339. loci_vault-0.7.0/dev-vault-seed/migrate-the-slow-loop.md +39 -0
  340. loci_vault-0.7.0/dev-vault-seed/migrate-the-stable-workshop.md +35 -0
  341. loci_vault-0.7.0/dev-vault-seed/minimal-archive-loop-and-garden.md +33 -0
  342. loci_vault-0.7.0/dev-vault-seed/minimal-budget-handle-and-garden.md +33 -0
  343. loci_vault-0.7.0/dev-vault-seed/minimal-field.md +35 -0
  344. loci_vault-0.7.0/dev-vault-seed/minimal-garden-cache-and-corridor.md +33 -0
  345. loci_vault-0.7.0/dev-vault-seed/minimal-handle-orbit-and-kernel.md +36 -0
  346. loci_vault-0.7.0/dev-vault-seed/minimal-index-ledger-and-draft.md +38 -0
  347. loci_vault-0.7.0/dev-vault-seed/minimal-index-ledger-and-kernel.md +34 -0
  348. loci_vault-0.7.0/dev-vault-seed/minimal-index-meeting.md +39 -0
  349. loci_vault-0.7.0/dev-vault-seed/minimal-index-season-and-harbour.md +36 -0
  350. loci_vault-0.7.0/dev-vault-seed/minimal-kernel-register-and-margin.md +33 -0
  351. loci_vault-0.7.0/dev-vault-seed/minimal-ledger-loop-and-corridor.md +37 -0
  352. loci_vault-0.7.0/dev-vault-seed/minimal-ledger-project.md +36 -0
  353. loci_vault-0.7.0/dev-vault-seed/minimal-ledger-signal-and-outline.md +39 -0
  354. loci_vault-0.7.0/dev-vault-seed/minimal-margin-project.md +38 -0
  355. loci_vault-0.7.0/dev-vault-seed/minimal-orbit.md +37 -0
  356. loci_vault-0.7.0/dev-vault-seed/minimal-outline-kernel-and-meridian.md +42 -0
  357. loci_vault-0.7.0/dev-vault-seed/minimal-signal-meeting.md +35 -0
  358. loci_vault-0.7.0/dev-vault-seed/montreal.md +47 -0
  359. loci_vault-0.7.0/dev-vault-seed/nadia-haddad.md +45 -0
  360. loci_vault-0.7.0/dev-vault-seed/narrow-budget-meeting.md +35 -0
  361. loci_vault-0.7.0/dev-vault-seed/narrow-cache.md +33 -0
  362. loci_vault-0.7.0/dev-vault-seed/narrow-compass-compass-and-threshold.md +31 -0
  363. loci_vault-0.7.0/dev-vault-seed/narrow-field-project.md +38 -0
  364. loci_vault-0.7.0/dev-vault-seed/narrow-handle-ledger-and-field.md +40 -0
  365. loci_vault-0.7.0/dev-vault-seed/narrow-lattice-orbit-and-orbit.md +34 -0
  366. loci_vault-0.7.0/dev-vault-seed/narrow-ledger-garden-and-draft.md +36 -0
  367. loci_vault-0.7.0/dev-vault-seed/narrow-ledger-garden-and-signal.md +37 -0
  368. loci_vault-0.7.0/dev-vault-seed/narrow-ledger-pattern-and-workshop.md +34 -0
  369. loci_vault-0.7.0/dev-vault-seed/narrow-ledger.md +33 -0
  370. loci_vault-0.7.0/dev-vault-seed/narrow-margin-season-and-index.md +39 -0
  371. loci_vault-0.7.0/dev-vault-seed/narrow-meridian-ledger-and-outline.md +26 -0
  372. loci_vault-0.7.0/dev-vault-seed/narrow-orbit-harbour-and-pattern.md +33 -0
  373. loci_vault-0.7.0/dev-vault-seed/narrow-outline-orbit-and-corridor.md +34 -0
  374. loci_vault-0.7.0/dev-vault-seed/narrow-protocol-loop-and-register.md +39 -0
  375. loci_vault-0.7.0/dev-vault-seed/narrow-protocol-meridian-and-threshold.md +31 -0
  376. loci_vault-0.7.0/dev-vault-seed/narrow-signal-archive-and-margin.md +36 -0
  377. loci_vault-0.7.0/dev-vault-seed/narrow-signal-meeting.md +35 -0
  378. loci_vault-0.7.0/dev-vault-seed/narrow-workshop-pattern-and-outline.md +40 -0
  379. loci_vault-0.7.0/dev-vault-seed/on-the-brittle-cache.md +41 -0
  380. loci_vault-0.7.0/dev-vault-seed/on-the-late-loop.md +39 -0
  381. loci_vault-0.7.0/dev-vault-seed/on-the-late-margin.md +38 -0
  382. loci_vault-0.7.0/dev-vault-seed/on-the-layered-archive.md +33 -0
  383. loci_vault-0.7.0/dev-vault-seed/on-the-local-harbour.md +35 -0
  384. loci_vault-0.7.0/dev-vault-seed/on-the-minimal-ledger.md +41 -0
  385. loci_vault-0.7.0/dev-vault-seed/on-the-narrow-garden.md +34 -0
  386. loci_vault-0.7.0/dev-vault-seed/on-the-narrow-outline.md +37 -0
  387. loci_vault-0.7.0/dev-vault-seed/on-the-narrow-pattern.md +37 -0
  388. loci_vault-0.7.0/dev-vault-seed/on-the-plain-field.md +42 -0
  389. loci_vault-0.7.0/dev-vault-seed/on-the-practical-signal.md +34 -0
  390. loci_vault-0.7.0/dev-vault-seed/on-the-quiet-ledger.md +34 -0
  391. loci_vault-0.7.0/dev-vault-seed/on-the-recursive-cache.md +37 -0
  392. loci_vault-0.7.0/dev-vault-seed/on-the-recursive-garden.md +37 -0
  393. loci_vault-0.7.0/dev-vault-seed/on-the-restless-margin.md +36 -0
  394. loci_vault-0.7.0/dev-vault-seed/on-the-restless-season.md +40 -0
  395. loci_vault-0.7.0/dev-vault-seed/on-the-stable-compass.md +36 -0
  396. loci_vault-0.7.0/dev-vault-seed/orchard-street-studio.md +46 -0
  397. loci_vault-0.7.0/dev-vault-seed/owen-gallagher.md +38 -0
  398. loci_vault-0.7.0/dev-vault-seed/plain-cache-protocol-and-harbour.md +35 -0
  399. loci_vault-0.7.0/dev-vault-seed/plain-corridor-protocol-and-budget.md +35 -0
  400. loci_vault-0.7.0/dev-vault-seed/plain-field-threshold-and-pattern.md +34 -0
  401. loci_vault-0.7.0/dev-vault-seed/plain-garden-compass-and-garden.md +31 -0
  402. loci_vault-0.7.0/dev-vault-seed/plain-index-signal-and-corridor.md +31 -0
  403. loci_vault-0.7.0/dev-vault-seed/plain-lattice-signal-and-index.md +32 -0
  404. loci_vault-0.7.0/dev-vault-seed/plain-loop-harbour-and-season.md +37 -0
  405. loci_vault-0.7.0/dev-vault-seed/plain-loop-margin-and-protocol.md +40 -0
  406. loci_vault-0.7.0/dev-vault-seed/plain-margin-handle-and-draft.md +34 -0
  407. loci_vault-0.7.0/dev-vault-seed/plain-margin-ledger-and-cache.md +37 -0
  408. loci_vault-0.7.0/dev-vault-seed/plain-meridian-kernel-and-handle.md +37 -0
  409. loci_vault-0.7.0/dev-vault-seed/plain-orbit-harbour-and-orbit.md +38 -0
  410. loci_vault-0.7.0/dev-vault-seed/plain-outline-register-and-ledger.md +34 -0
  411. loci_vault-0.7.0/dev-vault-seed/plain-pattern-archive-and-loop.md +34 -0
  412. loci_vault-0.7.0/dev-vault-seed/plain-pattern-workshop-and-archive.md +32 -0
  413. loci_vault-0.7.0/dev-vault-seed/plain-protocol-draft-and-garden.md +33 -0
  414. loci_vault-0.7.0/dev-vault-seed/plain-protocol-garden-and-garden.md +40 -0
  415. loci_vault-0.7.0/dev-vault-seed/plain-season-field-and-handle.md +36 -0
  416. loci_vault-0.7.0/dev-vault-seed/plain-season-register-and-signal.md +39 -0
  417. loci_vault-0.7.0/dev-vault-seed/plain-signal-ledger-and-lattice.md +30 -0
  418. loci_vault-0.7.0/dev-vault-seed/portable-archive-budget-and-corridor.md +38 -0
  419. loci_vault-0.7.0/dev-vault-seed/portable-archive-protocol-and-pattern.md +38 -0
  420. loci_vault-0.7.0/dev-vault-seed/portable-cache-cache-and-margin.md +39 -0
  421. loci_vault-0.7.0/dev-vault-seed/portable-cache-outline-and-field.md +30 -0
  422. loci_vault-0.7.0/dev-vault-seed/portable-corridor-loop-and-signal.md +35 -0
  423. loci_vault-0.7.0/dev-vault-seed/portable-corridor-project.md +33 -0
  424. loci_vault-0.7.0/dev-vault-seed/portable-draft-outline-and-handle.md +34 -0
  425. loci_vault-0.7.0/dev-vault-seed/portable-field-loop-and-margin.md +37 -0
  426. loci_vault-0.7.0/dev-vault-seed/portable-garden-loop-and-threshold.md +37 -0
  427. loci_vault-0.7.0/dev-vault-seed/portable-kernel-loop-and-orbit.md +31 -0
  428. loci_vault-0.7.0/dev-vault-seed/portable-kernel-outline-and-index.md +31 -0
  429. loci_vault-0.7.0/dev-vault-seed/portable-ledger-protocol-and-handle.md +34 -0
  430. loci_vault-0.7.0/dev-vault-seed/portable-loop-project.md +34 -0
  431. loci_vault-0.7.0/dev-vault-seed/portable-register-register-and-compass.md +33 -0
  432. loci_vault-0.7.0/dev-vault-seed/portable-register-signal-and-loop.md +37 -0
  433. loci_vault-0.7.0/dev-vault-seed/portable-season-field-and-compass.md +30 -0
  434. loci_vault-0.7.0/dev-vault-seed/portable-threshold-workshop-and-outline.md +38 -0
  435. loci_vault-0.7.0/dev-vault-seed/portable-workshop-meeting.md +37 -0
  436. loci_vault-0.7.0/dev-vault-seed/portable-workshop-meridian-and-season.md +42 -0
  437. loci_vault-0.7.0/dev-vault-seed/portable-workshop-project.md +30 -0
  438. loci_vault-0.7.0/dev-vault-seed/portable-workshop-signal-and-budget.md +33 -0
  439. loci_vault-0.7.0/dev-vault-seed/porto.md +32 -0
  440. loci_vault-0.7.0/dev-vault-seed/practical-budget-signal-and-protocol.md +31 -0
  441. loci_vault-0.7.0/dev-vault-seed/practical-cache-lattice-and-garden.md +36 -0
  442. loci_vault-0.7.0/dev-vault-seed/practical-corridor-outline-and-index.md +34 -0
  443. loci_vault-0.7.0/dev-vault-seed/practical-garden-meeting.md +35 -0
  444. loci_vault-0.7.0/dev-vault-seed/practical-harbour-draft-and-field.md +38 -0
  445. loci_vault-0.7.0/dev-vault-seed/practical-harbour-margin-and-signal.md +39 -0
  446. loci_vault-0.7.0/dev-vault-seed/practical-lattice-meridian-and-outline.md +31 -0
  447. loci_vault-0.7.0/dev-vault-seed/practical-lattice.md +34 -0
  448. loci_vault-0.7.0/dev-vault-seed/practical-loop-index-and-compass.md +39 -0
  449. loci_vault-0.7.0/dev-vault-seed/practical-margin-workshop-and-draft.md +35 -0
  450. loci_vault-0.7.0/dev-vault-seed/practical-meridian-project.md +34 -0
  451. loci_vault-0.7.0/dev-vault-seed/practical-pattern-compass-and-margin.md +30 -0
  452. loci_vault-0.7.0/dev-vault-seed/practical-pattern-outline-and-margin.md +35 -0
  453. loci_vault-0.7.0/dev-vault-seed/practical-threshold-loop-and-draft.md +34 -0
  454. loci_vault-0.7.0/dev-vault-seed/priya-raman.md +46 -0
  455. loci_vault-0.7.0/dev-vault-seed/prototype-the-brittle-field.md +33 -0
  456. loci_vault-0.7.0/dev-vault-seed/prune-the-borrowed-corridor.md +37 -0
  457. loci_vault-0.7.0/dev-vault-seed/prune-the-restless-budget.md +33 -0
  458. loci_vault-0.7.0/dev-vault-seed/quebec-city.md +52 -0
  459. loci_vault-0.7.0/dev-vault-seed/quiet-budget-meeting.md +32 -0
  460. loci_vault-0.7.0/dev-vault-seed/quiet-budget.md +27 -0
  461. loci_vault-0.7.0/dev-vault-seed/quiet-cache-corridor-and-archive.md +35 -0
  462. loci_vault-0.7.0/dev-vault-seed/quiet-cache-project.md +36 -0
  463. loci_vault-0.7.0/dev-vault-seed/quiet-compass.md +33 -0
  464. loci_vault-0.7.0/dev-vault-seed/quiet-field-protocol-and-threshold.md +32 -0
  465. loci_vault-0.7.0/dev-vault-seed/quiet-garden-workshop-and-pattern.md +38 -0
  466. loci_vault-0.7.0/dev-vault-seed/quiet-harbour-ledger-and-corridor.md +38 -0
  467. loci_vault-0.7.0/dev-vault-seed/quiet-harbour-protocol-and-loop.md +31 -0
  468. loci_vault-0.7.0/dev-vault-seed/quiet-index-protocol-and-harbour.md +34 -0
  469. loci_vault-0.7.0/dev-vault-seed/quiet-kernel.md +29 -0
  470. loci_vault-0.7.0/dev-vault-seed/quiet-ledger-loop-and-cache.md +39 -0
  471. loci_vault-0.7.0/dev-vault-seed/quiet-ledger-signal-and-outline.md +32 -0
  472. loci_vault-0.7.0/dev-vault-seed/quiet-loop-ledger-and-handle.md +33 -0
  473. loci_vault-0.7.0/dev-vault-seed/quiet-margin-index-and-harbour.md +33 -0
  474. loci_vault-0.7.0/dev-vault-seed/quiet-margin.md +35 -0
  475. loci_vault-0.7.0/dev-vault-seed/quiet-orbit-meeting.md +34 -0
  476. loci_vault-0.7.0/dev-vault-seed/quiet-outline.md +31 -0
  477. loci_vault-0.7.0/dev-vault-seed/quiet-season.md +36 -0
  478. loci_vault-0.7.0/dev-vault-seed/quill-and-compass.md +38 -0
  479. loci_vault-0.7.0/dev-vault-seed/reading-log-adaptive-protocol.md +36 -0
  480. loci_vault-0.7.0/dev-vault-seed/reading-log-ambient-orbit.md +43 -0
  481. loci_vault-0.7.0/dev-vault-seed/reading-log-borrowed-workshop.md +35 -0
  482. loci_vault-0.7.0/dev-vault-seed/reading-log-durable-ledger.md +47 -0
  483. loci_vault-0.7.0/dev-vault-seed/reading-log-layered-archive.md +42 -0
  484. loci_vault-0.7.0/dev-vault-seed/reading-log-layered-protocol.md +36 -0
  485. loci_vault-0.7.0/dev-vault-seed/reading-log-minimal-kernel.md +39 -0
  486. loci_vault-0.7.0/dev-vault-seed/reading-log-narrow-season.md +38 -0
  487. loci_vault-0.7.0/dev-vault-seed/reading-log-narrow-workshop.md +38 -0
  488. loci_vault-0.7.0/dev-vault-seed/reading-log-plain-compass.md +32 -0
  489. loci_vault-0.7.0/dev-vault-seed/reading-log-plain-workshop.md +35 -0
  490. loci_vault-0.7.0/dev-vault-seed/reading-log-practical-loop.md +43 -0
  491. loci_vault-0.7.0/dev-vault-seed/reading-log-restless-lattice.md +35 -0
  492. loci_vault-0.7.0/dev-vault-seed/reading-log-stable-harbour.md +41 -0
  493. loci_vault-0.7.0/dev-vault-seed/reading-log-stable-ledger.md +43 -0
  494. loci_vault-0.7.0/dev-vault-seed/rebuild-the-minimal-garden.md +36 -0
  495. loci_vault-0.7.0/dev-vault-seed/rebuild-the-plain-meridian.md +38 -0
  496. loci_vault-0.7.0/dev-vault-seed/rebuild-the-recursive-index.md +34 -0
  497. loci_vault-0.7.0/dev-vault-seed/recursive-budget-lattice-and-compass.md +36 -0
  498. loci_vault-0.7.0/dev-vault-seed/recursive-cache-project.md +33 -0
  499. loci_vault-0.7.0/dev-vault-seed/recursive-compass-workshop-and-pattern.md +34 -0
  500. loci_vault-0.7.0/dev-vault-seed/recursive-compass.md +35 -0
  501. loci_vault-0.7.0/dev-vault-seed/recursive-handle-meeting.md +38 -0
  502. loci_vault-0.7.0/dev-vault-seed/recursive-index-garden-and-cache.md +33 -0
  503. loci_vault-0.7.0/dev-vault-seed/recursive-index-margin-and-handle.md +32 -0
  504. loci_vault-0.7.0/dev-vault-seed/recursive-lattice-meridian-and-garden.md +28 -0
  505. loci_vault-0.7.0/dev-vault-seed/recursive-ledger-field-and-handle.md +28 -0
  506. loci_vault-0.7.0/dev-vault-seed/recursive-ledger-kernel-and-outline.md +38 -0
  507. loci_vault-0.7.0/dev-vault-seed/recursive-ledger-meeting.md +36 -0
  508. loci_vault-0.7.0/dev-vault-seed/recursive-ledger.md +33 -0
  509. loci_vault-0.7.0/dev-vault-seed/recursive-loop-ledger-and-threshold.md +35 -0
  510. loci_vault-0.7.0/dev-vault-seed/recursive-loop.md +35 -0
  511. loci_vault-0.7.0/dev-vault-seed/recursive-outline-threshold-and-outline.md +35 -0
  512. loci_vault-0.7.0/dev-vault-seed/recursive-pattern-orbit-and-season.md +37 -0
  513. loci_vault-0.7.0/dev-vault-seed/recursive-register-protocol-and-ledger.md +33 -0
  514. loci_vault-0.7.0/dev-vault-seed/recursive-register-workshop-and-compass.md +36 -0
  515. loci_vault-0.7.0/dev-vault-seed/recursive-season-compass-and-protocol.md +38 -0
  516. loci_vault-0.7.0/dev-vault-seed/recursive-workshop-ledger-and-garden.md +34 -0
  517. loci_vault-0.7.0/dev-vault-seed/refactor-the-minimal-index.md +38 -0
  518. loci_vault-0.7.0/dev-vault-seed/refactor-the-restless-loop.md +40 -0
  519. loci_vault-0.7.0/dev-vault-seed/refactor-the-sparse-pattern.md +31 -0
  520. loci_vault-0.7.0/dev-vault-seed/refactor-the-sparse-protocol.md +39 -0
  521. loci_vault-0.7.0/dev-vault-seed/restless-archive-kernel-and-outline.md +30 -0
  522. loci_vault-0.7.0/dev-vault-seed/restless-budget.md +33 -0
  523. loci_vault-0.7.0/dev-vault-seed/restless-cache-field-and-corridor.md +36 -0
  524. loci_vault-0.7.0/dev-vault-seed/restless-cache-project.md +36 -0
  525. loci_vault-0.7.0/dev-vault-seed/restless-corridor-signal-and-harbour.md +36 -0
  526. loci_vault-0.7.0/dev-vault-seed/restless-harbour-draft-and-harbour.md +39 -0
  527. loci_vault-0.7.0/dev-vault-seed/restless-index-register-and-ledger.md +34 -0
  528. loci_vault-0.7.0/dev-vault-seed/restless-kernel-loop-and-lattice.md +31 -0
  529. loci_vault-0.7.0/dev-vault-seed/restless-lattice-protocol-and-outline.md +32 -0
  530. loci_vault-0.7.0/dev-vault-seed/restless-ledger-kernel-and-outline.md +37 -0
  531. loci_vault-0.7.0/dev-vault-seed/restless-margin-harbour-and-orbit.md +33 -0
  532. loci_vault-0.7.0/dev-vault-seed/restless-margin-kernel-and-archive.md +34 -0
  533. loci_vault-0.7.0/dev-vault-seed/restless-margin-register-and-pattern.md +35 -0
  534. loci_vault-0.7.0/dev-vault-seed/restless-meridian-ledger-and-outline.md +31 -0
  535. loci_vault-0.7.0/dev-vault-seed/restless-outline-index-and-threshold.md +30 -0
  536. loci_vault-0.7.0/dev-vault-seed/restless-outline-season-and-compass.md +28 -0
  537. loci_vault-0.7.0/dev-vault-seed/restless-protocol-threshold-and-archive.md +36 -0
  538. loci_vault-0.7.0/dev-vault-seed/restless-register-budget-and-protocol.md +34 -0
  539. loci_vault-0.7.0/dev-vault-seed/restless-threshold-outline-and-harbour.md +41 -0
  540. loci_vault-0.7.0/dev-vault-seed/restless-threshold.md +38 -0
  541. loci_vault-0.7.0/dev-vault-seed/review-the-ambient-register.md +30 -0
  542. loci_vault-0.7.0/dev-vault-seed/review-the-borrowed-budget.md +33 -0
  543. loci_vault-0.7.0/dev-vault-seed/review-the-restless-loop.md +40 -0
  544. loci_vault-0.7.0/dev-vault-seed/review-the-sparse-cache.md +35 -0
  545. loci_vault-0.7.0/dev-vault-seed/reykjavik.md +35 -0
  546. loci_vault-0.7.0/dev-vault-seed/ruth-okonkwo.md +44 -0
  547. loci_vault-0.7.0/dev-vault-seed/salta.md +33 -0
  548. loci_vault-0.7.0/dev-vault-seed/saltmarsh-cooperative.md +42 -0
  549. loci_vault-0.7.0/dev-vault-seed/samuel-achebe.md +41 -0
  550. loci_vault-0.7.0/dev-vault-seed/sketch-the-late-loop.md +34 -0
  551. loci_vault-0.7.0/dev-vault-seed/sketch-the-late-margin.md +36 -0
  552. loci_vault-0.7.0/dev-vault-seed/sketch-the-narrow-workshop.md +33 -0
  553. loci_vault-0.7.0/dev-vault-seed/sketch-the-plain-orbit.md +37 -0
  554. loci_vault-0.7.0/dev-vault-seed/sketch-the-slow-handle.md +31 -0
  555. loci_vault-0.7.0/dev-vault-seed/sketch-the-sparse-meridian.md +39 -0
  556. loci_vault-0.7.0/dev-vault-seed/slate-ridge-partners.md +41 -0
  557. loci_vault-0.7.0/dev-vault-seed/slow-budget.md +36 -0
  558. loci_vault-0.7.0/dev-vault-seed/slow-field-compass-and-harbour.md +40 -0
  559. loci_vault-0.7.0/dev-vault-seed/slow-field-threshold-and-harbour.md +37 -0
  560. loci_vault-0.7.0/dev-vault-seed/slow-field.md +29 -0
  561. loci_vault-0.7.0/dev-vault-seed/slow-harbour-pattern-and-signal.md +27 -0
  562. loci_vault-0.7.0/dev-vault-seed/slow-harbour-season-and-harbour.md +32 -0
  563. loci_vault-0.7.0/dev-vault-seed/slow-index-index-and-outline.md +34 -0
  564. loci_vault-0.7.0/dev-vault-seed/slow-lattice-project.md +30 -0
  565. loci_vault-0.7.0/dev-vault-seed/slow-ledger-archive-and-protocol.md +36 -0
  566. loci_vault-0.7.0/dev-vault-seed/slow-ledger-field-and-signal.md +33 -0
  567. loci_vault-0.7.0/dev-vault-seed/slow-ledger.md +29 -0
  568. loci_vault-0.7.0/dev-vault-seed/slow-margin-threshold-and-threshold.md +32 -0
  569. loci_vault-0.7.0/dev-vault-seed/slow-meridian-margin-and-loop.md +36 -0
  570. loci_vault-0.7.0/dev-vault-seed/slow-pattern-pattern-and-margin.md +39 -0
  571. loci_vault-0.7.0/dev-vault-seed/slow-register-budget-and-orbit.md +39 -0
  572. loci_vault-0.7.0/dev-vault-seed/slow-register-loop-and-meridian.md +37 -0
  573. loci_vault-0.7.0/dev-vault-seed/slow-signal.md +35 -0
  574. loci_vault-0.7.0/dev-vault-seed/sparse-archive-corridor-and-cache.md +30 -0
  575. loci_vault-0.7.0/dev-vault-seed/sparse-archive-draft-and-workshop.md +29 -0
  576. loci_vault-0.7.0/dev-vault-seed/sparse-budget-index-and-loop.md +33 -0
  577. loci_vault-0.7.0/dev-vault-seed/sparse-cache-loop-and-corridor.md +29 -0
  578. loci_vault-0.7.0/dev-vault-seed/sparse-corridor-kernel-and-ledger.md +36 -0
  579. loci_vault-0.7.0/dev-vault-seed/sparse-field-season-and-ledger.md +30 -0
  580. loci_vault-0.7.0/dev-vault-seed/sparse-index-draft-and-field.md +32 -0
  581. loci_vault-0.7.0/dev-vault-seed/sparse-lattice-threshold-and-budget.md +35 -0
  582. loci_vault-0.7.0/dev-vault-seed/sparse-ledger-pattern-and-corridor.md +38 -0
  583. loci_vault-0.7.0/dev-vault-seed/sparse-margin-cache-and-meridian.md +38 -0
  584. loci_vault-0.7.0/dev-vault-seed/sparse-pattern-orbit-and-ledger.md +32 -0
  585. loci_vault-0.7.0/dev-vault-seed/sparse-pattern.md +31 -0
  586. loci_vault-0.7.0/dev-vault-seed/sparse-register-register-and-protocol.md +37 -0
  587. loci_vault-0.7.0/dev-vault-seed/sparse-season-compass-and-threshold.md +34 -0
  588. loci_vault-0.7.0/dev-vault-seed/sparse-season-compass-and-workshop.md +36 -0
  589. loci_vault-0.7.0/dev-vault-seed/sparse-signal-project.md +32 -0
  590. loci_vault-0.7.0/dev-vault-seed/sparse-threshold.md +36 -0
  591. loci_vault-0.7.0/dev-vault-seed/sparse-workshop-meeting.md +33 -0
  592. loci_vault-0.7.0/dev-vault-seed/stable-budget-pattern-and-ledger.md +28 -0
  593. loci_vault-0.7.0/dev-vault-seed/stable-budget-pattern-and-threshold.md +31 -0
  594. loci_vault-0.7.0/dev-vault-seed/stable-field.md +31 -0
  595. loci_vault-0.7.0/dev-vault-seed/stable-kernel-harbour-and-workshop.md +37 -0
  596. loci_vault-0.7.0/dev-vault-seed/stable-lattice-pattern-and-orbit.md +34 -0
  597. loci_vault-0.7.0/dev-vault-seed/stable-lattice-project.md +31 -0
  598. loci_vault-0.7.0/dev-vault-seed/stable-ledger-project.md +36 -0
  599. loci_vault-0.7.0/dev-vault-seed/stable-outline-lattice-and-cache.md +32 -0
  600. loci_vault-0.7.0/dev-vault-seed/stable-pattern-harbour-and-signal.md +34 -0
  601. loci_vault-0.7.0/dev-vault-seed/stable-protocol-archive-and-cache.md +33 -0
  602. loci_vault-0.7.0/dev-vault-seed/stable-protocol-register-and-compass.md +40 -0
  603. loci_vault-0.7.0/dev-vault-seed/stable-season-garden-and-ledger.md +33 -0
  604. loci_vault-0.7.0/dev-vault-seed/stable-season.md +36 -0
  605. loci_vault-0.7.0/dev-vault-seed/stable-signal-register-and-draft.md +33 -0
  606. loci_vault-0.7.0/dev-vault-seed/stable-signal-season-and-budget.md +33 -0
  607. loci_vault-0.7.0/dev-vault-seed/sun-hee-park.md +41 -0
  608. loci_vault-0.7.0/dev-vault-seed/tbilisi.md +40 -0
  609. loci_vault-0.7.0/dev-vault-seed/tidewater-analytics.md +40 -0
  610. loci_vault-0.7.0/dev-vault-seed/trace-the-practical-threshold.md +33 -0
  611. loci_vault-0.7.0/dev-vault-seed/trace-the-slow-pattern.md +34 -0
  612. loci_vault-0.7.0/dev-vault-seed/tromso.md +35 -0
  613. loci_vault-0.7.0/dev-vault-seed/turku.md +38 -0
  614. loci_vault-0.7.0/dev-vault-seed/valparaiso.md +39 -0
  615. loci_vault-0.7.0/dev-vault-seed/yara-khalil.md +35 -0
  616. loci_vault-0.7.0/docs/development.md +314 -0
  617. loci_vault-0.7.0/docs/diagrams.md +24 -0
  618. loci_vault-0.7.0/docs/examples.md +211 -0
  619. loci_vault-0.7.0/docs/execution-flows.md +107 -0
  620. loci_vault-0.7.0/docs/file-saving.md +188 -0
  621. loci_vault-0.7.0/docs/images/command-palette.png +0 -0
  622. loci_vault-0.7.0/docs/images/graph-view.png +0 -0
  623. loci_vault-0.7.0/docs/images/monogram-dark.svg +58 -0
  624. loci_vault-0.7.0/docs/images/monogram-light.svg +58 -0
  625. loci_vault-0.7.0/docs/images/node-detail.png +0 -0
  626. loci_vault-0.7.0/docs/images/vault-index.png +0 -0
  627. loci_vault-0.7.0/docs/ontology.md +88 -0
  628. loci_vault-0.7.0/docs/problem.md +58 -0
  629. loci_vault-0.7.0/docs/roadmap.md +70 -0
  630. loci_vault-0.7.0/docs/setup.md +273 -0
  631. loci_vault-0.7.0/docs/testing.md +109 -0
  632. loci_vault-0.7.0/docs/usage.md +367 -0
  633. loci_vault-0.7.0/pyproject.toml +81 -0
  634. loci_vault-0.7.0/run_server.sh +5 -0
  635. loci_vault-0.7.0/scripts/dev_seed.py +533 -0
  636. loci_vault-0.7.0/scripts/migrate_subtypes.py +253 -0
  637. loci_vault-0.7.0/scripts/migrate_tags_to_relations.py +274 -0
  638. loci_vault-0.7.0/scripts/release.py +453 -0
  639. loci_vault-0.7.0/scripts/release_notes.py +203 -0
  640. loci_vault-0.7.0/scripts/run_preflight.py +83 -0
  641. loci_vault-0.7.0/setup.py +194 -0
  642. loci_vault-0.7.0/src/loci/__init__.py +14 -0
  643. loci_vault-0.7.0/src/loci/api.py +1600 -0
  644. loci_vault-0.7.0/src/loci/http_server.py +813 -0
  645. loci_vault-0.7.0/src/loci/mcp_server.py +1235 -0
  646. loci_vault-0.7.0/src/loci/skill_assembly.py +176 -0
  647. loci_vault-0.7.0/src/loci/skills/loci-inbox/SKILL.md +131 -0
  648. loci_vault-0.7.0/src/loci/skills/loci-ingest-directory/SKILL.md +135 -0
  649. loci_vault-0.7.0/src/loci/skills/loci-query/SKILL.md +258 -0
  650. loci_vault-0.7.0/src/loci/skills/loci-save/SKILL.md +299 -0
  651. loci_vault-0.7.0/src/loci/skills/references/field-dictionary.md +568 -0
  652. loci_vault-0.7.0/src/loci/skills/references/foreign-definitions.md +15 -0
  653. loci_vault-0.7.0/src/loci/skills/references/has-asset-guide.md +267 -0
  654. loci_vault-0.7.0/src/loci/skills/references/loci-inbox-user.md +15 -0
  655. loci_vault-0.7.0/src/loci/skills/references/loci-ingest-directory-user.md +15 -0
  656. loci_vault-0.7.0/src/loci/skills/references/loci-query-user.md +15 -0
  657. loci_vault-0.7.0/src/loci/skills/references/loci-save-user.md +15 -0
  658. loci_vault-0.7.0/src/loci/skills/references/ontology-guide.md +420 -0
  659. loci_vault-0.7.0/src/loci/skills/references/ontology-system.md +364 -0
  660. loci_vault-0.7.0/src/loci/skills/references/ontology-user.yaml +25 -0
  661. loci_vault-0.7.0/src/loci/skills/references/ontology.yaml +291 -0
  662. loci_vault-0.7.0/src/loci/skills/references/relation-dictionary-user.yaml +15 -0
  663. loci_vault-0.7.0/src/loci/skills/references/relation-dictionary.md +37 -0
  664. loci_vault-0.7.0/src/loci/skills/references/relation-dictionary.yaml +301 -0
  665. loci_vault-0.7.0/src/loci/skills/references/scheme-dictionary-user.yaml +10 -0
  666. loci_vault-0.7.0/src/loci/skills/references/scheme-dictionary.yaml +68 -0
  667. loci_vault-0.7.0/src/loci/skills/references/tag-dictionary.md +21 -0
  668. loci_vault-0.7.0/src/loci/skills/references/type-decision.md +91 -0
  669. loci_vault-0.7.0/src/loci/skills/references/type-dictionary.md +29 -0
  670. loci_vault-0.7.0/src/loci/skills/references/update-workflow.md +121 -0
  671. loci_vault-0.7.0/src/loci/skills_install.py +337 -0
  672. loci_vault-0.7.0/src/loci/static/assets/index-BLTxyopg.js +69 -0
  673. loci_vault-0.7.0/src/loci/static/assets/index-xJGMiXlc.css +1 -0
  674. loci_vault-0.7.0/src/loci/static/index.html +14 -0
  675. loci_vault-0.7.0/src/loci/static/monogram.svg +58 -0
  676. loci_vault-0.7.0/src/loci/tools/__init__.py +1 -0
  677. loci_vault-0.7.0/src/loci/tools/asset_registry.py +124 -0
  678. loci_vault-0.7.0/src/loci/tools/directory_scanner.py +149 -0
  679. loci_vault-0.7.0/src/loci/tools/frontmatter.py +69 -0
  680. loci_vault-0.7.0/src/loci/tools/inbox_plan.py +207 -0
  681. loci_vault-0.7.0/src/loci/tools/inbox_scanner.py +94 -0
  682. loci_vault-0.7.0/src/loci/tools/metadata_extractor.py +181 -0
  683. loci_vault-0.7.0/src/loci/tools/nx_graph.py +582 -0
  684. loci_vault-0.7.0/src/loci/tools/relation_registry.py +252 -0
  685. loci_vault-0.7.0/src/loci/tools/resolvers/__init__.py +7 -0
  686. loci_vault-0.7.0/src/loci/tools/resolvers/base.py +35 -0
  687. loci_vault-0.7.0/src/loci/tools/resolvers/dispatcher.py +90 -0
  688. loci_vault-0.7.0/src/loci/tools/resolvers/external_resolver.py +30 -0
  689. loci_vault-0.7.0/src/loci/tools/resolvers/local_resolver.py +67 -0
  690. loci_vault-0.7.0/src/loci/tools/resolvers/url_resolver.py +47 -0
  691. loci_vault-0.7.0/src/loci/tools/scheme_registry.py +212 -0
  692. loci_vault-0.7.0/src/loci/tools/slug.py +80 -0
  693. loci_vault-0.7.0/src/loci/tools/tag_hygiene.py +197 -0
  694. loci_vault-0.7.0/src/loci/tools/type_registry.py +392 -0
  695. loci_vault-0.7.0/src/loci/tools/uid_generator.py +21 -0
  696. loci_vault-0.7.0/src/loci/tools/vault_history.py +913 -0
  697. loci_vault-0.7.0/src/loci/tools/vault_init.py +923 -0
  698. loci_vault-0.7.0/src/loci/tools/vault_linter.py +312 -0
  699. loci_vault-0.7.0/src/loci/tools/write_file.py +530 -0
  700. loci_vault-0.7.0/sync/rclone.conf.sample +36 -0
  701. loci_vault-0.7.0/sync/sync.sh +86 -0
  702. loci_vault-0.7.0/tests/conftest.py +156 -0
  703. loci_vault-0.7.0/tests/e2e/README.md +193 -0
  704. loci_vault-0.7.0/tests/e2e/conftest.py +471 -0
  705. loci_vault-0.7.0/tests/e2e/test_errors.py +68 -0
  706. loci_vault-0.7.0/tests/e2e/test_filtering.py +320 -0
  707. loci_vault-0.7.0/tests/e2e/test_fixture_composition.py +121 -0
  708. loci_vault-0.7.0/tests/e2e/test_frontmatter_parsing.py +55 -0
  709. loci_vault-0.7.0/tests/e2e/test_host_allowlist.py +15 -0
  710. loci_vault-0.7.0/tests/e2e/test_navigation.py +154 -0
  711. loci_vault-0.7.0/tests/e2e/test_packaged_ui.py +141 -0
  712. loci_vault-0.7.0/tests/e2e/test_screenshots.py +142 -0
  713. loci_vault-0.7.0/tests/e2e/test_smoke.py +166 -0
  714. loci_vault-0.7.0/tests/e2e/vault_facts.py +137 -0
  715. loci_vault-0.7.0/tests/fixtures/e2e-overlay/README.md +41 -0
  716. loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-archived-note.md +24 -0
  717. loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-asset-note.md +30 -0
  718. loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-ghost-parent.md +26 -0
  719. loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-rule-in-frontmatter.md +30 -0
  720. loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-zz-recipe.md +25 -0
  721. loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-zz-skill.md +26 -0
  722. loci_vault-0.7.0/tests/fixtures/e2e-overlay/meta/ontology-user.yaml +6 -0
  723. loci_vault-0.7.0/tests/fixtures/expected/retrieval.yaml +115 -0
  724. loci_vault-0.7.0/tests/fixtures/vault/article-distributed-systems.md +24 -0
  725. loci_vault-0.7.0/tests/fixtures/vault/article-ml-fundamentals.md +25 -0
  726. loci_vault-0.7.0/tests/fixtures/vault/article-python-type-hints.md +25 -0
  727. loci_vault-0.7.0/tests/fixtures/vault/doc-chain-alpha.md +25 -0
  728. loci_vault-0.7.0/tests/fixtures/vault/doc-chain-beta.md +25 -0
  729. loci_vault-0.7.0/tests/fixtures/vault/doc-chain-gamma.md +23 -0
  730. loci_vault-0.7.0/tests/fixtures/vault/doc-data-pipeline-design.md +25 -0
  731. loci_vault-0.7.0/tests/fixtures/vault/doc-graph-database-concepts.md +24 -0
  732. loci_vault-0.7.0/tests/fixtures/vault/doc-intro-ml.md +25 -0
  733. loci_vault-0.7.0/tests/fixtures/vault/doc-introduccion-python.md +26 -0
  734. loci_vault-0.7.0/tests/fixtures/vault/doc-knowledge-graph-design.md +24 -0
  735. loci_vault-0.7.0/tests/fixtures/vault/doc-knowledge-graph-patterns.md +24 -0
  736. loci_vault-0.7.0/tests/fixtures/vault/doc-python-best-practices.md +25 -0
  737. loci_vault-0.7.0/tests/fixtures/vault/doc-spoke-one.md +23 -0
  738. loci_vault-0.7.0/tests/fixtures/vault/doc-spoke-three.md +23 -0
  739. loci_vault-0.7.0/tests/fixtures/vault/doc-spoke-two.md +23 -0
  740. loci_vault-0.7.0/tests/fixtures/vault/doc-testing-strategies.md +25 -0
  741. loci_vault-0.7.0/tests/fixtures/vault/entity-jane-smith.md +24 -0
  742. loci_vault-0.7.0/tests/fixtures/vault/project-knowledge-graph-platform.md +24 -0
  743. loci_vault-0.7.0/tests/fixtures/vault/task-build-test-suite.md +27 -0
  744. loci_vault-0.7.0/tests/fixtures/vault/task-deploy-to-production.md +26 -0
  745. loci_vault-0.7.0/tests/fixtures/vault/task-review-prs.md +26 -0
  746. loci_vault-0.7.0/tests/fixtures/vault/task-setup-ci-pipeline.md +27 -0
  747. loci_vault-0.7.0/tests/fixtures/vault/task-write-documentation.md +26 -0
  748. loci_vault-0.7.0/tests/fixtures/vault/topic-hub-central.md +28 -0
  749. loci_vault-0.7.0/tests/fixtures/vault/topic-python-ecosystem.md +24 -0
  750. loci_vault-0.7.0/tests/fixtures/vault/topic-software-testing.md +24 -0
  751. loci_vault-0.7.0/tests/test_api.py +1111 -0
  752. loci_vault-0.7.0/tests/test_asset_registry.py +116 -0
  753. loci_vault-0.7.0/tests/test_conftest_git_env.py +40 -0
  754. loci_vault-0.7.0/tests/test_define_relation.py +232 -0
  755. loci_vault-0.7.0/tests/test_define_type.py +187 -0
  756. loci_vault-0.7.0/tests/test_dev_seed.py +215 -0
  757. loci_vault-0.7.0/tests/test_directory_scanner.py +263 -0
  758. loci_vault-0.7.0/tests/test_frontmatter.py +184 -0
  759. loci_vault-0.7.0/tests/test_git_hooks.py +313 -0
  760. loci_vault-0.7.0/tests/test_has_asset_lint.py +349 -0
  761. loci_vault-0.7.0/tests/test_http_server.py +709 -0
  762. loci_vault-0.7.0/tests/test_inbox_plan.py +322 -0
  763. loci_vault-0.7.0/tests/test_inbox_scanner.py +166 -0
  764. loci_vault-0.7.0/tests/test_makefile_dev.py +121 -0
  765. loci_vault-0.7.0/tests/test_makefile_run.py +289 -0
  766. loci_vault-0.7.0/tests/test_metadata_extractor.py +171 -0
  767. loci_vault-0.7.0/tests/test_nx_graph.py +895 -0
  768. loci_vault-0.7.0/tests/test_publishing.py +154 -0
  769. loci_vault-0.7.0/tests/test_readiness.py +545 -0
  770. loci_vault-0.7.0/tests/test_relation_registry.py +223 -0
  771. loci_vault-0.7.0/tests/test_release.py +596 -0
  772. loci_vault-0.7.0/tests/test_resolvers.py +282 -0
  773. loci_vault-0.7.0/tests/test_retrieval.py +45 -0
  774. loci_vault-0.7.0/tests/test_run_preflight.py +142 -0
  775. loci_vault-0.7.0/tests/test_scheme_registry.py +161 -0
  776. loci_vault-0.7.0/tests/test_server.py +462 -0
  777. loci_vault-0.7.0/tests/test_setup.py +94 -0
  778. loci_vault-0.7.0/tests/test_skill_assembly.py +246 -0
  779. loci_vault-0.7.0/tests/test_skill_files.py +271 -0
  780. loci_vault-0.7.0/tests/test_skills_install.py +451 -0
  781. loci_vault-0.7.0/tests/test_slug.py +143 -0
  782. loci_vault-0.7.0/tests/test_static_frontend.py +166 -0
  783. loci_vault-0.7.0/tests/test_subtypes.py +436 -0
  784. loci_vault-0.7.0/tests/test_sync_script.py +136 -0
  785. loci_vault-0.7.0/tests/test_tag_hygiene.py +331 -0
  786. loci_vault-0.7.0/tests/test_tags_to_relations.py +294 -0
  787. loci_vault-0.7.0/tests/test_type_registry.py +481 -0
  788. loci_vault-0.7.0/tests/test_uid_generator.py +21 -0
  789. loci_vault-0.7.0/tests/test_vault_history.py +1518 -0
  790. loci_vault-0.7.0/tests/test_vault_init.py +1290 -0
  791. loci_vault-0.7.0/tests/test_vault_linter.py +533 -0
  792. loci_vault-0.7.0/tests/test_vite_config.py +100 -0
  793. loci_vault-0.7.0/tests/test_write_file.py +1099 -0
  794. loci_vault-0.7.0/uv.lock +1126 -0
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ # Shared helpers for the hooks in this directory.
3
+
4
+ PROTECTED_BRANCHES="main master"
5
+
6
+ current_branch() {
7
+ git symbolic-ref --quiet --short HEAD 2>/dev/null || echo ""
8
+ }
9
+
10
+ is_protected() {
11
+ local branch="$1"
12
+ for protected in $PROTECTED_BRANCHES; do
13
+ [ "$branch" = "$protected" ] && return 0
14
+ done
15
+ return 1
16
+ }
17
+
18
+ # Escape hatch: LOCI_ALLOW_MAIN=1 git <cmd> ...
19
+ override_set() {
20
+ [ "${LOCI_ALLOW_MAIN:-}" = "1" ]
21
+ }
22
+
23
+ deny() {
24
+ echo "" >&2
25
+ echo " BLOCKED: $1" >&2
26
+ echo "" >&2
27
+ echo " Work on a branch and open a PR:" >&2
28
+ echo " git switch -c my-branch" >&2
29
+ echo " git push -u origin my-branch" >&2
30
+ echo " gh pr create" >&2
31
+ echo "" >&2
32
+ echo " Override (rarely correct): LOCI_ALLOW_MAIN=1 <your git command>" >&2
33
+ echo "" >&2
34
+ exit 1
35
+ }
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env bash
2
+ # Reinstall the Loci skill stubs into ~/.claude/skills/ when the skills tree
3
+ # changed.
4
+ #
5
+ # The stub in ~/.claude/skills/<name>/ only calls read_skill, and the MCP
6
+ # server reads src/loci/skills/<name>/SKILL.md on every call, so editing a
7
+ # skill is live with nothing to re-run. What the stub cannot do is create
8
+ # itself: a skill directory added by someone else arrives with `git pull` and
9
+ # nothing in ~/.claude/skills/ names it, so Claude Code never sees the skill
10
+ # at all. A reworded trigger description is the same gap, since the stub
11
+ # carries it. That is what this closes, which is why it runs on checkout and
12
+ # merge rather than on commit — your own edits are already live.
13
+ #
14
+ # Never fails the git operation it is attached to. A checkout that aborts
15
+ # because a stub could not be written would be a far worse trade than a skill
16
+ # that is one `make skills` behind.
17
+ #
18
+ # Escape hatch: LOCI_SKIP_SKILL_INSTALL=1 git <cmd> ...
19
+ #
20
+ # Usage: _install_skills.sh <old-rev> <new-rev>
21
+ set -uo pipefail
22
+
23
+ [ "${LOCI_SKIP_SKILL_INSTALL:-}" = "1" ] && exit 0
24
+
25
+ old_rev="${1:-}"
26
+ new_rev="${2:-}"
27
+ [ -n "$old_rev" ] && [ -n "$new_rev" ] || exit 0
28
+
29
+ # Both revs have to be real. On a fresh clone, or the first commit in a repo,
30
+ # ORIG_HEAD may not resolve — nothing to compare, nothing to do.
31
+ git rev-parse --verify --quiet "$old_rev" >/dev/null || exit 0
32
+ git rev-parse --verify --quiet "$new_rev" >/dev/null || exit 0
33
+
34
+ # The common case by a wide margin: a branch switch that touched no skill.
35
+ # Checking first keeps the hook off the critical path of every checkout.
36
+ #
37
+ # Only the SKILL.md files and the stub writer itself count. A stub is a
38
+ # skill's frontmatter over a body template in skills_install.py, and nothing
39
+ # else, so a change under skills/references/ (ontology, tag seeds, the
40
+ # *-user.md overlay seeds) cannot move one — running here would print
41
+ # "skills changed" and spawn uv for a listing that finds nothing to do. A
42
+ # pull that rewords the template, on the other hand, leaves every installed
43
+ # stub carrying the old text, which is exactly the gap this hook is for.
44
+ if git diff --quiet "$old_rev" "$new_rev" -- 'src/loci/skills/*/SKILL.md' src/loci/skills_install.py 2>/dev/null; then
45
+ exit 0
46
+ fi
47
+
48
+ command -v uv >/dev/null 2>&1 || exit 0
49
+
50
+ cd "$(git rev-parse --show-toplevel)" || exit 0
51
+
52
+ # `loci skills` compares each installed stub against the one it would write
53
+ # and only touches the ones that differ, so a procedure-only change costs a
54
+ # listing and nothing else.
55
+ echo "githooks: skills changed — updating stubs in ~/.claude/skills/" >&2
56
+ if ! uv run --quiet loci skills --yes >&2; then
57
+ echo "githooks: stub install failed. Run \`make skills\` when convenient." >&2
58
+ fi
59
+
60
+ exit 0
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # Reinstall the skill stubs after a branch switch that changed them.
3
+ #
4
+ # git passes: <previous HEAD> <new HEAD> <branch-checkout flag>
5
+ # The flag is 1 for a branch checkout and 0 for a file checkout
6
+ # (`git checkout -- path`), which changes the working tree but not HEAD.
7
+ set -uo pipefail
8
+
9
+ [ "${3:-0}" = "1" ] || exit 0
10
+
11
+ exec "$(dirname "$0")/_install_skills.sh" "$1" "$2"
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bash
2
+ # Reinstall the skill stubs after a merge — in practice, after `git pull` brings in a
3
+ # skill someone else added or renamed.
4
+ #
5
+ # git passes the squash flag as $1 and nothing useful about the range, so the
6
+ # comparison is against ORIG_HEAD, which merge sets to the pre-merge commit.
7
+ set -uo pipefail
8
+
9
+ exec "$(dirname "$0")/_install_skills.sh" ORIG_HEAD HEAD
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # Refuse ordinary commits made directly on a protected branch.
3
+ set -euo pipefail
4
+
5
+ . "$(dirname "$0")/_common.sh"
6
+
7
+ branch="$(current_branch)"
8
+ is_protected "$branch" || exit 0
9
+ override_set && exit 0
10
+
11
+ deny "direct commit on '$branch'."
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # Refuse `git merge` that would create a merge commit on a protected branch.
3
+ set -euo pipefail
4
+
5
+ . "$(dirname "$0")/_common.sh"
6
+
7
+ branch="$(current_branch)"
8
+ is_protected "$branch" || exit 0
9
+ override_set && exit 0
10
+
11
+ deny "merge into '$branch' from your working copy."
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env bash
2
+ # Two gates before anything leaves this machine:
3
+ #
4
+ # 1. Refuse pushing to a protected branch.
5
+ # This is the hook that actually stops "merged straight into main": a
6
+ # fast-forward merge creates no commit, so pre-commit and
7
+ # pre-merge-commit never fire for it — but the push still comes here.
8
+ #
9
+ # 2. Run the unit suite, to keep obviously-red trees off a PR.
10
+ # Unit only (-m "not e2e"): ~4s, no Node or browser needed. The e2e
11
+ # suite is left to CI, which runs both on every push and PR.
12
+ # This tests the working tree, not the commits being pushed — when the
13
+ # two differ the hook says so instead of implying more than it checked.
14
+ #
15
+ # The two gates have separate escape hatches: LOCI_ALLOW_MAIN=1 waives the
16
+ # branch guard only, LOCI_SKIP_TESTS=1 waives the suite only.
17
+ #
18
+ # stdin lines: <local ref> <local sha> <remote ref> <remote sha>
19
+ set -euo pipefail
20
+
21
+ . "$(dirname "$0")/_common.sh"
22
+
23
+ head_sha="$(git rev-parse HEAD 2>/dev/null || echo "")"
24
+ pushing_commits=0
25
+ tree_matches_push=1
26
+
27
+ while read -r _local_ref local_sha remote_ref _remote_sha; do
28
+ [ -z "$remote_ref" ] && continue
29
+
30
+ remote_branch="${remote_ref#refs/heads/}"
31
+ if [ "$remote_branch" != "$remote_ref" ] && is_protected "$remote_branch" && ! override_set; then
32
+ deny "push to '$remote_branch' on the remote."
33
+ fi
34
+
35
+ # All-zero local sha means "delete this remote ref" — nothing to test.
36
+ case "$local_sha" in
37
+ *[!0]*)
38
+ pushing_commits=1
39
+ [ "$local_sha" = "$head_sha" ] || tree_matches_push=0
40
+ ;;
41
+ esac
42
+ done
43
+
44
+ [ "$pushing_commits" -eq 1 ] || exit 0
45
+ [ "${LOCI_SKIP_TESTS:-}" = "1" ] && exit 0
46
+
47
+ if ! command -v uv >/dev/null 2>&1; then
48
+ echo "" >&2
49
+ echo " BLOCKED: uv not found, so the unit suite cannot run." >&2
50
+ echo "" >&2
51
+ echo " Install it: https://docs.astral.sh/uv/" >&2
52
+ echo " Pushing from a GUI client or IDE? Its PATH probably misses uv" >&2
53
+ echo " (usually ~/.local/bin) — push from a terminal, or fix its PATH." >&2
54
+ echo "" >&2
55
+ echo " Skip this check (rarely correct): LOCI_SKIP_TESTS=1 git push" >&2
56
+ echo "" >&2
57
+ exit 1
58
+ fi
59
+
60
+ cd "$(git rev-parse --show-toplevel)"
61
+
62
+ # The suite covers the working tree. When that is not what is being pushed,
63
+ # say so — passing tests here do not mean the pushed commits are green, and
64
+ # failing ones may have nothing to do with them.
65
+ if [ "$tree_matches_push" -eq 0 ]; then
66
+ echo "" >&2
67
+ echo " NOTE: pushing commits that are not checked out (HEAD is elsewhere)." >&2
68
+ echo " Tests below cover the working tree, not those commits." >&2
69
+ echo "" >&2
70
+ elif ! git diff --quiet HEAD 2>/dev/null; then
71
+ echo "" >&2
72
+ echo " NOTE: working tree has uncommitted changes." >&2
73
+ echo " Tests below cover the tree as it stands, not the pushed commits." >&2
74
+ echo "" >&2
75
+ fi
76
+
77
+ echo "pre-push: running unit tests..." >&2
78
+
79
+ # --extra dev because pytest lives in the dev extra; uv installs it on demand
80
+ # and caches it, so this is only slow on a fresh clone.
81
+ if ! uv run --extra dev pytest tests/ -q -m "not e2e"; then
82
+ echo "" >&2
83
+ echo " BLOCKED: unit tests failed — not pushing." >&2
84
+ echo "" >&2
85
+ echo " Fix them, or see the full output with:" >&2
86
+ echo " make test-fast" >&2
87
+ echo "" >&2
88
+ echo " Skip this check (rarely correct): LOCI_SKIP_TESTS=1 git push" >&2
89
+ echo "" >&2
90
+ exit 1
91
+ fi
@@ -0,0 +1,74 @@
1
+ name: CLA
2
+
3
+ # Blocks a pull request until its author has signed the Contributor Licence
4
+ # Agreement in CLA.md.
5
+ #
6
+ # Why this is enforced rather than advisory: Loci is released under PolyForm
7
+ # Noncommercial, so commercial use requires a separate licence from the owner.
8
+ # Granting one means holding rights to the whole codebase. A contribution
9
+ # merged without a CLA arrives under PolyForm Noncommercial itself, leaving the
10
+ # project with only noncommercial rights to part of its own source and no way
11
+ # to license the whole commercially. That damage is silent and permanent, so
12
+ # the gate sits before the merge rather than in a document nobody reads.
13
+ #
14
+ # Signatures are recorded in signatures/cla.json on the cla-signatures branch.
15
+ # That branch must already exist and must not be protected — the action commits
16
+ # to it but does not create it, and fails the run with "Branch cla-signatures
17
+ # not found" if it is missing. It is kept as an orphan branch holding signatures
18
+ # only. Signing is once per person, not per PR.
19
+ #
20
+ # Note on the allowlist below: it matches GitHub logins, resolved from each
21
+ # commit's author email. A commit whose email is not attached to a GitHub
22
+ # account resolves to no login, so the allowlist cannot match it and even the
23
+ # owner is asked to sign. Commit with an email your account owns.
24
+
25
+ on:
26
+ # pull_request_target, not pull_request: the job needs write access to comment
27
+ # on the PR and to commit the signature file, which a fork-triggered
28
+ # `pull_request` run does not get. It checks out no PR code, so the elevated
29
+ # token is never exposed to a contributor's branch.
30
+ pull_request_target:
31
+ types: [opened, synchronize, reopened, closed]
32
+ issue_comment:
33
+ types: [created]
34
+
35
+ permissions:
36
+ actions: write
37
+ contents: write
38
+ pull-requests: write
39
+ statuses: write
40
+
41
+ concurrency:
42
+ group: cla-${{ github.event.issue.number || github.event.pull_request.number }}
43
+ cancel-in-progress: false
44
+
45
+ jobs:
46
+ cla:
47
+ runs-on: ubuntu-latest
48
+ # Run on PR events, and on comments only when they are on a PR and either
49
+ # sign or recheck. Without this every issue comment in the repo starts a job.
50
+ if: >
51
+ (github.event_name == 'pull_request_target') ||
52
+ (github.event.issue.pull_request != null &&
53
+ (contains(github.event.comment.body, 'I have read the CLA Document and I hereby sign the CLA') ||
54
+ github.event.comment.body == 'recheck'))
55
+ steps:
56
+ - name: Check or record CLA signature
57
+ uses: contributor-assistant/github-action@ca4a40a7d1004f18d9960b404b97e5f30a505a08 # v2.6.1
58
+ env:
59
+ # The action's own token. No PAT is needed while the signature branch
60
+ # lives in this same repository.
61
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
62
+ with:
63
+ path-to-signatures: signatures/cla.json
64
+ path-to-document: https://github.com/gked/loci/blob/main/CLA.md
65
+ branch: cla-signatures
66
+ allowlist: gked,dependabot[bot]
67
+ custom-notsigned-prcomment: >
68
+ Thanks for the pull request. Before it can be merged, please read
69
+ the [Contributor Licence Agreement](https://github.com/gked/loci/blob/main/CLA.md)
70
+ and sign it by posting exactly this as a new comment:
71
+ custom-pr-sign-comment: >
72
+ I have read the CLA Document and I hereby sign the CLA
73
+ custom-allsigned-prcomment: >
74
+ All contributors have signed the CLA. Thank you.
@@ -0,0 +1,149 @@
1
+ name: Release
2
+
3
+ # Fires on the tag `make release-publish` pushes. Everything before this — the
4
+ # version bump, its PR, the merge — has already happened on main, and both
5
+ # suites ran there. What is left is to prove the tag is honest, build the
6
+ # artifact, and publish it.
7
+ on:
8
+ push:
9
+ tags: ["v*"]
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ build:
16
+ name: Build
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ with:
21
+ # release_notes.py reads the previous tag's files out of git history,
22
+ # so a shallow clone would leave every release looking like the first.
23
+ fetch-depth: 0
24
+
25
+ - uses: astral-sh/setup-uv@v4
26
+ with:
27
+ enable-cache: true
28
+
29
+ # The wheel carries the built frontend, so the release needs Node. An
30
+ # installed Loci has neither app/ nor a toolchain to build it with, and
31
+ # `loci` would serve an API and no UI.
32
+ - uses: actions/setup-node@v4
33
+ with:
34
+ node-version: "20"
35
+ cache: npm
36
+ cache-dependency-path: app/package-lock.json
37
+
38
+ # First, and before anything is built: a tag whose version disagrees with
39
+ # pyproject.toml would publish a wheel that lies about what it is. That
40
+ # happens when the tag is pushed before the bump PR merged.
41
+ - name: Verify the tag matches pyproject.toml
42
+ run: uv run python scripts/release.py check "${GITHUB_REF_NAME}"
43
+
44
+ - name: Install dependencies
45
+ run: uv sync --extra dev
46
+
47
+ # The unit suite only. The e2e suite already ran on the merge commit this
48
+ # tag points at, and re-running the browser against an unchanged tree
49
+ # would add minutes without adding a signal.
50
+ - name: Run unit tests
51
+ run: uv run pytest tests/ -v -m "not e2e"
52
+
53
+ # `make wheel`, not `uv build`: it compiles the frontend into
54
+ # src/loci/static/ first. A bare uv build produces a backend-only wheel,
55
+ # which is what every release before this shipped.
56
+ - name: Build the wheel
57
+ run: make wheel
58
+
59
+ # PyPI refuses a distribution whose metadata it cannot render, and a
60
+ # published version can never be replaced. Catch it here, before the
61
+ # GitHub Release exists and long before the upload. twine is pinned: this
62
+ # job builds what is uploaded to PyPI, so it does not run a floating tool.
63
+ - name: Check the distribution metadata
64
+ run: uvx twine@7.0.0 check --strict dist/*
65
+
66
+ # The publish job ships exactly these files, not a second build.
67
+ - name: Keep the built distributions for the publish job
68
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
69
+ with:
70
+ name: dist
71
+ path: dist/
72
+ if-no-files-found: error
73
+
74
+ # PyPI trusted publishing: no API token is stored anywhere. PyPI trusts this
75
+ # repository, this workflow file and this environment, and accepts the
76
+ # short-lived identity token GitHub mints for the job. That is also why this
77
+ # is its own job — `id-token: write` is held by the one job that runs no
78
+ # repository code, only the upload.
79
+ #
80
+ # It runs before the GitHub Release. If the pending publisher or the `pypi`
81
+ # environment is missing or misnamed, the upload fails here and no Release
82
+ # exists yet: fix the setup and "Re-run failed jobs". The reverse order left a
83
+ # public Release for a version that never reached PyPI.
84
+ publish-pypi:
85
+ name: Publish to PyPI
86
+ needs: build
87
+ runs-on: ubuntu-latest
88
+ environment:
89
+ name: pypi
90
+ url: https://pypi.org/p/loci-vault
91
+ permissions:
92
+ id-token: write
93
+ steps:
94
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
95
+ with:
96
+ name: dist
97
+ path: dist/
98
+
99
+ - uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
100
+
101
+ # Last, and only once PyPI has the files: a Release means the version is out.
102
+ # If this job fails, "Re-run failed jobs" repeats only this job. PyPI refuses
103
+ # a second upload of the same version, so the upload must not be repeated.
104
+ release:
105
+ name: GitHub Release
106
+ needs: publish-pypi
107
+ runs-on: ubuntu-latest
108
+ permissions:
109
+ contents: write # creating a Release writes to the repo
110
+ steps:
111
+ - uses: actions/checkout@v4
112
+ with:
113
+ # release_notes.py reads the previous tag's files out of git history.
114
+ fetch-depth: 0
115
+
116
+ - uses: astral-sh/setup-uv@v4
117
+
118
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
119
+ with:
120
+ name: dist
121
+ path: dist/
122
+
123
+ - name: Compose release notes
124
+ env:
125
+ GH_TOKEN: ${{ github.token }}
126
+ run: |
127
+ TAG="${GITHUB_REF_NAME}"
128
+ # "^" is the tag's parent: the newest release tag before this one.
129
+ # Empty before the first release, which release_notes.py handles.
130
+ PREVIOUS="$(git describe --tags --abbrev=0 --match 'v*' "${TAG}^" 2>/dev/null || true)"
131
+ echo "Previous release: ${PREVIOUS:-none}"
132
+
133
+ # The upgrade section first — it is the part that asks something of
134
+ # the reader — then GitHub's own list of merged PRs beneath it.
135
+ uv run --no-project python scripts/release_notes.py "${PREVIOUS}" "${TAG}" > notes.md
136
+ gh api "repos/${GITHUB_REPOSITORY}/releases/generate-notes" \
137
+ -f tag_name="${TAG}" \
138
+ ${PREVIOUS:+-f previous_tag_name="${PREVIOUS}"} \
139
+ --jq .body >> notes.md
140
+
141
+ cat notes.md
142
+
143
+ - name: Publish the release
144
+ env:
145
+ GH_TOKEN: ${{ github.token }}
146
+ run: |
147
+ gh release create "${GITHUB_REF_NAME}" dist/* \
148
+ --title "Loci ${GITHUB_REF_NAME}" \
149
+ --notes-file notes.md
@@ -0,0 +1,67 @@
1
+ name: Tests
2
+
3
+ # A bare `push:` alongside `pull_request:` ran both jobs twice for every commit
4
+ # on a PR branch — once per event, same SHA. Limiting push to main keeps the
5
+ # post-merge check on main and lets pull_request cover branch work exactly once.
6
+ # Branches with no PR open no longer get CI; the pre-push hook still runs the
7
+ # unit suite locally, and opening the PR runs both suites.
8
+ on:
9
+ push:
10
+ branches: [main]
11
+ pull_request:
12
+
13
+ jobs:
14
+ unit:
15
+ name: Python unit tests
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - uses: astral-sh/setup-uv@v4
21
+ with:
22
+ enable-cache: true
23
+
24
+ - name: Install dependencies
25
+ run: uv sync --extra dev
26
+
27
+ - name: Run tests
28
+ run: uv run pytest tests/ -v -m "not e2e"
29
+
30
+ e2e:
31
+ name: Browser e2e tests
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/checkout@v4
35
+
36
+ - uses: astral-sh/setup-uv@v4
37
+ with:
38
+ enable-cache: true
39
+
40
+ - uses: actions/setup-node@v4
41
+ with:
42
+ node-version: "20"
43
+ cache: npm
44
+ cache-dependency-path: app/package-lock.json
45
+
46
+ - name: Install Python dependencies
47
+ run: uv sync --extra dev
48
+
49
+ - name: Install frontend dependencies
50
+ run: npm ci --prefix app
51
+
52
+ # --with-deps pulls the system libraries headless Chromium needs on
53
+ # ubuntu-latest; without it the browser fails to launch.
54
+ - name: Install Playwright browser
55
+ run: uv run playwright install --with-deps chromium
56
+
57
+ - name: Run e2e tests
58
+ run: uv run pytest tests/e2e/ -v --tracing=retain-on-failure
59
+
60
+ # Traces replay a CI failure locally: npx playwright show-trace <file>
61
+ - name: Upload traces on failure
62
+ if: failure()
63
+ uses: actions/upload-artifact@v4
64
+ with:
65
+ name: playwright-traces
66
+ path: test-results/
67
+ retention-days: 7
@@ -0,0 +1,29 @@
1
+ config.yml
2
+ config.yml.migrated
3
+ # Scratch config and vault used by `make dev` — never the real ones.
4
+ dev-config.yml
5
+ dev-vault/
6
+ dev-vault.tmp/
7
+ vault/
8
+ !tests/fixtures/vault/
9
+ __pycache__/
10
+ *.pyc
11
+ .DS_Store
12
+ .venv/
13
+ .coverage
14
+ settings.local.json
15
+ .claude/
16
+ app/node_modules/
17
+ app/dist/
18
+ # Playwright traces/screenshots from the e2e suite
19
+ test-results/
20
+
21
+ # Wheels from `uv build`. uv writes dist/.gitignore too; this is the explicit one.
22
+ /dist/
23
+
24
+ # The frontend bundle `make wheel` compiles into the package. Build output,
25
+ # not source — pyproject's hatch `artifacts` entry is what still ships it.
26
+ /src/loci/static/
27
+
28
+ # Vite's dependency pre-bundle cache. Regenerated on every dev start.
29
+ app/.vite/
@@ -0,0 +1 @@
1
+ 3.13.0
@@ -0,0 +1,118 @@
1
+ # Loci Contributor License Agreement
2
+
3
+ Adapted from the Apache Software Foundation Individual CLA v2.0 for a
4
+ single-owner project. Plain-language summary first; the agreement itself is
5
+ below and is what actually binds.
6
+
7
+ ## Why this exists
8
+
9
+ Loci is released under the [PolyForm Noncommercial 1.0.0](LICENSE) licence.
10
+ Noncommercial use is free for everyone; commercial use needs a separate licence
11
+ from the owner.
12
+
13
+ That only works if the owner holds rights broad enough to grant one. Without
14
+ this agreement, a contribution arrives licensed under PolyForm Noncommercial
15
+ itself, which means the project would hold only *noncommercial* rights to part
16
+ of its own code and could no longer license the whole of it commercially. One
17
+ merged pull request would quietly remove that option, for good.
18
+
19
+ This agreement fixes that, and keeps the licence itself changeable later. If the
20
+ project ever moves to AGPL, MIT, or a dual licence, it can do so without
21
+ tracking down every past contributor.
22
+
23
+ ## What you keep
24
+
25
+ **You keep your copyright.** This is a licence, not an assignment. You may use,
26
+ publish, sell, or relicense your own contribution anywhere else, on any terms,
27
+ forever. Signing takes nothing away from you.
28
+
29
+ ---
30
+
31
+ ## Agreement
32
+
33
+ You accept and agree to the following terms for your past, present, and future
34
+ Contributions submitted to Loci ("the Project"). Except for the licences granted
35
+ here to the Project's owner ("the Owner"), you reserve all right, title, and
36
+ interest in and to your Contributions.
37
+
38
+ ### 1. Definitions
39
+
40
+ **"You"** means the copyright owner, or the legal entity authorised by the
41
+ copyright owner, entering into this agreement with the Owner.
42
+
43
+ **"Contribution"** means any original work of authorship, including any
44
+ modification of or addition to an existing work, intentionally submitted by you
45
+ to the Owner for inclusion in, or documentation of, the Project. "Submitted"
46
+ means any form of electronic, verbal, or written communication sent to the Owner
47
+ or its representatives, including but not limited to communication on electronic
48
+ mailing lists, source code control systems, and issue tracking systems managed
49
+ by or on behalf of the Owner, excluding communication conspicuously marked or
50
+ otherwise designated in writing by you as "Not a Contribution."
51
+
52
+ ### 2. Grant of Copyright Licence
53
+
54
+ Subject to the terms of this agreement, you grant to the Owner a perpetual,
55
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright licence
56
+ to reproduce, prepare derivative works of, publicly display, publicly perform,
57
+ sublicence, and distribute your Contributions and such derivative works.
58
+
59
+ This licence expressly includes the right to sublicence and to distribute your
60
+ Contribution, and derivative works of it, **under any licensing terms the Owner
61
+ chooses**, including proprietary and commercial terms, and to change those terms
62
+ in future.
63
+
64
+ ### 3. Grant of Patent Licence
65
+
66
+ Subject to the terms of this agreement, you grant to the Owner and to recipients
67
+ of software distributed by the Owner a perpetual, worldwide, non-exclusive,
68
+ no-charge, royalty-free, irrevocable (except as stated in this section) patent
69
+ licence to make, have made, use, offer to sell, sell, import, and otherwise
70
+ transfer the Project. This licence applies only to those patent claims
71
+ licensable by you that are necessarily infringed by your Contribution alone or
72
+ by combination of your Contribution with the Project to which it was submitted.
73
+
74
+ If any entity institutes patent litigation against you or any other entity
75
+ alleging that your Contribution, or the Project to which it was submitted,
76
+ constitutes direct or contributory patent infringement, then any patent licences
77
+ granted to that entity under this agreement for that Contribution or Project
78
+ terminate as of the date such litigation is filed.
79
+
80
+ ### 4. You Have the Right to Grant This
81
+
82
+ You represent that you are legally entitled to grant the above licences. If your
83
+ employer has rights to intellectual property that you create, you represent that
84
+ you have received permission to make the Contributions on behalf of that
85
+ employer, that your employer has waived such rights, or that your employer has
86
+ executed a separate corporate CLA with the Owner.
87
+
88
+ ### 5. Your Own Work
89
+
90
+ You represent that each of your Contributions is your original creation. You
91
+ represent that your Contribution submissions include complete details of any
92
+ third-party licence or other restriction of which you are personally aware and
93
+ which is associated with any part of your Contributions.
94
+
95
+ ### 6. No Warranty
96
+
97
+ You are not expected to provide support for your Contributions, except to the
98
+ extent you desire to provide support. Unless required by applicable law or
99
+ agreed to in writing, you provide your Contributions on an "AS IS" BASIS,
100
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
101
+ including, without limitation, any warranties or conditions of TITLE,
102
+ NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
103
+
104
+ ### 7. Notify Us of Changes
105
+
106
+ You agree to notify the Owner of any facts or circumstances of which you become
107
+ aware that would make these representations inaccurate in any respect.
108
+
109
+ ---
110
+
111
+ ## How to sign
112
+
113
+ Open a pull request. A bot will comment with the exact sentence to reply with.
114
+ Posting that comment records your signature against your GitHub username, and
115
+ the check on your pull request turns green.
116
+
117
+ You sign once. It covers every contribution you make to this project, past and
118
+ future.