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.
- embeadings-0.4.2/.gitignore +21 -0
- embeadings-0.4.2/LICENSE +21 -0
- embeadings-0.4.2/PKG-INFO +251 -0
- embeadings-0.4.2/README.md +215 -0
- embeadings-0.4.2/pyproject.toml +78 -0
- embeadings-0.4.2/schemas/v1/batch.schema.json +200 -0
- embeadings-0.4.2/schemas/v1/capabilities.schema.json +35 -0
- embeadings-0.4.2/schemas/v1/checkpoint.schema.json +25 -0
- embeadings-0.4.2/schemas/v1/collisions.schema.json +170 -0
- embeadings-0.4.2/schemas/v1/neighbors.schema.json +104 -0
- embeadings-0.4.2/schemas/v1/sweep.schema.json +507 -0
- embeadings-0.4.2/schemas/v1/triage.schema.json +139 -0
- embeadings-0.4.2/src/embead/__init__.py +15 -0
- embeadings-0.4.2/src/embead/__main__.py +3 -0
- embeadings-0.4.2/src/embead/_version.py +3 -0
- embeadings-0.4.2/src/embead/analysis.py +685 -0
- embeadings-0.4.2/src/embead/artifacts.py +40 -0
- embeadings-0.4.2/src/embead/beads.py +457 -0
- embeadings-0.4.2/src/embead/cache.py +214 -0
- embeadings-0.4.2/src/embead/cli.py +1345 -0
- embeadings-0.4.2/src/embead/doctor.py +215 -0
- embeadings-0.4.2/src/embead/explain.py +451 -0
- embeadings-0.4.2/src/embead/incremental.py +175 -0
- embeadings-0.4.2/src/embead/linear.py +518 -0
- embeadings-0.4.2/src/embead/models.py +158 -0
- embeadings-0.4.2/src/embead/provider.py +155 -0
- embeadings-0.4.2/src/embead/ranking.py +1509 -0
- embeadings-0.4.2/src/embead/reports.py +1327 -0
- embeadings-0.4.2/src/embead/surfaces.py +942 -0
- embeadings-0.4.2/src/embead/trackers.py +17 -0
- embeadings-0.4.2/src/embead/validation.py +189 -0
|
@@ -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/
|
embeadings-0.4.2/LICENSE
ADDED
|
@@ -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
|
+
[](https://github.com/DyrtyJax/embeadings/actions/workflows/ci.yml)
|
|
42
|
+
[](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
|
+

|
|
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
|
+
[](https://github.com/DyrtyJax/embeadings/actions/workflows/ci.yml)
|
|
6
|
+
[](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
|
+

|
|
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"]
|