@hviana/sema 0.5.5 → 0.5.7

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.
package/CITATION.cff CHANGED
@@ -40,10 +40,10 @@ preferred-citation:
40
40
  orcid: "https://orcid.org/0000-0002-7119-5867"
41
41
  affiliation: "NONE"
42
42
  year: 2026
43
- month: 7
44
- day: 16
45
- version: "0.1.0"
46
- doi: "10.5281/zenodo.21385723"
47
- url: "https://doi.org/10.5281/zenodo.21385723"
43
+ month: 8
44
+ day: 6
45
+ version: "2.0.0"
46
+ doi: "10.5281/zenodo.21385722"
47
+ url: "https://doi.org/10.5281/zenodo.21385722"
48
48
  publisher:
49
49
  name: "Zenodo"
package/HOW_IT_WORKS.md CHANGED
@@ -1570,38 +1570,48 @@ size of the grouping quantum has nothing to do with it — any fixed modulus doe
1570
1570
  this, and identity must not depend on the fold's arity at all.
1571
1571
 
1572
1572
  Sema therefore lets the **bytes choose where the stream segments**. A rolling
1573
- hash runs over a bounded window of the recent bytes; a cut is offered where that
1574
- hash vanishes modulo W. Because the decision reads only a bounded window, a
1575
- change upstream can move only the cut it falls inside — every downstream
1576
- boundary, and therefore every downstream segment, is unchanged. Since each
1577
- segment folds from its own seat 0, byte-identical content produces
1578
- byte-identical subtrees wherever it occurs, and hash-consing then makes it the
1579
- very same node id.
1580
-
1581
- The rule is entirely mechanical, and every constant in it is derived:
1582
-
1583
- - **The window** is W bytes wide, implemented as a cyclic polynomial (each byte
1584
- enters as a table value and leaves rotated by the window width), so the
1585
- register holds _exactly_ the last W raw bytes and nothing before them can
1586
- reach the decision. The raw window is put through a two-round avalanche mix
1587
- before the test, which is what makes the rule behave the same on a gradient or
1588
- a sparse binary stream as it does on prose.
1573
+ window holds the recent bytes; a cut is offered where a mix of that window
1574
+ vanishes modulo W. Because the test reads only that window, a change upstream
1575
+ perturbs boundaries near itself and the segmentation downstream re-synchronises
1576
+ on its own. Since each segment folds from its own seat 0, byte-identical content
1577
+ that survives that re-synchronisation produces byte-identical subtrees wherever
1578
+ it occurs, and hash-consing then makes it the very same node id.
1579
+
1580
+ The rule is entirely mechanical:
1581
+
1582
+ - **The window** is a 32-bit shift register (`h ≔ (h << 8) | byte`), so it holds
1583
+ _exactly_ the last four raw bytes and nothing before them can reach the test.
1584
+ The raw window is put through a two-round avalanche mix before the test, which
1585
+ is what makes the rule behave the same on a gradient or a sparse binary stream
1586
+ as it does on prose. Note that the window is a property of the register, not
1587
+ of W: changing W changes the cut _rate_, not how far a disturbance reaches.
1589
1588
  - **The cut rate** is one offer per W bytes (`mix % W === 0`).
1590
- - **The minimum segment length** is expressed _locally_, not as a count from the
1591
- previous cut (a count carries the stream's initial phase forever, which is
1592
- exactly the offset dependence being removed): a hit is taken only if the
1593
- previous two positions did not hit.
1589
+ - **Acceptance is gated locally**, not by a count from the previous cut (a count
1590
+ carries the stream's initial phase forever, which is exactly the offset
1591
+ dependence being removed): a hit is taken only if the previous two positions
1592
+ did not hit. Both terms of the acceptance test are therefore functions of a
1593
+ bounded byte window.
1594
1594
  - **The maximum segment length** is the keyring's seat count, because a segment
1595
1595
  folds as one flat node and the fold has exactly that many seats to bind
1596
- children into. An over-long stretch is split at strides from its own start
1597
- content-relative, and rare enough (mean segment 5–7 bytes against a bound of
1598
- 8) not to reintroduce a systematic phase.
1599
-
1600
- The expected segment is therefore `minLen + W − 1` bytes — deliberately coarser
1601
- than the fold's own arity. A segment is the flat **phrase-scale unit** the W-ary
1602
- groups are built _from_, not a group of W children; the mechanisms downstream
1603
- are fitted to that scale, and forcing the two to coincide was measured and
1604
- refuted.
1596
+ children into. An over-long stretch is split at strides from its own start:
1597
+ the stretch _begins_ at a content-chosen cut, but the split points themselves
1598
+ are counted off, so this is the one boundary in the rule that content does not
1599
+ choose.
1600
+
1601
+ The resulting segment averages 5–6 bytes against a seat bound of 8 (measured:
1602
+ 5.2 on prose, 5.3–5.8 across uniform, sparse, low-entropy, periodic-record and
1603
+ gradient streams) deliberately coarser than the fold's own arity. A segment is
1604
+ the flat **phrase-scale unit** the W-ary groups are built _from_, not a group of
1605
+ W children; the mechanisms downstream are fitted to that scale, and forcing the
1606
+ two to coincide was measured and refuted.
1607
+
1608
+ The forced split is not rare enough to ignore: it ends ~25% of segments on prose
1609
+ and ~32% on uniform random bytes. It is what keeps re-synchronisation an
1610
+ empirical property rather than a guaranteed one — a single-byte edit moves
1611
+ boundaries for a median of 4 bytes downstream, but 5% of edits reach ~14 bytes
1612
+ and the worst observed case ~28 (W = 4, seat bound 8). Lengthening segments to
1613
+ shrink it makes forced splits dominant and alignment collapses instead
1614
+ (measured: 0.000 on two-symbol data at rate 1/16).
1605
1615
 
1606
1616
  This reads **bytes, never text**. Measured over 400 real deposits under 1–7 byte
1607
1617
  shifts, downstream cuts survive 99.6–99.9% of the time and segments stay
@@ -4770,7 +4780,7 @@ fracOfQuery(cos, otherLen, qLen) ≔ min(1, cos · √(otherLen / max(1, qLen)))
4770
4780
 
4771
4781
  # ── perception (§10) ──────────────────────────────────────────────────
4772
4782
  contentLevels(bytes): # §10.2 — the ONE boundary rule
4773
- h ≔ rolling window of the last W raw bytes (cyclic polynomial)
4783
+ h ≔ 32-bit shift register: the last 4 raw bytes
4774
4784
  for each position i:
4775
4785
  m ≔ avalanche(h) # two rounds
4776
4786
  hit ≔ (m mod W = 0)
package/README.md CHANGED
@@ -31,6 +31,12 @@ No weights. No gradients. No training loop. No neural network. No GPU.
31
31
  > inspectable, exact — and _reasons_ over it on demand. The store **is** the
32
32
  > model. What it knows, you can read. Why it answered, you can trace.
33
33
  >
34
+ > The difference is not a matter of degree. A trained model's meanings are real,
35
+ > but nothing in it records where they came from — provenance is diffused across
36
+ > an entire training run rather than kept. Sema's meanings are assembled from
37
+ > **enumerable events**, and the record is the mechanism: for any concept it
38
+ > holds, you can list what taught it, and in what role.
39
+ >
34
40
  > Formally, Sema is a **non-parametric, instance-based reasoning system**: a
35
41
  > Vector Symbolic Architecture (Plate 1995; Kanerva 2009) over a
36
42
  > content-addressable memory, with inference by weighted automated deduction
@@ -39,39 +45,52 @@ No weights. No gradients. No training loop. No neural network. No GPU.
39
45
 
40
46
  ---
41
47
 
42
- ## ✦ Retrieval and reasoning, one search
48
+ ## ✦ It chooses how to think
43
49
 
44
- Two questions, asked of every query and Sema answers both in a single pass:
50
+ A question can be answered in more than one way, and the ways are not
51
+ interchangeable. Sema holds several, lets them compete, and takes the one that
52
+ leaves the least of your question unaccounted for.
45
53
 
46
54
  <div align="center">
47
55
 
48
- | | The question it asks |
49
- | :--------------- | :--------------------------------------------------- |
50
- | 🔎 **Retrieval** | _"What do I already know that bears on this?"_ |
51
- | 🧠 **Deduction** | _"What can I conclude or decide from what I found?"_ |
56
+ | What Sema claims about your question |
57
+ | :--------------------------------------------------------------------------------- |
58
+ | _"I can build this answer out of pieces I already know."_ |
59
+ | _"You've woven two things I know let me carry structure between them."_ |
60
+ | _"You gave me two conditions; the answer is where they meet."_ |
61
+ | _"I've seen this shape of question before — let me read yours the same way."_ |
62
+ | _"You've begun something I know the whole of."_ |
63
+ | _"Part of this answer is **your** words, in a place my memory keeps open."_ |
64
+ | _"The nearest thing I hold is this — and I'm telling you it's near, not derived."_ |
65
+ | **_"Nothing I hold bears on this."_** |
52
66
 
53
67
  </div>
54
68
 
55
69
  ```text
56
- ┌──────────────────────────────────────────────┐
57
- Your question │"The Weeping Woman was painted by Picasso."
58
- └──────────────────────┬───────────────────────┘
59
-
60
- 🔎 Retrieve resonate the query against the memory
61
- · " painted by the painter" (a learned pattern)
62
- · "Picasso co-founded the Cubist movement"
63
-
64
- 🧠 Deduce connect · derive · compose
65
- · lift the painter from a sentence never seen
66
- · follow that name onward to what it implies
67
-
68
- Answer "Pablo Picasso co-founded the Cubist movement"
69
- (a fact that appears in no word of the question)
70
+ ┌──────────────────────────────────────┐
71
+ your question every route prices its own answer
72
+ │ └──────────────────┬───────────────────┘
73
+
74
+ ┌─────────────┐ one price, one question:
75
+ │ route ·"how much of what you asked
76
+ │ route · ───▶ did this route fail to
77
+ │ route · │ account for?"
78
+ route · │ │
79
+ └─────────────┘ ▼
80
+ ┌─────────────────────────┐
81
+ │ the lightest answer │
82
+ wins and arrives │
83
+ │ tagged with the route │
84
+ │ that produced it │
85
+ └─────────────────────────┘
70
86
  ```
71
87
 
72
- Retrieval and reasoning are not two bolted-together stagesthey are **one
73
- search** over **one memory**, which is why the answer can be something no single
74
- stored fact contains. Watch it happen below.
88
+ Because the price is _unexplained question_ — not speed, not confidencethe
89
+ winner is the route that accounts for most of what you actually asked, rather
90
+ than the one most eager to answer. It is also why the last line of that table is
91
+ a legitimate outcome and not a failure: when no route can account for what you
92
+ asked, **silence is a first-class answer.** A system that must always produce
93
+ something will always, eventually, produce fiction.
75
94
 
76
95
  ---
77
96
 
@@ -83,24 +102,15 @@ stored fact contains. Watch it happen below.
83
102
 
84
103
  ### 🧩 Symbolic, not statistical
85
104
 
86
- Knowledge is stored as a **content-addressed graph**, not smeared across a
87
- weight matrix. Every fact is an edge you can point at. Nothing is hallucinated
88
- out of a probability distribution.
105
+ Everything stored carries a vector for what it is _made of_; anything that takes
106
+ part in a fact carries a second for the **company it keeps**. The first makes
107
+ _colour_ close to _colours_; the second makes _colour_ close to _hue_, two words
108
+ whose spellings have nothing to do with each other. Meaning here is assembled
109
+ and readable, not smeared across a weight matrix.
89
110
 
90
111
  </td>
91
112
  <td width="50%" valign="top">
92
113
 
93
- ### 🔀 Retrieval and reasoning, unified
94
-
95
- Retrieval and reasoning are **one mechanism**, not a brittle pipeline of bolted-
96
- together components. A query enters the graph where it _resonates_ and a single
97
- lightest-derivation search composes the answer.
98
-
99
- </td>
100
- </tr>
101
- <tr>
102
- <td width="50%" valign="top">
103
-
104
114
  ### 🔍 Fully auditable
105
115
 
106
116
  Every answer is a **derivation** over explicit facts. No black box. Trace any
@@ -108,6 +118,8 @@ output back to the exact deposits that produced it — a hard requirement for
108
118
  regulated, high-stakes, and safety-critical deployments.
109
119
 
110
120
  </td>
121
+ </tr>
122
+ <tr>
111
123
  <td width="50%" valign="top">
112
124
 
113
125
  ### ♻️ Deterministic & reproducible
@@ -116,6 +128,17 @@ Same seed + same bytes → **identical result, every time.** No temperature, no
116
128
  sampling, no drift between runs. Reproducibility is a property of the
117
129
  architecture, not a flag you toggle.
118
130
 
131
+ </td>
132
+ <td width="50%" valign="top">
133
+
134
+ ### 📐 Nothing tuned
135
+
136
+ **No threshold is a chosen number.** Every bar the system decides on is derived
137
+ from the representation's own geometry — its dimension, its perception window,
138
+ how much it has learned. Nothing was fitted to a benchmark, so there is no dev
139
+ set to overfit and no calibration that silently expires when your data stops
140
+ resembling someone else's.
141
+
119
142
  </td>
120
143
  </tr>
121
144
  <tr>
@@ -139,9 +162,11 @@ leak. Everything a trained mind knows lives in a few files on your disk.
139
162
  </table>
140
163
 
141
164
  > [!TIP]
142
- > **No GPU. No cluster. No cloud bill.** Sema runs on an ordinary CPU with a
143
- > tiny memory footprint, because it never multiplies a weight matrix — it walks
144
- > a graph. The economics of deploying intelligence change completely.
165
+ > **No GPU. No cluster. No cloud bill.** Sema runs on an ordinary CPU, because
166
+ > it never multiplies a weight matrix — it walks a graph. Its resident memory is
167
+ > capped by configuration rather than by how much it has learned, so a large
168
+ > store does not become a large machine. The economics of deploying intelligence
169
+ > change completely.
145
170
 
146
171
  ---
147
172
 
@@ -150,20 +175,11 @@ leak. Everything a trained mind knows lives in a few files on your disk.
150
175
  Give Sema four plain notes — the way you'd jot them down — then ask things **no
151
176
  note answers**. From three worked examples it learns the _shape_ of "X was
152
177
  painted by Y", lifts the painter out of a sentence it has **never seen**, and —
153
- in the same pass — reasons onward to a separate fact about that painter. The
154
- reply contains no word from the question: it is **retrieval, generalization, and
155
- reasoning composing as a single act**.
178
+ in the same pass — reasons onward to a separate fact about that painter. Nothing
179
+ in the reply but the painter's own name comes from the question.
156
180
 
157
181
  ```ts
158
182
  // demo.ts — one short session that drives the WHOLE pipeline from one memory.
159
- //
160
- // We give Sema a handful of plain notes, then ask things that no single note
161
- // answers. The headline query is the third one: from three worked examples Sema
162
- // learns the shape of "X was painted by Y", lifts the painter out of a sentence
163
- // it has NEVER seen, and then — in the same pass — reasons forward to a separate
164
- // fact about that painter. The reply contains no word from the question. That is
165
- // retrieval, generalization, and reasoning composing as a single act, with every
166
- // step traceable back to the notes behind it.
167
183
 
168
184
  import { Mind } from "../src/index.js";
169
185
  import { SQliteStore } from "../src/store-sqlite.js";
@@ -186,16 +202,11 @@ async function main(): Promise<void> {
186
202
  ]);
187
203
 
188
204
  // 1) GENERALIZE — apply the learned pattern to an unseen sentence and read out
189
- // the painter. "Pablo Picasso" was never given as an answer; Sema locates it
190
- // by analogy to the three examples.
205
+ // the painter, then keep going into what is known about him.
191
206
  console.log(await ask("The Weeping Woman was painted by Pablo Picasso."));
192
- // → "Pablo Picasso co-founded the Cubist movement"
193
- // …and, having found the painter, it KEEPS GOING: the name bridges into the
194
- // one fact it holds about him. The answer appears in no word of the question.
195
207
 
196
208
  // 2) COMPUTE — exact arithmetic, grounded right where the notes go silent.
197
209
  console.log(await ask("a museum charges 12*4 for a family ticket"));
198
- // → "48"
199
210
 
200
211
  await mind.store.close();
201
212
  }
@@ -208,40 +219,110 @@ Pablo Picasso co-founded the Cubist movement
208
219
  48
209
220
  ```
210
221
 
222
+ Ask for the receipt instead of the text, and each answer says how it was reached
223
+ — `mind.respond(q)` returns the same bytes plus a **`provenance` tag** naming
224
+ the route, and, on request, the complete replayable trace behind it:
225
+
226
+ ```text
227
+ "The Weeping Woman was painted by Pablo Picasso." → provenance: cast
228
+ ( structure carried across the three worked examples )
229
+
230
+ "a museum charges 12*4 for a family ticket" → provenance: cover
231
+ ( composed from the question's own parts — one of them computed exactly )
232
+ ```
233
+
234
+ > [!NOTE]
235
+ > This is **[example/demo.ts](example/demo.ts)** — run it with `npm run demo`.
236
+ > The first question names a painting Sema was never shown, and asks nothing
237
+ > explicit; what comes back is a fact about Cubism that appears **nowhere** in
238
+ > it. The second is exact, not a plausible-looking guess. Every step traces back
239
+ > to the four notes above.
240
+
241
+ ---
242
+
243
+ ## ✦ Learn it in one pass
244
+
245
+ There is no training phase distinct from using it. **Depositing _is_ learning**,
246
+ and a fact is available the instant it lands.
247
+
248
+ <div align="center">
249
+
250
+ | | |
251
+ | :------------------- | :-------------------------------------------------------------------------------------------------- |
252
+ | 📥 **To teach it** | Hand it the fact. One pass. No epochs, no GPU, no fine-tuning window. |
253
+ | ✏️ **To correct it** | Deposit the correction — a write, not a retraining run. Nothing is erased; the evidence is weighed. |
254
+ | 🔁 **To repeat it** | Teaching the same thing twice creates nothing new — identity is content. |
255
+ | 📦 **To scale it** | Storage grows with _distinct_ content, never with volume. |
256
+
257
+ </div>
258
+
259
+ > [!TIP]
260
+ > It does not learn by repetition and does not need an enormous corpus. What it
261
+ > needs is **coverage of fundamental patterns** — conversation, logic,
262
+ > relationships, quantities — not the same pattern ten thousand times. A small,
263
+ > well-chosen curriculum teaches it more than a scraped ocean.
264
+
265
+ ---
266
+
267
+ ## ✦ Where it matters
268
+
269
+ Not "faster than an LLM" — **possible where an LLM is not.** Each of these
270
+ sectors is blocked by a requirement no sampled model can meet.
271
+
272
+ | Sector | The blocker | What Sema puts on the table |
273
+ | :---------------------------- | :---------------------------------------------------------------- | :------------------------------------------------------------------------------ |
274
+ | 🏥 **Healthcare** | Patient data cannot leave; a recommendation must be explicable | Runs in the building, cites the record behind every answer |
275
+ | 🏦 **Finance & credit** | An adverse decision must be justified, and reproduced on demand | The same inputs give the same decision, with the reasoning attached |
276
+ | ⚖️ **Legal & compliance** | A cited authority that does not exist is a career-ending event | Nothing is invented: every answer is a derivation over what was deposited |
277
+ | 🛡️ **Defense & intelligence** | Air-gapped, no external inference, no telemetry | One binary, no network, no API key, no weights to exfiltrate |
278
+ | 🏭 **Industrial & safety** | Certification requires deterministic, auditable behaviour | Determinism is architectural, and every answer is a replayable derivation |
279
+ | 🏛️ **Public sector** | Decisions about citizens must be contestable | A citizen can be shown exactly which rules and records produced the outcome |
280
+ | 🛰️ **Edge & robotics** | No datacenter, tight power budget, knowledge changes in the field | CPU-only, memory capped by configuration; new knowledge is a write, not a build |
281
+
211
282
  > [!NOTE]
212
- > This is **[example/demo.ts](example/demo.ts)**, verbatim run it yourself
213
- > with `npm run demo`. Look closely at the first answer: the question names a
214
- > painting Sema was never shown and asks nothing explicit, yet the reply is a
215
- > fact about Picasso that appears **nowhere** in the question. Sema generalized
216
- > "_painted by_" from three examples to recognize _Pablo Picasso_ as the answer
217
- > slot, then followed that name to the one thing it knows about him — retrieval,
218
- > an analogy, and a reasoning hop, in one query. The second answer is exact, not
219
- > a plausible-looking guess. Every step traces back to the four notes above.
283
+ > The common thread: these are settings where **"I don't know" is worth more
284
+ > than a confident guess** and where a wrong answer is not an inconvenience
285
+ > but a liability. Sema is built to say it.
220
286
 
221
287
  ---
222
288
 
223
- ## ✦ Engineered from three solved problems
289
+ ## ✦ Try it one file, zero setup
224
290
 
225
- Sema is composed of three self-contained, independently documented engines. They
226
- are fully decoupled Sema reaches them only through interfaces.
291
+ A **self-contained app** that opens a **web chat with Sema**. Download, run,
292
+ start talkingno install, no runtime, no API key.
227
293
 
228
- | Engine | What it solves | Result |
229
- | :--------------- | :----------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- |
230
- | **`rabitq-ivf`** | _"Given a vector, find the nodes whose gist resonates with it — fast, at scale, on disk."_ | Partitioned (IVF) index over 1-bit RaBitQ codes · ~32× compression · bounded RAM · flat inserts, bounded queries |
231
- | **`derive`** | _"Explore a huge implicit space of derivations and return the single lightest one."_ | adapted A\*LD (adapted A\* Lightest Derivation) over a weighted deduction hypergraph — Sema's thinking _is_ one call to this |
232
- | **`alu`** | _"Compute, exactly and symbolically, the things that are rules, not facts."_ | A tiny irreducible kernel from which arithmetic, logic, and n-dimensional computation are derived |
294
+ <div align="center">
295
+
296
+ | Your machine | Download |
297
+ | :----------------------- | :----------------------------------------------------------------------------------------------------------------------------- |
298
+ | 🪟 **Windows** | [Download · 85 MB](https://huggingface.co/buckets/hviana/sema-binary-examples/resolve/sema-demo-windows-x64.exe?download=true) |
299
+ | 🍎 **Mac** — M1–M4 | [Download · 73 MB](https://huggingface.co/buckets/hviana/sema-binary-examples/resolve/sema-demo-macos-arm64?download=true) |
300
+ | 🍎 **Mac** — Intel | [Download · 85 MB](https://huggingface.co/buckets/hviana/sema-binary-examples/resolve/sema-demo-macos-x64?download=true) |
301
+ | 🐧 **Linux** — Intel/AMD | [Download · 113 MB](https://huggingface.co/buckets/hviana/sema-binary-examples/resolve/sema-demo-linux-x64?download=true) |
302
+ | 🐧 **Linux** — ARM | [Download · 114 MB](https://huggingface.co/buckets/hviana/sema-binary-examples/resolve/sema-demo-linux-arm64?download=true) |
303
+
304
+ </div>
305
+
306
+ > [!TIP]
307
+ > Not sure which Mac you have? Anything sold from 2020 onward is almost
308
+ > certainly **M1–M4**. On Linux, if you're on a regular desktop or server, pick
309
+ > **Intel/AMD**; **ARM** is for boards like the Raspberry Pi and ARM cloud
310
+ > instances. All builds are browsable at
311
+ > [🤗 sema-binary-examples](https://huggingface.co/buckets/hviana/sema-binary-examples).
233
312
 
234
313
  ---
235
314
 
236
315
  ## ✦ Learn more
237
316
 
238
- | Document | What's inside |
239
- | :------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- |
240
- | 📘 **[HOW_IT_WORKS.md](HOW_IT_WORKS.md)** | The full theory: vector symbolic architectures, the Merkle DAG, distributional halos, weighted deduction — concepts, diagrams, and extensive pseudocode. |
241
- | 🛠️ **[AGENTS.md](AGENTS.md)** | The development manual: repo layout, build/test, internals, invariants, and recipes for extending the system. |
242
- | ⚖️ **[LICENSE.md](LICENSE.md)** | PolyForm Noncommercial License 1.0.0. |
243
- | 💼 **[COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md)** | Commercial licensing terms and contact. |
244
- | 🤗 **[Trained examples](https://huggingface.co/buckets/hviana/sema-trained-v1)** | Pre-trained memory files you can download and use directly. |
317
+ | Document | What's inside |
318
+ | :----------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- |
319
+ | 📘 **[HOW_IT_WORKS.md](HOW_IT_WORKS.md)** | The full theory: vector symbolic architectures, the Merkle DAG, distributional halos, weighted deduction — concepts, diagrams, and extensive pseudocode. |
320
+ | 🛠️ **[AGENTS.md](AGENTS.md)** | The development manual: repo layout, build/test, internals, invariants, and recipes for extending the system. |
321
+ | 🎓 **[CITATION.cff](CITATION.cff)** | How to cite Sema in academic work. |
322
+ | ⚖️ **[LICENSE.md](LICENSE.md)** | PolyForm Noncommercial License 1.0.0. |
323
+ | 💼 **[COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md)** | Commercial licensing terms and contact. |
324
+ | 🤗 **[Trained examples](https://huggingface.co/buckets/hviana/sema-trained-v1)** | Pre-trained memory files you can download and use directly. |
325
+ | 💿 **[Binary examples](https://huggingface.co/buckets/hviana/sema-binary-examples)** | Ready-to-run web chat apps for Windows, Mac, and Linux — one file, no install. |
245
326
 
246
327
  ---
247
328