@fortemi/core 2026.9.5 → 2026.9.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fortemi/core",
3
- "version": "2026.9.5",
3
+ "version": "2026.9.6",
4
4
  "description": "Browser-only knowledge management core: PGlite (PostgreSQL WASM), MCP tools, hybrid search, and profile-scoped Knowledge Shard interchange.",
5
5
  "keywords": [
6
6
  "fortemi",
@@ -69,6 +69,7 @@
69
69
  "schemas/dataset-lineage",
70
70
  "schemas/dataset-materialization",
71
71
  "schemas/source-note-upsert",
72
+ "schemas/metadata-search/candidate",
72
73
  "benchmarks/dataset-materialization",
73
74
  "tools",
74
75
  "README.md",
@@ -0,0 +1,36 @@
1
+ # Candidate Search Source Identity
2
+
3
+ `source.receipt.json` binds these eleven schema/vector files to immutable
4
+ Fortemi source `e99e4723293d12e76862ea83fda86ed70d3573c8`, plus that revision's
5
+ OpenAPI and authority documentation. CI verifies the actual upstream bytes,
6
+ not only agreement between local files and a local checksum.
7
+
8
+ The three older receipts remain byte-identical historical adoption records.
9
+ Their pre-commit bases and older OpenAPI hashes are not rewritten or treated as
10
+ the current authority revision. The supplemental source pin proves committed
11
+ candidate provenance, not publication, live runtime compatibility, complete
12
+ capability negotiation or issue acceptance. All promotion claims remain false.
13
+
14
+ The verifier accepts `--authority-root <repo>` to read immutable Git objects
15
+ offline. Without it, CI uses bounded immutable-origin reads with no redirect or
16
+ local-byte fallback. Both paths verify the same digests and complete inventory.
17
+
18
+ Authority: [Fortemi #1091](https://git.integrolabs.net/Fortemi/fortemi/issues/1091).
19
+ Consumer: [Core #405](https://git.integrolabs.net/Fortemi/fortemi-react/issues/405).
20
+ Other declared consumers, producer CI, installed/released acceptance and release
21
+ publication remain separate gates. Suite NO-GO and named shard profiles are unchanged.
22
+
23
+ ## Existing Predicate Semantics
24
+
25
+ Core uses strict Ajv validation before SQL compilation, then checks reversed
26
+ range bounds in Unicode scalar/numeric order. Migration 33 supplies bounded
27
+ index keys with exact rechecks on author metadata. Source runs come from scoped
28
+ source identities, not author metadata. See ADR-016 for scope/default changes,
29
+ upgrade/rollback behavior and remaining cross-runtime/citation acceptance.
30
+
31
+ `src/__tests__/metadata-predicates.test.ts` executes the 51 input/truth cases and
32
+ 15 SQL scope cases on a fully migrated clean PGlite database. It maps the corpus
33
+ owner tenant-a to Core's default source scope explicitly and keeps tenant-b
34
+ foreign. It never changes expected membership. Additional tests exercise actual
35
+ search entries, selective plans and old-database upgrade; they do not establish
36
+ verified hosted authorization, real model inference or released compatibility.
@@ -0,0 +1,38 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "status": "candidate-unpublished",
4
+ "authority": {
5
+ "repository": "Fortemi/fortemi",
6
+ "issue": 1091,
7
+ "baseCommit": "a701847db779a0a3adfa36a09dfa1055a10a0a0a",
8
+ "sourceState": "uncommitted candidate; base is not the contract revision",
9
+ "path": "contracts/metadata-search/candidate/1.0.0/",
10
+ "files": {
11
+ "predicates.schema.json": "e325707ce20abb88ef3a8f4bbb0d02ab09501b1ffe9b48b0c92a96e97dda00c3",
12
+ "predicate-vectors.json": "df9e129cab4708db71c3e22f87efd252fbcac144daa45a53ee1716f4a1a05ae7",
13
+ "sql-scope-vectors.json": "dcd35298a3bc485a6f1c87c6c87f136ee98121dad3f2b1c8b590b2e5381aa4d5",
14
+ "evidence-locator.schema.json": "cd8427c507bca1a08bdb68da0a5d2759d1d7805401db3c00372ab249652efb7a",
15
+ "evidence-vectors.json": "b532a4fa7697bdfc87e8541575fcee7c94a5b5ac53e4a6472438c49247e6b266",
16
+ "evidence-set.schema.json": "da7e5d41bd563cb2cfe424cf7dfa92007a865ee0e1a9a4832ef669039d80717e",
17
+ "evidence-set-vectors.json": "b84061ee252d2ee25d744111d2a04dfcd2c490274d4285bac31f4bd0e91e47d7"
18
+ }
19
+ },
20
+ "consumer": {
21
+ "repository": "Fortemi/fortemi-react",
22
+ "issue": 405,
23
+ "backend": "pglite",
24
+ "test": "src/__tests__/metadata-predicates.test.ts",
25
+ "evidenceTest": "src/__tests__/search-evidence.test.ts",
26
+ "evidenceSetTest": "src/__tests__/search-evidence-set.test.ts"
27
+ },
28
+ "scopeMapping": {
29
+ "owningTenant": "tenant-a -> default",
30
+ "foreignTenant": "tenant-b -> tenant-b",
31
+ "authorizationEvidence": false
32
+ },
33
+ "claims": {
34
+ "promotedContract": false,
35
+ "fullIssueAcceptance": false,
36
+ "suiteParity": false
37
+ }
38
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://fortemi.com/contracts/metadata-search/candidate/1.0.0/evidence-locator.schema.json",
4
+ "title": "Candidate search evidence locator",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["version", "note_id", "unit", "content_digest", "span"],
8
+ "properties": {
9
+ "version": { "const": "1.0.0" },
10
+ "note_id": { "$ref": "#/$defs/identifier" },
11
+ "unit": {
12
+ "type": "object",
13
+ "additionalProperties": false,
14
+ "required": ["kind", "id", "index"],
15
+ "properties": {
16
+ "kind": { "enum": ["current", "title", "embedding", "attachment"] },
17
+ "id": { "$ref": "#/$defs/identifier" },
18
+ "index": { "type": "integer", "minimum": 0, "maximum": 2147483647 }
19
+ },
20
+ "if": { "properties": { "kind": { "enum": ["current", "title", "attachment"] } } },
21
+ "then": { "properties": { "index": { "const": 0 } } }
22
+ },
23
+ "content_digest": { "$ref": "#/$defs/digest" },
24
+ "span": {
25
+ "type": "object",
26
+ "additionalProperties": false,
27
+ "required": ["unit", "start", "end"],
28
+ "properties": {
29
+ "unit": { "const": "utf8-bytes" },
30
+ "start": { "type": "integer", "minimum": 0, "maximum": 16777216 },
31
+ "end": { "type": "integer", "minimum": 0, "maximum": 16777216 }
32
+ }
33
+ },
34
+ "source": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "required": ["namespace", "external_id_hash", "import_run_id", "schema_version"],
38
+ "properties": {
39
+ "namespace": { "$ref": "#/$defs/identifier" },
40
+ "external_id_hash": { "$ref": "#/$defs/digest" },
41
+ "import_run_id": { "$ref": "#/$defs/identifier" },
42
+ "schema_version": { "$ref": "#/$defs/identifier" }
43
+ }
44
+ }
45
+ },
46
+ "$defs": {
47
+ "identifier": { "type": "string", "minLength": 1, "maxLength": 200, "pattern": "^[^\\u0000]+$" },
48
+ "digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
49
+ }
50
+ }
@@ -0,0 +1,355 @@
1
+ {
2
+ "schemaVersion": "fortemi.evidence-resolution-vectors.candidate.v1",
3
+ "boundary": "Portable wire schema cases, not current-storage, authorization, model or released-consumer acceptance. Semantic locator and range checks remain required.",
4
+ "requests": [
5
+ {
6
+ "id": "minimal",
7
+ "valid": true,
8
+ "value": {
9
+ "locator": {
10
+ "version": "1.0.0",
11
+ "note_id": "00000000-0000-0000-0000-000000000001",
12
+ "unit": {
13
+ "kind": "current",
14
+ "id": "00000000-0000-0000-0000-000000000001",
15
+ "index": 0
16
+ },
17
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
18
+ "span": {
19
+ "unit": "utf8-bytes",
20
+ "start": 0,
21
+ "end": 0
22
+ }
23
+ }
24
+ }
25
+ },
26
+ {
27
+ "id": "archived-explicit",
28
+ "valid": true,
29
+ "value": {
30
+ "locator": {
31
+ "version": "1.0.0",
32
+ "note_id": "00000000-0000-0000-0000-000000000001",
33
+ "unit": {
34
+ "kind": "current",
35
+ "id": "00000000-0000-0000-0000-000000000001",
36
+ "index": 0
37
+ },
38
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
39
+ "span": {
40
+ "unit": "utf8-bytes",
41
+ "start": 0,
42
+ "end": 0
43
+ }
44
+ },
45
+ "include_archived": true
46
+ }
47
+ },
48
+ {
49
+ "id": "metadata-typed",
50
+ "valid": true,
51
+ "value": {
52
+ "locator": {
53
+ "version": "1.0.0",
54
+ "note_id": "00000000-0000-0000-0000-000000000001",
55
+ "unit": {
56
+ "kind": "current",
57
+ "id": "00000000-0000-0000-0000-000000000001",
58
+ "index": 0
59
+ },
60
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
61
+ "span": {
62
+ "unit": "utf8-bytes",
63
+ "start": 0,
64
+ "end": 0
65
+ }
66
+ },
67
+ "metadata_predicates": [
68
+ {
69
+ "path": "model",
70
+ "op": "eq",
71
+ "value": 42
72
+ }
73
+ ]
74
+ }
75
+ },
76
+ {
77
+ "id": "missing-locator",
78
+ "valid": false,
79
+ "value": {}
80
+ },
81
+ {
82
+ "id": "null-locator",
83
+ "valid": false,
84
+ "value": {
85
+ "locator": null
86
+ }
87
+ },
88
+ {
89
+ "id": "caller-tenant",
90
+ "valid": false,
91
+ "value": {
92
+ "locator": {
93
+ "version": "1.0.0",
94
+ "note_id": "00000000-0000-0000-0000-000000000001",
95
+ "unit": {
96
+ "kind": "current",
97
+ "id": "00000000-0000-0000-0000-000000000001",
98
+ "index": 0
99
+ },
100
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
101
+ "span": {
102
+ "unit": "utf8-bytes",
103
+ "start": 0,
104
+ "end": 0
105
+ }
106
+ },
107
+ "tenant_id": "forged"
108
+ }
109
+ },
110
+ {
111
+ "id": "caller-archive",
112
+ "valid": false,
113
+ "value": {
114
+ "locator": {
115
+ "version": "1.0.0",
116
+ "note_id": "00000000-0000-0000-0000-000000000001",
117
+ "unit": {
118
+ "kind": "current",
119
+ "id": "00000000-0000-0000-0000-000000000001",
120
+ "index": 0
121
+ },
122
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
123
+ "span": {
124
+ "unit": "utf8-bytes",
125
+ "start": 0,
126
+ "end": 0
127
+ }
128
+ },
129
+ "archive_id": "forged"
130
+ }
131
+ },
132
+ {
133
+ "id": "null-metadata",
134
+ "valid": false,
135
+ "value": {
136
+ "locator": {
137
+ "version": "1.0.0",
138
+ "note_id": "00000000-0000-0000-0000-000000000001",
139
+ "unit": {
140
+ "kind": "current",
141
+ "id": "00000000-0000-0000-0000-000000000001",
142
+ "index": 0
143
+ },
144
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
145
+ "span": {
146
+ "unit": "utf8-bytes",
147
+ "start": 0,
148
+ "end": 0
149
+ }
150
+ },
151
+ "metadata_predicates": null
152
+ }
153
+ },
154
+ {
155
+ "id": "unknown-metadata",
156
+ "valid": false,
157
+ "value": {
158
+ "locator": {
159
+ "version": "1.0.0",
160
+ "note_id": "00000000-0000-0000-0000-000000000001",
161
+ "unit": {
162
+ "kind": "current",
163
+ "id": "00000000-0000-0000-0000-000000000001",
164
+ "index": 0
165
+ },
166
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
167
+ "span": {
168
+ "unit": "utf8-bytes",
169
+ "start": 0,
170
+ "end": 0
171
+ }
172
+ },
173
+ "metadata_predicates": [
174
+ {
175
+ "path": "unknown",
176
+ "op": "eq",
177
+ "value": "x"
178
+ }
179
+ ]
180
+ }
181
+ },
182
+ {
183
+ "id": "null-archived",
184
+ "valid": false,
185
+ "value": {
186
+ "locator": {
187
+ "version": "1.0.0",
188
+ "note_id": "00000000-0000-0000-0000-000000000001",
189
+ "unit": {
190
+ "kind": "current",
191
+ "id": "00000000-0000-0000-0000-000000000001",
192
+ "index": 0
193
+ },
194
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
195
+ "span": {
196
+ "unit": "utf8-bytes",
197
+ "start": 0,
198
+ "end": 0
199
+ }
200
+ },
201
+ "include_archived": null
202
+ }
203
+ },
204
+ {
205
+ "id": "unknown-property",
206
+ "valid": false,
207
+ "value": {
208
+ "locator": {
209
+ "version": "1.0.0",
210
+ "note_id": "00000000-0000-0000-0000-000000000001",
211
+ "unit": {
212
+ "kind": "current",
213
+ "id": "00000000-0000-0000-0000-000000000001",
214
+ "index": 0
215
+ },
216
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
217
+ "span": {
218
+ "unit": "utf8-bytes",
219
+ "start": 0,
220
+ "end": 0
221
+ }
222
+ },
223
+ "extra": 1
224
+ }
225
+ },
226
+ {
227
+ "id": "unknown-unit",
228
+ "valid": false,
229
+ "value": {
230
+ "locator": {
231
+ "version": "1.0.0",
232
+ "note_id": "00000000-0000-0000-0000-000000000001",
233
+ "unit": {
234
+ "kind": "history",
235
+ "id": "00000000-0000-0000-0000-000000000001",
236
+ "index": 0
237
+ },
238
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
239
+ "span": {
240
+ "unit": "utf8-bytes",
241
+ "start": 0,
242
+ "end": 0
243
+ }
244
+ }
245
+ }
246
+ },
247
+ {
248
+ "id": "fractional-offset",
249
+ "valid": false,
250
+ "value": {
251
+ "locator": {
252
+ "version": "1.0.0",
253
+ "note_id": "00000000-0000-0000-0000-000000000001",
254
+ "unit": {
255
+ "kind": "current",
256
+ "id": "00000000-0000-0000-0000-000000000001",
257
+ "index": 0
258
+ },
259
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
260
+ "span": {
261
+ "unit": "utf8-bytes",
262
+ "start": 0.5,
263
+ "end": 0
264
+ }
265
+ }
266
+ }
267
+ },
268
+ {
269
+ "id": "wrong-span-unit",
270
+ "valid": false,
271
+ "value": {
272
+ "locator": {
273
+ "version": "1.0.0",
274
+ "note_id": "00000000-0000-0000-0000-000000000001",
275
+ "unit": {
276
+ "kind": "current",
277
+ "id": "00000000-0000-0000-0000-000000000001",
278
+ "index": 0
279
+ },
280
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
281
+ "span": {
282
+ "unit": "characters",
283
+ "start": 0,
284
+ "end": 0
285
+ }
286
+ }
287
+ }
288
+ },
289
+ {
290
+ "id": "null-source",
291
+ "valid": false,
292
+ "value": {
293
+ "locator": {
294
+ "version": "1.0.0",
295
+ "note_id": "00000000-0000-0000-0000-000000000001",
296
+ "unit": {
297
+ "kind": "current",
298
+ "id": "00000000-0000-0000-0000-000000000001",
299
+ "index": 0
300
+ },
301
+ "content_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
302
+ "span": {
303
+ "unit": "utf8-bytes",
304
+ "start": 0,
305
+ "end": 0
306
+ },
307
+ "source": null
308
+ }
309
+ }
310
+ }
311
+ ],
312
+ "responses": [
313
+ {
314
+ "id": "empty-range",
315
+ "valid": true,
316
+ "value": {
317
+ "text": ""
318
+ }
319
+ },
320
+ {
321
+ "id": "raw-unicode",
322
+ "valid": true,
323
+ "value": {
324
+ "text": "\uFEFFraw\r\n\ud83d\ude42"
325
+ }
326
+ },
327
+ {
328
+ "id": "missing-text",
329
+ "valid": false,
330
+ "value": {}
331
+ },
332
+ {
333
+ "id": "null-text",
334
+ "valid": false,
335
+ "value": {
336
+ "text": null
337
+ }
338
+ },
339
+ {
340
+ "id": "numeric-text",
341
+ "valid": false,
342
+ "value": {
343
+ "text": 1
344
+ }
345
+ },
346
+ {
347
+ "id": "unknown-property",
348
+ "valid": false,
349
+ "value": {
350
+ "text": "x",
351
+ "source": "not-permitted"
352
+ }
353
+ }
354
+ ]
355
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://fortemi.com/contracts/metadata-search/candidate/1.0.0/evidence-resolution.schema.json",
4
+ "title": "Candidate current-storage evidence resolution",
5
+ "$defs": {
6
+ "SearchEvidenceResolveRequest": {
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": ["locator"],
10
+ "properties": {
11
+ "locator": { "$ref": "evidence-locator.schema.json" },
12
+ "metadata_predicates": { "$ref": "predicates.schema.json" },
13
+ "include_archived": { "type": "boolean", "default": false }
14
+ }
15
+ },
16
+ "SearchEvidenceResolveResponse": {
17
+ "type": "object",
18
+ "additionalProperties": false,
19
+ "required": ["text"],
20
+ "properties": {
21
+ "text": { "type": "string", "maxLength": 16777216 }
22
+ }
23
+ }
24
+ }
25
+ }