embeadings 0.4.2__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.
@@ -0,0 +1,21 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ .mypy_cache/
7
+ .coverage
8
+ htmlcov/
9
+ .venv/
10
+ build/
11
+ dist/
12
+
13
+ # Local models, embeddings, reports, and test workspaces must never be committed.
14
+ .embeadings/
15
+ *.vectors.json
16
+
17
+ # Beads / Dolt files (added by bd init)
18
+ .dolt/
19
+ *.db
20
+ .beads-credential-key
21
+ .beads/proxieddb/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 emBEADings contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,251 @@
1
+ Metadata-Version: 2.4
2
+ Name: embeadings
3
+ Version: 0.4.2
4
+ Summary: Local-first coordination review for Beads and Linear
5
+ Project-URL: Homepage, https://github.com/DyrtyJax/embeadings
6
+ Project-URL: Documentation, https://github.com/DyrtyJax/embeadings/blob/main/docs/README.md
7
+ Project-URL: Issues, https://github.com/DyrtyJax/embeadings/issues
8
+ Project-URL: Repository, https://github.com/DyrtyJax/embeadings.git
9
+ Project-URL: Changelog, https://github.com/DyrtyJax/embeadings/blob/main/CHANGELOG.md
10
+ Project-URL: Releases, https://github.com/DyrtyJax/embeadings/releases
11
+ Author: Jackson Cantrell
12
+ License: MIT
13
+ License-File: LICENSE
14
+ Keywords: beads,developer-tools,linear,semantic-search,triage
15
+ Classifier: Development Status :: 3 - Alpha
16
+ Classifier: Environment :: Console
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Topic :: Software Development :: Quality Assurance
22
+ Requires-Python: >=3.11
23
+ Requires-Dist: filelock<4,>=3.16
24
+ Requires-Dist: huggingface-hub<2,>=1.0
25
+ Requires-Dist: model2vec<0.9,>=0.8
26
+ Requires-Dist: numpy<3,>=1.26
27
+ Requires-Dist: platformdirs<5,>=4.3
28
+ Provides-Extra: benchmark
29
+ Requires-Dist: fastembed<0.9,>=0.8; extra == 'benchmark'
30
+ Requires-Dist: sqlite-vec<0.2,>=0.1.9; extra == 'benchmark'
31
+ Provides-Extra: dev
32
+ Requires-Dist: jsonschema<5,>=4.23; extra == 'dev'
33
+ Requires-Dist: pytest<10,>=8.3; extra == 'dev'
34
+ Requires-Dist: ruff<1,>=0.12; extra == 'dev'
35
+ Description-Content-Type: text/markdown
36
+
37
+ # emBEADings
38
+
39
+ <img src="https://raw.githubusercontent.com/DyrtyJax/embeadings/v0.4.2/assets/brand/embeadings-mark.svg" width="72" alt="Two bead paths converging on a shared code surface">
40
+
41
+ [![CI](https://github.com/DyrtyJax/embeadings/actions/workflows/ci.yml/badge.svg)](https://github.com/DyrtyJax/embeadings/actions/workflows/ci.yml)
42
+ [![Release](https://img.shields.io/github/v/release/DyrtyJax/embeadings?include_prereleases)](https://github.com/DyrtyJax/embeadings/releases/tag/v0.4.2)
43
+
44
+ Find engineering work that may trip over the same code—without changing the tracker or sending issue
45
+ text to an embedding API.
46
+
47
+ emBEADings is a read-only coordination CLI for
48
+ [Beads](https://github.com/gastownhall/beads) and Linear. It combines typed tracker relationships,
49
+ local semantic retrieval, explicit code pointers, and genuine Git worktree changes into a bounded,
50
+ deterministic review queue.
51
+
52
+ Dependencies answer “what blocks this?” emBEADings asks “what else should I inspect before these
53
+ changes merge?” It provides evidence, not an automatic verdict.
54
+
55
+ > **Status:** v0.4 technical preview. The CLI and GitHub release are public; the bundled Codex and
56
+ > Claude Code plugin is still a local developer preview.
57
+
58
+ ## Quick start
59
+
60
+ Python 3.11 or later is required. The default Beads source also requires an installed `bd` CLI.
61
+
62
+ ```bash
63
+ pipx install embeadings
64
+ # or: uv tool install embeadings
65
+
66
+ # Check the environment without loading issue text
67
+ embead doctor
68
+
69
+ # Produce a bounded coordination packet
70
+ embead triage
71
+
72
+ # Find active work touching the same files or modules
73
+ embead collisions
74
+
75
+ # Inspect semantic neighbors for one record
76
+ embead neighbors ISSUE_ID --include-closed
77
+ ```
78
+
79
+ For an immutable GitHub fallback, install the verified release wheel directly:
80
+
81
+ ```bash
82
+ python -m pip install \
83
+ "https://github.com/DyrtyJax/embeadings/releases/download/v0.4.2/embeadings-0.4.2-py3-none-any.whl"
84
+ ```
85
+
86
+ The first semantic command downloads the pinned
87
+ [`minishlab/potion-base-8M`](https://huggingface.co/minishlab/potion-base-8M) model. Embedding happens
88
+ locally. `collisions` does not load an embedding model.
89
+
90
+ Release assets include a source archive and `SHA256SUMS`. See the
91
+ [v0.4.2 release](https://github.com/DyrtyJax/embeadings/releases/tag/v0.4.2) for versioned artifacts and
92
+ checksums.
93
+
94
+ ## What a lead looks like
95
+
96
+ ![Synthetic terminal example of an observed exact-file collision](https://raw.githubusercontent.com/DyrtyJax/embeadings/v0.4.2/assets/brand/synthetic-collision-evidence.svg)
97
+
98
+ This shortened example is derived from the committed synthetic collision fixture:
99
+
100
+ ```json
101
+ {
102
+ "issue_id": "demo-1",
103
+ "related_issue_id": "demo-2",
104
+ "kind": "exact-file",
105
+ "confidence": "observed",
106
+ "shared_paths": ["src/cache/index.py"],
107
+ "evidence_sources": ["active-worktree-diff"],
108
+ "what_to_verify": "Verify whether concurrent work will modify the shared file paths before implementation or merge."
109
+ }
110
+ ```
111
+
112
+ The full report also records repository provenance, revision relation, hub suppression, warnings, and
113
+ the read-only policy. It contains pointers rather than source snippets. See
114
+ [`examples/collisions.json`](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/examples/collisions.json)
115
+ and the
116
+ [example guide](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/examples/README.md).
117
+
118
+ ## Why trust it?
119
+
120
+ | Evidence | Result | Boundary |
121
+ | --- | --- | --- |
122
+ | Concurrent-worktree release gate | Recovered all 3 known exact-file collisions across 4 genuine active worktrees | One repository; not universal recall |
123
+ | Dogfooding | Found 2 real association/scope defects before v0.4.0 | Demonstrates workflow value, not broad precision |
124
+ | Ruff scale surrogate | 17/20 top-packet pairs were at least contextually useful across 8,143 public issues | Converted GitHub corpus; no native Beads graph or worktrees |
125
+ | Release validation | Full CI passed across Linux, macOS, Windows, Python 3.11 and 3.14; wheel/sdist checksums and provenance published | Supply-chain and test evidence, not semantic quality |
126
+ | Repeatability | Evaluation outputs were byte-stable and non-mutating | Determinism does not make a weak lead correct |
127
+
128
+ Read the [dogfood release-gate story](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/articles/dogfooding-v040-worktree-gate.md),
129
+ [aggregate v0.4.0 worktree gate](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/research/code-surface-v040-release-gate.md),
130
+ [Ruff scale review](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/research/ruff-scale-surrogate-01.md),
131
+ and the
132
+ [research index](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/research/README.md)
133
+ for methods, failure patterns, and limitations.
134
+
135
+ ## How it works
136
+
137
+ ```text
138
+ Beads or one Linear team
139
+
140
+ ├── typed relationships and lifecycle
141
+ ├── explicit paths and observed worktree changes
142
+ └── local whole-record and field-level embeddings
143
+
144
+
145
+ bounded candidate union
146
+
147
+
148
+ evidence receipts + review packet
149
+ ```
150
+
151
+ `triage` is the opinionated front door. It admits at most 20 semantic candidates by default, includes
152
+ code-surface analysis when genuine local Git evidence exists, and writes a complete audit report to
153
+ external user state. Use `sweep` for experimental policy controls and `neighbors` for one-record
154
+ inspection. The default is a reviewer-capacity budget, not corpus coverage; see the
155
+ [review-budget decision](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/decisions/review-budget-default.md).
156
+
157
+ `collisions` reviews `open`, `in_progress`, and `blocked` work by default. It associates Git worktrees
158
+ when a branch contains a full Bead ID or unambiguous `bead-N` suffix. Explicitly map an otherwise
159
+ unassociated worktree with:
160
+
161
+ ```bash
162
+ embead collisions --worktree-map embead-42=../feature-worktree
163
+ ```
164
+
165
+ Never fabricate a mapping: observed evidence must describe genuine active implementation work.
166
+ Shared paths are coordination evidence, not proof that two tasks conflict.
167
+
168
+ ## Linear
169
+
170
+ Create a personal API key in Linear's Security & access settings and load it without placing the value
171
+ directly in a shell-history entry:
172
+
173
+ ```bash
174
+ LINEAR_API_KEY="$(python -c 'import getpass; print(getpass.getpass("Linear API key: "))')"
175
+ export LINEAR_API_KEY
176
+
177
+ embead --source linear --linear-team ENG triage
178
+ embead --source linear --linear-team ENG collisions
179
+ ```
180
+
181
+ `LINEAR_ACCESS_TOKEN` accepts an OAuth token instead; set only one credential. The CLI queries one
182
+ selected team through Linear GraphQL and does not reuse credentials held by an MCP or agent host. See
183
+ the [Linear adapter contract](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/linear.md).
184
+
185
+ ## Privacy and data boundary
186
+
187
+ - Tracker adapters contain no mutation operations.
188
+ - The default model embeds issue text locally; issue text is not sent to Hugging Face.
189
+ - Linear mode sends tracker queries only to Linear itself.
190
+ - Models and vectors use the platform user cache; reports use the platform user state directory.
191
+ - Neither cache nor reports are written into the analyzed repository by default.
192
+ - Collision reports contain code pointers, not source snippets.
193
+ - A human or coordinator must verify every lead before changing tracker or source state.
194
+
195
+ The first model download is network activity. Prepare it before loading private issues when evaluating
196
+ under OS-level network denial. See the
197
+ [safe offline evaluation guide](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/evaluation.md).
198
+
199
+ ## Good fit / poor fit
200
+
201
+ emBEADings is most useful when a tracker is too large for repeated full-context review, several people
202
+ or agents work concurrently, and the team values a reproducible offline shortlist.
203
+
204
+ It is less useful for a small tracker that one reviewer can read directly, repositories without
205
+ meaningful tracker-to-code evidence, or teams seeking automatic issue mutation, orchestration, a
206
+ dashboard, or a general memory system. Typed dependencies remain tracker truth; semantics complement
207
+ them rather than re-deriving authority.
208
+
209
+ ## Development
210
+
211
+ Every clone or Git worktree must own its virtual environment:
212
+
213
+ ```bash
214
+ python3 scripts/worktree_env.py
215
+ . .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1
216
+ python scripts/validate.py
217
+ ```
218
+
219
+ The bootstrap refuses to reuse an active environment from another checkout. Validation checks the
220
+ editable `embead` import target before formatting, lint, tests, and release checks. Read
221
+ [`CONTRIBUTING.md`](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/CONTRIBUTING.md)
222
+ before submitting fixtures or reports; private tracker content
223
+ must never be committed.
224
+
225
+ ## Agent plugin preview
226
+
227
+ [`plugins/embeadings`](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/plugins/embeadings/README.md)
228
+ packages `triage`, `collisions`, and `evaluate`
229
+ skills for local Codex and Claude Code development. It delegates to the installed CLI, forces schema-v1
230
+ JSON, and verifies the read-only policy. It is not yet a marketplace release and grants no tracker-write
231
+ authority.
232
+
233
+ ## Documentation
234
+
235
+ - [Documentation index](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/README.md)
236
+ - [CLI and product specification](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/spec.md)
237
+ - [Consumer and schema contract](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/consumer-contract.md)
238
+ - [Performance and scale evaluation](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/performance.md)
239
+ - [Research and evaluation ledger](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/research/README.md)
240
+ - [Versioned JSON Schemas](https://github.com/DyrtyJax/embeadings/tree/v0.4.2/schemas/v1) and
241
+ [synthetic examples](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/examples/README.md)
242
+
243
+ ## Principles
244
+
245
+ - **Read-only means read-only.** Analysis never closes, edits, labels, or reprioritizes work.
246
+ - **The tracker remains authoritative.** Structure and lifecycle stay tracker data.
247
+ - **Local-first and private.** The default semantic provider sends no issue content to a network API.
248
+ - **Bounded and auditable.** A stable receipt explains what entered or was omitted from the queue.
249
+ - **Agent-neutral.** Core analysis does not depend on Codex, Claude Code, Cursor, or another runtime.
250
+
251
+ MIT licensed. emBEADings is not affiliated with Beads or Linear.
@@ -0,0 +1,215 @@
1
+ # emBEADings
2
+
3
+ <img src="https://raw.githubusercontent.com/DyrtyJax/embeadings/v0.4.2/assets/brand/embeadings-mark.svg" width="72" alt="Two bead paths converging on a shared code surface">
4
+
5
+ [![CI](https://github.com/DyrtyJax/embeadings/actions/workflows/ci.yml/badge.svg)](https://github.com/DyrtyJax/embeadings/actions/workflows/ci.yml)
6
+ [![Release](https://img.shields.io/github/v/release/DyrtyJax/embeadings?include_prereleases)](https://github.com/DyrtyJax/embeadings/releases/tag/v0.4.2)
7
+
8
+ Find engineering work that may trip over the same code—without changing the tracker or sending issue
9
+ text to an embedding API.
10
+
11
+ emBEADings is a read-only coordination CLI for
12
+ [Beads](https://github.com/gastownhall/beads) and Linear. It combines typed tracker relationships,
13
+ local semantic retrieval, explicit code pointers, and genuine Git worktree changes into a bounded,
14
+ deterministic review queue.
15
+
16
+ Dependencies answer “what blocks this?” emBEADings asks “what else should I inspect before these
17
+ changes merge?” It provides evidence, not an automatic verdict.
18
+
19
+ > **Status:** v0.4 technical preview. The CLI and GitHub release are public; the bundled Codex and
20
+ > Claude Code plugin is still a local developer preview.
21
+
22
+ ## Quick start
23
+
24
+ Python 3.11 or later is required. The default Beads source also requires an installed `bd` CLI.
25
+
26
+ ```bash
27
+ pipx install embeadings
28
+ # or: uv tool install embeadings
29
+
30
+ # Check the environment without loading issue text
31
+ embead doctor
32
+
33
+ # Produce a bounded coordination packet
34
+ embead triage
35
+
36
+ # Find active work touching the same files or modules
37
+ embead collisions
38
+
39
+ # Inspect semantic neighbors for one record
40
+ embead neighbors ISSUE_ID --include-closed
41
+ ```
42
+
43
+ For an immutable GitHub fallback, install the verified release wheel directly:
44
+
45
+ ```bash
46
+ python -m pip install \
47
+ "https://github.com/DyrtyJax/embeadings/releases/download/v0.4.2/embeadings-0.4.2-py3-none-any.whl"
48
+ ```
49
+
50
+ The first semantic command downloads the pinned
51
+ [`minishlab/potion-base-8M`](https://huggingface.co/minishlab/potion-base-8M) model. Embedding happens
52
+ locally. `collisions` does not load an embedding model.
53
+
54
+ Release assets include a source archive and `SHA256SUMS`. See the
55
+ [v0.4.2 release](https://github.com/DyrtyJax/embeadings/releases/tag/v0.4.2) for versioned artifacts and
56
+ checksums.
57
+
58
+ ## What a lead looks like
59
+
60
+ ![Synthetic terminal example of an observed exact-file collision](https://raw.githubusercontent.com/DyrtyJax/embeadings/v0.4.2/assets/brand/synthetic-collision-evidence.svg)
61
+
62
+ This shortened example is derived from the committed synthetic collision fixture:
63
+
64
+ ```json
65
+ {
66
+ "issue_id": "demo-1",
67
+ "related_issue_id": "demo-2",
68
+ "kind": "exact-file",
69
+ "confidence": "observed",
70
+ "shared_paths": ["src/cache/index.py"],
71
+ "evidence_sources": ["active-worktree-diff"],
72
+ "what_to_verify": "Verify whether concurrent work will modify the shared file paths before implementation or merge."
73
+ }
74
+ ```
75
+
76
+ The full report also records repository provenance, revision relation, hub suppression, warnings, and
77
+ the read-only policy. It contains pointers rather than source snippets. See
78
+ [`examples/collisions.json`](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/examples/collisions.json)
79
+ and the
80
+ [example guide](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/examples/README.md).
81
+
82
+ ## Why trust it?
83
+
84
+ | Evidence | Result | Boundary |
85
+ | --- | --- | --- |
86
+ | Concurrent-worktree release gate | Recovered all 3 known exact-file collisions across 4 genuine active worktrees | One repository; not universal recall |
87
+ | Dogfooding | Found 2 real association/scope defects before v0.4.0 | Demonstrates workflow value, not broad precision |
88
+ | Ruff scale surrogate | 17/20 top-packet pairs were at least contextually useful across 8,143 public issues | Converted GitHub corpus; no native Beads graph or worktrees |
89
+ | Release validation | Full CI passed across Linux, macOS, Windows, Python 3.11 and 3.14; wheel/sdist checksums and provenance published | Supply-chain and test evidence, not semantic quality |
90
+ | Repeatability | Evaluation outputs were byte-stable and non-mutating | Determinism does not make a weak lead correct |
91
+
92
+ Read the [dogfood release-gate story](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/articles/dogfooding-v040-worktree-gate.md),
93
+ [aggregate v0.4.0 worktree gate](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/research/code-surface-v040-release-gate.md),
94
+ [Ruff scale review](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/research/ruff-scale-surrogate-01.md),
95
+ and the
96
+ [research index](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/research/README.md)
97
+ for methods, failure patterns, and limitations.
98
+
99
+ ## How it works
100
+
101
+ ```text
102
+ Beads or one Linear team
103
+
104
+ ├── typed relationships and lifecycle
105
+ ├── explicit paths and observed worktree changes
106
+ └── local whole-record and field-level embeddings
107
+
108
+
109
+ bounded candidate union
110
+
111
+
112
+ evidence receipts + review packet
113
+ ```
114
+
115
+ `triage` is the opinionated front door. It admits at most 20 semantic candidates by default, includes
116
+ code-surface analysis when genuine local Git evidence exists, and writes a complete audit report to
117
+ external user state. Use `sweep` for experimental policy controls and `neighbors` for one-record
118
+ inspection. The default is a reviewer-capacity budget, not corpus coverage; see the
119
+ [review-budget decision](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/decisions/review-budget-default.md).
120
+
121
+ `collisions` reviews `open`, `in_progress`, and `blocked` work by default. It associates Git worktrees
122
+ when a branch contains a full Bead ID or unambiguous `bead-N` suffix. Explicitly map an otherwise
123
+ unassociated worktree with:
124
+
125
+ ```bash
126
+ embead collisions --worktree-map embead-42=../feature-worktree
127
+ ```
128
+
129
+ Never fabricate a mapping: observed evidence must describe genuine active implementation work.
130
+ Shared paths are coordination evidence, not proof that two tasks conflict.
131
+
132
+ ## Linear
133
+
134
+ Create a personal API key in Linear's Security & access settings and load it without placing the value
135
+ directly in a shell-history entry:
136
+
137
+ ```bash
138
+ LINEAR_API_KEY="$(python -c 'import getpass; print(getpass.getpass("Linear API key: "))')"
139
+ export LINEAR_API_KEY
140
+
141
+ embead --source linear --linear-team ENG triage
142
+ embead --source linear --linear-team ENG collisions
143
+ ```
144
+
145
+ `LINEAR_ACCESS_TOKEN` accepts an OAuth token instead; set only one credential. The CLI queries one
146
+ selected team through Linear GraphQL and does not reuse credentials held by an MCP or agent host. See
147
+ the [Linear adapter contract](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/linear.md).
148
+
149
+ ## Privacy and data boundary
150
+
151
+ - Tracker adapters contain no mutation operations.
152
+ - The default model embeds issue text locally; issue text is not sent to Hugging Face.
153
+ - Linear mode sends tracker queries only to Linear itself.
154
+ - Models and vectors use the platform user cache; reports use the platform user state directory.
155
+ - Neither cache nor reports are written into the analyzed repository by default.
156
+ - Collision reports contain code pointers, not source snippets.
157
+ - A human or coordinator must verify every lead before changing tracker or source state.
158
+
159
+ The first model download is network activity. Prepare it before loading private issues when evaluating
160
+ under OS-level network denial. See the
161
+ [safe offline evaluation guide](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/evaluation.md).
162
+
163
+ ## Good fit / poor fit
164
+
165
+ emBEADings is most useful when a tracker is too large for repeated full-context review, several people
166
+ or agents work concurrently, and the team values a reproducible offline shortlist.
167
+
168
+ It is less useful for a small tracker that one reviewer can read directly, repositories without
169
+ meaningful tracker-to-code evidence, or teams seeking automatic issue mutation, orchestration, a
170
+ dashboard, or a general memory system. Typed dependencies remain tracker truth; semantics complement
171
+ them rather than re-deriving authority.
172
+
173
+ ## Development
174
+
175
+ Every clone or Git worktree must own its virtual environment:
176
+
177
+ ```bash
178
+ python3 scripts/worktree_env.py
179
+ . .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1
180
+ python scripts/validate.py
181
+ ```
182
+
183
+ The bootstrap refuses to reuse an active environment from another checkout. Validation checks the
184
+ editable `embead` import target before formatting, lint, tests, and release checks. Read
185
+ [`CONTRIBUTING.md`](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/CONTRIBUTING.md)
186
+ before submitting fixtures or reports; private tracker content
187
+ must never be committed.
188
+
189
+ ## Agent plugin preview
190
+
191
+ [`plugins/embeadings`](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/plugins/embeadings/README.md)
192
+ packages `triage`, `collisions`, and `evaluate`
193
+ skills for local Codex and Claude Code development. It delegates to the installed CLI, forces schema-v1
194
+ JSON, and verifies the read-only policy. It is not yet a marketplace release and grants no tracker-write
195
+ authority.
196
+
197
+ ## Documentation
198
+
199
+ - [Documentation index](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/README.md)
200
+ - [CLI and product specification](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/spec.md)
201
+ - [Consumer and schema contract](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/consumer-contract.md)
202
+ - [Performance and scale evaluation](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/performance.md)
203
+ - [Research and evaluation ledger](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/docs/research/README.md)
204
+ - [Versioned JSON Schemas](https://github.com/DyrtyJax/embeadings/tree/v0.4.2/schemas/v1) and
205
+ [synthetic examples](https://github.com/DyrtyJax/embeadings/blob/v0.4.2/examples/README.md)
206
+
207
+ ## Principles
208
+
209
+ - **Read-only means read-only.** Analysis never closes, edits, labels, or reprioritizes work.
210
+ - **The tracker remains authoritative.** Structure and lifecycle stay tracker data.
211
+ - **Local-first and private.** The default semantic provider sends no issue content to a network API.
212
+ - **Bounded and auditable.** A stable receipt explains what entered or was omitted from the queue.
213
+ - **Agent-neutral.** Core analysis does not depend on Codex, Claude Code, Cursor, or another runtime.
214
+
215
+ MIT licensed. emBEADings is not affiliated with Beads or Linear.
@@ -0,0 +1,78 @@
1
+ [build-system]
2
+ requires = ["hatchling==1.31.0"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "embeadings"
7
+ dynamic = ["version"]
8
+ description = "Local-first coordination review for Beads and Linear"
9
+ readme = "README.md"
10
+ requires-python = ">=3.11"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "Jackson Cantrell" }]
13
+ keywords = ["beads", "linear", "semantic-search", "triage", "developer-tools"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Environment :: Console",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Operating System :: OS Independent",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Topic :: Software Development :: Quality Assurance",
22
+ ]
23
+ dependencies = [
24
+ "filelock>=3.16,<4",
25
+ "huggingface-hub>=1.0,<2",
26
+ "model2vec>=0.8,<0.9",
27
+ "numpy>=1.26,<3",
28
+ "platformdirs>=4.3,<5",
29
+ ]
30
+
31
+ [project.optional-dependencies]
32
+ dev = [
33
+ "jsonschema>=4.23,<5",
34
+ "pytest>=8.3,<10",
35
+ "ruff>=0.12,<1",
36
+ ]
37
+ benchmark = [
38
+ "fastembed>=0.8,<0.9",
39
+ "sqlite-vec>=0.1.9,<0.2",
40
+ ]
41
+
42
+ [project.scripts]
43
+ embead = "embead.cli:main"
44
+
45
+ [project.urls]
46
+ Homepage = "https://github.com/DyrtyJax/embeadings"
47
+ Documentation = "https://github.com/DyrtyJax/embeadings/blob/main/docs/README.md"
48
+ Issues = "https://github.com/DyrtyJax/embeadings/issues"
49
+ Repository = "https://github.com/DyrtyJax/embeadings.git"
50
+ Changelog = "https://github.com/DyrtyJax/embeadings/blob/main/CHANGELOG.md"
51
+ Releases = "https://github.com/DyrtyJax/embeadings/releases"
52
+
53
+ [tool.hatch.version]
54
+ path = "src/embead/_version.py"
55
+
56
+ [tool.hatch.build.targets.wheel]
57
+ packages = ["src/embead"]
58
+
59
+ [tool.hatch.build.targets.wheel.force-include]
60
+ "schemas/v1" = "embead/schemas/v1"
61
+
62
+ [tool.hatch.build.targets.sdist]
63
+ only-include = [
64
+ "src",
65
+ "schemas",
66
+ "LICENSE",
67
+ ]
68
+
69
+ [tool.pytest.ini_options]
70
+ addopts = "-q"
71
+ testpaths = ["tests"]
72
+
73
+ [tool.ruff]
74
+ line-length = 100
75
+ target-version = "py311"
76
+
77
+ [tool.ruff.lint]
78
+ select = ["E", "F", "I", "UP", "B", "SIM"]