@rubytech/create-maxy-code 0.1.475 → 0.1.477

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 (89) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts.map +1 -1
  3. package/payload/platform/lib/storage-broker/dist/cf-exec.js +3 -2
  4. package/payload/platform/lib/storage-broker/dist/cf-exec.js.map +1 -1
  5. package/payload/platform/lib/storage-broker/src/cf-exec.ts +3 -2
  6. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +3 -3
  7. package/payload/platform/plugins/cloudflare/skills/calendar-site/template/schema.sql +13 -3
  8. package/payload/platform/plugins/docs/references/calendar-booking.md +2 -2
  9. package/payload/platform/plugins/scheduling/PLUGIN.md +2 -2
  10. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-block-sqlite.test.d.ts +2 -0
  11. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-block-sqlite.test.d.ts.map +1 -0
  12. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-block-sqlite.test.js +150 -0
  13. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-block-sqlite.test.js.map +1 -0
  14. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-block.test.d.ts +2 -0
  15. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-block.test.d.ts.map +1 -0
  16. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-block.test.js +248 -0
  17. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-block.test.js.map +1 -0
  18. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-reconcile.test.js +158 -23
  19. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-reconcile.test.js.map +1 -1
  20. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-schema-migration.test.d.ts +2 -0
  21. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-schema-migration.test.d.ts.map +1 -0
  22. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-schema-migration.test.js +200 -0
  23. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-schema-migration.test.js.map +1 -0
  24. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-sync-provision.test.d.ts +2 -0
  25. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-sync-provision.test.d.ts.map +1 -0
  26. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-sync-provision.test.js +309 -0
  27. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-sync-provision.test.js.map +1 -0
  28. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/d1-command.test.js +219 -19
  29. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/d1-command.test.js.map +1 -1
  30. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts +184 -11
  31. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts.map +1 -1
  32. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js +211 -22
  33. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js.map +1 -1
  34. package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-sync-provision.d.ts +109 -0
  35. package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-sync-provision.d.ts.map +1 -0
  36. package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-sync-provision.js +213 -0
  37. package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-sync-provision.js.map +1 -0
  38. package/payload/platform/plugins/scheduling/mcp/dist/lib/d1-command.d.ts +80 -8
  39. package/payload/platform/plugins/scheduling/mcp/dist/lib/d1-command.d.ts.map +1 -1
  40. package/payload/platform/plugins/scheduling/mcp/dist/lib/d1-command.js +202 -8
  41. package/payload/platform/plugins/scheduling/mcp/dist/lib/d1-command.js.map +1 -1
  42. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.d.ts +6 -4
  43. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.d.ts.map +1 -1
  44. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +411 -141
  45. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
  46. package/payload/platform/scripts/cpu-triage.sh +313 -0
  47. package/payload/server/{chunk-Y6V45R6M.js → chunk-JECAP3Z2.js} +296 -63
  48. package/payload/server/maxy-edge.js +1 -1
  49. package/payload/server/public/activity.html +6 -6
  50. package/payload/server/public/assets/{AdminLoginScreens-B44KbEuC.js → AdminLoginScreens-mEKP4pDi.js} +1 -1
  51. package/payload/server/public/assets/{AdminShell-BjxV2qkb.js → AdminShell-BwSaZ88d.js} +1 -1
  52. package/payload/server/public/assets/{Checkbox-DSeZNGNA.js → Checkbox-CN4uQ80w.js} +1 -1
  53. package/payload/server/public/assets/activity-CIQ8ozNZ.js +1 -0
  54. package/payload/server/public/assets/{admin-B4LpTCur.js → admin-BVhgfgs1.js} +1 -1
  55. package/payload/server/public/assets/{browser-CEFvaWwI.js → browser-D-HMmHcM.js} +1 -1
  56. package/payload/server/public/assets/{calendar-B3zo6V34.js → calendar-tGWvFyFn.js} +1 -1
  57. package/payload/server/public/assets/chat-DkttVxAz.js +1 -0
  58. package/payload/server/public/assets/chevron-left-CZ4ez9G5.js +1 -0
  59. package/payload/server/public/assets/data-P-mcmnNi.js +1 -0
  60. package/payload/server/public/assets/{graph-labels-GlTEIYJj.js → graph-labels-qnBleOE6.js} +1 -1
  61. package/payload/server/public/assets/{graph-RaOrnSf2.js → graph-zEw610xK.js} +1 -1
  62. package/payload/server/public/assets/{maximize-2-CHDa8p5h.js → maximize-2-BlTjXT_Y.js} +1 -1
  63. package/payload/server/public/assets/{operator-DtqHY4jV.js → operator-C7oIw2PG.js} +1 -1
  64. package/payload/server/public/assets/{page-DxnWgPtd.js → page-CTP7OFZa.js} +1 -1
  65. package/payload/server/public/assets/{page-CkhFj8GQ.js → page-DL6Zsdvk.js} +1 -1
  66. package/payload/server/public/assets/{public-D5TUfQ3I.js → public-r1A9dqR_.js} +1 -1
  67. package/payload/server/public/assets/{rotate-ccw-BJjVAQQY.js → rotate-ccw-CzkkKx4-.js} +1 -1
  68. package/payload/server/public/assets/{tasks-CM9pYYG1.js → tasks-fIJwYFWG.js} +1 -1
  69. package/payload/server/public/assets/{time-entry-format-C5RYEYjM.js → time-entry-format-j669DgXj.js} +1 -1
  70. package/payload/server/public/assets/{triangle-alert-DLfIsuo_.js → triangle-alert-BPgCgIef.js} +1 -1
  71. package/payload/server/public/assets/{useCopyFeedback-7yKeiAzV.js → useCopyFeedback-BmLa2aes.js} +1 -1
  72. package/payload/server/public/assets/{useSelectionMode-CWlh6AEq.js → useSelectionMode-DnnM7A8-.js} +1 -1
  73. package/payload/server/public/assets/{useSubAccountSwitcher-B2n9QPVI.css → useSubAccountSwitcher-C_E8h07P.css} +1 -1
  74. package/payload/server/public/assets/{useVoiceRecorder-j3ZArZ2H.js → useVoiceRecorder-u2dwZfen.js} +1 -1
  75. package/payload/server/public/browser.html +5 -5
  76. package/payload/server/public/calendar.html +6 -6
  77. package/payload/server/public/chat.html +12 -12
  78. package/payload/server/public/data.html +11 -11
  79. package/payload/server/public/graph.html +11 -11
  80. package/payload/server/public/index.html +14 -14
  81. package/payload/server/public/operator.html +14 -14
  82. package/payload/server/public/public.html +12 -12
  83. package/payload/server/public/tasks.html +5 -5
  84. package/payload/server/server.js +358 -189
  85. package/payload/server/public/assets/activity-Mz1BhgB1.js +0 -1
  86. package/payload/server/public/assets/chat-5tJdo9i_.js +0 -1
  87. package/payload/server/public/assets/chevron-left-BJllrPBj.js +0 -1
  88. package/payload/server/public/assets/data-Du79EgR-.js +0 -1
  89. /package/payload/server/public/assets/{useSubAccountSwitcher-CBlKgwms.js → useSubAccountSwitcher-CFa6ZAT1.js} +0 -0
@@ -0,0 +1,248 @@
1
+ // Task 1811 — which published booking slots the connector-busy set blocks.
2
+ //
3
+ // The blocking key is the published slot's START STRING, not the busy
4
+ // interval: the edge free/busy Function subtracts taken slots with an exact
5
+ // `slotStart` string match, so a row keyed on a busy-interval boundary blocks
6
+ // nothing. These tests pin that the returned slots are drawn from `published`
7
+ // verbatim and never synthesised from `busy`.
8
+ import { describe, it, expect } from "vitest";
9
+ import { selectBlockedSlots, diffBlockRows, BLOCK_ROWS_SELECT, BLOCK_ROW_INSERT, BLOCK_ROW_DELETE, blockInsertParams, planBlockWrites, } from "../booking-reconcile.js";
10
+ const NOW = Date.parse("2026-07-20T00:00:00.000Z");
11
+ /** A half-hour published slot starting at `iso`. */
12
+ const slot = (iso) => ({
13
+ start: iso,
14
+ end: new Date(Date.parse(iso) + 30 * 60_000).toISOString().replace(/\.\d{3}Z$/, ".000Z"),
15
+ });
16
+ describe("selectBlockedSlots", () => {
17
+ it("blocks a published slot overlapping a busy interval, returning the published slot verbatim", () => {
18
+ const published = [slot("2026-07-21T09:30:00.000Z"), slot("2026-07-21T14:00:00.000Z")];
19
+ const busy = [{ start: "2026-07-21T09:30:00.000Z", end: "2026-07-21T11:00:00.000Z" }];
20
+ const out = selectBlockedSlots(published, busy, new Set(), NOW);
21
+ expect(out).toEqual([published[0]]);
22
+ });
23
+ it("blocks every published slot the busy interval spans", () => {
24
+ // The live case: 'Billy Harrison — SiteDesk' 10:30-12:00 BST = 09:30-11:00Z
25
+ // covers the 09:30, 10:00 and 10:30 slots. gcal-sync.py blocked exactly these.
26
+ const published = [
27
+ slot("2026-07-21T09:30:00.000Z"),
28
+ slot("2026-07-21T10:00:00.000Z"),
29
+ slot("2026-07-21T10:30:00.000Z"),
30
+ slot("2026-07-21T11:00:00.000Z"),
31
+ ];
32
+ const busy = [{ start: "2026-07-21T09:30:00.000Z", end: "2026-07-21T11:00:00.000Z" }];
33
+ const out = selectBlockedSlots(published, busy, new Set(), NOW);
34
+ expect(out.map((s) => s.start)).toEqual([
35
+ "2026-07-21T09:30:00.000Z",
36
+ "2026-07-21T10:00:00.000Z",
37
+ "2026-07-21T10:30:00.000Z",
38
+ ]);
39
+ });
40
+ it("does not block an edge-touching slot", () => {
41
+ const published = [slot("2026-07-21T11:00:00.000Z")];
42
+ const busy = [{ start: "2026-07-21T09:30:00.000Z", end: "2026-07-21T11:00:00.000Z" }];
43
+ expect(selectBlockedSlots(published, busy, new Set(), NOW)).toEqual([]);
44
+ });
45
+ it("skips a slot already taken by a real booking", () => {
46
+ const published = [slot("2026-07-21T09:30:00.000Z")];
47
+ const busy = [{ start: "2026-07-21T09:00:00.000Z", end: "2026-07-21T11:00:00.000Z" }];
48
+ const taken = new Set(["2026-07-21T09:30:00.000Z"]);
49
+ expect(selectBlockedSlots(published, busy, taken, NOW)).toEqual([]);
50
+ });
51
+ it("skips a slot that has already started", () => {
52
+ const published = [slot("2026-07-19T09:30:00.000Z")];
53
+ const busy = [{ start: "2026-07-19T09:00:00.000Z", end: "2026-07-19T11:00:00.000Z" }];
54
+ expect(selectBlockedSlots(published, busy, new Set(), NOW)).toEqual([]);
55
+ });
56
+ it("blocks nothing when the busy set is empty", () => {
57
+ const published = [slot("2026-07-21T09:30:00.000Z")];
58
+ expect(selectBlockedSlots(published, [], new Set(), NOW)).toEqual([]);
59
+ });
60
+ it("never blocks on an unparseable bound", () => {
61
+ const published = [{ start: "not-a-date", end: "also-not" }];
62
+ const busy = [{ start: "2026-07-21T09:00:00.000Z", end: "2026-07-21T11:00:00.000Z" }];
63
+ expect(selectBlockedSlots(published, busy, new Set(), NOW)).toEqual([]);
64
+ });
65
+ });
66
+ describe("diffBlockRows", () => {
67
+ it("inserts a desired slot with no row", () => {
68
+ const desired = [slot("2026-07-21T09:30:00.000Z")];
69
+ const d = diffBlockRows(desired, []);
70
+ expect(d.toInsert).toEqual(desired);
71
+ expect(d.toDelete).toEqual([]);
72
+ });
73
+ it("deletes a row whose slot is no longer busy", () => {
74
+ const current = [{ bookingId: "b-1", slotStart: "2026-07-21T09:30:00.000Z" }];
75
+ const d = diffBlockRows([], current);
76
+ expect(d.toInsert).toEqual([]);
77
+ expect(d.toDelete).toEqual(["b-1"]);
78
+ });
79
+ it("writes nothing when the held set already matches — the steady state", () => {
80
+ const desired = [slot("2026-07-21T09:30:00.000Z")];
81
+ const current = [{ bookingId: "b-1", slotStart: "2026-07-21T09:30:00.000Z" }];
82
+ const d = diffBlockRows(desired, current);
83
+ expect(d.toInsert).toEqual([]);
84
+ expect(d.toDelete).toEqual([]);
85
+ });
86
+ it("converges a duplicated row down to one", () => {
87
+ // Two rows for one slot can exist after an interrupted run. Keeping both
88
+ // would never converge, so the extra is deleted and one is retained.
89
+ const desired = [slot("2026-07-21T09:30:00.000Z")];
90
+ const current = [
91
+ { bookingId: "b-1", slotStart: "2026-07-21T09:30:00.000Z" },
92
+ { bookingId: "b-2", slotStart: "2026-07-21T09:30:00.000Z" },
93
+ ];
94
+ const d = diffBlockRows(desired, current);
95
+ expect(d.toInsert).toEqual([]);
96
+ expect(d.toDelete).toEqual(["b-2"]);
97
+ });
98
+ it("handles a mixed add and remove in one pass", () => {
99
+ const desired = [slot("2026-07-22T09:30:00.000Z")];
100
+ const current = [{ bookingId: "b-old", slotStart: "2026-07-21T09:30:00.000Z" }];
101
+ const d = diffBlockRows(desired, current);
102
+ expect(d.toInsert.map((s) => s.start)).toEqual(["2026-07-22T09:30:00.000Z"]);
103
+ expect(d.toDelete).toEqual(["b-old"]);
104
+ });
105
+ });
106
+ describe("block row statements", () => {
107
+ it("select and delete both qualify on kind, so neither can reach a real booking", () => {
108
+ expect(BLOCK_ROWS_SELECT).toContain("kind='block'");
109
+ expect(BLOCK_ROW_DELETE).toContain("kind='block'");
110
+ });
111
+ it("the insert binds every value and carries no free-text marker", () => {
112
+ expect(BLOCK_ROW_INSERT).toContain("?1");
113
+ expect(BLOCK_ROW_INSERT).not.toContain("Auto-block");
114
+ // The row must be `accepted` or the edge will not subtract it, and `block`
115
+ // or 1806's sweep would reconcile it into a meeting on the admin calendar.
116
+ expect(BLOCK_ROW_INSERT).toContain("'accepted'");
117
+ expect(BLOCK_ROW_INSERT).toContain("'block'");
118
+ });
119
+ it("insert params are positional and carry the published slot bounds verbatim", () => {
120
+ const s = slot("2026-07-21T09:30:00.000Z");
121
+ const p = blockInsertParams(s, "uuid-1", "2026-07-20T06:00:00.000Z");
122
+ expect(p[0]).toBe("uuid-1");
123
+ expect(p[1]).toBe(s.start);
124
+ expect(p[2]).toBe(s.end);
125
+ expect(p[p.length - 1]).toBe("2026-07-20T06:00:00.000Z");
126
+ });
127
+ });
128
+ describe("planBlockWrites — the safety gate", () => {
129
+ // Three rows already held. Every degraded outcome must leave all three
130
+ // alone: an unblocked busy slot is a double-booked customer, whereas a
131
+ // stale block is recoverable by the operator.
132
+ const held = [
133
+ { bookingId: "b-1", slotStart: "2026-07-21T09:30:00.000Z" },
134
+ { bookingId: "b-2", slotStart: "2026-07-21T10:00:00.000Z" },
135
+ { bookingId: "b-3", slotStart: "2026-07-21T10:30:00.000Z" },
136
+ ];
137
+ const base = {
138
+ publishedReadable: true,
139
+ busyReadable: true,
140
+ published: [slot("2026-07-21T09:30:00.000Z")],
141
+ busy: [{ start: "2026-07-21T09:00:00.000Z", end: "2026-07-21T11:00:00.000Z" }],
142
+ taken: new Set(),
143
+ current: held,
144
+ nowMs: NOW,
145
+ };
146
+ it("writes on verified", () => {
147
+ const p = planBlockWrites(base);
148
+ expect(p.outcome).toBe("verified");
149
+ // b-1 matches a still-busy slot and is kept; b-2 and b-3 are no longer
150
+ // desired, so this is also the convergence path.
151
+ expect(p.diff.toDelete).toEqual(["b-2", "b-3"]);
152
+ });
153
+ it("an EMPTY busy set deletes nothing — the rule a broken sync must not defeat", () => {
154
+ const p = planBlockWrites({ ...base, busy: [] });
155
+ expect(p.outcome).toBe("no-busy-data");
156
+ expect(p.diff).toEqual({ toInsert: [], toDelete: [] });
157
+ });
158
+ it("an UNPARSEABLE busy set deletes nothing — length alone is not liveness", () => {
159
+ // Without the usable-interval test this reaches `verified`, overlaps
160
+ // nothing, computes an empty desired set and deletes all three rows.
161
+ const p = planBlockWrites({
162
+ ...base,
163
+ busy: [{ start: "not-a-date", end: "also-not" }, { start: "", end: "" }],
164
+ });
165
+ expect(p.outcome).toBe("no-busy-data");
166
+ expect(p.diff.toDelete).toEqual([]);
167
+ });
168
+ it("an inverted busy interval is not usable", () => {
169
+ const p = planBlockWrites({
170
+ ...base,
171
+ busy: [{ start: "2026-07-21T11:00:00.000Z", end: "2026-07-21T09:00:00.000Z" }],
172
+ });
173
+ expect(p.outcome).toBe("no-busy-data");
174
+ expect(p.diff.toDelete).toEqual([]);
175
+ });
176
+ it("an unreadable snapshot deletes nothing", () => {
177
+ const p = planBlockWrites({ ...base, publishedReadable: false });
178
+ expect(p.outcome).toBe("snapshot-unreadable");
179
+ expect(p.diff.toDelete).toEqual([]);
180
+ });
181
+ it("an unreadable busy set reports error and deletes nothing", () => {
182
+ // The graph read threw. busy=[] here is absence of a measurement, not a
183
+ // measured empty set, so it must not read as `no-busy-data`.
184
+ const p = planBlockWrites({ ...base, busyReadable: false, busy: [] });
185
+ expect(p.outcome).toBe("error");
186
+ expect(p.diff.toDelete).toEqual([]);
187
+ });
188
+ it("a snapshot holding no slots deletes nothing", () => {
189
+ const p = planBlockWrites({ ...base, published: [] });
190
+ expect(p.outcome).toBe("no-published-slots");
191
+ expect(p.diff.toDelete).toEqual([]);
192
+ });
193
+ it("blocks a slot starting exactly now, matching what the edge still offers", () => {
194
+ // The edge serves `t >= lower` with lower = now, so this slot is offered.
195
+ const now = Date.parse("2026-07-21T09:30:00.000Z");
196
+ const p = planBlockWrites({ ...base, current: [], nowMs: now });
197
+ expect(p.diff.toInsert.map((s) => s.start)).toEqual(["2026-07-21T09:30:00.000Z"]);
198
+ });
199
+ it("excludes a published slot whose end is unparseable", () => {
200
+ const p = planBlockWrites({
201
+ ...base,
202
+ current: [],
203
+ published: [{ start: "2026-07-21T09:30:00.000Z", end: "not-a-date" }],
204
+ });
205
+ expect(p.diff.toInsert).toEqual([]);
206
+ });
207
+ });
208
+ describe("the op=cal-block line is emitted from exactly one place", () => {
209
+ // reconcileAccount resolves its config dir at module load and cannot be
210
+ // imported, so the emit-once property is not reachable by a behavioural
211
+ // test. It is pinned as a source invariant instead, mirroring the 1806
212
+ // check on the migration marker.
213
+ //
214
+ // The defect this guards: an earlier revision logged the error case from
215
+ // inside the catch and suppressed the summary line for `outcome=error`,
216
+ // so a tick whose drift step threw emitted NO cal-block line at all —
217
+ // the standing check silently absent, which is this task family's own
218
+ // defect class.
219
+ it("has one emit site, so no path can skip or double-report it", async () => {
220
+ const { readFileSync } = await import("node:fs");
221
+ const { resolve, dirname } = await import("node:path");
222
+ const { fileURLToPath } = await import("node:url");
223
+ const src = readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), "../../scripts/reconcile-bookings.ts"), "utf-8");
224
+ const emits = src.match(/op=cal-block/g) ?? [];
225
+ expect(emits).toHaveLength(1);
226
+ // And it must be an unconditional statement. Walk back from the emit to
227
+ // the line opening the console.error call, then assert that line holds
228
+ // nothing but the call, and that the statement above it closes a block
229
+ // rather than opening a conditional.
230
+ const lines = src.split("\n");
231
+ const emitIdx = lines.findIndex((l) => l.includes("op=cal-block"));
232
+ expect(emitIdx).toBeGreaterThan(0);
233
+ let callIdx = emitIdx;
234
+ while (callIdx > 0 && !lines[callIdx].includes("console.error("))
235
+ callIdx--;
236
+ // ` console.error(` and nothing else — an `if (…) console.error(` or a
237
+ // `&&`/ternary prefix all fail here.
238
+ expect(lines[callIdx].trim()).toBe("console.error(");
239
+ // The nearest preceding code line must not open a conditional block.
240
+ let prevIdx = callIdx - 1;
241
+ while (prevIdx > 0 && (lines[prevIdx].trim() === "" || lines[prevIdx].trim().startsWith("//"))) {
242
+ prevIdx--;
243
+ }
244
+ expect(lines[prevIdx].trim()).not.toMatch(/^(if|else|\}\s*else)\b/);
245
+ expect(lines[prevIdx].trim()).toMatch(/^\}$/);
246
+ });
247
+ });
248
+ //# sourceMappingURL=booking-block.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booking-block.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/booking-block.test.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@
5
5
  // account always resolves or creates its own Person for the booking
6
6
  // email, never a foreign account's).
7
7
  import { describe, it, expect, vi } from "vitest";
8
- import { reconcileOne, auditCounts, bookingUid, ensureConnectorSyncEvent, countPublishedConflicts } from "../booking-reconcile.js";
8
+ import { readFile } from "node:fs/promises";
9
+ import { reconcileOne, auditCounts, bookingUid, ensureConnectorSyncEvent, classifyPublishedDrift, selectUnreconciled, fetchBookingMeetingUids, ELIGIBLE_BOOKING_PREDICATE, ELIGIBLE_BOOKING_SELECT, BOOKING_SCHEMA_MIGRATION, isMissingColumnError, isDuplicateColumnError, } from "../booking-reconcile.js";
9
10
  const booking = {
10
11
  bookingId: "abc",
11
12
  slotStart: "2026-06-22T09:00:00Z",
@@ -52,20 +53,82 @@ describe("reconcileOne", () => {
52
53
  expect(r.created).toBe(false);
53
54
  });
54
55
  });
56
+ describe("eligibility predicate", () => {
57
+ // Asserting the constant equals its own literal would be a tautology. What
58
+ // matters is that it qualifies on BOTH axes: status alone counted block rows
59
+ // forever (1806), and kind alone would sweep cancelled rows.
60
+ it("qualifies on status and on kind", () => {
61
+ expect(ELIGIBLE_BOOKING_PREDICATE).toMatch(/status\s*=\s*'accepted'/);
62
+ expect(ELIGIBLE_BOOKING_PREDICATE).toMatch(/kind\s*=\s*'booking'/);
63
+ });
64
+ // The load-bearing property of 1806: there is ONE definition, and the read
65
+ // both call sites use is built from it rather than restating it.
66
+ it("builds the sweep/audit read from that predicate and asks for attempts", () => {
67
+ expect(ELIGIBLE_BOOKING_SELECT).toContain(ELIGIBLE_BOOKING_PREDICATE);
68
+ expect(ELIGIBLE_BOOKING_SELECT).toMatch(/\battempts\b/);
69
+ expect(ELIGIBLE_BOOKING_SELECT).toMatch(/ORDER BY id/);
70
+ });
71
+ // 1807 — the sweep must not consult swept. A predicate carrying it would make
72
+ // a booking whose meeting went missing unreachable again.
73
+ it("does not filter on swept", () => {
74
+ expect(ELIGIBLE_BOOKING_SELECT).not.toMatch(/WHERE[\s\S]*\bswept\b/);
75
+ });
76
+ });
77
+ describe("selectUnreconciled", () => {
78
+ const rows = [{ bookingId: "reconciled" }, { bookingId: "lost" }];
79
+ // Task 1807 — the Rob Mead case in fixture form. This row is swept=1 in D1;
80
+ // the sweep must claim it anyway, because its meeting is absent. The old
81
+ // swept=0 predicate returns the empty set here.
82
+ it("claims an eligible row whose meeting is absent", () => {
83
+ const claimed = selectUnreconciled(rows, new Set([bookingUid("reconciled")]));
84
+ expect(claimed.map((r) => r.bookingId)).toEqual(["lost"]);
85
+ });
86
+ // The mutation guard the task requires. A predicate that returned every
87
+ // accepted row would pass the test above and fail this one.
88
+ it("does not claim a row whose meeting is present", () => {
89
+ const claimed = selectUnreconciled(rows, new Set([bookingUid("reconciled"), bookingUid("lost")]));
90
+ expect(claimed).toEqual([]);
91
+ });
92
+ it("claims everything when the graph holds no booking meetings", () => {
93
+ expect(selectUnreconciled(rows, new Set()).map((r) => r.bookingId)).toEqual(["reconciled", "lost"]);
94
+ });
95
+ });
55
96
  describe("auditCounts", () => {
56
- it("counts pending (D1 ahead) and orphans (graph ahead)", async () => {
57
- const run = vi.fn(async () => ({
58
- records: [{ get: () => ["booking-a", "booking-b"] }],
97
+ it("counts pending (D1 ahead) and orphans (graph ahead)", () => {
98
+ const counts = auditCounts(["a", "c"], ["booking-a", "booking-b"]);
99
+ // 'c' eligible in D1 but no meeting -> pending 1; 'booking-b' meeting with no D1 row -> orphan 1.
100
+ expect(counts).toEqual({ eligibleExamined: 2, pendingUnreconciled: 1, orphanMeetings: 1 });
101
+ });
102
+ it("is clean when D1 and graph agree", () => {
103
+ expect(auditCounts(["a", "b"], ["booking-a", "booking-b"])).toEqual({
104
+ eligibleExamined: 2,
105
+ pendingUnreconciled: 0,
106
+ orphanMeetings: 0,
107
+ });
108
+ });
109
+ // Task 1806 observability — an audit that returns the same value for "clean"
110
+ // and "no input" is not an audit. eligibleExamined is what separates them.
111
+ it("distinguishes nothing-to-do from verified-clean", () => {
112
+ const empty = auditCounts([], []);
113
+ const clean = auditCounts(["a"], ["booking-a"]);
114
+ expect(empty.pendingUnreconciled).toBe(clean.pendingUnreconciled);
115
+ expect(empty.eligibleExamined).toBe(0);
116
+ expect(clean.eligibleExamined).toBe(1);
117
+ });
118
+ });
119
+ describe("fetchBookingMeetingUids", () => {
120
+ it("reads this account's booking meeting uids", async () => {
121
+ const run = vi.fn(async (_cypher, _params) => ({
122
+ records: [{ get: () => ["booking-a"] }],
59
123
  }));
60
- const counts = await auditCounts({ run }, "acct-1", ["a", "c"]);
61
- // 'c' accepted in D1 but no meeting -> pending 1; 'booking-b' meeting with no D1 row -> orphan 1.
62
- expect(counts.pendingUnreconciled).toBe(1);
63
- expect(counts.orphanMeetings).toBe(1);
124
+ const uids = await fetchBookingMeetingUids({ run }, "acct-1");
125
+ expect(uids).toEqual(["booking-a"]);
126
+ expect(run.mock.calls[0][0]).toMatch(/source: 'booking'/);
127
+ expect(run.mock.calls[0][1]).toEqual({ accountId: "acct-1" });
64
128
  });
65
- it("is clean when D1 and graph agree", async () => {
66
- const run = vi.fn(async () => ({ records: [{ get: () => ["booking-a", "booking-b"] }] }));
67
- const counts = await auditCounts({ run }, "acct-1", ["a", "b"]);
68
- expect(counts).toEqual({ pendingUnreconciled: 0, orphanMeetings: 0 });
129
+ it("returns an empty list when the account has no booking meetings", async () => {
130
+ const run = vi.fn(async () => ({ records: [] }));
131
+ expect(await fetchBookingMeetingUids({ run }, "acct-1")).toEqual([]);
69
132
  });
70
133
  });
71
134
  describe("ensureConnectorSyncEvent", () => {
@@ -84,10 +147,11 @@ describe("ensureConnectorSyncEvent", () => {
84
147
  };
85
148
  return { session: session, calls };
86
149
  }
150
+ const WA = { channel: "whatsapp", destination: "+44 7504 472444" };
87
151
  it("creates the recurring sync event when none exists", async () => {
88
152
  const { session, calls } = sessionReturning(0);
89
- const res = await ensureConnectorSyncEvent(session, "acct-1", "+44 7504 472444");
90
- expect(res).toBe("created");
153
+ const res = await ensureConnectorSyncEvent(session, "acct-1", WA);
154
+ expect(res).toBe("provisioned");
91
155
  const merge = calls.find((c) => /CREATE \(e:Event/.test(c.cypher));
92
156
  expect(merge).toBeTruthy();
93
157
  expect(merge.params.accountId).toBe("acct-1");
@@ -96,28 +160,99 @@ describe("ensureConnectorSyncEvent", () => {
96
160
  expect(merge.params.recurrence).toBe("*/30 * * * *");
97
161
  expect(String(merge.params.agentPrompt)).toMatch(/connector/i);
98
162
  });
163
+ // Task 1809 — the channel is whatever the caller resolved, not a hardcoded
164
+ // 'whatsapp'. An account reachable only on Telegram provisions on Telegram.
165
+ it("writes the resolved channel verbatim rather than assuming WhatsApp", async () => {
166
+ const { session, calls } = sessionReturning(0);
167
+ const res = await ensureConnectorSyncEvent(session, "acct-1", {
168
+ channel: "telegram",
169
+ destination: "123456789",
170
+ });
171
+ expect(res).toBe("provisioned");
172
+ const merge = calls.find((c) => /CREATE \(e:Event/.test(c.cypher));
173
+ expect(merge.params.agentChannel).toBe("telegram");
174
+ expect(merge.params.agentDestination).toBe("123456789");
175
+ });
99
176
  it("is a no-op when the sync event already exists", async () => {
100
177
  const { session, calls } = sessionReturning(1);
101
- const res = await ensureConnectorSyncEvent(session, "acct-1", "+44 7504 472444");
102
- expect(res).toBe("exists");
178
+ const res = await ensureConnectorSyncEvent(session, "acct-1", WA);
179
+ expect(res).toBe("already-provisioned");
103
180
  expect(calls.some((c) => /CREATE \(e:Event/.test(c.cypher))).toBe(false);
104
181
  });
105
182
  });
106
- describe("countPublishedConflicts", () => {
183
+ describe("booking schema migration", () => {
184
+ it("adds both columns and backfills known machine-written block rows", () => {
185
+ expect(BOOKING_SCHEMA_MIGRATION).toEqual([
186
+ "ALTER TABLE bookings ADD COLUMN kind TEXT NOT NULL DEFAULT 'booking'",
187
+ "ALTER TABLE bookings ADD COLUMN attempts INTEGER NOT NULL DEFAULT 0",
188
+ "UPDATE bookings SET kind='block' WHERE note='Auto-block: Google Calendar'",
189
+ ]);
190
+ });
191
+ // The backfill runs once, at column creation. Running control flow keys on
192
+ // `kind`, never on the note — the string appears here and nowhere else. This
193
+ // is the boundary Task 1806 drew when it rejected note-matching as a
194
+ // predicate, pinned mechanically rather than promised in a comment.
195
+ it("reads the note in the migration only", async () => {
196
+ const src = await readFile(new URL("../booking-reconcile.ts", import.meta.url), "utf8");
197
+ expect(src.split("Auto-block: Google Calendar").length - 1).toBe(1);
198
+ });
199
+ it("recognises a missing-column failure so the migration can be triggered", () => {
200
+ expect(isMissingColumnError("D1_ERROR: no such column: kind at offset 62")).toBe(true);
201
+ expect(isMissingColumnError("no such table: bookings")).toBe(false);
202
+ expect(isMissingColumnError("Authentication error [code: 10000]")).toBe(false);
203
+ });
204
+ it("recognises a duplicate-column failure so a partial migration is a no-op", () => {
205
+ expect(isDuplicateColumnError("duplicate column name: kind")).toBe(true);
206
+ expect(isDuplicateColumnError("no such column: kind")).toBe(false);
207
+ });
208
+ });
209
+ describe("classifyPublishedDrift", () => {
107
210
  const busy = [{ start: "2026-06-22T10:00:00Z", end: "2026-06-22T11:00:00Z" }];
108
- it("counts a published slot that overlaps a connector-busy interval", () => {
211
+ it("reports verified with the conflict when a published slot overlaps busy", () => {
109
212
  const published = [
110
213
  { start: "2026-06-22T10:30:00Z", end: "2026-06-22T11:30:00Z" }, // overlaps
111
214
  { start: "2026-06-22T12:00:00Z", end: "2026-06-22T13:00:00Z" }, // clear
112
215
  ];
113
- expect(countPublishedConflicts(published, busy)).toBe(1);
216
+ expect(classifyPublishedDrift(published, busy)).toEqual({
217
+ outcome: "verified",
218
+ published: 2,
219
+ busy: 1,
220
+ conflicts: 1,
221
+ });
114
222
  });
115
- it("returns 0 when no published slot overlaps busy", () => {
223
+ it("reports verified with 0 conflicts when both sets are non-empty and disjoint", () => {
116
224
  const published = [{ start: "2026-06-22T09:00:00Z", end: "2026-06-22T10:00:00Z" }]; // touches edge, no overlap
117
- expect(countPublishedConflicts(published, busy)).toBe(0);
225
+ expect(classifyPublishedDrift(published, busy)).toEqual({
226
+ outcome: "verified",
227
+ published: 1,
228
+ busy: 1,
229
+ conflicts: 0,
230
+ });
231
+ });
232
+ it("reports no-busy-data when there is nothing to compare published slots against", () => {
233
+ const published = [{ start: "2026-06-22T10:30:00Z", end: "2026-06-22T11:30:00Z" }];
234
+ expect(classifyPublishedDrift(published, [])).toEqual({
235
+ outcome: "no-busy-data",
236
+ published: 1,
237
+ busy: 0,
238
+ conflicts: 0,
239
+ });
240
+ });
241
+ it("reports no-published-slots when nothing has been published", () => {
242
+ expect(classifyPublishedDrift([], busy)).toEqual({
243
+ outcome: "no-published-slots",
244
+ published: 0,
245
+ busy: 1,
246
+ conflicts: 0,
247
+ });
118
248
  });
119
- it("returns 0 for an empty published set", () => {
120
- expect(countPublishedConflicts([], busy)).toBe(0);
249
+ it("reports no-published-slots when both sets are empty", () => {
250
+ expect(classifyPublishedDrift([], [])).toEqual({
251
+ outcome: "no-published-slots",
252
+ published: 0,
253
+ busy: 0,
254
+ conflicts: 0,
255
+ });
121
256
  });
122
257
  });
123
258
  //# sourceMappingURL=booking-reconcile.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"booking-reconcile.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/booking-reconcile.test.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,yEAAyE;AACzE,uEAAuE;AACvE,mEAAmE;AACnE,oEAAoE;AACpE,qCAAqC;AACrC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,wBAAwB,EAAE,uBAAuB,EAAmB,MAAM,yBAAyB,CAAC;AAEpJ,MAAM,OAAO,GAAe;IAC1B,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,sBAAsB;IACjC,OAAO,EAAE,sBAAsB;IAC/B,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,6DAA6D;AAC7D,SAAS,WAAW,CAAC,IAA0B;IAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAc,EAAE,CAA0B,EAAE,EAAE;QACrE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;QAClG,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,EAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC3D,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,4DAA4D;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACpD,kEAAkE;QAClE,kEAAkE;QAClE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9G,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChF,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;SACrD,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,EAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,kGAAkG;QAClG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,EAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,SAAS,gBAAgB,CAAC,WAAmB;QAC3C,MAAM,KAAK,GAA0D,EAAE,CAAC;QACxE,MAAM,OAAO,GAAG;YACd,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAc,EAAE,MAA+B,EAAE,EAAE;gBACnE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC/B,mEAAmE;gBACnE,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzE,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACzB,CAAC,CAAC;YACF,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;SAC7B,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,OAAc,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IAED,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACjF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,KAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,KAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACjF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAE9E,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,SAAS,GAAG;YAChB,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,EAAE,EAAE,WAAW;YAC3E,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,EAAE,EAAE,QAAQ;SACzE,CAAC;QACF,MAAM,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,2BAA2B;QAC/G,MAAM,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,uBAAuB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"booking-reconcile.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/booking-reconcile.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=booking-schema-migration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booking-schema-migration.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/booking-schema-migration.test.ts"],"names":[],"mappings":""}