videobook-engine 5.3.2 → 5.4.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/README.md +6 -0
- package/dist/catalog-metadata.d.ts +1 -1
- package/dist/catalog-metadata.js +1 -1
- package/dist/domain.js +15 -5
- package/dist/domain.js.map +1 -1
- package/dist/engine-types.d.ts +140 -1
- package/dist/engine-types.d.ts.map +1 -1
- package/dist/engine-types.js.map +1 -1
- package/dist/engine.d.ts +21 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +3 -0
- package/dist/engine.js.map +1 -1
- package/dist/fork.d.ts +3 -4
- package/dist/fork.d.ts.map +1 -1
- package/dist/fork.js +4 -4
- package/dist/fork.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/merge-policy.d.ts +3 -4
- package/dist/merge-policy.d.ts.map +1 -1
- package/dist/merge-policy.js +5 -4
- package/dist/merge-policy.js.map +1 -1
- package/dist/migrate-tags-v24.d.ts +12 -0
- package/dist/migrate-tags-v24.d.ts.map +1 -0
- package/dist/migrate-tags-v24.js +40 -0
- package/dist/migrate-tags-v24.js.map +1 -0
- package/dist/mvp-contracts.d.ts +2 -2
- package/dist/mvp-contracts.js +1 -1
- package/dist/schema.d.ts +3 -2
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +59 -0
- package/dist/schema.js.map +1 -1
- package/dist/store.d.ts +6 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +150 -54
- package/dist/store.js.map +1 -1
- package/dist/tag-merge.d.ts +4 -0
- package/dist/tag-merge.d.ts.map +1 -0
- package/dist/tag-merge.js +85 -0
- package/dist/tag-merge.js.map +1 -0
- package/dist/tag-queries.d.ts +30 -0
- package/dist/tag-queries.d.ts.map +1 -0
- package/dist/tag-queries.js +313 -0
- package/dist/tag-queries.js.map +1 -0
- package/dist/tag-rows.d.ts +36 -0
- package/dist/tag-rows.d.ts.map +1 -0
- package/dist/tag-rows.js +48 -0
- package/dist/tag-rows.js.map +1 -0
- package/dist/tag-transfer.d.ts +26 -0
- package/dist/tag-transfer.d.ts.map +1 -0
- package/dist/tag-transfer.js +341 -0
- package/dist/tag-transfer.js.map +1 -0
- package/dist/tag-validation.d.ts +15 -0
- package/dist/tag-validation.d.ts.map +1 -0
- package/dist/tag-validation.js +36 -0
- package/dist/tag-validation.js.map +1 -0
- package/dist/tag-values.d.ts +68 -0
- package/dist/tag-values.d.ts.map +1 -0
- package/dist/tag-values.js +107 -0
- package/dist/tag-values.js.map +1 -0
- package/dist/tags.d.ts +44 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +488 -0
- package/dist/tags.js.map +1 -0
- package/docs/doltlite-staging.md +35 -15
- package/docs/edit-performance.md +2 -4
- package/docs/engine-layout.md +92 -4
- package/docs/mvp-prd.md +2 -1
- package/docs/release-evidence.md +74 -35
- package/docs/temporal-search-performance.md +4 -6
- package/fixtures/v5/contract-fixtures.json +3 -3
- package/package.json +7 -3
package/docs/engine-layout.md
CHANGED
|
@@ -105,7 +105,7 @@ Notation used below:
|
|
|
105
105
|
- `→` names the referenced column.
|
|
106
106
|
- Defaults and checks are shown inline.
|
|
107
107
|
|
|
108
|
-
There are
|
|
108
|
+
There are 36 allowlisted semantic tables.
|
|
109
109
|
|
|
110
110
|
### Catalog, artifacts, and content
|
|
111
111
|
|
|
@@ -136,6 +136,89 @@ There are 34 allowlisted semantic tables.
|
|
|
136
136
|
| `runs` | `run_id TEXT`<br>`notebook_id TEXT`<br>`status TEXT`<br>`started_at INTEGER`<br>`completed_at INTEGER`<br>`cell_order_json TEXT`<br>`outputs_json TEXT`<br>`error TEXT?` | `run_id PK`; notebook `FK → notebooks ON DELETE CASCADE`; `status CHECK IN (completed, failed, aborted)`. Terminal, versioned notebook execution records. |
|
|
137
137
|
| `generations` | `generation_id TEXT`<br>`notebook_id TEXT`<br>`cell_id TEXT`<br>`output_cell_id TEXT?`<br>`run_id TEXT?`<br>`status TEXT`<br>`tool TEXT`<br>`provider TEXT?`<br>`model TEXT?`<br>`prompt TEXT?`<br>`resolved_prompt TEXT?`<br>`provider_artifact_id TEXT?`<br>`output_artifact_id TEXT?`<br>`error TEXT?`<br>`created_at INTEGER`<br>`updated_at INTEGER` | `generation_id PK`; composite cell FK with cascade; `status CHECK IN (dispatched, awaiting_provider, completed, failed)`. One row per generation attempt; every transition is its own attributed semantic commit, so `dolt_history_generations` is the per-attempt timeline. |
|
|
138
138
|
|
|
139
|
+
### Asset tags
|
|
140
|
+
|
|
141
|
+
Flat, book-local tags on artifacts. Semantic identity is the pair
|
|
142
|
+
(`facet`, `tag_key`) — never the display label alone — so the same word in
|
|
143
|
+
two facets stays two assignments. Manual and automatic assignments share
|
|
144
|
+
one table keyed by `origin`: replacing an automatic snapshot deletes and
|
|
145
|
+
reinserts only the `automatic` rows, so it can never add, drop or relabel
|
|
146
|
+
a manual row. Dismissals are a separate durable record of user intent that
|
|
147
|
+
outlives any snapshot, which is what stops re-analysis from resurrecting a
|
|
148
|
+
tag the user removed.
|
|
149
|
+
|
|
150
|
+
| Table | Columns | Keys, constraints, and purpose |
|
|
151
|
+
| --- | --- | --- |
|
|
152
|
+
| `artifact_tags` | `artifact_id TEXT`<br>`origin TEXT`<br>`facet TEXT`<br>`tag_key TEXT`<br>`label TEXT`<br>`entity_id TEXT?`<br>`created_at INTEGER` | `(artifact_id, origin, facet, tag_key) PK`; `artifact_id FK → artifacts.artifact_id ON DELETE CASCADE`; `entity_id FK → entities.entity_id ON DELETE RESTRICT`; `origin CHECK IN (manual, automatic)`; `facet CHECK IN (people, places, editing, custom)`. `tag_key` is the NFKC-normalized, whitespace-collapsed, lowercased key; `label` is the display form. A tag may carry an already-confirmed entity reference, and holding one keeps that entity alive (`engine.entities.delete` returns `IN_USE`). |
|
|
153
|
+
| `artifact_tag_dismissals` | `artifact_id TEXT`<br>`facet TEXT`<br>`tag_key TEXT`<br>`label TEXT`<br>`dismissed_at INTEGER` | `(artifact_id, facet, tag_key) PK`; `artifact_id FK → artifacts.artifact_id ON DELETE CASCADE`. One row per suppressed identity. Suppression is applied when tags are read, so the automatic row keeps the provenance that explains it while staying invisible. Adding the identity manually deletes the row; `engine.tags.restore` deletes it without claiming ownership. |
|
|
154
|
+
| `artifact_tag_snapshots` | `artifact_id TEXT`<br>`source_hash TEXT`<br>`generator TEXT`<br>`model TEXT?`<br>`extractor_version TEXT`<br>`tag_count INTEGER`<br>`generation INTEGER`<br>`analyzed_at INTEGER` | `artifact_id PK`; `artifact_id FK → artifacts.artifact_id ON DELETE CASCADE`; `tag_count CHECK >= 0`; `generation CHECK > 0`. The last successful automatic analysis. A row with `tag_count` 0 is a successful empty result; no row at all means no successful analysis. `extractor_version` includes the editorial tag-policy version so a policy change can drive selective refresh. `generation` is the per-artifact fence: a caller may pass `expectedGeneration` and a mismatch is refused with `STALE_REVISION`. |
|
|
155
|
+
|
|
156
|
+
`source_hash` is a content fingerprint, deliberately **not** an `objects`
|
|
157
|
+
foreign key and not a first-class `object_hash` column: tags neither pin
|
|
158
|
+
bytes against GC nor block forgetting. An automatic snapshot is stale once
|
|
159
|
+
that hash is no longer one of the artifact's `artifact_files` rows, and
|
|
160
|
+
stale automatic tags drop out of the effective set instead of describing
|
|
161
|
+
content that is gone.
|
|
162
|
+
|
|
163
|
+
Effective tags are every manual assignment plus every automatic assignment
|
|
164
|
+
that is neither dismissed nor stale, deduplicated on identity with the
|
|
165
|
+
manual label and ownership preferred. Documented limits: 64 Unicode code
|
|
166
|
+
points per label, 100 manual tags per artifact, 12 automatic tags per
|
|
167
|
+
snapshot, 500 dismissals per artifact. Exceeding one is refused with
|
|
168
|
+
`RESOURCE_EXHAUSTED` rather than silently dropping user intent.
|
|
169
|
+
|
|
170
|
+
Automatic analysis uses the `people`, `places`, and `editing` facets;
|
|
171
|
+
`custom` is reserved for manual tags. Writes check generation fences,
|
|
172
|
+
capacity, and no-op decisions inside the same serialized SQL transaction
|
|
173
|
+
as their mutation. Imports apply the same automatic metadata and size
|
|
174
|
+
validation, and count duplicate dismissals only once. The browser-safe
|
|
175
|
+
`videobook-engine/tag-values` subpath exposes normalization and limits.
|
|
176
|
+
|
|
177
|
+
`engine.tags.query` filters artifacts on that same effective set: `all`
|
|
178
|
+
(every identity), `any` (at least one), and `kinds`, with keyset paging and
|
|
179
|
+
a total that counts every match rather than the current page.
|
|
180
|
+
`engine.tags.candidates` returns the unpaged matching IDs so the
|
|
181
|
+
application can compose a tag filter with temporal or semantic search
|
|
182
|
+
before either applies a limit. `engine.tags.facets` counts distinct
|
|
183
|
+
matching artifacts per identity, and `engine.tags.suggest` completes known
|
|
184
|
+
keys by prefix and facet; both prefer the manual display label. The
|
|
185
|
+
effective-tag rule is written once as SQL in `src/tag-queries.ts` and once
|
|
186
|
+
in TypeScript in `src/tags.ts`, and `tests/tag-queries.test.ts` asserts the
|
|
187
|
+
two agree.
|
|
188
|
+
|
|
189
|
+
Tag rows are ordinary semantic rows, so history needs no special case:
|
|
190
|
+
`history.restore` reloads them from their `dolt_at_*` projections like
|
|
191
|
+
every other table, and an explicit restore may therefore rewind manual
|
|
192
|
+
edits that routine re-analysis never can. Restoring a revision recorded
|
|
193
|
+
under an older schema stays refused by the existing version guard.
|
|
194
|
+
`engine.tags.readAtRevision` reports the state a revision recorded; a
|
|
195
|
+
revision written before schema 25 has no tag state at all and yields an
|
|
196
|
+
empty snapshot rather than an error.
|
|
197
|
+
|
|
198
|
+
`engine.tags.export` produces a portable snapshot — manual tags,
|
|
199
|
+
dismissals, and automatic evidence only while it is still valid — and
|
|
200
|
+
`engine.tags.import` applies one to another artifact, in the same catalog
|
|
201
|
+
or a different engine. Import never trusts the source: labels are
|
|
202
|
+
re-normalized into destination-local identities, an entity reference
|
|
203
|
+
survives only when that entity exists in the destination, and automatic
|
|
204
|
+
evidence transfers only when the destination artifact carries the exact
|
|
205
|
+
analyzed hash. A hash-identical duplicate therefore inherits automatic
|
|
206
|
+
tags; a modified or generated derivative inherits only manual intent, with
|
|
207
|
+
`skippedAutomatic` saying so.
|
|
208
|
+
Re-importing unchanged, valid evidence is a no-op and leaves
|
|
209
|
+
`skippedAutomatic` false.
|
|
210
|
+
|
|
211
|
+
Merges treat an automatic snapshot and its tag rows as one unit. Competing
|
|
212
|
+
answers for the same artifact conflict even when their metadata agrees;
|
|
213
|
+
the engine never combines two automatic sets into an invented analysis.
|
|
214
|
+
Merges also reject combined manual or dismissal sets that exceed the
|
|
215
|
+
per-artifact limits, before changing the accepted catalog.
|
|
216
|
+
|
|
217
|
+
Query cost is fixed, not proportional to catalog size: `query` is three
|
|
218
|
+
statements (page, total, page tags), `candidates` one, and `facets` two
|
|
219
|
+
(counts, then preferred labels). `tests/tag-queries.test.ts` measures those
|
|
220
|
+
counts against a catalog ten times larger and asserts they do not move.
|
|
221
|
+
|
|
139
222
|
### Sequence timeline and media editing state
|
|
140
223
|
|
|
141
224
|
Sequences are the single timeline model. `sequences`, `sequence_tracks`,
|
|
@@ -272,9 +355,9 @@ are the constraint-verification primitives.
|
|
|
272
355
|
(`resolveObjectsRow` in `src/fork.ts`).
|
|
273
356
|
|
|
274
357
|
DoltLite 0.50.6 fixes incremental staging and full-catalog URL cloning.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
358
|
+
The pinned `0.50.6-videobook.1` fork also fixes native merges with ignored
|
|
359
|
+
runtime tables. Clean-package verification exercises the complete catalog,
|
|
360
|
+
indexes, runtime rows, and job ID state; see
|
|
278
361
|
[docs/doltlite-staging.md](doltlite-staging.md). The dedicated merge-back flow
|
|
279
362
|
keeps its projection merge and application conflict policies.
|
|
280
363
|
|
|
@@ -361,6 +444,9 @@ schema additionally defines every index below.
|
|
|
361
444
|
| `prompt_entries_lookup` | `prompt_entries(surface, created_at, prompt_id)` |
|
|
362
445
|
| `messages_created` | `messages(created_at, message_id)` |
|
|
363
446
|
| `generations_cell` | `generations(notebook_id, cell_id, created_at)` |
|
|
447
|
+
| `artifact_tags_identity` | `artifact_tags(facet, tag_key, artifact_id)` |
|
|
448
|
+
| `artifact_tags_entity` | `artifact_tags(entity_id)` |
|
|
449
|
+
| `artifact_tag_dismissals_identity` | `artifact_tag_dismissals(facet, tag_key, artifact_id)` |
|
|
364
450
|
|
|
365
451
|
## Local-only runtime schema
|
|
366
452
|
|
|
@@ -728,6 +814,8 @@ must reproduce a render.
|
|
|
728
814
|
| Content-addressed object layout, remote keys, deletion | [`src/cas.ts`](../src/cas.ts) |
|
|
729
815
|
| Object publication, deletion, GC, and catalog backup | [`src/storage.ts`](../src/storage.ts) |
|
|
730
816
|
| Artifact mappings and workspace materialization | [`src/files.ts`](../src/files.ts) |
|
|
817
|
+
| Asset tag state, precedence, and snapshots | [`src/tags.ts`](../src/tags.ts), [`src/tag-values.ts`](../src/tag-values.ts) |
|
|
818
|
+
| Asset tag schema upgrade (24 to 25) | [`src/migrate-tags-v24.ts`](../src/migrate-tags-v24.ts) |
|
|
731
819
|
| Sequence reads/structure and transactional edits | [`src/sequences.ts`](../src/sequences.ts), [`src/edits.ts`](../src/edits.ts) |
|
|
732
820
|
| Public manifest, job, status, and similarity types | [`src/engine-types.ts`](../src/engine-types.ts) |
|
|
733
821
|
| Entity/notebook graph types | [`src/notebook/types.ts`](../src/notebook/types.ts) |
|
package/docs/mvp-prd.md
CHANGED
|
@@ -707,7 +707,8 @@ artifact/file mapping before it is relied on by history.
|
|
|
707
707
|
|
|
708
708
|
## 12. Performance and quality requirements
|
|
709
709
|
|
|
710
|
-
|
|
710
|
+
Performance measurements record the actual CPU, memory and storage of the
|
|
711
|
+
test machine. No specific device model is required.
|
|
711
712
|
Quality thresholds use the frozen corpus defined in the application PRD.
|
|
712
713
|
|
|
713
714
|
| ID | Area | Creator-beta requirement |
|
package/docs/release-evidence.md
CHANGED
|
@@ -9,7 +9,48 @@ This is an assessment of the requirements in
|
|
|
9
9
|
Beads contains the work assignments and current status; this report records
|
|
10
10
|
the evidence and its limits at these revisions.
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Published 5.3.3 patch, September 7
|
|
13
|
+
|
|
14
|
+
[`videobook-engine@5.3.3`](https://www.npmjs.com/package/videobook-engine/v/5.3.3)
|
|
15
|
+
is published as npm `latest` from `039a4c21be706e4f12140a6b14b32e21eb573cdc`,
|
|
16
|
+
tagged `v5.3.3`. [Node 22/24 CI](https://github.com/justintanner/videobook-engine/actions/runs/34050088772)
|
|
17
|
+
passes. The downloaded registry archive is byte-identical to the tested build,
|
|
18
|
+
SHA256 `92a19b1ef6d5860b82774bd2175f6113569f66a49cc5d30e96e7710ec851f441`.
|
|
19
|
+
Its clean registry install passes the complete native catalog/sequence probe,
|
|
20
|
+
README/reopen, cached CLIP/CLAP inference, media decode, one Sharp resolution,
|
|
21
|
+
and zero production audit findings. The default engine suite passes 352 tests
|
|
22
|
+
with 12 optional skips, alongside typecheck, lint and build.
|
|
23
|
+
|
|
24
|
+
Consumer `91232cb9` vendors that exact published archive and remains version
|
|
25
|
+
0.1.0. It passes 3,218 tests with six optional skips, lint, four test typechecks,
|
|
26
|
+
and dead-code checks. Its isolated install passes one native fork/Sharp
|
|
27
|
+
resolution, client/server builds, MCP create/list, client delivery, and graceful
|
|
28
|
+
shutdown. The full-catalog native regression fails on unpatched 0.50.6 and
|
|
29
|
+
passes on the fork, checking actual fast-forward and three-way HEAD changes.
|
|
30
|
+
|
|
31
|
+
Engine 5.3.3 pins the tested native fork `b3981dc9ed6b2e39c247b4d598b2691e19dd0b25`
|
|
32
|
+
with the published 0.50.6 Node wrapper. The fork package is
|
|
33
|
+
`0.50.6-videobook.1`, installed from a versioned GitHub release asset with
|
|
34
|
+
lockfile integrity. The complete native-source CI passed 69 jobs; package CI
|
|
35
|
+
builds and installs all five existing addon targets and tests the bundled
|
|
36
|
+
source fallback. The engine package smoke checks the exact installed fork
|
|
37
|
+
against the full catalog, including ignored runtime tables and job ID state.
|
|
38
|
+
See [dependency provenance and verification](doltlite-staging.md).
|
|
39
|
+
|
|
40
|
+
The older 5.3.2 results below describe that release's unpatched dependency.
|
|
41
|
+
Temporary fork adoption supersedes its native-merge blocker. The frozen judged
|
|
42
|
+
quality corpus remains a separate missing input; prior performance evidence
|
|
43
|
+
keeps its original source and hardware qualifications.
|
|
44
|
+
|
|
45
|
+
## Published 5.3.2 patch
|
|
46
|
+
|
|
47
|
+
[`videobook-engine@5.3.2`](https://www.npmjs.com/package/videobook-engine/v/5.3.2)
|
|
48
|
+
was published as npm `latest` on September 6, 2026 from
|
|
49
|
+
`7c97fdd62bba7753378b830308ec788ef86fce9e`, tagged `v5.3.2`.
|
|
50
|
+
[Node 22/24 CI](https://github.com/justintanner/videobook-engine/actions/runs/34040099977)
|
|
51
|
+
passed for that exact source. The downloaded registry archive matches the
|
|
52
|
+
published build, and a clean registry install passes the README, reopen,
|
|
53
|
+
media, cached CLIP/CLAP inference, single-Sharp and production audit checks.
|
|
13
54
|
|
|
14
55
|
Engine `c4f1d89` adopts DoltLite 0.50.6. Both default and all-table staging
|
|
15
56
|
probes now pass on the real 12-table fixture, and URL bootstrap preserves the
|
|
@@ -18,11 +59,11 @@ consumer's 0.11.51 reopen with identical committed head, history, table counts,
|
|
|
18
59
|
semantic projections, contents, and runtime settings; restore and new writes
|
|
19
60
|
remain durable after another reopen.
|
|
20
61
|
|
|
21
|
-
|
|
62
|
+
In that 5.3.2 build, native merge rejects clean catalogs containing ignored runtime tables.
|
|
22
63
|
`scripts/dolt-ignored-merge-probe.cjs` reproduces this even without secondary
|
|
23
64
|
indexes; its semantic-only control succeeds. Production retains the projection
|
|
24
|
-
merge and its existing policies.
|
|
25
|
-
|
|
65
|
+
merge and its existing policies. The staging and URL-bootstrap fixes alone
|
|
66
|
+
did not resolve the native-merge limitation; the 5.3.3 fork adoption addresses it.
|
|
26
67
|
|
|
27
68
|
The engine passes 352 default tests, typecheck, dead-code checks, build, and
|
|
28
69
|
clean packed README/reopen/media checks, including cached CLIP/CLAP image,
|
|
@@ -58,30 +99,25 @@ write/dequeue/heartbeat iterations on shared CI runners. Its 200 ms reopen and
|
|
|
58
99
|
passes locally; the timeout change addresses the 84-second fixture that
|
|
59
100
|
exceeded the previous 60-second watchdog on Node 22.
|
|
60
101
|
|
|
61
|
-
The
|
|
62
|
-
major bump is planned.
|
|
63
|
-
outstanding. The M2 Pro reference-device run is deferred because the user
|
|
64
|
-
confirmed that the hardware is unavailable.
|
|
102
|
+
The release is a patch within the existing 5.x series. No 2.0.0 release or
|
|
103
|
+
major bump is planned. Frozen-corpus quality remains outstanding.
|
|
65
104
|
|
|
66
105
|
## Performance and quality
|
|
67
106
|
|
|
68
107
|
The available machine reports Apple M1 Pro, 10 logical CPUs and 16 GiB RAM.
|
|
69
|
-
|
|
70
|
-
their actual hardware qualification
|
|
71
|
-
|
|
72
|
-
September 6 confirmation that no M2 Pro is available. The passing M1 Pro results
|
|
73
|
-
remain the available benchmark evidence. This exact-device check does not
|
|
74
|
-
block publication of the already validated 5.3.2 patch.
|
|
108
|
+
Performance requirements are evaluated on the documented test machine.
|
|
109
|
+
Existing measurements retain their actual hardware qualification. The passing
|
|
110
|
+
M1 Pro results below provide the available benchmark evidence.
|
|
75
111
|
|
|
76
112
|
| Requirement | Evidence inspected | Assessment and follow-up |
|
|
77
113
|
| --- | --- | --- |
|
|
78
|
-
| VE-NFR-001: 1,000-artifact open and semantic summary <2 s | Clean engine `c4f1d89`: 171 ms same-process after a fresh 1,000-artifact/100,000-moment build and 1,714 ms in a fresh process reopening the retained fixture. Raw reports: `temporal-100k-doltlite-0506.json` and `temporal-100k-doltlite-0506-reopen.json`, both on M1 Pro. | Passes on measured hardware for the current source.
|
|
114
|
+
| VE-NFR-001: 1,000-artifact open and semantic summary <2 s | Clean engine `c4f1d89`: 171 ms same-process after a fresh 1,000-artifact/100,000-moment build and 1,714 ms in a fresh process reopening the retained fixture. Raw reports: `temporal-100k-doltlite-0506.json` and `temporal-100k-doltlite-0506-reopen.json`, both on M1 Pro. | Passes on measured hardware for the current source. |
|
|
79
115
|
| VE-NFR-002: metadata and imported normalized transcript searchable <5 s after semantic commit | Consumer `tests/v2/text-readiness.test.ts` times the real job queue on a real probed video: analysis metadata write to first lexical hit 688 ms (OCR text 689 ms), transcript import to first quoted speech hit 314 ms, both under the 5 s gate with model downloads disabled and no cached model. | Passes end to end through the application's actual enqueue, poll, index and lexical query path on M1 Pro. |
|
|
80
116
|
| VE-NFR-003: searchable coverage at least every 60 source seconds, resume last committed batch | Synthetic benchmark: 4,000 batches of at most 30 source seconds, every cursor checked, first coverage 45 ms. The consumer's fixed four-unit deep batches could exceed 60 s on videos longer than about seven minutes because frame sampling caps at 30 frames; `commitDeepBatches` now bounds each CLIP/CLAP batch by covered source seconds. Consumer `tests/v2/semantic-index-cadence.test.ts` verifies the bound and durable-cursor resume through the engine, and the explicit real-model case runs the actual CLIP pipeline on a real ten-minute video: 15 two-frame batches of at most 41.4 s, interruption after two batches, resume from cursor 4 without re-embedding committed frames, and retrieval of the source. | Passes for the actual model pipeline. A single sampled frame whose own span exceeds 60 s (videos over about 29 minutes) is committed alone; frame density itself is a quality question for the frozen corpus, not a cadence failure. |
|
|
81
|
-
| VE-NFR-004: 100k moments, warm p50 <500 ms, p95 <1.5 s including hybrid | Clean `c4f1d89` fresh build: 50 warm reads per mode, p50/p95 image 59/66 ms, video 113/165 ms, hybrid 332/411 ms; fresh-process reopen: image 60/73 ms, video 117/179 ms, hybrid 310/388 ms. | Passes the full synthetic workload on the current source, M1 Pro.
|
|
117
|
+
| VE-NFR-004: 100k moments, warm p50 <500 ms, p95 <1.5 s including hybrid | Clean `c4f1d89` fresh build: 50 warm reads per mode, p50/p95 image 59/66 ms, video 113/165 ms, hybrid 332/411 ms; fresh-process reopen: image 60/73 ms, video 117/179 ms, hybrid 310/388 ms. | Passes the full synthetic workload on the current source, M1 Pro. |
|
|
82
118
|
| VE-NFR-005: 100-operation preview on 1,000 clips, p95 <250 ms, no mutation | Clean `c4f1d89`, `npm run benchmark:edits` (`docs/edit-performance.md`): 50 independent previews of fresh 100-operation batches against 1,000 clips, p50 105 ms, p95 114 ms, max 118 ms; head revision, every table row count and the canonical sequence projection unchanged after each preview. Recorded in `benchmarks/results/edit-100x1000-doltlite-0506.json`. | Passes with strict gates on M1 Pro. `tests/edit-transactions.test.ts` keeps its single-sample 500 ms tripwire for shared CI runners. |
|
|
83
119
|
| VE-NFR-006: same commit batch, p95 <1 s | Same run: 50 independent commits, p50 299 ms, p95 331 ms, max 348 ms; every commit advanced the head and applied all 100 transforms; reopened catalog exposes the last revision. | Passes on M1 Pro; no derived jobs run inside `edits.commit`. |
|
|
84
|
-
| VE-NFR-007: 100k query/index structures <4 GB RSS beyond loaded model | Clean `c4f1d89` fresh build and query process peak 3.03 GiB including fixture construction; fresh-process reopen and 150 queries 2.08 GiB; no model loaded. | Passes on the current source, M1 Pro.
|
|
120
|
+
| VE-NFR-007: 100k query/index structures <4 GB RSS beyond loaded model | Clean `c4f1d89` fresh build and query process peak 3.03 GiB including fixture construction; fresh-process reopen and 150 queries 2.08 GiB; no model loaded. | Passes on the current source, M1 Pro. |
|
|
85
121
|
| VE-NFR-008: forced termination at every SQL/outbox/Dolt boundary | Baseline edit tests only threw exceptions and closed normally. Subsequent `tests/semantic-crash.test.ts` covers real SIGKILL at each semantic/outbox/table-staging/Dolt boundary for a multi-table edit and provenance operation, including interrupted recovery and an intervening write. | Kill matrix exposed and corrected duplicate provenance replay. See `docs/semantic-durability.md` for scope and invariants; tracked in `ve-ovz.10`. |
|
|
86
122
|
| VE-NFR-009: stable search ordering, identical canonical previews/hashes | Current-source temporal runs repeat every first query per mode against the unchanged generation and require identical hits; the edit distribution run previews each of 50 large batches twice and requires identical canonical operations, ranges, write sets, diffs and all hashes. | Passes for the exact 100-operation/1,000-clip workload and the 100k search workload. |
|
|
87
123
|
| VE-NFR-010: every application frozen-corpus quality threshold | E4 evaluator and small real-model fixtures exist | Full rights-cleared frozen corpus and judged ranges absent. `ve-s84` remains incomplete; synthetic scale data cannot replace it. |
|
|
@@ -152,7 +188,7 @@ current-source coverage gaps; the final scan reports zero missing visual
|
|
|
152
188
|
indexes. One empty copied video was recovered from its exact preceding
|
|
153
189
|
nonempty artifact revision after SHA-256, dimensions and duration verification
|
|
154
190
|
(`vb-v9nq`), then indexed and retrieved successfully. These fixture and local
|
|
155
|
-
library results do not replace the frozen-corpus
|
|
191
|
+
library results do not replace the frozen-corpus gate.
|
|
156
192
|
|
|
157
193
|
Provider dispatch scoping is hardened in Engine `dffaf21` (`ve-ovz.20`).
|
|
158
194
|
Compatibility preparation and embedding receive a fresh options object containing
|
|
@@ -252,18 +288,23 @@ Consumer `b4e369b5` vendors `videobook-engine-5.3.2-c4f1d89.tgz`, SHA-256
|
|
|
252
288
|
`79f42f492fa569d13993f433da44a3b1ee11a4536fb54246d825d61978284c54`.
|
|
253
289
|
Its provenance file records the exact engine revision; application and engine
|
|
254
290
|
resolve one DoltLite 0.50.6 and one Sharp 0.35.4. The application remains 0.1.0.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
`
|
|
260
|
-
Both
|
|
261
|
-
|
|
262
|
-
`
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
291
|
+
The subsequent registry release is built from `7c97fdd`, which retains the
|
|
292
|
+
same functional baseline and includes updated evidence. The published archive
|
|
293
|
+
has 290 files and is 2,522,956 bytes. Its SHA-1 is
|
|
294
|
+
`711e5dc6d92fb247d8dd6425f1de04b18415c70b` and npm integrity is
|
|
295
|
+
`sha512-iJ1dtXWL3+u6iru5rpcVEQpeFRBiROCW1JH8tZj/Qrwt0VDMlAqe6i+WCBxyPKExsu/VJus5rY7IOuSJ/Pwvtg==`.
|
|
296
|
+
Both registry metadata and the downloaded tarball match these digests.
|
|
297
|
+
|
|
298
|
+
`VIDEOBOOK_RUN_MODEL_E2E=1 node scripts/package-smoke.mjs videobook-engine@5.3.2`
|
|
299
|
+
passes in a clean macOS project with publishing credentials excluded. It runs
|
|
300
|
+
the installed README quick start, catalog reopen, provider consent and input
|
|
301
|
+
scoping, remote checksum rejection/retry, offline model policy, native media
|
|
302
|
+
decoding, and cached CLIP/CLAP image/audio/text inference with downloads
|
|
303
|
+
disabled. The installation contains one Sharp resolution, emits no competing
|
|
304
|
+
native image-library warnings, and has zero production audit findings.
|
|
305
|
+
This closes the published-package gates in `ve-yc7` and `ve-orp`. The obsolete
|
|
306
|
+
0.1.0 and 2.0.0 publication tickets are superseded by `ve-yc7`; they are not
|
|
307
|
+
additional release targets.
|
|
267
308
|
|
|
268
309
|
Subsequent checksum hardening adds verified file resolution for all built-in
|
|
269
310
|
model paths, complete upstream digest inventories for three pinned snapshots,
|
|
@@ -293,8 +334,6 @@ The NFR measurement pass (`ve-ovz.9`) records current-source distributions
|
|
|
293
334
|
for VE-NFR-001/002/004/005/006/007/009/012 and the actual model-pipeline
|
|
294
335
|
cadence for VE-NFR-003 in this document, `docs/edit-performance.md` and
|
|
295
336
|
`docs/temporal-search-performance.md`. Every measured gate passes on the
|
|
296
|
-
available M1 Pro
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
remain outstanding. Exact reference-device acceptance (`ve-ovz.22`) is deferred
|
|
300
|
-
because the hardware is unavailable; full E4/E5/MVP acceptance is not claimed.
|
|
337
|
+
available M1 Pro, with its hardware recorded in the reports. The full quality
|
|
338
|
+
corpus (`ve-s84`) remains outstanding. Published-package verification
|
|
339
|
+
(`ve-yc7`, `ve-orp`) passes for 5.3.2; full E4/E5/MVP acceptance is not claimed.
|
|
@@ -39,8 +39,7 @@ run. Reusing a fixture measures query-process RSS without the original
|
|
|
39
39
|
seeding process. The report keeps these runs distinct and records actual
|
|
40
40
|
CPU, memory, Node version, source commit, dirty state, dimensions, raw timing
|
|
41
41
|
samples, coverage cadence, and whether the full-size repeated workload ran.
|
|
42
|
-
|
|
43
|
-
device must retain that qualification.
|
|
42
|
+
Measurements apply to the documented test machine.
|
|
44
43
|
|
|
45
44
|
For a short harness check:
|
|
46
45
|
|
|
@@ -234,8 +233,7 @@ queries per mode measured p50/p95 of 62/67 ms (image), 117/159 ms (video) and
|
|
|
234
233
|
of that retained fixture took 960 ms for open plus summary, with warm p50/p95
|
|
235
234
|
of 58/62 ms (image), 115/148 ms (video) and 322/359 ms (hybrid) and a 2.32 GiB
|
|
236
235
|
peak. Both runs passed every harness gate. The first image query after reopen
|
|
237
|
-
took 3.1 seconds including verified snapshot loading
|
|
238
|
-
device measurement remains outstanding.
|
|
236
|
+
took 3.1 seconds including verified snapshot loading.
|
|
239
237
|
|
|
240
238
|
## DoltLite 0.50.6 candidate
|
|
241
239
|
|
|
@@ -256,5 +254,5 @@ Fresh indexing and preparation take 319.9 seconds in 4,000 batches of at most
|
|
|
256
254
|
coverage appears after 47 ms. The first query after reopen includes snapshot
|
|
257
255
|
loading: 3.03 seconds in the build process and 3.12 seconds in the fresh process;
|
|
258
256
|
these are separate from warm query latency. The reused fixture inherits indexing
|
|
259
|
-
metrics and does not measure another build. The
|
|
260
|
-
|
|
257
|
+
metrics and does not measure another build. The synthetic vectors do not replace
|
|
258
|
+
the frozen quality corpus.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compatibility": {
|
|
3
3
|
"contractVersion": 1,
|
|
4
|
-
"schemaVersion":
|
|
4
|
+
"schemaVersion": 25,
|
|
5
5
|
"minimumReaderContractVersion": 1,
|
|
6
6
|
"legacySchemaVersions": [
|
|
7
7
|
4,
|
|
@@ -1481,7 +1481,7 @@
|
|
|
1481
1481
|
"migrationDryRun": {
|
|
1482
1482
|
"contractVersion": 1,
|
|
1483
1483
|
"sourceSchemaVersion": 4,
|
|
1484
|
-
"destinationSchemaVersion":
|
|
1484
|
+
"destinationSchemaVersion": 25,
|
|
1485
1485
|
"sourceBookId": "0197-book-v4",
|
|
1486
1486
|
"sourceHeadRevision": "dolt-v4-head",
|
|
1487
1487
|
"artifactCount": 8,
|
|
@@ -1503,7 +1503,7 @@
|
|
|
1503
1503
|
"migrationResult": {
|
|
1504
1504
|
"contractVersion": 1,
|
|
1505
1505
|
"sourceSchemaVersion": 4,
|
|
1506
|
-
"destinationSchemaVersion":
|
|
1506
|
+
"destinationSchemaVersion": 25,
|
|
1507
1507
|
"sourceBookId": "0197-book-v4",
|
|
1508
1508
|
"sourceHeadRevision": "dolt-v4-head",
|
|
1509
1509
|
"artifactCount": 8,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "videobook-engine",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.0",
|
|
4
4
|
"description": "Dolt-native local-first storage engine for Videobook",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
"import": "./dist/edit-policy.js",
|
|
21
21
|
"types": "./dist/edit-policy.d.ts"
|
|
22
22
|
},
|
|
23
|
+
"./tag-values": {
|
|
24
|
+
"import": "./dist/tag-values.js",
|
|
25
|
+
"types": "./dist/tag-values.d.ts"
|
|
26
|
+
},
|
|
23
27
|
"./notebook-grid": {
|
|
24
28
|
"import": "./dist/notebook-grid.js",
|
|
25
29
|
"types": "./dist/notebook-grid.d.ts"
|
|
@@ -64,7 +68,7 @@
|
|
|
64
68
|
"node": ">=22"
|
|
65
69
|
},
|
|
66
70
|
"dependencies": {
|
|
67
|
-
"@dolthub/doltlite": "0.50.6",
|
|
71
|
+
"@dolthub/doltlite": "https://github.com/justintanner/doltlite/releases/download/videobook-node-v0.50.6-videobook.1/dolthub-doltlite-0.50.6-videobook.1.tgz",
|
|
68
72
|
"node-gyp": "12.1.0",
|
|
69
73
|
"sharp": "0.35.4",
|
|
70
74
|
"usearch": "2.26.0",
|
|
@@ -88,7 +92,7 @@
|
|
|
88
92
|
"onnxruntime-node": "$onnxruntime-node"
|
|
89
93
|
},
|
|
90
94
|
"allowScripts": {
|
|
91
|
-
"
|
|
95
|
+
"https://github.com/justintanner/doltlite/releases/download/videobook-node-v0.50.6-videobook.1/dolthub-doltlite-0.50.6-videobook.1.tgz": true,
|
|
92
96
|
"esbuild@0.28.1": true,
|
|
93
97
|
"fsevents@2.3.3": true,
|
|
94
98
|
"protobufjs@7.6.5": true,
|