@hviana/sema 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/AGENTS.md +115 -53
  2. package/HOW_IT_WORKS.md +291 -184
  3. package/jsr.json +6 -0
  4. package/package.json +1 -1
  5. package/src/mind/bridge.ts +10 -104
  6. package/src/mind/match.ts +497 -7
  7. package/src/mind/{prefix-completion.ts → mechanisms/prefix-completion.ts} +66 -92
  8. package/src/mind/mechanisms/recall.ts +38 -129
  9. package/src/mind/mechanisms/reference.ts +343 -0
  10. package/src/mind/mind.ts +12 -8
  11. package/src/mind/pipeline-mechanism.ts +120 -3
  12. package/src/mind/pipeline.ts +16 -2
  13. package/src/mind/traverse.ts +92 -1
  14. package/src/store.ts +13 -4
  15. package/test/33-multi-candidate.test.mjs +21 -11
  16. package/test/70-prefix-completion.test.mjs +1 -1
  17. package/test/72-prefix-candidate-supply.test.mjs +7 -9
  18. package/test/74-prefix-trap-not-sprung-early.test.mjs +1 -1
  19. package/test/76-reference-binding.test.mjs +543 -0
  20. package/dist/example/demo.d.ts +0 -1
  21. package/dist/example/demo.js +0 -39
  22. package/dist/example/train_base.d.ts +0 -93
  23. package/dist/example/train_base.js +0 -2269
  24. package/dist/src/alphabet.d.ts +0 -7
  25. package/dist/src/alphabet.js +0 -33
  26. package/dist/src/alu/src/alu.d.ts +0 -185
  27. package/dist/src/alu/src/alu.js +0 -440
  28. package/dist/src/alu/src/expr.d.ts +0 -61
  29. package/dist/src/alu/src/expr.js +0 -318
  30. package/dist/src/alu/src/index.d.ts +0 -11
  31. package/dist/src/alu/src/index.js +0 -19
  32. package/dist/src/alu/src/kernel-arith.d.ts +0 -16
  33. package/dist/src/alu/src/kernel-arith.js +0 -264
  34. package/dist/src/alu/src/kernel-bits.d.ts +0 -19
  35. package/dist/src/alu/src/kernel-bits.js +0 -152
  36. package/dist/src/alu/src/kernel-logic.d.ts +0 -4
  37. package/dist/src/alu/src/kernel-logic.js +0 -60
  38. package/dist/src/alu/src/kernel-nd.d.ts +0 -3
  39. package/dist/src/alu/src/kernel-nd.js +0 -208
  40. package/dist/src/alu/src/kernel-numeric.d.ts +0 -54
  41. package/dist/src/alu/src/kernel-numeric.js +0 -366
  42. package/dist/src/alu/src/operation.d.ts +0 -168
  43. package/dist/src/alu/src/operation.js +0 -189
  44. package/dist/src/alu/src/parser.d.ts +0 -221
  45. package/dist/src/alu/src/parser.js +0 -577
  46. package/dist/src/alu/src/resonance.d.ts +0 -55
  47. package/dist/src/alu/src/resonance.js +0 -126
  48. package/dist/src/alu/src/text.d.ts +0 -31
  49. package/dist/src/alu/src/text.js +0 -73
  50. package/dist/src/alu/src/value.d.ts +0 -109
  51. package/dist/src/alu/src/value.js +0 -300
  52. package/dist/src/alu/test/alu.test.d.ts +0 -1
  53. package/dist/src/alu/test/alu.test.js +0 -764
  54. package/dist/src/bytes.d.ts +0 -14
  55. package/dist/src/bytes.js +0 -59
  56. package/dist/src/canon.d.ts +0 -45
  57. package/dist/src/canon.js +0 -85
  58. package/dist/src/config.d.ts +0 -111
  59. package/dist/src/config.js +0 -91
  60. package/dist/src/derive/src/deduction.d.ts +0 -136
  61. package/dist/src/derive/src/deduction.js +0 -159
  62. package/dist/src/derive/src/index.d.ts +0 -8
  63. package/dist/src/derive/src/index.js +0 -11
  64. package/dist/src/derive/src/priority-queue.d.ts +0 -20
  65. package/dist/src/derive/src/priority-queue.js +0 -73
  66. package/dist/src/derive/src/rewrite.d.ts +0 -56
  67. package/dist/src/derive/src/rewrite.js +0 -100
  68. package/dist/src/derive/src/trie.d.ts +0 -90
  69. package/dist/src/derive/src/trie.js +0 -217
  70. package/dist/src/derive/test/derive.test.d.ts +0 -1
  71. package/dist/src/derive/test/derive.test.js +0 -122
  72. package/dist/src/extension.d.ts +0 -37
  73. package/dist/src/extension.js +0 -7
  74. package/dist/src/geometry.d.ts +0 -233
  75. package/dist/src/geometry.js +0 -1089
  76. package/dist/src/index.d.ts +0 -17
  77. package/dist/src/index.js +0 -19
  78. package/dist/src/ingest-cache.d.ts +0 -41
  79. package/dist/src/ingest-cache.js +0 -165
  80. package/dist/src/meter.d.ts +0 -176
  81. package/dist/src/meter.js +0 -274
  82. package/dist/src/mind/articulation.d.ts +0 -6
  83. package/dist/src/mind/articulation.js +0 -99
  84. package/dist/src/mind/attention.d.ts +0 -430
  85. package/dist/src/mind/attention.js +0 -2418
  86. package/dist/src/mind/bridge.d.ts +0 -39
  87. package/dist/src/mind/bridge.js +0 -998
  88. package/dist/src/mind/canonical.d.ts +0 -34
  89. package/dist/src/mind/canonical.js +0 -93
  90. package/dist/src/mind/frame-filler.d.ts +0 -15
  91. package/dist/src/mind/frame-filler.js +0 -535
  92. package/dist/src/mind/graph-search.d.ts +0 -294
  93. package/dist/src/mind/graph-search.js +0 -996
  94. package/dist/src/mind/index.d.ts +0 -9
  95. package/dist/src/mind/index.js +0 -5
  96. package/dist/src/mind/junction.d.ts +0 -137
  97. package/dist/src/mind/junction.js +0 -358
  98. package/dist/src/mind/learning.d.ts +0 -75
  99. package/dist/src/mind/learning.js +0 -265
  100. package/dist/src/mind/match.d.ts +0 -192
  101. package/dist/src/mind/match.js +0 -666
  102. package/dist/src/mind/mechanisms/alu.d.ts +0 -4
  103. package/dist/src/mind/mechanisms/alu.js +0 -36
  104. package/dist/src/mind/mechanisms/cast.d.ts +0 -89
  105. package/dist/src/mind/mechanisms/cast.js +0 -1186
  106. package/dist/src/mind/mechanisms/confluence.d.ts +0 -24
  107. package/dist/src/mind/mechanisms/confluence.js +0 -271
  108. package/dist/src/mind/mechanisms/cover.d.ts +0 -6
  109. package/dist/src/mind/mechanisms/cover.js +0 -232
  110. package/dist/src/mind/mechanisms/extraction.d.ts +0 -33
  111. package/dist/src/mind/mechanisms/extraction.js +0 -327
  112. package/dist/src/mind/mechanisms/recall.d.ts +0 -16
  113. package/dist/src/mind/mechanisms/recall.js +0 -558
  114. package/dist/src/mind/mind.d.ts +0 -386
  115. package/dist/src/mind/mind.js +0 -754
  116. package/dist/src/mind/pipeline-mechanism.d.ts +0 -183
  117. package/dist/src/mind/pipeline-mechanism.js +0 -521
  118. package/dist/src/mind/pipeline.d.ts +0 -49
  119. package/dist/src/mind/pipeline.js +0 -331
  120. package/dist/src/mind/prefix-completion.d.ts +0 -59
  121. package/dist/src/mind/prefix-completion.js +0 -270
  122. package/dist/src/mind/primitives.d.ts +0 -85
  123. package/dist/src/mind/primitives.js +0 -333
  124. package/dist/src/mind/rationale.d.ts +0 -139
  125. package/dist/src/mind/rationale.js +0 -163
  126. package/dist/src/mind/reasoning.d.ts +0 -42
  127. package/dist/src/mind/reasoning.js +0 -305
  128. package/dist/src/mind/recognition.d.ts +0 -20
  129. package/dist/src/mind/recognition.js +0 -696
  130. package/dist/src/mind/resonance.d.ts +0 -35
  131. package/dist/src/mind/resonance.js +0 -365
  132. package/dist/src/mind/trace.d.ts +0 -15
  133. package/dist/src/mind/trace.js +0 -73
  134. package/dist/src/mind/traverse.d.ts +0 -158
  135. package/dist/src/mind/traverse.js +0 -716
  136. package/dist/src/mind/types.d.ts +0 -418
  137. package/dist/src/mind/types.js +0 -179
  138. package/dist/src/rabitq-ivf/src/database.d.ts +0 -113
  139. package/dist/src/rabitq-ivf/src/database.js +0 -201
  140. package/dist/src/rabitq-ivf/src/index.d.ts +0 -7
  141. package/dist/src/rabitq-ivf/src/index.js +0 -4
  142. package/dist/src/rabitq-ivf/src/ivf.d.ts +0 -200
  143. package/dist/src/rabitq-ivf/src/ivf.js +0 -1165
  144. package/dist/src/rabitq-ivf/src/prng.d.ts +0 -19
  145. package/dist/src/rabitq-ivf/src/prng.js +0 -36
  146. package/dist/src/rabitq-ivf/src/rabitq.d.ts +0 -95
  147. package/dist/src/rabitq-ivf/src/rabitq.js +0 -313
  148. package/dist/src/sema.d.ts +0 -41
  149. package/dist/src/sema.js +0 -77
  150. package/dist/src/store-sqlite.d.ts +0 -184
  151. package/dist/src/store-sqlite.js +0 -942
  152. package/dist/src/store.d.ts +0 -762
  153. package/dist/src/store.js +0 -1823
  154. package/dist/src/vec.d.ts +0 -31
  155. package/dist/src/vec.js +0 -109
  156. package/src/mind/frame-filler.ts +0 -604
  157. package/test/69-frame-filler.test.mjs +0 -115
@@ -1,115 +0,0 @@
1
- // 69-frame-filler.test.mjs — the frame-filler tier must not fire without its
2
- // evidence, and must refuse an ambiguous subject.
3
- //
4
- // WHAT THE MECHANISM DOES (src/mind/frame-filler.ts): when every other tier has
5
- // declined, take the query's described span, put a corroborated filler from a
6
- // trained context in its place, and require the STORE to already hold that key
7
- // byte-exactly. "We invent a lookup KEY, never an answer" — the answer is the
8
- // trained continuation of a form the store verifiably has.
9
- //
10
- // THE WIN IS REAL-STORE EVIDENCE, NOT A FIXTURE. On the 15.7M-node trained
11
- // store, `What is the capital of the country where the Eiffel Tower is?` goes
12
- // from silence to "The capital of France is Paris." (provenance `recall`), taking
13
- // analyze_training.ts's section G from 33.3% to 66.7% and the battery from 73.8%
14
- // to 76.2% with `0 weak` intact. A/B on warm caches: +50 ms on that query,
15
- // +16 ms on a refusing query that runs 480 probes, and +0 ms on
16
- // `What is the capital of Zamunda?` (guard 1 exits before probing) and on every
17
- // query that answers earlier.
18
- //
19
- // WHY NO POSITIVE FIXTURE TEST EXISTS — measured, not assumed. The mechanism
20
- // keys on corpus RARITY (container counts, the same reading the bridge's anchor
21
- // picking uses). At fixture scale that signal is absent and even inverted: in a
22
- // 21-deposit store `capital` reports 1 container and `landmark` reports 9, while
23
- // on the trained store `Eiffel` is 54 against `What` at 1,586. So a fixture
24
- // cannot make the query's rarest word land inside the description, which guard 1
25
- // requires — three fixture shapes were tried (bare, 21-deposit, and one with an
26
- // attested long word in the description) and none reached the positive path.
27
- // What a fixture CAN pin is the refusal side, which is what this file does.
28
-
29
- import { test } from "node:test";
30
- import assert from "node:assert/strict";
31
- import { Mind } from "../dist/src/index.js";
32
- import { SQliteStore } from "../dist/src/store-sqlite.js";
33
- import { frameFillerSubstitution } from "../dist/src/mind/frame-filler.js";
34
-
35
- const enc = (s) => new TextEncoder().encode(s);
36
- const FRAME = [
37
- ["What is the capital of France?", "Paris is the capital of France."],
38
- ["What is the capital of Spain?", "Madrid is the capital of Spain."],
39
- ["What is the capital of Italy?", "Rome is the capital of Italy."],
40
- ["What is the capital of Japan?", "Tokyo is the capital of Japan."],
41
- ];
42
- const LINK = [
43
- "What is the most famous landmark in France?",
44
- "The most famous landmark in France is the Eiffel Tower.",
45
- ];
46
- const LINK2 = [
47
- "What is the tallest structure in Spain?",
48
- "The tallest structure in Spain is the Eiffel Tower.",
49
- ];
50
- const Q = "What is the capital of the country where the Eiffel Tower is?";
51
-
52
- async function fixture(train) {
53
- const mind = new Mind({
54
- seed: 1,
55
- store: new SQliteStore({ path: ":memory:" }),
56
- });
57
- await mind.ingest(train);
58
- return mind;
59
- }
60
- /** Call the tier the way recall does: the query plus recall's ranked hit ids. */
61
- async function tier(mind, q) {
62
- const hits = await mind.store.resonate(mind.perceive(q).v, 24);
63
- return frameFillerSubstitution(mind, enc(q), hits.map((h) => h.id));
64
- }
65
-
66
- test("1. no linking evidence — the tier does not fire", async () => {
67
- // The frame is attested, but nothing in the store ties the description's
68
- // content to any filler. Guard 1 has nothing to qualify.
69
- const m = await fixture(FRAME);
70
- assert.equal(await tier(m, Q), null);
71
- await m.store.close();
72
- });
73
-
74
- test("2. an AMBIGUOUS subject is refused", async () => {
75
- // Two trained contexts hold the description's content and each proposes a
76
- // different filler. Guard 4: neither is licensed.
77
- const m = await fixture([...FRAME, LINK, LINK2]);
78
- assert.equal(await tier(m, Q), null);
79
- await m.store.close();
80
- });
81
-
82
- test("3. an unrelated query never grounds a frame neighbour", async () => {
83
- // The fabrication shape: a fictional filler in an attested frame. On the real
84
- // store this query resolves 24 keys (Chile, India, Japan, Italy …) once the
85
- // guards are weakened, so it is the case that most needs pinning.
86
- const m = await fixture([...FRAME, LINK]);
87
- for (
88
- const q of [
89
- "What is the capital of Zamunda?",
90
- "xyzzy plugh quux baz?",
91
- "qq8f3kz9 vv2m1x7w?",
92
- ]
93
- ) {
94
- assert.equal(await tier(m, q), null, `expected refusal for ${q}`);
95
- }
96
- await m.store.close();
97
- });
98
-
99
- test("4. the tier is deterministic and side-effect free", async () => {
100
- const m = await fixture([...FRAME, LINK]);
101
- const a = await tier(m, Q);
102
- const b = await tier(m, Q);
103
- assert.deepEqual(a, b);
104
- // Running it must not disturb the answers of forms that ground normally.
105
- assert.match(await m.respondText("What is the capital of France?"), /Paris/);
106
- await m.store.close();
107
- });
108
-
109
- test("5. end to end, the fixture's own trained forms still answer", async () => {
110
- const m = await fixture([...FRAME, LINK]);
111
- assert.match(await m.respondText("What is the capital of Spain?"), /Madrid/);
112
- assert.match(await m.respondText("What is the capital of Japan?"), /Tokyo/);
113
- assert.equal(await m.respondText("qq8f3kz9 vv2m1x7w?"), "");
114
- await m.store.close();
115
- });