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.
- loci_vault-0.7.0/.githooks/_common.sh +35 -0
- loci_vault-0.7.0/.githooks/_install_skills.sh +60 -0
- loci_vault-0.7.0/.githooks/post-checkout +11 -0
- loci_vault-0.7.0/.githooks/post-merge +9 -0
- loci_vault-0.7.0/.githooks/pre-commit +11 -0
- loci_vault-0.7.0/.githooks/pre-merge-commit +11 -0
- loci_vault-0.7.0/.githooks/pre-push +91 -0
- loci_vault-0.7.0/.github/workflows/cla.yml +74 -0
- loci_vault-0.7.0/.github/workflows/release.yml +149 -0
- loci_vault-0.7.0/.github/workflows/test.yml +67 -0
- loci_vault-0.7.0/.gitignore +29 -0
- loci_vault-0.7.0/.python-version +1 -0
- loci_vault-0.7.0/CLA.md +118 -0
- loci_vault-0.7.0/CLAUDE.md +375 -0
- loci_vault-0.7.0/CONTRIBUTING.md +127 -0
- loci_vault-0.7.0/LICENSE +133 -0
- loci_vault-0.7.0/Makefile +236 -0
- loci_vault-0.7.0/PKG-INFO +174 -0
- loci_vault-0.7.0/README.md +148 -0
- loci_vault-0.7.0/SECURITY.md +49 -0
- loci_vault-0.7.0/app/design/README.md +251 -0
- loci_vault-0.7.0/app/design/SKILL.md +46 -0
- loci_vault-0.7.0/app/design/assets/logo/monogram.svg +58 -0
- loci_vault-0.7.0/app/design/assets/logo/seal.svg +25 -0
- loci_vault-0.7.0/app/design/assets/logo/wordmark-inverse.svg +5 -0
- loci_vault-0.7.0/app/design/assets/logo/wordmark.svg +5 -0
- loci_vault-0.7.0/app/design/assets/motifs/column.svg +25 -0
- loci_vault-0.7.0/app/design/assets/motifs/grain.svg +7 -0
- loci_vault-0.7.0/app/design/assets/motifs/meander.svg +44 -0
- loci_vault-0.7.0/app/design/colors_and_type.css +369 -0
- loci_vault-0.7.0/app/design/instrument-shell.css +315 -0
- loci_vault-0.7.0/app/design/preview/01-wordmark.html +14 -0
- loci_vault-0.7.0/app/design/preview/02-monogram.html +16 -0
- loci_vault-0.7.0/app/design/preview/03-seal.html +16 -0
- loci_vault-0.7.0/app/design/preview/04-meander.html +10 -0
- loci_vault-0.7.0/app/design/preview/05-colors-outer.html +20 -0
- loci_vault-0.7.0/app/design/preview/06-colors-inner.html +45 -0
- loci_vault-0.7.0/app/design/preview/07-colors-types.html +20 -0
- loci_vault-0.7.0/app/design/preview/08-type-display.html +15 -0
- loci_vault-0.7.0/app/design/preview/09-type-body.html +10 -0
- loci_vault-0.7.0/app/design/preview/10-type-inner.html +16 -0
- loci_vault-0.7.0/app/design/preview/11-spacing.html +19 -0
- loci_vault-0.7.0/app/design/preview/12-radii.html +17 -0
- loci_vault-0.7.0/app/design/preview/13-elevation.html +17 -0
- loci_vault-0.7.0/app/design/preview/14-buttons.html +20 -0
- loci_vault-0.7.0/app/design/preview/15-inputs.html +15 -0
- loci_vault-0.7.0/app/design/preview/16-chips.html +23 -0
- loci_vault-0.7.0/app/design/preview/17-card-node.html +19 -0
- loci_vault-0.7.0/app/design/preview/18-card-plate.html +16 -0
- loci_vault-0.7.0/app/design/preview/19-icons.html +18 -0
- loci_vault-0.7.0/app/design/preview/20-list.html +18 -0
- loci_vault-0.7.0/app/design/preview/22-graph.html +185 -0
- loci_vault-0.7.0/app/design/preview/23-bezel.html +47 -0
- loci_vault-0.7.0/app/design/preview/24-reticle.html +31 -0
- loci_vault-0.7.0/app/design/preview/25-folio.html +33 -0
- loci_vault-0.7.0/app/design/scraps/sketch-2026-04-25T21-06-25-05rb1g.napkin +6 -0
- loci_vault-0.7.0/app/design/topology/app.jsx +122 -0
- loci_vault-0.7.0/app/design/topology/atoms.jsx +165 -0
- loci_vault-0.7.0/app/design/topology/browser-window.jsx +114 -0
- loci_vault-0.7.0/app/design/topology/colors_and_type.css +2 -0
- loci_vault-0.7.0/app/design/topology/meander.svg +44 -0
- loci_vault-0.7.0/app/design/topology/monogram.svg +58 -0
- loci_vault-0.7.0/app/design/topology/screens.jsx +924 -0
- loci_vault-0.7.0/app/design/topology/styles.css +596 -0
- loci_vault-0.7.0/app/design/topology/tweaks-panel.jsx +568 -0
- loci_vault-0.7.0/app/design/topology/vault-data.js +97 -0
- loci_vault-0.7.0/app/design/topology/wordmark-inverse.svg +5 -0
- loci_vault-0.7.0/app/design/topology-vibe.html +26 -0
- loci_vault-0.7.0/app/design/ui_kits/inner-shell/README.md +17 -0
- loci_vault-0.7.0/app/design/ui_kits/inner-shell/components.jsx +210 -0
- loci_vault-0.7.0/app/design/ui_kits/inner-shell/editor.jsx +117 -0
- loci_vault-0.7.0/app/design/ui_kits/inner-shell/graph-view.jsx +485 -0
- loci_vault-0.7.0/app/design/ui_kits/inner-shell/index.html +118 -0
- loci_vault-0.7.0/app/design/ui_kits/inner-shell/right-rail.jsx +181 -0
- loci_vault-0.7.0/app/design/ui_kits/inner-shell/vault-data.js +97 -0
- loci_vault-0.7.0/app/design/ui_kits/instrument-shell/README.md +43 -0
- loci_vault-0.7.0/app/design/ui_kits/instrument-shell/components.jsx +165 -0
- loci_vault-0.7.0/app/design/ui_kits/instrument-shell/index.html +141 -0
- loci_vault-0.7.0/app/design/ui_kits/outer-shell/README.md +18 -0
- loci_vault-0.7.0/app/design/ui_kits/outer-shell/components.jsx +72 -0
- loci_vault-0.7.0/app/design/ui_kits/outer-shell/index.html +117 -0
- loci_vault-0.7.0/app/index.html +13 -0
- loci_vault-0.7.0/app/package-lock.json +3194 -0
- loci_vault-0.7.0/app/package.json +23 -0
- loci_vault-0.7.0/app/public/monogram.svg +58 -0
- loci_vault-0.7.0/app/src/App.jsx +327 -0
- loci_vault-0.7.0/app/src/components/CommandBar.jsx +103 -0
- loci_vault-0.7.0/app/src/components/CommandPalette.jsx +139 -0
- loci_vault-0.7.0/app/src/components/Corners.jsx +9 -0
- loci_vault-0.7.0/app/src/components/FrontmatterGrid.jsx +32 -0
- loci_vault-0.7.0/app/src/components/FrontmatterPills.jsx +44 -0
- loci_vault-0.7.0/app/src/components/GraphView.jsx +451 -0
- loci_vault-0.7.0/app/src/components/HeaderStrip.jsx +23 -0
- loci_vault-0.7.0/app/src/components/Icon.jsx +47 -0
- loci_vault-0.7.0/app/src/components/Meridian.jsx +3 -0
- loci_vault-0.7.0/app/src/components/NodeDetail.jsx +300 -0
- loci_vault-0.7.0/app/src/components/NodeRow.jsx +20 -0
- loci_vault-0.7.0/app/src/components/NodeViewer.jsx +106 -0
- loci_vault-0.7.0/app/src/components/RelationChip.jsx +15 -0
- loci_vault-0.7.0/app/src/components/Reticle.jsx +3 -0
- loci_vault-0.7.0/app/src/components/RightRail.jsx +225 -0
- loci_vault-0.7.0/app/src/components/TagChip.jsx +14 -0
- loci_vault-0.7.0/app/src/components/TypeChip.jsx +20 -0
- loci_vault-0.7.0/app/src/components/TypeDot.jsx +10 -0
- loci_vault-0.7.0/app/src/components/VaultIndex.jsx +204 -0
- loci_vault-0.7.0/app/src/components/VaultRail.jsx +245 -0
- loci_vault-0.7.0/app/src/constants.js +17 -0
- loci_vault-0.7.0/app/src/hooks/useDebounce.js +10 -0
- loci_vault-0.7.0/app/src/lib/api.js +136 -0
- loci_vault-0.7.0/app/src/lib/markdown.jsx +76 -0
- loci_vault-0.7.0/app/src/lib/markdownLinks.js +44 -0
- loci_vault-0.7.0/app/src/lib/markdownLinks.test.js +70 -0
- loci_vault-0.7.0/app/src/main.jsx +21 -0
- loci_vault-0.7.0/app/vite.config.js +84 -0
- loci_vault-0.7.0/config.sample.yml +19 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-archive-ledger-and-pattern.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-cache-pattern-and-protocol.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-compass-ledger-and-meridian.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-compass-outline-and-budget.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-corridor-season-and-ledger.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-draft-compass-and-cache.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-draft-kernel-and-compass.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-draft-meeting.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-handle-meeting.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-harbour-workshop-and-garden.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-harbour.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-index-workshop-and-protocol.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-kernel-garden-and-threshold.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-ledger-outline-and-register.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-loop-kernel-and-pattern.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-loop-lattice-and-loop.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-register-draft-and-lattice.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/adaptive-threshold-budget-and-lattice.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/aiko-tanaka.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-archive-field-and-register.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-draft-kernel-and-meridian.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-garden-field-and-season.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-garden-orbit-and-harbour.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-handle-corridor-and-field.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-index-register-and-loop.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-ledger-threshold-and-compass.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-meridian-garden-and-budget.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-pattern-workshop-and-kernel.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-protocol-lattice-and-archive.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-register-index-and-kernel.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-register-meeting.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-register-orbit-and-meridian.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/ambient-season-harbour-and-margin.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-borrowed-lattice.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-brittle-kernel.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-layered-kernel.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-narrow-ledger.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-narrow-outline.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-portable-ledger.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-practical-field.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-practical-pattern.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/archive-the-quiet-margin.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/aster-field-guides.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/audit-the-durable-kernel.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/audit-the-narrow-outline.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/audit-the-plain-compass.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/audit-the-slow-kernel.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/basalt-foundry.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/batumi.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/bergen.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-compass.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-draft-orbit-and-cache.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-handle.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-harbour-handle-and-cache.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-index-lattice-and-register.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-kernel-ledger-and-cache.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-ledger-kernel-and-meridian.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-outline-corridor-and-corridor.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-pattern-kernel-and-index.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-pattern-project.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-protocol-lattice-and-workshop.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/borrowed-workshop.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-budget-margin-and-draft.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-cache-meeting.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-compass-budget-and-compass.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-compass-index-and-handle.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-compass-meeting.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-corridor-meeting.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-draft-protocol-and-field.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-harbour-draft-and-compass.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-kernel-workshop-and-harbour.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-lattice.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-ledger-workshop-and-pattern.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-orbit-signal-and-garden.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-outline-kernel-and-threshold.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-outline-meeting.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-pattern-cache-and-ledger.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-protocol-outline-and-harbour.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-register-compass-and-compass.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/brittle-workshop-orbit-and-compass.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/cinder-hill-observatory.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/clara-voss.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/compare-the-adaptive-outline.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/compare-the-borrowed-harbour.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/compare-the-hidden-ledger.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/compare-the-local-harbour.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/compare-the-local-ledger.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/compare-the-stable-pattern.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/daniel-brenner.md +44 -0
- loci_vault-0.7.0/dev-vault-seed/document-the-local-budget.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/document-the-minimal-field.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/document-the-recursive-threshold.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/document-the-restless-threshold.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/document-the-sparse-signal.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/draft-the-ambient-kernel.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/draft-the-hidden-ledger.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/draft-the-layered-protocol.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/draft-the-minimal-threshold.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/draft-the-plain-season.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/draft-the-portable-handle.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/draft-the-practical-loop.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/draft-the-stable-ledger.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/durable-cache-cache-and-workshop.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/durable-compass-harbour-and-season.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/durable-field-corridor-and-field.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/durable-field-garden-and-meridian.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/durable-field-protocol-and-outline.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/durable-kernel-budget-and-archive.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/durable-lattice-season-and-garden.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/durable-margin-archive-and-harbour.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/durable-meridian-field-and-season.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/durable-outline-orbit-and-archive.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/durable-pattern-budget-and-kernel.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/durable-pattern-kernel-and-meridian.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/durable-pattern-project.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/durable-protocol-margin-and-field.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/durable-season-garden-and-garden.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/durable-season-outline-and-kernel.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/durable-workshop-corridor-and-handle.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/durable-workshop-meridian-and-protocol.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/fathom-instruments.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/ferrous-works.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/freya-nilsen.md +46 -0
- loci_vault-0.7.0/dev-vault-seed/ghent.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/greywater-research.md +45 -0
- loci_vault-0.7.0/dev-vault-seed/halden-institute.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/halifax.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/henrik-dahl.md +51 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-draft-ledger-and-draft.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-draft-threshold-and-threshold.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-field-outline-and-corridor.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-garden-threshold-and-lattice.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-handle-outline-and-loop.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-index-threshold-and-orbit.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-meridian-archive-and-protocol.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-meridian-meridian-and-corridor.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-outline-garden-and-season.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-pattern.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-protocol-meridian-and-margin.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-register-project.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-season-meeting.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/hidden-threshold-ledger-and-lattice.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-archive-a-borrowed-pattern.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-archive-a-sparse-field.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-archive-a-sparse-signal.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-audit-a-stable-harbour.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-compare-a-plain-index.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-compare-a-plain-pattern.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-compare-a-restless-signal.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-document-a-hidden-field.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-draft-a-stable-archive.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-migrate-a-local-threshold.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-migrate-a-portable-lattice.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-review-a-adaptive-archive.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-sketch-a-durable-meridian.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-sketch-a-restless-kernel.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-trace-a-borrowed-margin.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-trace-a-layered-outline.md +45 -0
- loci_vault-0.7.0/dev-vault-seed/how-to-trace-a-quiet-meridian.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/ibrahim-sow.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/kyoto.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/lantern-row-books.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/larkspur-collective.md +49 -0
- loci_vault-0.7.0/dev-vault-seed/late-archive-loop-and-corridor.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/late-archive.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/late-cache-lattice-and-ledger.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/late-compass-threshold-and-archive.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/late-garden-field-and-meridian.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/late-kernel-meeting.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/late-lattice-garden-and-archive.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/late-ledger-lattice-and-margin.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/late-meridian-garden-and-signal.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/late-orbit-draft-and-pattern.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/late-orbit-kernel-and-pattern.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/late-pattern-outline-and-workshop.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/late-register-loop-and-protocol.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/late-threshold-meridian-and-loop.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/layered-archive-pattern-and-field.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/layered-budget-threshold-and-archive.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/layered-compass-kernel-and-margin.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/layered-draft-corridor-and-protocol.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/layered-draft.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/layered-garden-pattern-and-cache.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/layered-handle-handle-and-margin.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/layered-harbour-archive-and-outline.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/layered-index-ledger-and-index.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/layered-lattice-outline-and-outline.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/layered-ledger-handle-and-ledger.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/layered-loop-kernel-and-threshold.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/layered-meridian-signal-and-harbour.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/layered-outline-field-and-harbour.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/layered-outline-pattern-and-margin.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/layered-protocol-loop-and-meridian.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/layered-signal-index-and-corridor.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/layered-threshold-protocol-and-loop.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/layered-threshold.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/leo-fontaine.md +51 -0
- loci_vault-0.7.0/dev-vault-seed/lisbon.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/ljubljana.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/local-archive-compass-and-signal.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/local-cache-archive-and-pattern.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/local-cache-draft-and-lattice.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/local-cache.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/local-corridor-project-2.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/local-corridor-project.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/local-garden-garden-and-index.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/local-garden-project.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/local-kernel-meeting.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/local-lattice-register-and-signal.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/local-ledger-field-and-signal.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/local-margin.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/local-meridian-workshop-and-season.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/local-protocol-outline-and-index.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/local-register-cache-and-kernel.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/local-threshold-register-and-season.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/mara-lindqvist.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/measure-the-borrowed-register.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/measure-the-brittle-season.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/measure-the-durable-ledger.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/meridian-press.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/migrate-the-brittle-compass.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/migrate-the-restless-harbour.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/migrate-the-slow-ledger.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/migrate-the-slow-loop.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/migrate-the-stable-workshop.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-archive-loop-and-garden.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-budget-handle-and-garden.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-field.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-garden-cache-and-corridor.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-handle-orbit-and-kernel.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-index-ledger-and-draft.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-index-ledger-and-kernel.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-index-meeting.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-index-season-and-harbour.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-kernel-register-and-margin.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-ledger-loop-and-corridor.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-ledger-project.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-ledger-signal-and-outline.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-margin-project.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-orbit.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-outline-kernel-and-meridian.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/minimal-signal-meeting.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/montreal.md +47 -0
- loci_vault-0.7.0/dev-vault-seed/nadia-haddad.md +45 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-budget-meeting.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-cache.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-compass-compass-and-threshold.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-field-project.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-handle-ledger-and-field.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-lattice-orbit-and-orbit.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-ledger-garden-and-draft.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-ledger-garden-and-signal.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-ledger-pattern-and-workshop.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-ledger.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-margin-season-and-index.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-meridian-ledger-and-outline.md +26 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-orbit-harbour-and-pattern.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-outline-orbit-and-corridor.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-protocol-loop-and-register.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-protocol-meridian-and-threshold.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-signal-archive-and-margin.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-signal-meeting.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/narrow-workshop-pattern-and-outline.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-brittle-cache.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-late-loop.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-late-margin.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-layered-archive.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-local-harbour.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-minimal-ledger.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-narrow-garden.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-narrow-outline.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-narrow-pattern.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-plain-field.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-practical-signal.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-quiet-ledger.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-recursive-cache.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-recursive-garden.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-restless-margin.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-restless-season.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/on-the-stable-compass.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/orchard-street-studio.md +46 -0
- loci_vault-0.7.0/dev-vault-seed/owen-gallagher.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/plain-cache-protocol-and-harbour.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/plain-corridor-protocol-and-budget.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/plain-field-threshold-and-pattern.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/plain-garden-compass-and-garden.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/plain-index-signal-and-corridor.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/plain-lattice-signal-and-index.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/plain-loop-harbour-and-season.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/plain-loop-margin-and-protocol.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/plain-margin-handle-and-draft.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/plain-margin-ledger-and-cache.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/plain-meridian-kernel-and-handle.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/plain-orbit-harbour-and-orbit.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/plain-outline-register-and-ledger.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/plain-pattern-archive-and-loop.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/plain-pattern-workshop-and-archive.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/plain-protocol-draft-and-garden.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/plain-protocol-garden-and-garden.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/plain-season-field-and-handle.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/plain-season-register-and-signal.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/plain-signal-ledger-and-lattice.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/portable-archive-budget-and-corridor.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/portable-archive-protocol-and-pattern.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/portable-cache-cache-and-margin.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/portable-cache-outline-and-field.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/portable-corridor-loop-and-signal.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/portable-corridor-project.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/portable-draft-outline-and-handle.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/portable-field-loop-and-margin.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/portable-garden-loop-and-threshold.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/portable-kernel-loop-and-orbit.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/portable-kernel-outline-and-index.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/portable-ledger-protocol-and-handle.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/portable-loop-project.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/portable-register-register-and-compass.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/portable-register-signal-and-loop.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/portable-season-field-and-compass.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/portable-threshold-workshop-and-outline.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/portable-workshop-meeting.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/portable-workshop-meridian-and-season.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/portable-workshop-project.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/portable-workshop-signal-and-budget.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/porto.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/practical-budget-signal-and-protocol.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/practical-cache-lattice-and-garden.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/practical-corridor-outline-and-index.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/practical-garden-meeting.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/practical-harbour-draft-and-field.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/practical-harbour-margin-and-signal.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/practical-lattice-meridian-and-outline.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/practical-lattice.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/practical-loop-index-and-compass.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/practical-margin-workshop-and-draft.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/practical-meridian-project.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/practical-pattern-compass-and-margin.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/practical-pattern-outline-and-margin.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/practical-threshold-loop-and-draft.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/priya-raman.md +46 -0
- loci_vault-0.7.0/dev-vault-seed/prototype-the-brittle-field.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/prune-the-borrowed-corridor.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/prune-the-restless-budget.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/quebec-city.md +52 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-budget-meeting.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-budget.md +27 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-cache-corridor-and-archive.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-cache-project.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-compass.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-field-protocol-and-threshold.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-garden-workshop-and-pattern.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-harbour-ledger-and-corridor.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-harbour-protocol-and-loop.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-index-protocol-and-harbour.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-kernel.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-ledger-loop-and-cache.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-ledger-signal-and-outline.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-loop-ledger-and-handle.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-margin-index-and-harbour.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-margin.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-orbit-meeting.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-outline.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/quiet-season.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/quill-and-compass.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-adaptive-protocol.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-ambient-orbit.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-borrowed-workshop.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-durable-ledger.md +47 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-layered-archive.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-layered-protocol.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-minimal-kernel.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-narrow-season.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-narrow-workshop.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-plain-compass.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-plain-workshop.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-practical-loop.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-restless-lattice.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-stable-harbour.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/reading-log-stable-ledger.md +43 -0
- loci_vault-0.7.0/dev-vault-seed/rebuild-the-minimal-garden.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/rebuild-the-plain-meridian.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/rebuild-the-recursive-index.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-budget-lattice-and-compass.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-cache-project.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-compass-workshop-and-pattern.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-compass.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-handle-meeting.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-index-garden-and-cache.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-index-margin-and-handle.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-lattice-meridian-and-garden.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-ledger-field-and-handle.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-ledger-kernel-and-outline.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-ledger-meeting.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-ledger.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-loop-ledger-and-threshold.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-loop.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-outline-threshold-and-outline.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-pattern-orbit-and-season.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-register-protocol-and-ledger.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-register-workshop-and-compass.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-season-compass-and-protocol.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/recursive-workshop-ledger-and-garden.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/refactor-the-minimal-index.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/refactor-the-restless-loop.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/refactor-the-sparse-pattern.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/refactor-the-sparse-protocol.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/restless-archive-kernel-and-outline.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/restless-budget.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/restless-cache-field-and-corridor.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/restless-cache-project.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/restless-corridor-signal-and-harbour.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/restless-harbour-draft-and-harbour.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/restless-index-register-and-ledger.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/restless-kernel-loop-and-lattice.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/restless-lattice-protocol-and-outline.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/restless-ledger-kernel-and-outline.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/restless-margin-harbour-and-orbit.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/restless-margin-kernel-and-archive.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/restless-margin-register-and-pattern.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/restless-meridian-ledger-and-outline.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/restless-outline-index-and-threshold.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/restless-outline-season-and-compass.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/restless-protocol-threshold-and-archive.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/restless-register-budget-and-protocol.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/restless-threshold-outline-and-harbour.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/restless-threshold.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/review-the-ambient-register.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/review-the-borrowed-budget.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/review-the-restless-loop.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/review-the-sparse-cache.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/reykjavik.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/ruth-okonkwo.md +44 -0
- loci_vault-0.7.0/dev-vault-seed/salta.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/saltmarsh-cooperative.md +42 -0
- loci_vault-0.7.0/dev-vault-seed/samuel-achebe.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/sketch-the-late-loop.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/sketch-the-late-margin.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/sketch-the-narrow-workshop.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/sketch-the-plain-orbit.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/sketch-the-slow-handle.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/sketch-the-sparse-meridian.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/slate-ridge-partners.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/slow-budget.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/slow-field-compass-and-harbour.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/slow-field-threshold-and-harbour.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/slow-field.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/slow-harbour-pattern-and-signal.md +27 -0
- loci_vault-0.7.0/dev-vault-seed/slow-harbour-season-and-harbour.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/slow-index-index-and-outline.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/slow-lattice-project.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/slow-ledger-archive-and-protocol.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/slow-ledger-field-and-signal.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/slow-ledger.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/slow-margin-threshold-and-threshold.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/slow-meridian-margin-and-loop.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/slow-pattern-pattern-and-margin.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/slow-register-budget-and-orbit.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/slow-register-loop-and-meridian.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/slow-signal.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-archive-corridor-and-cache.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-archive-draft-and-workshop.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-budget-index-and-loop.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-cache-loop-and-corridor.md +29 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-corridor-kernel-and-ledger.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-field-season-and-ledger.md +30 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-index-draft-and-field.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-lattice-threshold-and-budget.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-ledger-pattern-and-corridor.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-margin-cache-and-meridian.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-pattern-orbit-and-ledger.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-pattern.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-register-register-and-protocol.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-season-compass-and-threshold.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-season-compass-and-workshop.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-signal-project.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-threshold.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/sparse-workshop-meeting.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/stable-budget-pattern-and-ledger.md +28 -0
- loci_vault-0.7.0/dev-vault-seed/stable-budget-pattern-and-threshold.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/stable-field.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/stable-kernel-harbour-and-workshop.md +37 -0
- loci_vault-0.7.0/dev-vault-seed/stable-lattice-pattern-and-orbit.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/stable-lattice-project.md +31 -0
- loci_vault-0.7.0/dev-vault-seed/stable-ledger-project.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/stable-outline-lattice-and-cache.md +32 -0
- loci_vault-0.7.0/dev-vault-seed/stable-pattern-harbour-and-signal.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/stable-protocol-archive-and-cache.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/stable-protocol-register-and-compass.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/stable-season-garden-and-ledger.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/stable-season.md +36 -0
- loci_vault-0.7.0/dev-vault-seed/stable-signal-register-and-draft.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/stable-signal-season-and-budget.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/sun-hee-park.md +41 -0
- loci_vault-0.7.0/dev-vault-seed/tbilisi.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/tidewater-analytics.md +40 -0
- loci_vault-0.7.0/dev-vault-seed/trace-the-practical-threshold.md +33 -0
- loci_vault-0.7.0/dev-vault-seed/trace-the-slow-pattern.md +34 -0
- loci_vault-0.7.0/dev-vault-seed/tromso.md +35 -0
- loci_vault-0.7.0/dev-vault-seed/turku.md +38 -0
- loci_vault-0.7.0/dev-vault-seed/valparaiso.md +39 -0
- loci_vault-0.7.0/dev-vault-seed/yara-khalil.md +35 -0
- loci_vault-0.7.0/docs/development.md +314 -0
- loci_vault-0.7.0/docs/diagrams.md +24 -0
- loci_vault-0.7.0/docs/examples.md +211 -0
- loci_vault-0.7.0/docs/execution-flows.md +107 -0
- loci_vault-0.7.0/docs/file-saving.md +188 -0
- loci_vault-0.7.0/docs/images/command-palette.png +0 -0
- loci_vault-0.7.0/docs/images/graph-view.png +0 -0
- loci_vault-0.7.0/docs/images/monogram-dark.svg +58 -0
- loci_vault-0.7.0/docs/images/monogram-light.svg +58 -0
- loci_vault-0.7.0/docs/images/node-detail.png +0 -0
- loci_vault-0.7.0/docs/images/vault-index.png +0 -0
- loci_vault-0.7.0/docs/ontology.md +88 -0
- loci_vault-0.7.0/docs/problem.md +58 -0
- loci_vault-0.7.0/docs/roadmap.md +70 -0
- loci_vault-0.7.0/docs/setup.md +273 -0
- loci_vault-0.7.0/docs/testing.md +109 -0
- loci_vault-0.7.0/docs/usage.md +367 -0
- loci_vault-0.7.0/pyproject.toml +81 -0
- loci_vault-0.7.0/run_server.sh +5 -0
- loci_vault-0.7.0/scripts/dev_seed.py +533 -0
- loci_vault-0.7.0/scripts/migrate_subtypes.py +253 -0
- loci_vault-0.7.0/scripts/migrate_tags_to_relations.py +274 -0
- loci_vault-0.7.0/scripts/release.py +453 -0
- loci_vault-0.7.0/scripts/release_notes.py +203 -0
- loci_vault-0.7.0/scripts/run_preflight.py +83 -0
- loci_vault-0.7.0/setup.py +194 -0
- loci_vault-0.7.0/src/loci/__init__.py +14 -0
- loci_vault-0.7.0/src/loci/api.py +1600 -0
- loci_vault-0.7.0/src/loci/http_server.py +813 -0
- loci_vault-0.7.0/src/loci/mcp_server.py +1235 -0
- loci_vault-0.7.0/src/loci/skill_assembly.py +176 -0
- loci_vault-0.7.0/src/loci/skills/loci-inbox/SKILL.md +131 -0
- loci_vault-0.7.0/src/loci/skills/loci-ingest-directory/SKILL.md +135 -0
- loci_vault-0.7.0/src/loci/skills/loci-query/SKILL.md +258 -0
- loci_vault-0.7.0/src/loci/skills/loci-save/SKILL.md +299 -0
- loci_vault-0.7.0/src/loci/skills/references/field-dictionary.md +568 -0
- loci_vault-0.7.0/src/loci/skills/references/foreign-definitions.md +15 -0
- loci_vault-0.7.0/src/loci/skills/references/has-asset-guide.md +267 -0
- loci_vault-0.7.0/src/loci/skills/references/loci-inbox-user.md +15 -0
- loci_vault-0.7.0/src/loci/skills/references/loci-ingest-directory-user.md +15 -0
- loci_vault-0.7.0/src/loci/skills/references/loci-query-user.md +15 -0
- loci_vault-0.7.0/src/loci/skills/references/loci-save-user.md +15 -0
- loci_vault-0.7.0/src/loci/skills/references/ontology-guide.md +420 -0
- loci_vault-0.7.0/src/loci/skills/references/ontology-system.md +364 -0
- loci_vault-0.7.0/src/loci/skills/references/ontology-user.yaml +25 -0
- loci_vault-0.7.0/src/loci/skills/references/ontology.yaml +291 -0
- loci_vault-0.7.0/src/loci/skills/references/relation-dictionary-user.yaml +15 -0
- loci_vault-0.7.0/src/loci/skills/references/relation-dictionary.md +37 -0
- loci_vault-0.7.0/src/loci/skills/references/relation-dictionary.yaml +301 -0
- loci_vault-0.7.0/src/loci/skills/references/scheme-dictionary-user.yaml +10 -0
- loci_vault-0.7.0/src/loci/skills/references/scheme-dictionary.yaml +68 -0
- loci_vault-0.7.0/src/loci/skills/references/tag-dictionary.md +21 -0
- loci_vault-0.7.0/src/loci/skills/references/type-decision.md +91 -0
- loci_vault-0.7.0/src/loci/skills/references/type-dictionary.md +29 -0
- loci_vault-0.7.0/src/loci/skills/references/update-workflow.md +121 -0
- loci_vault-0.7.0/src/loci/skills_install.py +337 -0
- loci_vault-0.7.0/src/loci/static/assets/index-BLTxyopg.js +69 -0
- loci_vault-0.7.0/src/loci/static/assets/index-xJGMiXlc.css +1 -0
- loci_vault-0.7.0/src/loci/static/index.html +14 -0
- loci_vault-0.7.0/src/loci/static/monogram.svg +58 -0
- loci_vault-0.7.0/src/loci/tools/__init__.py +1 -0
- loci_vault-0.7.0/src/loci/tools/asset_registry.py +124 -0
- loci_vault-0.7.0/src/loci/tools/directory_scanner.py +149 -0
- loci_vault-0.7.0/src/loci/tools/frontmatter.py +69 -0
- loci_vault-0.7.0/src/loci/tools/inbox_plan.py +207 -0
- loci_vault-0.7.0/src/loci/tools/inbox_scanner.py +94 -0
- loci_vault-0.7.0/src/loci/tools/metadata_extractor.py +181 -0
- loci_vault-0.7.0/src/loci/tools/nx_graph.py +582 -0
- loci_vault-0.7.0/src/loci/tools/relation_registry.py +252 -0
- loci_vault-0.7.0/src/loci/tools/resolvers/__init__.py +7 -0
- loci_vault-0.7.0/src/loci/tools/resolvers/base.py +35 -0
- loci_vault-0.7.0/src/loci/tools/resolvers/dispatcher.py +90 -0
- loci_vault-0.7.0/src/loci/tools/resolvers/external_resolver.py +30 -0
- loci_vault-0.7.0/src/loci/tools/resolvers/local_resolver.py +67 -0
- loci_vault-0.7.0/src/loci/tools/resolvers/url_resolver.py +47 -0
- loci_vault-0.7.0/src/loci/tools/scheme_registry.py +212 -0
- loci_vault-0.7.0/src/loci/tools/slug.py +80 -0
- loci_vault-0.7.0/src/loci/tools/tag_hygiene.py +197 -0
- loci_vault-0.7.0/src/loci/tools/type_registry.py +392 -0
- loci_vault-0.7.0/src/loci/tools/uid_generator.py +21 -0
- loci_vault-0.7.0/src/loci/tools/vault_history.py +913 -0
- loci_vault-0.7.0/src/loci/tools/vault_init.py +923 -0
- loci_vault-0.7.0/src/loci/tools/vault_linter.py +312 -0
- loci_vault-0.7.0/src/loci/tools/write_file.py +530 -0
- loci_vault-0.7.0/sync/rclone.conf.sample +36 -0
- loci_vault-0.7.0/sync/sync.sh +86 -0
- loci_vault-0.7.0/tests/conftest.py +156 -0
- loci_vault-0.7.0/tests/e2e/README.md +193 -0
- loci_vault-0.7.0/tests/e2e/conftest.py +471 -0
- loci_vault-0.7.0/tests/e2e/test_errors.py +68 -0
- loci_vault-0.7.0/tests/e2e/test_filtering.py +320 -0
- loci_vault-0.7.0/tests/e2e/test_fixture_composition.py +121 -0
- loci_vault-0.7.0/tests/e2e/test_frontmatter_parsing.py +55 -0
- loci_vault-0.7.0/tests/e2e/test_host_allowlist.py +15 -0
- loci_vault-0.7.0/tests/e2e/test_navigation.py +154 -0
- loci_vault-0.7.0/tests/e2e/test_packaged_ui.py +141 -0
- loci_vault-0.7.0/tests/e2e/test_screenshots.py +142 -0
- loci_vault-0.7.0/tests/e2e/test_smoke.py +166 -0
- loci_vault-0.7.0/tests/e2e/vault_facts.py +137 -0
- loci_vault-0.7.0/tests/fixtures/e2e-overlay/README.md +41 -0
- loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-archived-note.md +24 -0
- loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-asset-note.md +30 -0
- loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-ghost-parent.md +26 -0
- loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-rule-in-frontmatter.md +30 -0
- loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-zz-recipe.md +25 -0
- loci_vault-0.7.0/tests/fixtures/e2e-overlay/e2e-zz-skill.md +26 -0
- loci_vault-0.7.0/tests/fixtures/e2e-overlay/meta/ontology-user.yaml +6 -0
- loci_vault-0.7.0/tests/fixtures/expected/retrieval.yaml +115 -0
- loci_vault-0.7.0/tests/fixtures/vault/article-distributed-systems.md +24 -0
- loci_vault-0.7.0/tests/fixtures/vault/article-ml-fundamentals.md +25 -0
- loci_vault-0.7.0/tests/fixtures/vault/article-python-type-hints.md +25 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-chain-alpha.md +25 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-chain-beta.md +25 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-chain-gamma.md +23 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-data-pipeline-design.md +25 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-graph-database-concepts.md +24 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-intro-ml.md +25 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-introduccion-python.md +26 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-knowledge-graph-design.md +24 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-knowledge-graph-patterns.md +24 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-python-best-practices.md +25 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-spoke-one.md +23 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-spoke-three.md +23 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-spoke-two.md +23 -0
- loci_vault-0.7.0/tests/fixtures/vault/doc-testing-strategies.md +25 -0
- loci_vault-0.7.0/tests/fixtures/vault/entity-jane-smith.md +24 -0
- loci_vault-0.7.0/tests/fixtures/vault/project-knowledge-graph-platform.md +24 -0
- loci_vault-0.7.0/tests/fixtures/vault/task-build-test-suite.md +27 -0
- loci_vault-0.7.0/tests/fixtures/vault/task-deploy-to-production.md +26 -0
- loci_vault-0.7.0/tests/fixtures/vault/task-review-prs.md +26 -0
- loci_vault-0.7.0/tests/fixtures/vault/task-setup-ci-pipeline.md +27 -0
- loci_vault-0.7.0/tests/fixtures/vault/task-write-documentation.md +26 -0
- loci_vault-0.7.0/tests/fixtures/vault/topic-hub-central.md +28 -0
- loci_vault-0.7.0/tests/fixtures/vault/topic-python-ecosystem.md +24 -0
- loci_vault-0.7.0/tests/fixtures/vault/topic-software-testing.md +24 -0
- loci_vault-0.7.0/tests/test_api.py +1111 -0
- loci_vault-0.7.0/tests/test_asset_registry.py +116 -0
- loci_vault-0.7.0/tests/test_conftest_git_env.py +40 -0
- loci_vault-0.7.0/tests/test_define_relation.py +232 -0
- loci_vault-0.7.0/tests/test_define_type.py +187 -0
- loci_vault-0.7.0/tests/test_dev_seed.py +215 -0
- loci_vault-0.7.0/tests/test_directory_scanner.py +263 -0
- loci_vault-0.7.0/tests/test_frontmatter.py +184 -0
- loci_vault-0.7.0/tests/test_git_hooks.py +313 -0
- loci_vault-0.7.0/tests/test_has_asset_lint.py +349 -0
- loci_vault-0.7.0/tests/test_http_server.py +709 -0
- loci_vault-0.7.0/tests/test_inbox_plan.py +322 -0
- loci_vault-0.7.0/tests/test_inbox_scanner.py +166 -0
- loci_vault-0.7.0/tests/test_makefile_dev.py +121 -0
- loci_vault-0.7.0/tests/test_makefile_run.py +289 -0
- loci_vault-0.7.0/tests/test_metadata_extractor.py +171 -0
- loci_vault-0.7.0/tests/test_nx_graph.py +895 -0
- loci_vault-0.7.0/tests/test_publishing.py +154 -0
- loci_vault-0.7.0/tests/test_readiness.py +545 -0
- loci_vault-0.7.0/tests/test_relation_registry.py +223 -0
- loci_vault-0.7.0/tests/test_release.py +596 -0
- loci_vault-0.7.0/tests/test_resolvers.py +282 -0
- loci_vault-0.7.0/tests/test_retrieval.py +45 -0
- loci_vault-0.7.0/tests/test_run_preflight.py +142 -0
- loci_vault-0.7.0/tests/test_scheme_registry.py +161 -0
- loci_vault-0.7.0/tests/test_server.py +462 -0
- loci_vault-0.7.0/tests/test_setup.py +94 -0
- loci_vault-0.7.0/tests/test_skill_assembly.py +246 -0
- loci_vault-0.7.0/tests/test_skill_files.py +271 -0
- loci_vault-0.7.0/tests/test_skills_install.py +451 -0
- loci_vault-0.7.0/tests/test_slug.py +143 -0
- loci_vault-0.7.0/tests/test_static_frontend.py +166 -0
- loci_vault-0.7.0/tests/test_subtypes.py +436 -0
- loci_vault-0.7.0/tests/test_sync_script.py +136 -0
- loci_vault-0.7.0/tests/test_tag_hygiene.py +331 -0
- loci_vault-0.7.0/tests/test_tags_to_relations.py +294 -0
- loci_vault-0.7.0/tests/test_type_registry.py +481 -0
- loci_vault-0.7.0/tests/test_uid_generator.py +21 -0
- loci_vault-0.7.0/tests/test_vault_history.py +1518 -0
- loci_vault-0.7.0/tests/test_vault_init.py +1290 -0
- loci_vault-0.7.0/tests/test_vault_linter.py +533 -0
- loci_vault-0.7.0/tests/test_vite_config.py +100 -0
- loci_vault-0.7.0/tests/test_write_file.py +1099 -0
- 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
|
loci_vault-0.7.0/CLA.md
ADDED
|
@@ -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.
|