@owlmeans/planning-postgres 0.1.18-rc.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.
Files changed (93) hide show
  1. package/README.md +88 -0
  2. package/agent-meta/manifest.json +16 -0
  3. package/agent-meta/skills/planning-postgres/SKILL.md +292 -0
  4. package/build/consts.d.ts +45 -0
  5. package/build/consts.d.ts.map +1 -0
  6. package/build/consts.js +45 -0
  7. package/build/consts.js.map +1 -0
  8. package/build/errors.d.ts +10 -0
  9. package/build/errors.d.ts.map +1 -0
  10. package/build/errors.js +13 -0
  11. package/build/errors.js.map +1 -0
  12. package/build/index.d.ts +9 -0
  13. package/build/index.d.ts.map +1 -0
  14. package/build/index.js +8 -0
  15. package/build/index.js.map +1 -0
  16. package/build/resource.d.ts +32 -0
  17. package/build/resource.d.ts.map +1 -0
  18. package/build/resource.js +94 -0
  19. package/build/resource.js.map +1 -0
  20. package/build/schemas.d.ts +20 -0
  21. package/build/schemas.d.ts.map +1 -0
  22. package/build/schemas.js +64 -0
  23. package/build/schemas.js.map +1 -0
  24. package/build/service.d.ts +16 -0
  25. package/build/service.d.ts.map +1 -0
  26. package/build/service.js +34 -0
  27. package/build/service.js.map +1 -0
  28. package/build/sql.d.ts +61 -0
  29. package/build/sql.d.ts.map +1 -0
  30. package/build/sql.js +90 -0
  31. package/build/sql.js.map +1 -0
  32. package/build/store/bus.d.ts +52 -0
  33. package/build/store/bus.d.ts.map +1 -0
  34. package/build/store/bus.js +167 -0
  35. package/build/store/bus.js.map +1 -0
  36. package/build/store/cards.d.ts +35 -0
  37. package/build/store/cards.d.ts.map +1 -0
  38. package/build/store/cards.js +112 -0
  39. package/build/store/cards.js.map +1 -0
  40. package/build/store/fold.d.ts +56 -0
  41. package/build/store/fold.d.ts.map +1 -0
  42. package/build/store/fold.js +453 -0
  43. package/build/store/fold.js.map +1 -0
  44. package/build/store/index.d.ts +22 -0
  45. package/build/store/index.d.ts.map +1 -0
  46. package/build/store/index.js +206 -0
  47. package/build/store/index.js.map +1 -0
  48. package/build/store/links.d.ts +18 -0
  49. package/build/store/links.d.ts.map +1 -0
  50. package/build/store/links.js +54 -0
  51. package/build/store/links.js.map +1 -0
  52. package/build/store/schemas.d.ts +32 -0
  53. package/build/store/schemas.d.ts.map +1 -0
  54. package/build/store/schemas.js +143 -0
  55. package/build/store/schemas.js.map +1 -0
  56. package/build/store/specs.d.ts +10 -0
  57. package/build/store/specs.d.ts.map +1 -0
  58. package/build/store/specs.js +47 -0
  59. package/build/store/specs.js.map +1 -0
  60. package/build/store/transitions.d.ts +44 -0
  61. package/build/store/transitions.d.ts.map +1 -0
  62. package/build/store/transitions.js +164 -0
  63. package/build/store/transitions.js.map +1 -0
  64. package/build/types.d.ts +72 -0
  65. package/build/types.d.ts.map +1 -0
  66. package/build/types.js +2 -0
  67. package/build/types.js.map +1 -0
  68. package/package.json +56 -0
  69. package/src/consts.ts +54 -0
  70. package/src/errors.ts +15 -0
  71. package/src/index.ts +9 -0
  72. package/src/resource.ts +133 -0
  73. package/src/schemas.ts +84 -0
  74. package/src/service.ts +45 -0
  75. package/src/sql.ts +135 -0
  76. package/src/store/bus.ts +217 -0
  77. package/src/store/cards.ts +153 -0
  78. package/src/store/fold.ts +560 -0
  79. package/src/store/index.ts +237 -0
  80. package/src/store/links.ts +77 -0
  81. package/src/store/schemas.ts +174 -0
  82. package/src/store/specs.ts +72 -0
  83. package/src/store/transitions.ts +221 -0
  84. package/src/types.ts +73 -0
  85. package/tests/bus.spec.ts +142 -0
  86. package/tests/conformance.spec.ts +37 -0
  87. package/tests/context.ts +143 -0
  88. package/tests/fold.spec.ts +213 -0
  89. package/tests/schema.spec.ts +89 -0
  90. package/tests/sql.spec.ts +50 -0
  91. package/tests/sync.spec.ts +61 -0
  92. package/tests/tsconfig.json +17 -0
  93. package/tsconfig.json +11 -0
@@ -0,0 +1,453 @@
1
+ import { CommitState, isProject, PlanningUnsupported, TransitionAction, } from '@owlmeans/planning';
2
+ import { advisoryKey } from '@owlmeans/postgres-resource';
3
+ import { failPending, foldPending } from '@owlmeans/server-planning/store';
4
+ import { DEFAULT_RECOVER_LIMIT, LOST_ALLOCATION, MAX_FOLD_PASSES, MAX_FOLD_ROUNDS, PLANNING_POSTGRES_STORE, } from '../consts.js';
5
+ import { clientRunner, col, insertOf, LOCK_NOT_AVAILABLE, pgFault } from '../sql.js';
6
+ import { dropCard, readCard, readCardRow, writeCard } from './cards.js';
7
+ import { dropLinks, listLinks, putLink } from './links.js';
8
+ import { bumpRevision, purgeSchemaLayers } from './schemas.js';
9
+ import { commitTransition, listTransitions, readTransition, readTransitionByKey } from './transitions.js';
10
+ const EMPTY = Object.freeze({ card: null, folded: 0, failed: 0, followUp: false });
11
+ const safely = async (label, run) => {
12
+ try {
13
+ await run();
14
+ }
15
+ catch (error) {
16
+ console.error(`planning-postgres: ${label} failed:`, error);
17
+ }
18
+ };
19
+ /** A transaction a statement failed in — rolled back, never committed. */
20
+ class Poisoned extends Error {
21
+ }
22
+ const poisoned = (lock, cause) => {
23
+ const failure = new Poisoned(`planning-postgres: fold of ${lock} aborted by a failed statement`);
24
+ failure.cause = cause;
25
+ return failure;
26
+ };
27
+ const lockTimedOut = (error) => pgFault(error).code === LOCK_NOT_AVAILABLE;
28
+ const strip = (event) => {
29
+ const { record: _record, ...bare } = event;
30
+ return bare;
31
+ };
32
+ /**
33
+ * The inline fold of a Postgres planning store.
34
+ *
35
+ * Every fold of a card is ONE transaction under `pg_advisory_xact_lock(planning:<card table>:<card>)`,
36
+ * with `SET LOCAL lock_timeout`. Inside it: the prelude, then `foldPending` over a view of the ports
37
+ * bound to that transaction (each transition's writes in a savepoint), then a NOTIFY per settled
38
+ * event. Events are delivered to the commit hub and the `after` hooks only once it COMMITS — never
39
+ * inside the transaction or the lock, so a hook may write to the card it saw commit.
40
+ *
41
+ * A transaction a statement failed in is poisoned and never committed. The fold is retried once;
42
+ * failing again, the card's pending transitions are failed in a fresh transaction (`failPending`)
43
+ * so no waiter is left to its timeout. A lock that could not be taken means another process is
44
+ * folding the card: nothing is failed, and a heal follows.
45
+ */
46
+ export const makeFoldEngine = (deps) => {
47
+ const { limits } = deps;
48
+ const chains = new Map();
49
+ const healing = new Set();
50
+ /** One transaction of this process per card at a time — the advisory lock serializes processes. */
51
+ const serial = (card, run) => {
52
+ const previous = chains.get(card) ?? Promise.resolve();
53
+ const next = previous.catch(() => undefined).then(run);
54
+ chains.set(card, next);
55
+ const release = () => {
56
+ if (chains.get(card) === next) {
57
+ chains.delete(card);
58
+ }
59
+ };
60
+ void next.then(release, release);
61
+ return next;
62
+ };
63
+ const transaction = async (lock, mode, run) => {
64
+ const tables = await deps.tables();
65
+ const client = await (await deps.pool()).connect();
66
+ let poison;
67
+ let savepoints = 0;
68
+ const runner = clientRunner(client, error => { poison ??= error; });
69
+ const ctx = {
70
+ runner,
71
+ tables,
72
+ events: [],
73
+ schemas: new Set(),
74
+ savepoint: async (unit) => {
75
+ const name = `planning_unit_${++savepoints}`;
76
+ const before = poison;
77
+ await runner.query(`SAVEPOINT ${name}`);
78
+ try {
79
+ const value = await unit();
80
+ await runner.query(`RELEASE SAVEPOINT ${name}`);
81
+ return value;
82
+ }
83
+ catch (error) {
84
+ try {
85
+ await client.query(`ROLLBACK TO SAVEPOINT ${name}`);
86
+ await client.query(`RELEASE SAVEPOINT ${name}`);
87
+ // Rolled back to before the unit: whatever it broke is undone, the transaction is usable.
88
+ poison = before;
89
+ }
90
+ catch {
91
+ // The rollback itself failed — the transaction stays poisoned.
92
+ }
93
+ throw error;
94
+ }
95
+ },
96
+ };
97
+ try {
98
+ await client.query('BEGIN');
99
+ await client.query(`SET LOCAL lock_timeout = '${Math.max(0, Math.floor(limits.lockTimeoutMs))}ms'`);
100
+ const [first, second] = advisoryKey(`planning:${tables.card.qualified}:${lock}`);
101
+ if (mode === 'try') {
102
+ const taken = await client.query('SELECT pg_try_advisory_xact_lock($1, $2) AS ok', [first, second]);
103
+ if (taken.rows[0]?.ok !== true) {
104
+ await client.query('ROLLBACK');
105
+ return { skipped: true };
106
+ }
107
+ }
108
+ else {
109
+ await client.query('SELECT pg_advisory_xact_lock($1, $2)', [first, second]);
110
+ }
111
+ const result = await run(ctx);
112
+ if (poison != null) {
113
+ throw poisoned(lock, poison);
114
+ }
115
+ await client.query('COMMIT');
116
+ return { skipped: false, result, ctx };
117
+ }
118
+ catch (error) {
119
+ await client.query('ROLLBACK').catch(() => undefined);
120
+ // The statement that broke the transaction is the cause — not the "transaction is aborted"
121
+ // every statement after it answers.
122
+ throw poison != null && !(error instanceof Poisoned) ? poisoned(lock, poison) : error;
123
+ }
124
+ finally {
125
+ client.release();
126
+ }
127
+ };
128
+ // ─── The transaction-bound view foldPending and failPending run over ──────────────────────────
129
+ const refuse = (what) => async () => { throw new PlanningUnsupported(`fold-view:${what}`); };
130
+ const viewOf = (ctx) => ({
131
+ alias: PLANNING_POSTGRES_STORE,
132
+ transitions: {
133
+ append: refuse('append'),
134
+ get: async (id) => await readTransition(ctx, id),
135
+ byKey: async (entityId, key) => await readTransitionByKey(ctx, entityId, key),
136
+ list: async (where, opts) => await listTransitions(ctx, where, opts?.size ?? 0),
137
+ nextSeq: refuse('nextSeq'),
138
+ head: refuse('head'),
139
+ commit: async (id, commit) => { await commitTransition(ctx, id, commit); },
140
+ purge: refuse('purge'),
141
+ },
142
+ cards: {
143
+ get: async (id, entityId) => await readCard(ctx, id, entityId),
144
+ list: refuse('list'),
145
+ count: refuse('count'),
146
+ summary: refuse('summary'),
147
+ put: async (card) => { await writeCard(ctx, card); },
148
+ drop: async (id, entityId) => { await dropCard(ctx, id, entityId); },
149
+ project: refuse('project'),
150
+ purge: async (project, entityId) => await purgeInside(ctx, project, entityId),
151
+ },
152
+ links: {
153
+ list: async (where) => await listLinks(ctx, where),
154
+ put: async (link) => await putLink(ctx, link, deps.ids),
155
+ drop: async (where) => await dropLinks(ctx, where),
156
+ },
157
+ });
158
+ // ─── Purge ─────────────────────────────────────────────────────────────────────────────────────
159
+ /**
160
+ * Everything under a project, in the open transaction: the recursive walk over `parents` finds
161
+ * every doomed card (nested projects too); then links, transitions, the doomed projects' schema
162
+ * layers and the cards themselves go — in that order. The project's own `delete` transitions stay
163
+ * as its tombstone, so a waiter still reads the delete committed.
164
+ */
165
+ const purgeInside = async (ctx, project, entityId) => {
166
+ const { card: cards, transition: log, link: links } = ctx.tables;
167
+ const parents = cards.byProperty.parents;
168
+ const doomed = (await ctx.runner.query(`WITH RECURSIVE doomed(id) AS (`
169
+ + ` SELECT $1::text`
170
+ + ` UNION SELECT child.${col(cards, 'id')}::text FROM ${cards.qualified} AS child JOIN doomed`
171
+ + ` ON child.${col(cards, 'parents')} @> ARRAY[doomed.id]::${parents.sqlType}`
172
+ + ` WHERE child.${col(cards, 'entityId')} = $2`
173
+ + `) SELECT id FROM doomed`, [project, entityId])).map(row => row.id);
174
+ let count = 0;
175
+ count += (await ctx.runner.query(`DELETE FROM ${links.qualified} WHERE ${col(links, 'entityId')} = $1 AND (${col(links, 'from')} = ANY($2)`
176
+ + ` OR ${col(links, 'to')} = ANY($2) OR ${col(links, 'project')} = ANY($2)) RETURNING ${col(links, 'id')}`, [entityId, doomed])).length;
177
+ count += (await ctx.runner.query(`DELETE FROM ${log.qualified} WHERE ${col(log, 'entityId')} = $1 AND (${col(log, 'card')} = ANY($2) OR ${col(log, 'project')} = ANY($2))`
178
+ + ` AND NOT (${col(log, 'card')} = $3 AND ${col(log, 'action')} = $4) RETURNING ${col(log, 'id')}`, [entityId, doomed, project, TransitionAction.Delete])).length;
179
+ const layers = await purgeSchemaLayers(ctx, entityId, doomed);
180
+ if (layers > 0) {
181
+ await bumpRevision(ctx, entityId, deps.now(), deps.ids);
182
+ await deps.bus.notify(ctx.runner, { t: 's', e: entityId });
183
+ ctx.schemas.add(entityId);
184
+ count += layers;
185
+ }
186
+ count += (await ctx.runner.query(`DELETE FROM ${cards.qualified} WHERE ${col(cards, 'entityId')} = $1 AND ${col(cards, 'id')} = ANY($2) RETURNING ${col(cards, 'id')}`, [entityId, doomed])).length;
187
+ return count;
188
+ };
189
+ // ─── The prelude ───────────────────────────────────────────────────────────────────────────────
190
+ /** The organization of a card that has a log but no row (its create has not folded). */
191
+ const logEntityOf = async (ctx, cardId) => {
192
+ const log = ctx.tables.transition;
193
+ const rows = await ctx.runner.query(`SELECT ${col(log, 'entityId')} AS "entityId" FROM ${log.qualified} WHERE ${col(log, 'card')} = $1 ORDER BY ${col(log, 'seq')} LIMIT 1`, [cardId]);
194
+ return rows[0]?.entityId ?? null;
195
+ };
196
+ /** Failed rows over allocations that never got one — what lets the fold step over a hole. */
197
+ const placeholders = async (ctx, card, from, to, project) => {
198
+ const at = deps.now();
199
+ for (let seq = from; seq <= to; seq++) {
200
+ const row = {
201
+ id: deps.ids(), entityId: card.entityId, card: card.id, kind: card.kind, type: card.type,
202
+ ...(project != null ? { project } : {}),
203
+ seq, action: TransitionAction.Update, changes: {}, actor: { service: PLANNING_POSTGRES_STORE },
204
+ cause: LOST_ALLOCATION, at, commit: { state: CommitState.Failed, at, error: LOST_ALLOCATION },
205
+ };
206
+ const log = ctx.tables.transition;
207
+ const statement = insertOf(log, row, {
208
+ tail: `ON CONFLICT (${col(log, 'card')}, ${col(log, 'seq')}) DO NOTHING RETURNING ${col(log, 'id')}`,
209
+ });
210
+ if ((await ctx.runner.query(statement.text, statement.params)).length === 0) {
211
+ // The real row landed after all: the fold reads it on its next round.
212
+ return false;
213
+ }
214
+ }
215
+ return true;
216
+ };
217
+ /**
218
+ * Walk the log past `card.seq`: a FAILED row at the cursor moves the cursor past it; PENDING rows
219
+ * from the cursor on are the run `foldPending` folds; a GAP (a row past the expected seq, or an
220
+ * allocated head with no row at all) is an append still in flight while it is younger than
221
+ * `gapGraceMs` — the fold stops there, and the appender's own `project()` folds it — and a lost
222
+ * allocation after that: one failed `lost-allocation` placeholder per missing seq, and on.
223
+ * `nextSeq` and `append` are two round trips here, so without this a transient gap or an
224
+ * already-failed row would make the next write fail as out of order.
225
+ *
226
+ * A card with no row folds its log as it is: a create from seq 1, and anything else fails out of
227
+ * order. `null` when there is neither a row nor a log.
228
+ */
229
+ const prelude = async (ctx, cardId) => {
230
+ const card = await readCardRow(ctx, cardId);
231
+ if (card == null) {
232
+ const entityId = await logEntityOf(ctx, cardId);
233
+ if (entityId == null) {
234
+ return null;
235
+ }
236
+ const pending = await listTransitions(ctx, { entityId, card: cardId, state: CommitState.Pending }, limits.foldBatch);
237
+ return { entityId, run: pending.items.length, more: false, full: pending.total > pending.items.length };
238
+ }
239
+ const entityId = card.entityId;
240
+ const rows = (await listTransitions(ctx, { entityId, card: cardId, sinceSeq: card.seq }, limits.foldBatch)).items;
241
+ const now = Date.now();
242
+ let expected = card.seq + 1;
243
+ let advanced = card.seq;
244
+ let run = 0;
245
+ let more = false;
246
+ let consumed = true;
247
+ for (const row of rows) {
248
+ if (row.seq < expected) {
249
+ continue;
250
+ }
251
+ if (row.seq > expected) {
252
+ if (run > 0) {
253
+ // The run ends at the hole; the next pass meets it at the cursor.
254
+ more = true;
255
+ consumed = false;
256
+ break;
257
+ }
258
+ if (now - Date.parse(row.at) < limits.gapGraceMs || !await placeholders(ctx, card, expected, row.seq - 1, row.project)) {
259
+ consumed = false;
260
+ break;
261
+ }
262
+ advanced = row.seq - 1;
263
+ expected = row.seq;
264
+ }
265
+ if (row.commit.state === CommitState.Failed) {
266
+ if (run > 0) {
267
+ more = true;
268
+ consumed = false;
269
+ break;
270
+ }
271
+ advanced = row.seq;
272
+ expected = row.seq + 1;
273
+ continue;
274
+ }
275
+ if (row.commit.state === CommitState.Pending) {
276
+ run++;
277
+ expected++;
278
+ continue;
279
+ }
280
+ // Committed yet past the card's seq: nothing a fold may touch.
281
+ consumed = false;
282
+ break;
283
+ }
284
+ const full = rows.length >= limits.foldBatch;
285
+ if (consumed && run === 0 && !full) {
286
+ const head = card.head ?? card.seq;
287
+ if (head > advanced && card.headAt != null && now - Date.parse(card.headAt) >= limits.gapGraceMs
288
+ && await placeholders(ctx, card, advanced + 1, head, rows.at(-1)?.project ?? (isProject(card) ? card.id : undefined))) {
289
+ advanced = head;
290
+ }
291
+ }
292
+ if (advanced > card.seq) {
293
+ const spec = ctx.tables.card;
294
+ await ctx.runner.query(`UPDATE ${spec.qualified} SET ${col(spec, 'seq')} = $2, ${col(spec, 'head')} = GREATEST(COALESCE(${col(spec, 'head')}, ${col(spec, 'seq')}), $2)`
295
+ + ` WHERE ${col(spec, 'id')} = $1`, [cardId, advanced]);
296
+ }
297
+ return { entityId, run, more, full: full && consumed };
298
+ };
299
+ // ─── Folding ───────────────────────────────────────────────────────────────────────────────────
300
+ const notifyAll = async (ctx) => {
301
+ for (const event of ctx.events) {
302
+ await deps.bus.notify(ctx.runner, { t: 'c', e: strip(event) });
303
+ }
304
+ };
305
+ /**
306
+ * Passes of prelude + `foldPending`, each folding exactly the run the prelude measured, until the
307
+ * log is folded, a young gap stops it, or a pass makes no progress.
308
+ */
309
+ const foldInside = async (ctx, cardId) => {
310
+ const total = { card: null, folded: 0, failed: 0, followUp: false };
311
+ for (let pass = 0; pass < MAX_FOLD_PASSES; pass++) {
312
+ const plan = await prelude(ctx, cardId);
313
+ if (plan == null) {
314
+ break;
315
+ }
316
+ total.followUp = plan.full;
317
+ if (plan.run === 0) {
318
+ total.card = await readCard(ctx, cardId, plan.entityId);
319
+ break;
320
+ }
321
+ const result = await foldPending(viewOf(ctx), cardId, plan.entityId, {
322
+ now: deps.now,
323
+ limit: plan.run,
324
+ unit: ctx.savepoint,
325
+ publish: async (event) => { ctx.events.push(event); },
326
+ });
327
+ total.card = result.card;
328
+ total.folded += result.folded;
329
+ total.failed += result.failed;
330
+ if (!plan.more || result.folded + result.failed === 0) {
331
+ break;
332
+ }
333
+ }
334
+ await notifyAll(ctx);
335
+ return total;
336
+ };
337
+ const failInside = async (ctx, cardId, reason) => {
338
+ const entityId = (await readCardRow(ctx, cardId))?.entityId ?? await logEntityOf(ctx, cardId);
339
+ if (entityId == null) {
340
+ return EMPTY;
341
+ }
342
+ const failed = await failPending(viewOf(ctx), cardId, entityId, reason, {
343
+ now: deps.now, publish: async (event) => { ctx.events.push(event); },
344
+ });
345
+ await notifyAll(ctx);
346
+ return { card: null, folded: 0, failed, followUp: false };
347
+ };
348
+ /** After the commit, in order: the hub (this process's subscribers and waiters), then the hooks. */
349
+ const deliver = async (ctx) => {
350
+ for (const entityId of ctx.schemas) {
351
+ deps.schemasTouched(entityId);
352
+ }
353
+ for (const event of ctx.events) {
354
+ await safely('commit publish', () => deps.hub.publish(event));
355
+ if (event.state === CommitState.Committed) {
356
+ const committed = deps.committed();
357
+ if (committed != null) {
358
+ await safely('committed hooks', () => committed(event));
359
+ }
360
+ }
361
+ }
362
+ };
363
+ const reasonOf = (error) => {
364
+ const cause = error?.cause ?? error;
365
+ return cause instanceof Error ? cause.message : `${cause}`;
366
+ };
367
+ /** One round: fold, retry once, then fail what is pending — or yield to a folder holding the lock. */
368
+ const round = async (cardId, mode) => {
369
+ const attempt = () => serial(cardId, () => transaction(cardId, mode, ctx => foldInside(ctx, cardId)));
370
+ let outcome;
371
+ try {
372
+ outcome = await attempt();
373
+ }
374
+ catch (first) {
375
+ if (lockTimedOut(first)) {
376
+ engine.heal(cardId);
377
+ return EMPTY;
378
+ }
379
+ try {
380
+ outcome = await attempt();
381
+ }
382
+ catch (second) {
383
+ if (lockTimedOut(second)) {
384
+ engine.heal(cardId);
385
+ return EMPTY;
386
+ }
387
+ console.error(`planning-postgres: fold of ${cardId} failed twice, failing its pending transitions:`, second);
388
+ try {
389
+ outcome = await serial(cardId, () => transaction(cardId, 'wait', ctx => failInside(ctx, cardId, reasonOf(second))));
390
+ }
391
+ catch (third) {
392
+ console.error(`planning-postgres: cannot fail the pending transitions of ${cardId}:`, third);
393
+ return EMPTY;
394
+ }
395
+ }
396
+ }
397
+ if (outcome.skipped) {
398
+ return EMPTY;
399
+ }
400
+ await deliver(outcome.ctx);
401
+ return outcome.result;
402
+ };
403
+ const foldWith = async (cardId, mode) => {
404
+ let result = EMPTY;
405
+ for (let rounds = 0; rounds < MAX_FOLD_ROUNDS && !deps.closed(); rounds++) {
406
+ result = await round(cardId, mode);
407
+ if (!result.followUp) {
408
+ break;
409
+ }
410
+ }
411
+ return result;
412
+ };
413
+ const engine = {
414
+ fold: cardId => foldWith(cardId, 'wait'),
415
+ heal: cardId => {
416
+ if (healing.has(cardId) || deps.closed()) {
417
+ return;
418
+ }
419
+ healing.add(cardId);
420
+ void foldWith(cardId, 'try')
421
+ .catch(error => console.error(`planning-postgres: heal of ${cardId} failed:`, error))
422
+ .finally(() => { healing.delete(cardId); });
423
+ },
424
+ recover: async (opts) => {
425
+ const tables = await deps.tables();
426
+ const log = tables.transition;
427
+ const cutoff = new Date(Date.now() - (opts?.olderThanMs ?? limits.recoverAfterMs)).toISOString();
428
+ const pool = await deps.pool();
429
+ const stale = (await pool.query(`SELECT ${col(log, 'card')} AS card, MIN(${col(log, 'at')}) AS first FROM ${log.qualified}`
430
+ + ` WHERE (${col(log, 'commit')}->>'state') = 'pending' AND ${col(log, 'at')} < $1`
431
+ + ` GROUP BY ${col(log, 'card')} ORDER BY first LIMIT $2`, [cutoff, opts?.limit ?? DEFAULT_RECOVER_LIMIT])).rows;
432
+ let folded = 0;
433
+ for (const { card } of stale) {
434
+ if (deps.closed()) {
435
+ break;
436
+ }
437
+ await foldWith(card, 'try');
438
+ folded++;
439
+ }
440
+ return folded;
441
+ },
442
+ purge: async (project, entityId) => {
443
+ const outcome = await serial(project, () => transaction(project, 'wait', ctx => purgeInside(ctx, project, entityId)));
444
+ if (outcome.skipped) {
445
+ return 0;
446
+ }
447
+ await deliver(outcome.ctx);
448
+ return outcome.result;
449
+ },
450
+ };
451
+ return engine;
452
+ };
453
+ //# sourceMappingURL=fold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold.js","sourceRoot":"","sources":["../../src/store/fold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { PlanningPostgresAliases, PostgresPlanningStore, PostgresPlanningStoreOptions } from '../types.js';
2
+ export * from './bus.js';
3
+ export * from './cards.js';
4
+ export * from './fold.js';
5
+ export * from './links.js';
6
+ export * from './schemas.js';
7
+ export * from './specs.js';
8
+ export * from './transitions.js';
9
+ /** The aliases a store resolves, each defaulting to the package's own resource alias. */
10
+ export declare const planningPostgresAliases: (aliases?: Partial<PlanningPostgresAliases>) => PlanningPostgresAliases;
11
+ /**
12
+ * The Postgres `PlanningStore`: four tables, an inline fold (one transaction per card under its
13
+ * advisory lock), the commit hub fed by the fold and by a LISTEN/NOTIFY bus, and the data-defined
14
+ * schema port.
15
+ *
16
+ * Nothing is resolved at construction: the resources are looked up on the context at the first
17
+ * call — which also runs one `recover()` in the background — so the store can be handed to the
18
+ * planning service before the context initializes. A resource the context does not have is refused
19
+ * with the file a target adds for it.
20
+ */
21
+ export declare const makePostgresPlanningStore: (opts: PostgresPlanningStoreOptions) => PostgresPlanningStore;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACkC,uBAAuB,EACf,qBAAqB,EAAE,4BAA4B,EACxG,MAAM,aAAa,CAAA;AASpB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAIhC,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,aAAc,OAAO,CAAC,uBAAuB,CAAC,KAAG,uBAKnF,CAAA;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,SAAU,4BAA4B,KAAG,qBAoL9E,CAAA"}