jinaga-server 3.5.2 → 3.5.3

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 (57) hide show
  1. package/dist/authorization/authorization-keystore.js +2 -2
  2. package/dist/authorization/authorization-keystore.js.map +1 -1
  3. package/dist/http/csv-metadata.d.ts +24 -0
  4. package/dist/http/csv-metadata.js +3 -0
  5. package/dist/http/csv-metadata.js.map +1 -0
  6. package/dist/http/csv-validator.d.ts +23 -0
  7. package/dist/http/csv-validator.js +83 -0
  8. package/dist/http/csv-validator.js.map +1 -0
  9. package/dist/http/output-formatters.d.ts +28 -0
  10. package/dist/http/output-formatters.js +197 -0
  11. package/dist/http/output-formatters.js.map +1 -0
  12. package/dist/http/result-stream.d.ts +35 -0
  13. package/dist/http/result-stream.js +78 -0
  14. package/dist/http/result-stream.js.map +1 -0
  15. package/dist/http/router.d.ts +7 -1
  16. package/dist/http/router.js +93 -46
  17. package/dist/http/router.js.map +1 -1
  18. package/dist/postgres/postgres-store.js +7 -5
  19. package/dist/postgres/postgres-store.js.map +1 -1
  20. package/dist/postgres/purge-sql.js +15 -2
  21. package/dist/postgres/purge-sql.js.map +1 -1
  22. package/dist/postgres/specification-result-sql.d.ts +2 -0
  23. package/dist/postgres/specification-result-sql.js +49 -5
  24. package/dist/postgres/specification-result-sql.js.map +1 -1
  25. package/dist/postgres/specification-sql.js +28 -6
  26. package/dist/postgres/specification-sql.js.map +1 -1
  27. package/docs/design/feeds-persistent-proxy-plan.md +294 -0
  28. package/integration-test/integration-test/jinaga-test/package-lock.json +6 -0
  29. package/integration-test/jinaga-test/Dockerfile +1 -6
  30. package/integration-test/jinaga-test/http-test-helpers.js +77 -0
  31. package/integration-test/jinaga-test/jinaga.test.js +9 -9
  32. package/integration-test/jinaga-test/package-lock.json +329 -32
  33. package/integration-test/jinaga-test/package.json +5 -1
  34. package/integration-test/jinaga-test/read-csv.test.js +330 -0
  35. package/integration-test/jinaga-test/read-endpoint.test.js +442 -0
  36. package/integration-test/jinaga-test/read-performance.test.js +221 -0
  37. package/integration-test/jinaga-test/read-streaming.test.js +199 -0
  38. package/integration-test/jinaga-test/specification-conditions.test.js +147 -0
  39. package/integration-test/jinaga-test/test-helpers.js +12 -0
  40. package/integration-test/jinaga-test/time-projection.test.js +235 -0
  41. package/package.json +3 -2
  42. package/src/authorization/authorization-keystore.ts +4 -4
  43. package/src/http/csv-metadata.ts +34 -0
  44. package/src/http/csv-validator.ts +90 -0
  45. package/src/http/output-formatters.ts +196 -0
  46. package/src/http/result-stream.ts +69 -0
  47. package/src/http/router.ts +112 -33
  48. package/src/postgres/postgres-store.ts +13 -6
  49. package/src/postgres/purge-sql.ts +18 -2
  50. package/src/postgres/specification-result-sql.ts +70 -8
  51. package/src/postgres/specification-sql.ts +36 -8
  52. package/test/http/csv-validatorSpec.ts +205 -0
  53. package/test/http/result-streamSpec.ts +151 -0
  54. package/test/postgres/postgresReadSpec.ts +192 -14
  55. package/test/postgres/postgresSpecificationSpec.ts +3 -3
  56. package/test/postgres/specificationConditionsSpec.ts +268 -0
  57. package/documentation/streaming-feeds-full-results-solution.md +0 -230
@@ -6,7 +6,7 @@ const query_description_1 = require("./query-description");
6
6
  function generateResultSqlQuery(queryDescription, schema) {
7
7
  const allLabels = [...queryDescription.inputs, ...queryDescription.outputs];
8
8
  const columns = allLabels
9
- .map(label => `f${label.factIndex}.hash as hash${label.factIndex}, f${label.factIndex}.fact_id as id${label.factIndex}, f${label.factIndex}.data as data${label.factIndex}`)
9
+ .map(label => `f${label.factIndex}.hash as hash${label.factIndex}, f${label.factIndex}.fact_id as id${label.factIndex}, f${label.factIndex}.data as data${label.factIndex}, f${label.factIndex}.date_learned as timestamp${label.factIndex}`)
10
10
  .join(", ");
11
11
  const firstEdge = queryDescription.edges[0];
12
12
  const predecessorFact = queryDescription.inputs.find(i => i.factIndex === firstEdge.predecessorFactIndex);
@@ -14,6 +14,8 @@ function generateResultSqlQuery(queryDescription, schema) {
14
14
  const firstFactIndex = predecessorFact ? predecessorFact.factIndex : successorFact.factIndex;
15
15
  const writtenFactIndexes = new Set().add(firstFactIndex);
16
16
  const joins = generateJoins(queryDescription.edges, writtenFactIndexes, schema);
17
+ // Add all input fact indexes to writtenFactIndexes since they're available in the FROM clause
18
+ queryDescription.inputs.forEach(input => writtenFactIndexes.add(input.factIndex));
17
19
  const inputWhereClauses = queryDescription.inputs
18
20
  .map(input => `f${input.factIndex}.fact_type_id = $${input.factTypeParameter} AND f${input.factIndex}.hash = $${input.factHashParameter}`)
19
21
  .join(" AND ");
@@ -262,6 +264,9 @@ class ResultComposer {
262
264
  else if (this.resultProjection.type === "fact") {
263
265
  return this.factValue(this.resultProjection, row, factRecords);
264
266
  }
267
+ else if (this.resultProjection.type === "time") {
268
+ return this.timeValue(this.resultProjection, row);
269
+ }
265
270
  else {
266
271
  const _exhaustiveCheck = this.resultProjection;
267
272
  throw new Error(`Unknown projection type ${this.resultProjection.type}`);
@@ -289,6 +294,9 @@ class ResultComposer {
289
294
  // This should have already been taken care of
290
295
  return null;
291
296
  }
297
+ else if (projection.type === "time") {
298
+ return this.timeValue(projection, row);
299
+ }
292
300
  else {
293
301
  const _exhaustiveCheck = projection;
294
302
  throw new Error(`Unknown projection type ${projection.type}`);
@@ -311,6 +319,10 @@ class ResultComposer {
311
319
  const [fact] = (0, jinaga_1.hydrateFromTree)([factReference], factRecords);
312
320
  return fact;
313
321
  }
322
+ timeValue(projection, row) {
323
+ const label = this.getLabel(projection.label);
324
+ return row[label.index].timestamp;
325
+ }
314
326
  getLabel(name) {
315
327
  const label = this.sqlQuery.labels.find(label => label.name === name);
316
328
  if (!label) {
@@ -326,11 +338,43 @@ class ResultDescriptionBuilder {
326
338
  }
327
339
  buildDescription(start, specification) {
328
340
  (0, jinaga_1.validateGiven)(start, specification);
329
- return this.createResultDescription(query_description_1.QueryDescription.unsatisfiable, specification.given, start, specification.matches, specification.projection, {}, []);
341
+ const labels = specification.given.map(g => g.label);
342
+ let queryDescription = query_description_1.QueryDescription.unsatisfiable;
343
+ let knownFacts = {};
344
+ // First process main matches to build the result description
345
+ const resultDescription = this.createResultDescription(queryDescription, specification.given, start, specification.matches, specification.projection, knownFacts, []);
346
+ // Then process conditions from given if we have a satisfiable query
347
+ if (resultDescription.queryDescription.isSatisfiable()) {
348
+ queryDescription = resultDescription.queryDescription;
349
+ knownFacts = resultDescription.queryDescription.outputs.reduce((acc, output) => (Object.assign(Object.assign({}, acc), { [output.label]: { factIndex: output.factIndex, type: output.type } })), {});
350
+ // Also include inputs in knownFacts
351
+ for (const input of resultDescription.queryDescription.inputs) {
352
+ if (!knownFacts[input.label]) {
353
+ knownFacts[input.label] = { factIndex: input.factIndex, type: input.type };
354
+ }
355
+ }
356
+ // Process conditions from each given
357
+ for (const givenItem of specification.given) {
358
+ if (givenItem.conditions && givenItem.conditions.length > 0) {
359
+ for (const condition of givenItem.conditions) {
360
+ const { query: queryDescriptionWithExistential, path: conditionalPath } = queryDescription.withExistentialCondition(condition.exists, []);
361
+ const { queryDescription: queryDescriptionConditional } = this.queryDescriptionBuilder.addEdges(queryDescriptionWithExistential, labels, start, knownFacts, conditionalPath, condition.matches);
362
+ if (queryDescriptionConditional.isSatisfiable()) {
363
+ queryDescription = queryDescriptionConditional;
364
+ }
365
+ }
366
+ }
367
+ }
368
+ // Return updated result description with conditions applied
369
+ return Object.assign(Object.assign({}, resultDescription), { queryDescription });
370
+ }
371
+ return resultDescription;
330
372
  }
331
373
  createResultDescription(queryDescription, given, start, matches, projection, knownFacts, path) {
332
- const givenTuple = given.reduce((acc, label, index) => (Object.assign(Object.assign({}, acc), { [label.name]: start[index] })), {});
333
- ({ queryDescription, knownFacts } = this.queryDescriptionBuilder.addEdges(queryDescription, given, start, knownFacts, path, matches));
374
+ const givenTuple = given.reduce((acc, givenItem, index) => (Object.assign(Object.assign({}, acc), { [givenItem.label.name]: start[index] })), {});
375
+ // Process main matches
376
+ const labels = given.map(g => g.label);
377
+ ({ queryDescription, knownFacts } = this.queryDescriptionBuilder.addEdges(queryDescription, labels, start, knownFacts, path, matches));
334
378
  if (!queryDescription.isSatisfiable()) {
335
379
  // Abort the branch if the query is not satisfiable
336
380
  return {
@@ -348,7 +392,7 @@ class ResultDescriptionBuilder {
348
392
  const specificationProjections = projection.components
349
393
  .filter(projection => projection.type === "specification");
350
394
  const singularProjections = projection.components
351
- .filter(projection => projection.type === "field" || projection.type === "hash" || projection.type === "fact");
395
+ .filter(projection => projection.type === "field" || projection.type === "hash" || projection.type === "fact" || projection.type === "time");
352
396
  for (const child of specificationProjections) {
353
397
  const childResultDescription = this.createResultDescription(queryDescription, given, start, child.matches, child.projection, knownFacts, []);
354
398
  childResultDescriptions.push(Object.assign({ name: child.name }, childResultDescription));
@@ -1 +1 @@
1
- {"version":3,"file":"specification-result-sql.js","sourceRoot":"","sources":["../../src/postgres/specification-result-sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specification-result-sql.js","sourceRoot":"","sources":["../../src/postgres/specification-result-sql.ts"],"names":[],"mappings":"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"}
@@ -25,9 +25,13 @@ function generateSqlQuery(queryDescription, schema, bookmark, limit) {
25
25
  .filter(c => c.exists === false))
26
26
  .map(notExistsWhereClause => ` AND NOT EXISTS (${generateNotExistsWhereClause(schema, notExistsWhereClause, writtenFactIndexes)})`)
27
27
  .join("");
28
+ const existsWhereClauses = (queryDescription.existentialConditions
29
+ .filter(c => c.exists === true))
30
+ .map(existsWhereClause => ` AND EXISTS (${generateNotExistsWhereClause(schema, existsWhereClause, writtenFactIndexes)})`)
31
+ .join("");
28
32
  const bookmarkParameter = queryDescription.parameters.length + 1;
29
33
  const limitParameter = bookmarkParameter + 1;
30
- const sql = `SELECT ${hashes}, sort(array[${factIds}], 'desc') as bookmark FROM ${schema}.fact f${firstFactIndex}${joins.join("")} WHERE ${inputWhereClauses}${notExistsWhereClauses} AND sort(array[${factIds}], 'desc') > $${bookmarkParameter} ORDER BY bookmark ASC LIMIT $${limitParameter}`;
34
+ const sql = `SELECT ${hashes}, sort(array[${factIds}], 'desc') as bookmark FROM ${schema}.fact f${firstFactIndex}${joins.join("")} WHERE ${inputWhereClauses}${notExistsWhereClauses}${existsWhereClauses} AND sort(array[${factIds}], 'desc') > $${bookmarkParameter} ORDER BY bookmark ASC LIMIT $${limitParameter}`;
31
35
  const bookmarkValue = parseBookmark(bookmark);
32
36
  return {
33
37
  sql,
@@ -126,7 +130,7 @@ function parseBookmark(bookmark) {
126
130
  function sqlFromSpecification(start, schema, bookmarks, limit, specification, factTypes, roleMap) {
127
131
  (0, jinaga_1.validateGiven)(start, specification);
128
132
  const labeledStart = start.map((s, index) => ({
129
- name: specification.given[index].name,
133
+ name: specification.given[index].label.name,
130
134
  reference: s
131
135
  })).reduce((map, s) => {
132
136
  map.set(s.name, s.reference);
@@ -139,9 +143,9 @@ function sqlFromSpecification(start, schema, bookmarks, limit, specification, fa
139
143
  bookmark: bookmarks[index]
140
144
  }));
141
145
  const queryDescriptionsAndBookmarks = feedAndBookmark.map(fb => {
142
- const feedStart = fb.feed.given.map(s => labeledStart.get(s.name));
146
+ const feedStart = fb.feed.given.map(s => labeledStart.get(s.label.name));
143
147
  return {
144
- queryDescription: buildQueryDescription(queryDescriptionBuilder, fb.feed, feedStart),
148
+ queryDescription: buildQueryDescription(queryDescriptionBuilder, fb.feed, feedStart, specification.given),
145
149
  bookmark: fb.bookmark
146
150
  };
147
151
  });
@@ -160,8 +164,26 @@ function sqlFromFeed(feed, start, schema, bookmark, limit, factTypes, roleMap) {
160
164
  return sql;
161
165
  }
162
166
  exports.sqlFromFeed = sqlFromFeed;
163
- function buildQueryDescription(queryDescriptionBuilder, specification, start) {
164
- const { queryDescription } = queryDescriptionBuilder.addEdges(query_description_1.QueryDescription.unsatisfiable, specification.given, start, {}, [], specification.matches);
167
+ function buildQueryDescription(queryDescriptionBuilder, specification, start, originalGiven) {
168
+ const labels = specification.given.map(g => g.label);
169
+ let knownFacts = {};
170
+ // Process main matches
171
+ let { queryDescription, knownFacts: updatedKnownFacts } = queryDescriptionBuilder.addEdges(query_description_1.QueryDescription.unsatisfiable, labels, start, knownFacts, [], specification.matches);
172
+ knownFacts = updatedKnownFacts;
173
+ // Process conditions from given (use originalGiven if provided, otherwise use specification.given)
174
+ const givenToProcess = originalGiven || specification.given;
175
+ for (const givenItem of givenToProcess) {
176
+ if (givenItem.conditions && givenItem.conditions.length > 0) {
177
+ for (const condition of givenItem.conditions) {
178
+ const { query: queryDescriptionWithExistential, path: conditionalPath } = queryDescription.withExistentialCondition(condition.exists, []);
179
+ const { queryDescription: queryDescriptionConditional, knownFacts: updatedKnownFacts } = queryDescriptionBuilder.addEdges(queryDescriptionWithExistential, labels, start, knownFacts, conditionalPath, condition.matches);
180
+ if (queryDescriptionConditional.isSatisfiable()) {
181
+ queryDescription = queryDescriptionConditional;
182
+ knownFacts = updatedKnownFacts;
183
+ }
184
+ }
185
+ }
186
+ }
165
187
  return queryDescription;
166
188
  }
167
189
  //# sourceMappingURL=specification-sql.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specification-sql.js","sourceRoot":"","sources":["../../src/postgres/specification-sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specification-sql.js","sourceRoot":"","sources":["../../src/postgres/specification-sql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,294 @@
1
+ # Feeds: Persistent Client Proxy with Waitlist
2
+ Author: @michaellperry
3
+ Status: Draft
4
+ Scope: `/feeds/:hash` streaming path (`Accept: application/x-jinaga-feed-stream`)
5
+
6
+ ## Summary
7
+
8
+ Introduce a per-connection "FeedStreamSession" (client proxy) that:
9
+ - Maintains a waitlist of fact references indicated by inverse observers.
10
+ - Serializes all fetching and streaming through a single "query cycle" loop driven by the current bookmark.
11
+ - Continues initial pagination until exhaustion, then transitions to real-time.
12
+ - Emits an explicit "caught up" signal (SYNC) without changing the response schema (empty `references` array + current `bookmark`).
13
+
14
+ This addresses race conditions between listener callbacks and bookmark mutation, ensures tuple completeness, and guarantees no missed updates when facts arrive between pages.
15
+
16
+ ## Goals
17
+
18
+ - Deliver all historical feed results before push-only mode.
19
+ - Prevent lost updates during the transition to "caught up".
20
+ - Maintain tuple completeness ("projection is the tuple; send all facts in tuple").
21
+ - Preserve response shape and backwards compatibility.
22
+ - Provide predictable lifecycle and resource usage per stream.
23
+
24
+ ## Non-goals
25
+
26
+ - Changing the `/feeds/:hash` response format.
27
+ - Introducing server-sent events or WebSockets (keep current HTTP streaming).
28
+ - Redesigning the authorization/feed query pipeline.
29
+
30
+ ---
31
+
32
+ ## Design
33
+
34
+ ### High-level flow
35
+
36
+ 1. On connection, create a `FeedStreamSession` with:
37
+ - `bookmark` (initial from query param `b` or empty),
38
+ - `waitlist` (Set of fact refs by hash/type),
39
+ - `activeCycle` (boolean),
40
+ - `shuttingDown` (boolean),
41
+ - `stream` (Stream<FeedResponse>).
42
+
43
+ 2. Start inverse observers immediately and push matching fact refs into the waitlist.
44
+ - Observers do not fetch/stream themselves.
45
+ - If no cycle is active, they signal to start (or continue) the cycle.
46
+
47
+ 3. Run the query cycle:
48
+ - While true:
49
+ - Call `authorization.feed(user, feed, start, bookmark)`.
50
+ - If tuples returned:
51
+ - Deduplicate facts across tuples in the page.
52
+ - Stream a frame `{ references, bookmark: results.bookmark }`.
53
+ - Remove any queued facts from the waitlist that are included in streamed tuples.
54
+ - Update `bookmark`.
55
+ - Continue.
56
+ - If no tuples returned:
57
+ - If `waitlist` is empty:
58
+ - Stream a SYNC frame with empty `references` and current `bookmark` (backwards compatible).
59
+ - End the cycle.
60
+ - Else:
61
+ - Facts arrived between last page and now. Continue the loop (run feed again) to collect their full tuples.
62
+
63
+ 4. On stream close, remove all observers and mark `shuttingDown` to prevent new cycles.
64
+
65
+ ### Class responsibilities
66
+
67
+ - FeedStreamSession
68
+ - Owns lifecycle and state for a connection.
69
+ - Public methods:
70
+ - `start()` => sets observers and kicks off initial paginated backfill to exhaustion.
71
+ - `onInverseMatch(factRefs[])` => add to waitlist; `startCycleIfIdle()`.
72
+ - `done()` => unregister observers; cancel cycle on stream close.
73
+ - Private:
74
+ - `runCycle()` => serializes fetch/stream; guarded by `activeCycle`.
75
+ - `streamPage(results)` => compute deduped references and stream with bookmark.
76
+ - `streamSync()` => stream `{ references: [], bookmark }`.
77
+ - `drainWaitlistIfNeeded()` => loop continues until `no tuples && waitlist empty`.
78
+
79
+ - Router integration (src/http/router.ts)
80
+ - Construct `FeedStreamSession` in the `/feeds/:hash` handler.
81
+ - Replace direct "listener => streamFeedResponse" pattern with session waitlist notifications.
82
+
83
+ ### Waitlist semantics
84
+
85
+ - Waitlist keyed by `{hash,type}` ensures no duplicates.
86
+ - Removal happens only when the tuple containing the fact is streamed (preserves tuple completeness).
87
+ - Waitlist is a trigger to keep querying; we do not stream waitlist facts directly.
88
+
89
+ ### SYNC signaling
90
+
91
+ - Preserve response schema:
92
+ - Emit SYNC as a frame with `references: []` and current `bookmark`.
93
+ - Clients that need an explicit signal can treat empty `references` as "caught up".
94
+
95
+ ### Concurrency and races
96
+
97
+ - Single-cycle execution: `activeCycle` flag prevents concurrent runs.
98
+ - Listener callbacks never mutate `bookmark` and never fetch/stream; they only enqueue refs and wake the cycle.
99
+ - Bookmark progresses monotonically within the cycle; no interleaving updates.
100
+
101
+ ### Backpressure and limits
102
+
103
+ - Add conservative limits (configurable):
104
+ - `maxInitialPages` (default 1000)
105
+ - `maxWaitlistSize` (e.g., 50k refs) -> if exceeded, drop connection with 503 and log.
106
+ - Optional small delay every N pages (e.g., 10ms every 10 pages).
107
+ - Consider extending Stream to a "BackpressureStream" in a follow-up to cap buffer length.
108
+
109
+ ### Telemetry
110
+
111
+ - Per-stream diagnostic log context (feed hash, connection id).
112
+ - Metrics:
113
+ - initial pages fetched, total references streamed, cycle count per connection,
114
+ - time to SYNC,
115
+ - waitlist high-water mark,
116
+ - dropped due to limits.
117
+
118
+ ---
119
+
120
+ ## Integration Points
121
+
122
+ - src/http/router.ts
123
+ - `/feeds/:hash` handler (Accept: `application/x-jinaga-feed-stream`).
124
+ - Replace direct `streamFeed` flow by constructing `FeedStreamSession`.
125
+
126
+ - Authorization layer
127
+ - `authorization.feed(userIdentity, feed, start, bookmark)` pagination contract.
128
+
129
+ - Feed definition and inversion
130
+ - `feedCache.getFeed(feedHash)`
131
+ - `invertSpecification(feedDefinition.feed)`
132
+ - `computeTupleSubsetHash` and `computeObjectHash` for filtering listener matches.
133
+
134
+ - FactManager
135
+ - `addSpecificationListener` / `removeSpecificationListener` for inverse triggers.
136
+
137
+ - Stream
138
+ - `Stream<FeedResponse>` feeding and lifecycle (done/close).
139
+
140
+ - Configuration
141
+ - Add server config for page limits, waitlist cap, optional small delays.
142
+
143
+ ---
144
+
145
+ ## Dependencies and Assumptions
146
+
147
+ - Existing bookmark semantics remain stable and monotonic.
148
+ - `authorization.feed` returns `tuples` and `bookmark`, where `tuples.length < pageSize` implies near exhaustion.
149
+ - The test client and any existing consumers tolerate empty `references` frames.
150
+
151
+ ---
152
+
153
+ ## Acceptance Criteria
154
+
155
+ Functional correctness
156
+ - Initial backfill:
157
+ - The server streams all historical pages until the feed is exhausted (no tuples left) before transitioning to real-time.
158
+ - Bookmark advances monotonically across frames.
159
+ - Real-time updates:
160
+ - Facts arriving during initial pagination are not lost; the session continues querying until their tuples are streamed.
161
+ - Facts arriving after SYNC result in subsequent frames with their tuples, preserving order by bookmark.
162
+ - Tuple completeness and deduplication:
163
+ - Each frame's `references` contains the deduplicated set of facts from all tuples in that chunk.
164
+ - Waitlist items are removed only when their containing tuples are streamed.
165
+ - SYNC indication:
166
+ - On catching up (no tuples and empty waitlist), server emits a frame with `references: []` and current `bookmark`.
167
+ - Lifecycle:
168
+ - On connection close, inverse listeners are unregistered and the cycle stops.
169
+ - No concurrent cycles run per connection.
170
+
171
+ Performance and robustness
172
+ - Backfill eventually completes for large feeds within configured safety limits (e.g., 1000 pages).
173
+ - Waitlist does not grow unbounded; if exceeding configured cap, the server closes the stream gracefully with diagnostics.
174
+ - Under concurrent connections, memory and CPU remain within acceptable bounds; no deadlocks or starvation.
175
+
176
+ Security and reliability
177
+ - No race conditions update the bookmark concurrently.
178
+ - No unbounded buffers in the stream path.
179
+ - Listeners are always removed when streams end.
180
+
181
+ Observability
182
+ - Logs/metrics expose: total frames, initial pages, time to SYNC, cycle restarts due to waitlist, waitlist size peaks.
183
+
184
+ ---
185
+
186
+ ## Test Plan
187
+
188
+ ### Unit tests (Jest)
189
+
190
+ FeedStreamSession
191
+ - "Backfill to exhaustion"
192
+ - Given multiple pages returned by `authorization.feed`, verify frames streamed for each page, bookmark progression, and final SYNC frame (empty `references`).
193
+ - "Waitlist triggers continuation"
194
+ - With a final page empty, but waitlist non-empty (push facts into waitlist between pages), verify the cycle continues and fetches at least one more page, then SYNCs when waitlist clears.
195
+ - "No concurrent cycles"
196
+ - Rapidly enqueue from listener multiple times; assert only one `authorization.feed` loop runs at a time (use mocks and counters).
197
+ - "Deduplication"
198
+ - Given overlapping facts across tuples in a page, confirm only unique `{hash,type}` appear in `references`.
199
+ - "Tuple completeness"
200
+ - Verify waitlist facts are only removed when their tuples appear in a streamed page.
201
+ - "SYNC emission"
202
+ - Assert SYNC frame emitted (empty `references`) exactly when both: last query returned no tuples and waitlist is empty.
203
+ - "Bookmark monotonicity"
204
+ - Enforce that sent bookmarks are strictly progressing or stable only for SYNC frames.
205
+ - "Listener filtering"
206
+ - Only enqueue facts from inverse results that match `givenSubset` (use `computeTupleSubsetHash` matching).
207
+ - "Lifecycle cleanup"
208
+ - On `stream.done()`, verify removal of all listeners and no further cycle runs.
209
+ - "Limits"
210
+ - If `waitlist` exceeds cap, session terminates gracefully (mock log) and removes listeners.
211
+
212
+ Router integration
213
+ - "Session wiring"
214
+ - `/feeds/:hash` with stream accept header constructs session, calls `start()`, and proxies `stream.feed` to response writer.
215
+
216
+ ### Integration tests (Jest + supertest or Node http)
217
+
218
+ - "Complete historical stream"
219
+ - Seed DB with > pageSize tuples (e.g., 350) matching the feed. Connect and assert received multiple frames covering all facts, then SYNC.
220
+ - "Race during backfill"
221
+ - Start stream, insert facts while initial pagination runs. Assert no missed updates; frames include these facts by the time SYNC arrives.
222
+ - "Post-SYNC updates"
223
+ - After SYNC, insert new facts. Assert subsequent frames deliver them with updated bookmark.
224
+ - "Multiple concurrent clients"
225
+ - Spin up N clients (e.g., 20). Assert similar message counts and time-to-sync distribution; no client stalls. Reuse `test-concurrent-streams.js` patterns (or convert to automated test).
226
+ - "Disconnect handling"
227
+ - Client disconnect mid-backfill. Assert listeners removed and no residual cycle iterations.
228
+ - "Waitlist stress"
229
+ - Burst insert causing many inverse triggers quickly. Validate waitlist remains under cap or stream terminates with diagnostics.
230
+ - "Timeout/long feeds"
231
+ - Emulate large dataset to ensure the process respects configured page limits and still reaches SYNC or terminates cleanly.
232
+
233
+ Telemetry validation
234
+ - Expose counters to a test sink; assert metrics present (initial pages, cycles, SYNC count).
235
+
236
+ ---
237
+
238
+ ## Rollout
239
+
240
+ - Feature flag: `feeds.fullInitialPagination` (default enabled if prior behavior already documented; if not, roll out gradually).
241
+ - Config options:
242
+ - `feeds.maxInitialPages` (default 1000)
243
+ - `feeds.waitlistCap` (default 50,000)
244
+ - `feeds.pageDelayEvery` (default 10 pages => 10ms delay)
245
+ - Logging: scoped per-connection id and feed hash, with sampling if needed.
246
+
247
+ ---
248
+
249
+ ## Implementation Steps
250
+
251
+ 1. Create `FeedStreamSession` in `src/feeds/FeedStreamSession.ts`.
252
+ - Constructor: dependencies (`authorization`, `factManager`, `feedDefinition`, `userIdentity`, `start`, `stream`, `initialBookmark`, config).
253
+ - Methods: `start()`, `runCycle()`, `onInverseMatch()`, `streamPage()`, `streamSync()`, `dispose()`.
254
+
255
+ 2. Update `/feeds/:hash` handler in `src/http/router.ts`.
256
+ - Where `streamFeed` currently instantiates `Stream<FeedResponse>` and registers listeners, replace with session creation and `start()`.
257
+ - On `stream.done()`, call `session.dispose()`.
258
+
259
+ 3. Move/Reuse helper logic:
260
+ - Deduping facts per page.
261
+ - Inverse computation and given subset filtering.
262
+ - Bookmark management.
263
+
264
+ 4. Add configuration and defaults.
265
+
266
+ 5. Add tests:
267
+ - Unit tests for session (mocks for `authorization`, `factManager`, `stream`).
268
+ - Integration tests using real HTTP and seeded DB.
269
+ - Optionally adapt `test-concurrent-streams.js` into a CI test harness or keep as manual tool.
270
+
271
+ 6. Add telemetry and structured logs.
272
+
273
+ 7. Documentation:
274
+ - Update `documentation/streaming-feeds-full-results-solution.md` to reference the session model and SYNC semantics.
275
+ - Add this design document.
276
+
277
+ ---
278
+
279
+ ## Risks and Mitigations
280
+
281
+ - Risk: Unbounded memory due to large waitlists or slow clients.
282
+ - Mitigate: Waitlist caps, future backpressure stream implementation, connection duration limits.
283
+ - Risk: Deadlock or missed wake-ups.
284
+ - Mitigate: Simple state machine (`activeCycle`, `needsCycle`) and thorough unit tests for concurrency.
285
+ - Risk: Client incompatibility with empty `references` frames.
286
+ - Mitigate: Already valid JSON per existing schema; integration tests against existing client.
287
+
288
+ ---
289
+
290
+ ## Open Questions
291
+
292
+ - Should SYNC frames be optional behind a config gate?
293
+ - Do we need a small debounce before emitting SYNC to reduce "thrash" under constant writes?
294
+ - Do we need connection-level backpressure limits immediately, or as a follow-up (as per security audit notes)?
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "jinaga-test",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {}
6
+ }
@@ -7,11 +7,6 @@ COPY package-lock.json .
7
7
  RUN npm ci
8
8
 
9
9
  COPY jinaga-server/ jinaga-server/
10
- COPY jinaga.test.js .
11
- COPY specification.test.js .
12
- COPY purge.test.js .
13
- COPY postgres.test.js .
14
- COPY postgres-duplicates.test.js .
15
- COPY orderModel.js .
10
+ COPY *.js .
16
11
 
17
12
  ENTRYPOINT [ "npm", "test" ]