@gnolith/taproot 0.1.0-rc.0 → 0.2.0
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/CHANGELOG.md +10 -0
- package/COMPATIBILITY.md +11 -1
- package/LICENSE +21 -21
- package/README.md +17 -14
- package/SECURITY.md +5 -1
- package/SUPPORT.md +6 -1
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations.d.ts +36 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +478 -0
- package/dist/migrations.js.map +1 -0
- package/dist/rdf.js +1 -1
- package/dist/rdf.js.map +1 -1
- package/dist/repository.d.ts +2 -2
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +3 -15
- package/dist/repository.js.map +1 -1
- package/dist/schema.d.ts +29 -4
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +273 -77
- package/dist/schema.js.map +1 -1
- package/docs/api.md +14 -0
- package/docs/architecture.md +2 -1
- package/docs/completion-audit.md +22 -16
- package/docs/operations.md +21 -5
- package/docs/product-scope.md +6 -1
- package/docs/release-policy.md +4 -0
- package/docs/testing.md +13 -4
- package/docs/threat-model.md +10 -5
- package/examples/d1-diamond-interop/README.md +11 -0
- package/examples/{codex-site → d1-diamond-interop}/demo.ts +3 -3
- package/migrations/0002_audit_operations.sql +4 -3
- package/package.json +9 -7
- package/examples/codex-site/.openai/hosting.json +0 -3
- package/examples/codex-site/README.md +0 -13
package/dist/schema.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { encodeTerm,
|
|
1
|
+
import { encodeTerm, prepareQuadPatch, } from '@gnolith/diamond';
|
|
2
2
|
import { DataFactory } from 'rdf-data-factory';
|
|
3
3
|
import { parseEntityJson } from './canonical.js';
|
|
4
4
|
import { buildEntityQuads } from './rdf.js';
|
|
@@ -120,34 +120,112 @@ export const taprootSchemaStatements = [
|
|
|
120
120
|
`INSERT INTO taproot_migrations(version, name) VALUES (1, 'initial'), (2, 'audit-and-operations')
|
|
121
121
|
ON CONFLICT(version) DO NOTHING`,
|
|
122
122
|
];
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
123
|
+
const schemaStatement = (prefix) => {
|
|
124
|
+
const statement = taprootSchemaStatements.find((sql) => sql.trimStart().startsWith(prefix));
|
|
125
|
+
if (!statement)
|
|
126
|
+
throw new Error(`Missing Taproot schema statement: ${prefix}`);
|
|
127
|
+
return statement;
|
|
128
|
+
};
|
|
129
|
+
/** Exact package-created schema used before the v2 audit migration. */
|
|
130
|
+
export const legacyTaprootV1Statements = [
|
|
131
|
+
schemaStatement('CREATE TABLE IF NOT EXISTS taproot_entities'),
|
|
132
|
+
`CREATE TABLE IF NOT EXISTS taproot_entity_revisions (
|
|
133
|
+
entity_id TEXT NOT NULL,
|
|
134
|
+
revision INTEGER NOT NULL,
|
|
135
|
+
entity_json TEXT NOT NULL CHECK (json_valid(entity_json)),
|
|
136
|
+
actor TEXT,
|
|
137
|
+
edit_summary TEXT,
|
|
138
|
+
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
139
|
+
PRIMARY KEY (entity_id, revision),
|
|
140
|
+
FOREIGN KEY (entity_id) REFERENCES taproot_entities(entity_id)
|
|
141
|
+
) STRICT`,
|
|
142
|
+
schemaStatement('CREATE TABLE IF NOT EXISTS taproot_id_counters'),
|
|
143
|
+
schemaStatement('CREATE TABLE IF NOT EXISTS taproot_terms'),
|
|
144
|
+
schemaStatement('CREATE TABLE IF NOT EXISTS taproot_metadata'),
|
|
145
|
+
schemaStatement('CREATE TABLE IF NOT EXISTS taproot_assertions'),
|
|
146
|
+
schemaStatement('CREATE INDEX IF NOT EXISTS taproot_entities_type_idx'),
|
|
147
|
+
schemaStatement('CREATE INDEX IF NOT EXISTS taproot_entities_modified_idx'),
|
|
148
|
+
schemaStatement('CREATE INDEX IF NOT EXISTS taproot_revisions_entity_idx'),
|
|
149
|
+
schemaStatement('CREATE INDEX IF NOT EXISTS taproot_terms_lookup_idx'),
|
|
150
|
+
`INSERT INTO taproot_id_counters(entity_type, next_numeric_id)
|
|
151
|
+
VALUES ('item', 1), ('property', 1)`,
|
|
152
|
+
`INSERT INTO taproot_metadata(metadata_key, metadata_value)
|
|
153
|
+
VALUES
|
|
154
|
+
('schema_version', '1'),
|
|
155
|
+
('canonical_json_version', '1'),
|
|
156
|
+
('rdf_mapping_version', '1')`,
|
|
157
|
+
];
|
|
158
|
+
const currentRevisionStatement = schemaStatement('CREATE TABLE IF NOT EXISTS taproot_entity_revisions');
|
|
159
|
+
const transitionalRevisionStatement = currentRevisionStatement
|
|
160
|
+
.replace('event_id TEXT NOT NULL', 'event_id TEXT')
|
|
161
|
+
.replace('content_hash TEXT NOT NULL', 'content_hash TEXT');
|
|
162
|
+
export const taprootUpgradeCatalogStatements = taprootSchemaStatements
|
|
163
|
+
.filter((sql) => /^\s*CREATE\s+(?:TABLE|INDEX)\s+/iu.test(sql) &&
|
|
164
|
+
!/^\s*CREATE\s+TRIGGER\s+/iu.test(sql) &&
|
|
165
|
+
!sql.includes('taproot_audit'))
|
|
166
|
+
.map((sql) => sql === currentRevisionStatement ? transitionalRevisionStatement : sql);
|
|
167
|
+
export const taprootPreFinalizeCatalogStatements = taprootSchemaStatements.filter((sql) => /^\s*CREATE\s+(?:TABLE|INDEX)\s+/iu.test(sql) &&
|
|
168
|
+
!/^\s*CREATE\s+TRIGGER\s+/iu.test(sql));
|
|
169
|
+
export const legacyTaprootStructureStatements = [
|
|
170
|
+
`ALTER TABLE taproot_entity_revisions RENAME TO taproot_entity_revisions_v1`,
|
|
171
|
+
transitionalRevisionStatement,
|
|
172
|
+
`INSERT INTO taproot_entity_revisions(
|
|
173
|
+
entity_id, revision, entity_json, actor, attribution_json, edit_summary,
|
|
174
|
+
tags_json, event_id, content_hash, parent_hash, deleted_at, redirect_to, created_at
|
|
175
|
+
)
|
|
176
|
+
SELECT entity_id, revision, entity_json, actor, NULL, edit_summary,
|
|
177
|
+
'[]', NULL, NULL, NULL, NULL, NULL, created_at
|
|
178
|
+
FROM taproot_entity_revisions_v1`,
|
|
179
|
+
`DROP TABLE taproot_entity_revisions_v1`,
|
|
180
|
+
...taprootUpgradeCatalogStatements.filter((sql) => !sql.includes('taproot_entity_revisions (')),
|
|
181
|
+
];
|
|
182
|
+
export const legacyRevisionFinalizeStatements = [
|
|
183
|
+
`ALTER TABLE taproot_entity_revisions RENAME TO taproot_entity_revisions_backfill`,
|
|
184
|
+
currentRevisionStatement,
|
|
185
|
+
`INSERT INTO taproot_entity_revisions(
|
|
186
|
+
entity_id, revision, entity_json, actor, attribution_json, edit_summary,
|
|
187
|
+
tags_json, event_id, content_hash, parent_hash, deleted_at, redirect_to, created_at
|
|
188
|
+
) SELECT entity_id, revision, entity_json, actor, attribution_json, edit_summary,
|
|
189
|
+
tags_json, event_id, content_hash, parent_hash, deleted_at, redirect_to, created_at
|
|
190
|
+
FROM taproot_entity_revisions_backfill`,
|
|
191
|
+
`DROP TABLE taproot_entity_revisions_backfill`,
|
|
192
|
+
schemaStatement('CREATE TABLE IF NOT EXISTS taproot_audit_events'),
|
|
193
|
+
schemaStatement('CREATE INDEX IF NOT EXISTS taproot_revisions_entity_idx'),
|
|
194
|
+
schemaStatement('CREATE INDEX IF NOT EXISTS taproot_audit_entity_idx'),
|
|
195
|
+
schemaStatement('CREATE INDEX IF NOT EXISTS taproot_audit_request_idx'),
|
|
196
|
+
];
|
|
197
|
+
export const taprootFinalizeStatements = taprootSchemaStatements.filter((sql) => /^\s*CREATE\s+TRIGGER\s+/iu.test(sql) ||
|
|
198
|
+
sql.includes(`('schema_version', '${TAPROOT_SCHEMA_VERSION}')`) ||
|
|
199
|
+
sql.includes('INSERT INTO taproot_migrations'));
|
|
200
|
+
export async function initializeTaproot(db, options = {}) {
|
|
201
|
+
const { applyTaprootMigrations } = await import('./migrations.js');
|
|
202
|
+
await applyTaprootMigrations(db, options);
|
|
203
|
+
}
|
|
204
|
+
export async function isRecognizedLegacyV1(db, tables) {
|
|
205
|
+
const expectedTables = [
|
|
206
|
+
'taproot_assertions',
|
|
207
|
+
'taproot_entities',
|
|
208
|
+
'taproot_entity_revisions',
|
|
209
|
+
'taproot_id_counters',
|
|
210
|
+
'taproot_metadata',
|
|
211
|
+
'taproot_terms',
|
|
212
|
+
];
|
|
213
|
+
if (JSON.stringify(tables.map(({ name }) => name)) !==
|
|
214
|
+
JSON.stringify(expectedTables))
|
|
215
|
+
return false;
|
|
216
|
+
if (!(await matchesExactCatalog(db, legacyTaprootV1Statements)))
|
|
217
|
+
return false;
|
|
218
|
+
const metadata = await db
|
|
219
|
+
.prepare(`SELECT metadata_key, metadata_value FROM taproot_metadata
|
|
220
|
+
WHERE metadata_key IN ('schema_version', 'canonical_json_version', 'rdf_mapping_version')
|
|
221
|
+
ORDER BY metadata_key`)
|
|
222
|
+
.all();
|
|
223
|
+
return (JSON.stringify(metadata.results) ===
|
|
224
|
+
JSON.stringify([
|
|
225
|
+
{ metadata_key: 'canonical_json_version', metadata_value: '1' },
|
|
226
|
+
{ metadata_key: 'rdf_mapping_version', metadata_value: '1' },
|
|
227
|
+
{ metadata_key: 'schema_version', metadata_value: '1' },
|
|
228
|
+
]));
|
|
151
229
|
}
|
|
152
230
|
async function readMetadata(db, key) {
|
|
153
231
|
const table = await db
|
|
@@ -161,7 +239,7 @@ async function readMetadata(db, key) {
|
|
|
161
239
|
.all();
|
|
162
240
|
return result.results[0]?.metadata_value;
|
|
163
241
|
}
|
|
164
|
-
async function backfillRdfOwnership(db, previousVersion) {
|
|
242
|
+
export async function backfillRdfOwnership(db, previousVersion, previousBaseIri) {
|
|
165
243
|
const rows = await db
|
|
166
244
|
.prepare(`SELECT entity_id, entity_json, deleted_at, redirect_to FROM taproot_entities ORDER BY entity_id`)
|
|
167
245
|
.all();
|
|
@@ -169,20 +247,14 @@ async function backfillRdfOwnership(db, previousVersion) {
|
|
|
169
247
|
return;
|
|
170
248
|
const baseIri = await readMetadata(db, 'base_iri');
|
|
171
249
|
if (!baseIri)
|
|
172
|
-
|
|
250
|
+
throw new SchemaMismatchError('Taproot RDF ownership cannot be rebuilt without a database identity');
|
|
173
251
|
const factory = new DataFactory();
|
|
174
252
|
for (const row of rows.results) {
|
|
175
253
|
const entity = parseEntityJson(row.entity_json);
|
|
176
254
|
const current = lifecycleQuads(entity, row.deleted_at, row.redirect_to, baseIri, TAPROOT_RDF_VERSION, factory);
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
.all();
|
|
181
|
-
if (previousVersion === TAPROOT_RDF_VERSION &&
|
|
182
|
-
Number(existingOwnership.results[0]?.count ?? 0) > 0)
|
|
183
|
-
continue;
|
|
184
|
-
const old = previousVersion && previousVersion !== TAPROOT_RDF_VERSION
|
|
185
|
-
? lifecycleQuads(entity, row.deleted_at, row.redirect_to, baseIri, previousVersion, factory)
|
|
255
|
+
const old = previousVersion &&
|
|
256
|
+
(previousVersion !== TAPROOT_RDF_VERSION || previousBaseIri !== baseIri)
|
|
257
|
+
? lifecycleQuads(entity, row.deleted_at, row.redirect_to, previousBaseIri ?? baseIri, previousVersion, factory)
|
|
186
258
|
: [];
|
|
187
259
|
const patch = prepareQuadPatch(db, { delete: old, insert: current });
|
|
188
260
|
const ownershipRows = current.map((quad) => ({
|
|
@@ -207,7 +279,10 @@ async function backfillRdfOwnership(db, previousVersion) {
|
|
|
207
279
|
function lifecycleQuads(entity, deletedAt, redirectTo, baseIri, mappingVersion, factory) {
|
|
208
280
|
if (!deletedAt && !redirectTo)
|
|
209
281
|
return buildEntityQuads(entity, { baseIri, mappingVersion, factory });
|
|
210
|
-
|
|
282
|
+
let end = baseIri.length;
|
|
283
|
+
while (end > 0 && baseIri.charCodeAt(end - 1) === 47)
|
|
284
|
+
end -= 1;
|
|
285
|
+
const base = baseIri.slice(0, end);
|
|
211
286
|
const subject = factory.namedNode(`${base}/entity/${entity.id}`);
|
|
212
287
|
const quads = [
|
|
213
288
|
factory.quad(subject, factory.namedNode(`${base}/vocab/revision`), factory.literal(String(entity.lastrevid), factory.namedNode('http://www.w3.org/2001/XMLSchema#integer'))),
|
|
@@ -218,35 +293,7 @@ function lifecycleQuads(entity, deletedAt, redirectTo, baseIri, mappingVersion,
|
|
|
218
293
|
quads.push(factory.quad(subject, factory.namedNode('http://www.w3.org/2002/07/owl#sameAs'), factory.namedNode(`${base}/entity/${redirectTo}`)));
|
|
219
294
|
return quads;
|
|
220
295
|
}
|
|
221
|
-
async function
|
|
222
|
-
const tables = await db
|
|
223
|
-
.prepare(`SELECT name FROM sqlite_schema WHERE type = 'table' AND name = 'taproot_entity_revisions'`)
|
|
224
|
-
.all();
|
|
225
|
-
if (!tables.results.length)
|
|
226
|
-
return;
|
|
227
|
-
const columns = await db
|
|
228
|
-
.prepare(`PRAGMA table_info(taproot_entity_revisions)`)
|
|
229
|
-
.all();
|
|
230
|
-
const names = new Set(columns.results.map(({ name }) => name));
|
|
231
|
-
const additions = [
|
|
232
|
-
[
|
|
233
|
-
'attribution_json',
|
|
234
|
-
`TEXT CHECK (attribution_json IS NULL OR json_valid(attribution_json))`,
|
|
235
|
-
],
|
|
236
|
-
['tags_json', `TEXT NOT NULL DEFAULT '[]' CHECK (json_valid(tags_json))`],
|
|
237
|
-
['event_id', `TEXT`],
|
|
238
|
-
['content_hash', `TEXT`],
|
|
239
|
-
['parent_hash', `TEXT`],
|
|
240
|
-
['deleted_at', `TEXT`],
|
|
241
|
-
['redirect_to', `TEXT`],
|
|
242
|
-
];
|
|
243
|
-
for (const [name, definition] of additions) {
|
|
244
|
-
if (!names.has(name)) {
|
|
245
|
-
await db
|
|
246
|
-
.prepare(`ALTER TABLE taproot_entity_revisions ADD COLUMN ${name} ${definition}`)
|
|
247
|
-
.run();
|
|
248
|
-
}
|
|
249
|
-
}
|
|
296
|
+
export async function backfillLegacyRevisions(db) {
|
|
250
297
|
const revisions = await db
|
|
251
298
|
.prepare(`SELECT r.entity_id, r.revision, r.entity_json, r.actor, r.event_id, r.content_hash,
|
|
252
299
|
CASE WHEN r.revision = e.revision THEN e.deleted_at ELSE r.deleted_at END AS deleted_at,
|
|
@@ -259,25 +306,128 @@ async function upgradeLegacySchema(db) {
|
|
|
259
306
|
for (const revision of revisions.results) {
|
|
260
307
|
if (revision.entity_id !== previousEntity)
|
|
261
308
|
parentHash = null;
|
|
262
|
-
const contentHash = revision.
|
|
263
|
-
|
|
309
|
+
const contentHash = await hash(`${revision.entity_json}\n${JSON.stringify({ deletedAt: revision.deleted_at, redirectTo: revision.redirect_to })}`);
|
|
310
|
+
const eventId = `legacy-${revision.entity_id}-${revision.revision}`;
|
|
311
|
+
if ((revision.event_id !== null && revision.event_id !== eventId) ||
|
|
312
|
+
(revision.content_hash !== null && revision.content_hash !== contentHash)) {
|
|
313
|
+
throw new SchemaMismatchError(`Legacy revision ${revision.entity_id}@${revision.revision} has conflicting durable identity`);
|
|
314
|
+
}
|
|
264
315
|
if (!revision.event_id || !revision.content_hash) {
|
|
265
316
|
const attribution = revision.actor
|
|
266
317
|
? JSON.stringify({ id: revision.actor, kind: 'human' })
|
|
267
318
|
: null;
|
|
268
|
-
await db
|
|
269
|
-
|
|
319
|
+
await db.batch([
|
|
320
|
+
db
|
|
321
|
+
.prepare(`UPDATE taproot_entity_revisions SET event_id = ?, content_hash = ?,
|
|
270
322
|
parent_hash = ?, attribution_json = COALESCE(attribution_json, ?),
|
|
271
323
|
tags_json = COALESCE(tags_json, '[]'), deleted_at = ?, redirect_to = ?
|
|
272
324
|
WHERE entity_id = ? AND revision = ?`)
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
325
|
+
.bind(eventId, contentHash, parentHash, attribution, revision.deleted_at, revision.redirect_to, revision.entity_id, revision.revision),
|
|
326
|
+
]);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
const storedParent = await db
|
|
330
|
+
.prepare(`SELECT parent_hash FROM taproot_entity_revisions
|
|
331
|
+
WHERE entity_id = ? AND revision = ?`)
|
|
332
|
+
.bind(revision.entity_id, revision.revision)
|
|
333
|
+
.all();
|
|
334
|
+
if (storedParent.results[0]?.parent_hash !== parentHash)
|
|
335
|
+
throw new SchemaMismatchError(`Legacy revision ${revision.entity_id}@${revision.revision} has a conflicting parent hash`);
|
|
276
336
|
}
|
|
277
337
|
previousEntity = revision.entity_id;
|
|
278
338
|
parentHash = contentHash;
|
|
279
339
|
}
|
|
280
340
|
}
|
|
341
|
+
export async function backfillTaprootAudit(db) {
|
|
342
|
+
await db.batch([
|
|
343
|
+
db.prepare(`INSERT INTO taproot_audit_events(
|
|
344
|
+
event_id, entity_id, revision, event_type, attribution_json,
|
|
345
|
+
edit_summary, tags_json, content_hash, parent_hash, details_json, created_at
|
|
346
|
+
)
|
|
347
|
+
SELECT event_id, entity_id, revision, 'import',
|
|
348
|
+
attribution_json, edit_summary, tags_json, content_hash, parent_hash,
|
|
349
|
+
json_object('source', 'legacy-v1'), created_at
|
|
350
|
+
FROM taproot_entity_revisions
|
|
351
|
+
WHERE true
|
|
352
|
+
ON CONFLICT(event_id) DO NOTHING`),
|
|
353
|
+
]);
|
|
354
|
+
}
|
|
355
|
+
export async function verifyTaprootSemanticState(db, baseIri) {
|
|
356
|
+
const incomplete = await db
|
|
357
|
+
.prepare(`SELECT COUNT(*) AS count
|
|
358
|
+
FROM taproot_entity_revisions r
|
|
359
|
+
LEFT JOIN taproot_audit_events a ON a.event_id = r.event_id
|
|
360
|
+
WHERE r.event_id IS NULL OR r.content_hash IS NULL OR a.event_id IS NULL
|
|
361
|
+
OR a.entity_id IS NOT r.entity_id OR a.revision IS NOT r.revision
|
|
362
|
+
OR a.content_hash IS NOT r.content_hash
|
|
363
|
+
OR a.parent_hash IS NOT r.parent_hash
|
|
364
|
+
OR a.attribution_json IS NOT r.attribution_json
|
|
365
|
+
OR a.edit_summary IS NOT r.edit_summary
|
|
366
|
+
OR a.tags_json IS NOT r.tags_json
|
|
367
|
+
OR a.created_at IS NOT r.created_at`)
|
|
368
|
+
.all();
|
|
369
|
+
if (Number(incomplete.results[0]?.count ?? 0) !== 0)
|
|
370
|
+
throw new SchemaMismatchError('Taproot revision identity or audit backfill is incomplete');
|
|
371
|
+
const dangling = await db
|
|
372
|
+
.prepare(`SELECT COUNT(*) AS count
|
|
373
|
+
FROM taproot_rdf_ownership o
|
|
374
|
+
LEFT JOIN taproot_entities e ON e.entity_id = o.entity_id
|
|
375
|
+
WHERE e.entity_id IS NULL`)
|
|
376
|
+
.all();
|
|
377
|
+
if (Number(dangling.results[0]?.count ?? 0) !== 0)
|
|
378
|
+
throw new SchemaMismatchError('Taproot RDF ownership contains dangling rows');
|
|
379
|
+
const missingProjection = await db
|
|
380
|
+
.prepare(`SELECT COUNT(*) AS count
|
|
381
|
+
FROM taproot_rdf_ownership o
|
|
382
|
+
LEFT JOIN rdf_quads q
|
|
383
|
+
ON q.subject_key = o.subject_key
|
|
384
|
+
AND q.predicate_key = o.predicate_key
|
|
385
|
+
AND q.object_key = o.object_key
|
|
386
|
+
AND q.graph_key = o.graph_key
|
|
387
|
+
WHERE q.id IS NULL`)
|
|
388
|
+
.all();
|
|
389
|
+
if (Number(missingProjection.results[0]?.count ?? 0) !== 0)
|
|
390
|
+
throw new SchemaMismatchError('Taproot RDF ownership is missing its Diamond quad projection');
|
|
391
|
+
const rows = await db
|
|
392
|
+
.prepare(`SELECT entity_id, entity_json, deleted_at, redirect_to
|
|
393
|
+
FROM taproot_entities ORDER BY entity_id`)
|
|
394
|
+
.all();
|
|
395
|
+
const factory = new DataFactory();
|
|
396
|
+
for (const row of rows.results) {
|
|
397
|
+
const expected = lifecycleQuads(parseEntityJson(row.entity_json), row.deleted_at, row.redirect_to, baseIri, TAPROOT_RDF_VERSION, factory)
|
|
398
|
+
.map((quad) => [
|
|
399
|
+
encodeTerm(quad.subject).key,
|
|
400
|
+
encodeTerm(quad.predicate).key,
|
|
401
|
+
encodeTerm(quad.object).key,
|
|
402
|
+
encodeTerm(quad.graph).key,
|
|
403
|
+
].join('\u0000'))
|
|
404
|
+
.sort();
|
|
405
|
+
const actual = await db
|
|
406
|
+
.prepare(`SELECT subject_key, predicate_key, object_key, graph_key
|
|
407
|
+
FROM taproot_rdf_ownership WHERE entity_id = ?
|
|
408
|
+
ORDER BY subject_key, predicate_key, object_key, graph_key`)
|
|
409
|
+
.bind(row.entity_id)
|
|
410
|
+
.all();
|
|
411
|
+
const keys = actual.results
|
|
412
|
+
.map(({ subject_key, predicate_key, object_key, graph_key }) => [subject_key, predicate_key, object_key, graph_key].join('\u0000'))
|
|
413
|
+
.sort();
|
|
414
|
+
if (JSON.stringify(keys) !== JSON.stringify(expected))
|
|
415
|
+
throw new SchemaMismatchError(`Taproot RDF ownership backfill is incomplete for ${row.entity_id}`);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
export async function verifyTaprootPackageSeeds(db) {
|
|
419
|
+
const migrationSeeds = await db
|
|
420
|
+
.prepare(`SELECT COUNT(*) AS count FROM taproot_migrations
|
|
421
|
+
WHERE (version = 1 AND name = 'initial')
|
|
422
|
+
OR (version = 2 AND name = 'audit-and-operations')`)
|
|
423
|
+
.all();
|
|
424
|
+
const migrationSeedTotal = await db
|
|
425
|
+
.prepare(`SELECT COUNT(*) AS count FROM taproot_migrations`)
|
|
426
|
+
.all();
|
|
427
|
+
if (Number(migrationSeeds.results[0]?.count ?? 0) !== 2 ||
|
|
428
|
+
Number(migrationSeedTotal.results[0]?.count ?? 0) !== 2)
|
|
429
|
+
throw new SchemaMismatchError('Taproot package migration seeds are incomplete');
|
|
430
|
+
}
|
|
281
431
|
async function hash(value) {
|
|
282
432
|
const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));
|
|
283
433
|
return [...new Uint8Array(digest)]
|
|
@@ -381,6 +531,52 @@ export async function inspectTaprootSchema(db) {
|
|
|
381
531
|
errors,
|
|
382
532
|
};
|
|
383
533
|
}
|
|
534
|
+
/**
|
|
535
|
+
* Verify the exact package-owned catalog before adopting a current pre-ledger
|
|
536
|
+
* database. This is intentionally stricter than the operational inspection:
|
|
537
|
+
* names alone must never authorize stamping an arbitrary look-alike schema.
|
|
538
|
+
*/
|
|
539
|
+
export async function isExactTaprootSchema(db) {
|
|
540
|
+
return matchesExactCatalog(db, taprootSchemaStatements);
|
|
541
|
+
}
|
|
542
|
+
export async function isExactTaprootUpgradeSchema(db) {
|
|
543
|
+
return matchesExactCatalog(db, taprootUpgradeCatalogStatements);
|
|
544
|
+
}
|
|
545
|
+
export async function isExactTaprootPreFinalizeSchema(db) {
|
|
546
|
+
return matchesExactCatalog(db, taprootPreFinalizeCatalogStatements);
|
|
547
|
+
}
|
|
548
|
+
async function matchesExactCatalog(db, statements) {
|
|
549
|
+
const expected = new Map();
|
|
550
|
+
for (const sql of statements) {
|
|
551
|
+
const match = /^\s*CREATE\s+(TABLE|INDEX|TRIGGER)\s+(?:IF\s+NOT\s+EXISTS\s+)?([a-z0-9_]+)/iu.exec(sql);
|
|
552
|
+
if (!match?.[1] || !match[2])
|
|
553
|
+
continue;
|
|
554
|
+
expected.set(`${match[1].toLowerCase()}:${match[2]}`, normalizeCatalogSql(sql));
|
|
555
|
+
}
|
|
556
|
+
const catalog = await db
|
|
557
|
+
.prepare(`SELECT type, name, sql FROM sqlite_schema
|
|
558
|
+
WHERE name LIKE 'taproot_%' AND type IN ('table', 'index', 'trigger')
|
|
559
|
+
ORDER BY type, name`)
|
|
560
|
+
.all();
|
|
561
|
+
if (catalog.results.length !== expected.size)
|
|
562
|
+
return false;
|
|
563
|
+
for (const entry of catalog.results) {
|
|
564
|
+
const expectedSql = expected.get(`${entry.type}:${entry.name}`);
|
|
565
|
+
if (expectedSql === undefined ||
|
|
566
|
+
entry.sql === null ||
|
|
567
|
+
normalizeCatalogSql(entry.sql) !== expectedSql)
|
|
568
|
+
return false;
|
|
569
|
+
}
|
|
570
|
+
return true;
|
|
571
|
+
}
|
|
572
|
+
function normalizeCatalogSql(sql) {
|
|
573
|
+
return sql
|
|
574
|
+
.replace(/\bIF\s+NOT\s+EXISTS\s+/giu, '')
|
|
575
|
+
.replace(/\s+/gu, ' ')
|
|
576
|
+
.replace(/;\s*$/u, '')
|
|
577
|
+
.trim()
|
|
578
|
+
.toLowerCase();
|
|
579
|
+
}
|
|
384
580
|
export async function assertTaprootSchema(db) {
|
|
385
581
|
const inspection = await inspectTaprootSchema(db);
|
|
386
582
|
if (!inspection.valid) {
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/docs/api.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# API guide
|
|
2
2
|
|
|
3
|
+
## Persistence and migrations
|
|
4
|
+
|
|
5
|
+
Taproot accepts Diamond's runtime-neutral `SqliteDatabaseLike`; the exported
|
|
6
|
+
`D1DatabaseLike` remains a structurally compatible name for existing Site
|
|
7
|
+
consumers. `initializeTaproot(db, { baseIri })` initializes Diamond first, then
|
|
8
|
+
Taproot, and records the canonical absolute HTTP(S) base IRI on first use.
|
|
9
|
+
Later initialization may omit it; supplying a different identity fails closed.
|
|
10
|
+
|
|
11
|
+
`planTaprootMigrations(db)` and `inspectTaprootPersistence(db)` are read-only.
|
|
12
|
+
`applyTaprootMigrations(db, { baseIri })` applies the package-owned checksummed
|
|
13
|
+
manifest in the `@gnolith/taproot` ledger namespace. Known version-one layouts
|
|
14
|
+
are inspected before adoption. Unknown, partial, out-of-order, or
|
|
15
|
+
checksum-drifted histories raise typed migration/schema errors.
|
|
16
|
+
|
|
3
17
|
`TaprootRepository` is the primary API; equivalent top-level functions are
|
|
4
18
|
exported for request-scoped use.
|
|
5
19
|
|
package/docs/architecture.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Architecture
|
|
2
2
|
|
|
3
|
-
Taproot is the knowledge-domain layer between a
|
|
3
|
+
Taproot is the knowledge-domain layer between a D1-backed application and Diamond. The
|
|
4
4
|
canonical source of truth is one Wikibase-shaped JSON document per Item or
|
|
5
5
|
Property. Revisions are append-only snapshots. Search terms and RDF are
|
|
6
6
|
rebuildable projections and never become a competing statement model.
|
|
@@ -28,3 +28,4 @@ Taproot owns Items, Properties, their values and lifecycle, revisions,
|
|
|
28
28
|
attribution/audit history, deterministic projections, migration, integrity,
|
|
29
29
|
and repair. It deliberately does not own authentication, authorization, MCP,
|
|
30
30
|
agents, UI, wiki article bodies, media storage, or arbitrary SPARQL Update.
|
|
31
|
+
It also does not own Site assembly, provisioning, deployment, or acceptance.
|
package/docs/completion-audit.md
CHANGED
|
@@ -3,21 +3,21 @@
|
|
|
3
3
|
This audit covers the complete Taproot package boundary defined in
|
|
4
4
|
`product-scope.md`, not merely CRUD.
|
|
5
5
|
|
|
6
|
-
| Capability
|
|
7
|
-
|
|
|
8
|
-
| Canonical model
|
|
9
|
-
| Complete edits
|
|
10
|
-
| Lifecycle
|
|
11
|
-
| Attribution/audit
|
|
12
|
-
| D1 atomicity
|
|
13
|
-
| RDF/SPARQL
|
|
14
|
-
| Shared RDF safety
|
|
15
|
-
| Search/read scale
|
|
16
|
-
| Bulk/agent workflows
|
|
17
|
-
| Migration
|
|
18
|
-
| Integrity/repair
|
|
19
|
-
| Extension points
|
|
20
|
-
|
|
|
6
|
+
| Capability | Evidence |
|
|
7
|
+
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
8
|
+
| Canonical model | Item/Property types, strict validator, canonical serializer, statement/reference builders, JSON fixture |
|
|
9
|
+
| Complete edits | Typed individual commands, `applyCommands`, optimistic revisions, all term/sitelink/statement/qualifier/reference/rank paths |
|
|
10
|
+
| Lifecycle | Soft delete, restore, same-type acyclic redirects, bounded resolution, lifecycle snapshots in every revision/event |
|
|
11
|
+
| Attribution/audit | Structured actors, legacy normalization, summaries, tags, request IDs, immutable events/revisions, SHA-256 parent chains |
|
|
12
|
+
| D1 atomicity | One batch for current JSON, revision, audit, terms, RDF, and ownership; rollback and competing-edit Workerd tests |
|
|
13
|
+
| RDF/SPARQL | Wikibase paths, truthy/best rank, all snak types, full values, standard statement/provenance types, mapping v2 fixtures |
|
|
14
|
+
| Shared RDF safety | Per-entity quad ownership and behavioral regression covering a shared full-value node during another entity's edit |
|
|
15
|
+
| Search/read scale | Entity/revision/audit keyset cursors, bounded search cursor, configured page limits |
|
|
16
|
+
| Bulk/agent workflows | Multi-command single revision, bounded create/upsert import with indexed errors, NDJSON export, request correlation |
|
|
17
|
+
| Migration | Versioned SQL, programmatic v1 hash/audit backfill, resumable v1-to-v2 RDF reprojection and ownership creation |
|
|
18
|
+
| Integrity/repair | Schema inspection, audit-chain verification, JSON/revision/term/RDF comparison, cursor scan, audited reprojection repair |
|
|
19
|
+
| Extension points | Required attribution, async host validators, isolated observations, injected clock and IDs |
|
|
20
|
+
| Package operations/release | Architecture/API/persistence/scope/security/testing docs, Node 22/24 CI, packed consumer, license and release gates |
|
|
21
21
|
|
|
22
22
|
## Reproduction
|
|
23
23
|
|
|
@@ -26,6 +26,12 @@ npm ci
|
|
|
26
26
|
npm run check
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
Diamond `0.
|
|
29
|
+
Diamond `0.4.0` supplies the composable patch API, neutral SQLite capability,
|
|
30
|
+
and package-owned migration primitives.
|
|
30
31
|
The packed-consumer gate installs Taproot and Diamond without repository
|
|
31
32
|
siblings or local paths and exercises a fresh Workerd D1 database.
|
|
33
|
+
|
|
34
|
+
This audit qualifies the Taproot package boundary only. It does not assemble,
|
|
35
|
+
provision, deploy, or accept a complete Gnolith Site. The Codex agent creating
|
|
36
|
+
a Site owns database binding, remote migration orchestration, route and auth
|
|
37
|
+
wiring, hosting configuration, deployment, and production acceptance.
|
package/docs/operations.md
CHANGED
|
@@ -2,16 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
## Initialize and migrate
|
|
4
4
|
|
|
5
|
-
Run `initializeTaproot(db)`
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Run `initializeTaproot(db, { baseIri })` before using a new database. The
|
|
6
|
+
absolute HTTP(S) base IRI is stored as permanent database identity and cannot
|
|
7
|
+
be replaced by a later hostname or runtime setting. Afterward,
|
|
8
|
+
`initializeTaproot(db)` is idempotent and initializes Diamond too. Do not apply
|
|
9
|
+
the historical numbered SQL files directly in 0.2; hosts orchestrate the
|
|
10
|
+
package-owned plan/apply/initialize APIs because legacy revision hashes and
|
|
11
|
+
adoption checks cannot be correctly produced by SQLite alone.
|
|
9
12
|
|
|
10
13
|
The v1-to-v2 migration backfills SHA-256 content/parent chains and audit
|
|
11
14
|
events, migrates RDF mapping v1 to v2, creates ownership records, and uses a
|
|
12
15
|
durable migration marker so an interrupted reprojection resumes safely.
|
|
13
16
|
`inspectTaprootSchema` checks tables, required columns, indexes, triggers, and
|
|
14
|
-
format versions.
|
|
17
|
+
format versions. A failed inspection means the database is not usable by this
|
|
18
|
+
package. The consuming application decides how that affects startup or rollout.
|
|
19
|
+
|
|
20
|
+
Hosts can call `planTaprootMigrations(db)`,
|
|
21
|
+
`inspectTaprootPersistence(db)`, and
|
|
22
|
+
`applyTaprootMigrations(db, { baseIri })`. Planning and inspection are
|
|
23
|
+
read-only. Taproot owns its schema, identity, and migration namespace; Seedbed
|
|
24
|
+
owns local CLI, file path, process lifecycle, and Docker assembly, while a
|
|
25
|
+
Codex Site host owns D1 and Site assembly.
|
|
15
26
|
|
|
16
27
|
## Integrity and repair
|
|
17
28
|
|
|
@@ -35,6 +46,11 @@ redirects, or audit history.
|
|
|
35
46
|
After database restore, run schema inspection and paginated integrity checks.
|
|
36
47
|
After JSON-only import, projections are generated during each import.
|
|
37
48
|
|
|
49
|
+
Taproot documents persistence semantics but does not select or provision a D1
|
|
50
|
+
database, run remote migrations, configure backups, deploy an application, or
|
|
51
|
+
accept a complete Gnolith Site. The Codex agent creating a Site owns those
|
|
52
|
+
operational decisions and checks.
|
|
53
|
+
|
|
38
54
|
## Limits and failure behavior
|
|
39
55
|
|
|
40
56
|
Writes are atomic per entity. Bulk import is deliberately not a cross-entity
|
package/docs/product-scope.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Product scope
|
|
2
2
|
|
|
3
|
-
Taproot exists so a
|
|
3
|
+
Taproot exists so a D1-backed application can own a Wikibase-style knowledge graph
|
|
4
4
|
and query it through Diamond without operating MediaWiki or another external
|
|
5
5
|
knowledge service.
|
|
6
6
|
|
|
@@ -15,6 +15,11 @@ than missing Taproot implementation: MCP transport, agent orchestration,
|
|
|
15
15
|
authentication/authorization, UI, wiki pages, media bytes, MediaWiki APIs,
|
|
16
16
|
Lexeme/Form/Sense, MediaInfo, and EntitySchema entity storage.
|
|
17
17
|
|
|
18
|
+
Complete-Site assembly, resource provisioning, remote migration execution,
|
|
19
|
+
deployment, and production acceptance are also outside this package. The Codex
|
|
20
|
+
agent creating a Gnolith Site owns those responsibilities. Taproot qualifies
|
|
21
|
+
only its published package and supported local runtime contracts.
|
|
22
|
+
|
|
18
23
|
Adding an extension entity type changes IDs, JSON, commands, RDF, migration,
|
|
19
24
|
and compatibility fixtures. It must be designed and versioned as an explicit
|
|
20
25
|
new domain rather than accepted as unvalidated JSON.
|