@rubytech/create-sitedesk-code 0.1.524 → 0.1.525

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 (117) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +26 -0
  3. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +6 -0
  4. package/payload/platform/plugins/memory/PLUGIN.md +10 -0
  5. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js +5 -1
  6. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js.map +1 -1
  7. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts +2 -0
  8. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts.map +1 -0
  9. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js +141 -0
  10. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js.map +1 -0
  11. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts +1 -1
  12. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts.map +1 -1
  13. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js +6 -0
  14. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js.map +1 -1
  15. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts +45 -0
  16. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts.map +1 -0
  17. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js +122 -0
  18. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js.map +1 -0
  19. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js +26 -0
  20. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js.map +1 -1
  21. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts +2 -0
  22. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts.map +1 -0
  23. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js +201 -0
  24. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js.map +1 -0
  25. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
  26. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +89 -33
  27. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
  28. package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -0
  29. package/payload/platform/plugins/scheduling/PLUGIN.md +6 -0
  30. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts +2 -0
  31. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts.map +1 -0
  32. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js +148 -0
  33. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js.map +1 -0
  34. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts +83 -6
  35. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts.map +1 -1
  36. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js +90 -5
  37. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js.map +1 -1
  38. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +111 -2
  39. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -1
  40. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +38 -0
  41. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  42. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +116 -0
  43. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  44. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +13 -1
  45. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  46. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +81 -8
  47. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
  48. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js +39 -0
  49. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js.map +1 -1
  50. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
  51. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +9 -1
  52. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  53. package/payload/platform/scripts/__tests__/check-canonical-tool-names.test.sh +162 -0
  54. package/payload/platform/scripts/__tests__/check-no-task-id-leaks.test.sh +53 -0
  55. package/payload/platform/scripts/__tests__/task-id-citation.test.sh +72 -0
  56. package/payload/platform/scripts/check-canonical-tool-names.mjs +36 -4
  57. package/payload/platform/scripts/check-no-task-id-leaks.mjs +80 -62
  58. package/payload/platform/scripts/lib/canonical-tool-names.mjs +130 -26
  59. package/payload/platform/scripts/lib/task-id-citation.mjs +67 -0
  60. package/payload/platform/.docs/search-surface-contract.md +0 -58
  61. package/payload/platform/docs/superpowers/plans/2026-06-02-task-610-follower-202-retry.md +0 -372
  62. package/payload/platform/docs/superpowers/plans/2026-06-04-public-agent-knowledge-delivery.md +0 -230
  63. package/payload/platform/docs/superpowers/plans/2026-06-23-account-filesystem-schema.md +0 -544
  64. package/payload/platform/docs/superpowers/plans/2026-07-11-task-1557-operator-on-behalf-preference-attribution.md +0 -542
  65. package/payload/platform/docs/superpowers/plans/2026-07-13-account-schema-ontology-projection.md +0 -547
  66. package/payload/platform/docs/superpowers/plans/2026-07-14-graph-top-level-labels-ontology-single-source.md +0 -458
  67. package/payload/platform/docs/superpowers/plans/2026-07-17-task-1736-retire-mcp-stderr-tee.md +0 -397
  68. package/payload/platform/docs/superpowers/plans/2026-07-18-graph-native-ledger.md +0 -807
  69. package/payload/platform/docs/superpowers/plans/2026-07-18-ledger-write-path-fix.md +0 -109
  70. package/payload/platform/docs/superpowers/plans/2026-07-20-storage-pages-create.md +0 -82
  71. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1704-data-portal-standing-audit.md +0 -673
  72. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1789-reseat-channel-row-fork.md +0 -1244
  73. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1818-loop-gate-app-routes.md +0 -462
  74. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1819-top-level-label-allowlist.md +0 -321
  75. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1829-platform-ui-typecheck.md +0 -830
  76. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1831-data-portal-class-derived-allowlist.md +0 -2177
  77. package/payload/platform/docs/superpowers/plans/2026-07-21-graph-caption-resolver.md +0 -124
  78. package/payload/platform/docs/superpowers/plans/2026-07-21-task-1877-bash-schema-enforcement.md +0 -107
  79. package/payload/platform/docs/superpowers/plans/2026-07-21-task-1887-reconcile-allowed-top-level.md +0 -205
  80. package/payload/platform/docs/superpowers/plans/2026-07-22-task-1899-reconcile-report-only.md +0 -748
  81. package/payload/platform/docs/superpowers/plans/2026-07-22-task-1910-two-way-portal-exchange.md +0 -1716
  82. package/payload/platform/docs/superpowers/plans/2026-07-23-task-1930-adherence-enforcement.md +0 -422
  83. package/payload/platform/docs/superpowers/plans/2026-07-24-task-1942-subaccount-switcher-brand-head.md +0 -327
  84. package/payload/platform/docs/superpowers/plans/2026-07-25-task-1974-uploads-intake-inbox.md +0 -235
  85. package/payload/platform/docs/superpowers/plans/2026-07-25-task-1976-intra-folder-hygiene.md +0 -215
  86. package/payload/platform/docs/superpowers/plans/2026-07-26-task-1902-account-owned-entry-declarations.md +0 -555
  87. package/payload/platform/docs/superpowers/plans/2026-07-26-task-1926-portal-push-concurrency-guard.md +0 -482
  88. package/payload/platform/docs/superpowers/plans/2026-07-26-task-2023-sidebar-sessions-async-reads.md +0 -394
  89. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2016-disabled-agent-routing.md +0 -624
  90. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2028-declared-file-write-deny.md +0 -303
  91. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2052-account-machinery-write-fence.md +0 -250
  92. package/payload/platform/docs/superpowers/plans/2026-07-28-task-2097-email-signature-set.md +0 -65
  93. package/payload/platform/docs/superpowers/specs/2026-06-02-task-610-follower-202-retry-design.md +0 -116
  94. package/payload/platform/docs/superpowers/specs/2026-06-23-account-filesystem-schema-design.md +0 -170
  95. package/payload/platform/docs/superpowers/specs/2026-07-11-task-1557-operator-on-behalf-preference-attribution-design.md +0 -90
  96. package/payload/platform/docs/superpowers/specs/2026-07-13-account-schema-ontology-projection-design.md +0 -178
  97. package/payload/platform/docs/superpowers/specs/2026-07-14-graph-top-level-labels-ontology-single-source-design.md +0 -119
  98. package/payload/platform/docs/superpowers/specs/2026-07-17-task-1736-retire-mcp-stderr-tee-design.md +0 -128
  99. package/payload/platform/docs/superpowers/specs/2026-07-18-graph-native-ledger-design.md +0 -241
  100. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1704-data-portal-standing-audit-design.md +0 -177
  101. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1789-reseat-channel-row-fork-design.md +0 -201
  102. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1818-loop-gate-app-routes-design.md +0 -217
  103. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1819-top-level-label-allowlist-design.md +0 -80
  104. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1820-cpu-triage-admin-tools-design.md +0 -97
  105. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1829-platform-ui-typecheck-design.md +0 -163
  106. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1831-data-portal-class-derived-allowlist-design.md +0 -163
  107. package/payload/platform/docs/superpowers/specs/2026-07-22-task-1899-reconcile-report-only-design.md +0 -121
  108. package/payload/platform/docs/superpowers/specs/2026-07-22-task-1910-two-way-portal-exchange-design.md +0 -103
  109. package/payload/platform/docs/superpowers/specs/2026-07-23-task-1930-adherence-enforcement-design.md +0 -81
  110. package/payload/platform/docs/superpowers/specs/2026-07-24-task-1942-subaccount-switcher-brand-head-design.md +0 -35
  111. package/payload/platform/docs/superpowers/specs/2026-07-26-task-1902-account-owned-entry-declarations-design.md +0 -232
  112. package/payload/platform/docs/superpowers/specs/2026-07-26-task-1926-portal-push-concurrency-guard-design.md +0 -200
  113. package/payload/platform/docs/superpowers/specs/2026-07-26-task-2014-ui-suite-nondeterminism-design.md +0 -169
  114. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2016-disabled-agent-routing-design.md +0 -139
  115. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2028-declared-file-write-deny-design.md +0 -127
  116. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2052-account-machinery-write-fence-design.md +0 -150
  117. package/payload/platform/docs/superpowers/specs/2026-07-28-task-2097-email-signature-set-design.md +0 -155
@@ -0,0 +1,148 @@
1
+ // Task 2148 — two halves of the same blindness.
2
+ //
3
+ // `memory-update` retyped five :Meeting timestamps to strings on one account.
4
+ // A STRING-to-DATETIME comparison in Neo4j is NULL, so every calendar reader
5
+ // dropped those rows silently and the booking page published a golf afternoon
6
+ // as open time. The standing drift audit that exists to catch exactly that read
7
+ // `MATCH (b:ConnectorBusy ...)` and nothing else, so it reported
8
+ // `busy=3 conflicts=0 outcome=verified` throughout — an all-clear that was
9
+ // structurally incapable of seeing a meeting.
10
+ //
11
+ // `classifyMeetingRetype` decides which corrupted rows the standing repair can
12
+ // restore. `censusBusyIntervals` splits the busy census by source, so one total
13
+ // can no longer read as healthy when the meeting leg is empty.
14
+ import { describe, it, expect } from "vitest";
15
+ import { classifyRetypeError, censusBusyIntervals, classifyPublishedDrift, planBlockWrites, MEETING_RETYPE_SELECT, MEETING_RETYPE_APPLY, BUSY_UNION_SELECT, } from "../booking-reconcile.js";
16
+ describe("classifyRetypeError", () => {
17
+ it("calls a Neo4j client error a verdict on the value", () => {
18
+ const err = Object.assign(new Error("Text cannot be parsed to a DateTime"), {
19
+ code: "Neo.ClientError.Statement.ArgumentError",
20
+ });
21
+ expect(classifyRetypeError(err)).toBe("unparseable");
22
+ });
23
+ it("calls anything else a failed write, not a bad value", () => {
24
+ // A timeout says nothing about the timestamp. Counting it as unparseable
25
+ // would tell the operator a row needs a human when it needs a retry.
26
+ const transient = Object.assign(new Error("Connection was closed"), {
27
+ code: "Neo.TransientError.General.DatabaseUnavailable",
28
+ });
29
+ expect(classifyRetypeError(transient)).toBe("failed");
30
+ expect(classifyRetypeError(new Error("socket hang up"))).toBe("failed");
31
+ expect(classifyRetypeError(null)).toBe("failed");
32
+ });
33
+ });
34
+ describe("the retype Cypher", () => {
35
+ it("selects only meetings whose bounds are stored as strings", () => {
36
+ // A repaired row stops matching, which is what keeps this a standing repair
37
+ // rather than a migration someone has to remember to delete.
38
+ expect(MEETING_RETYPE_SELECT).toContain("MATCH (m:Meeting {accountId: $accountId})");
39
+ expect(MEETING_RETYPE_SELECT).toContain("valueType(m.startsAt) STARTS WITH 'STRING'");
40
+ expect(MEETING_RETYPE_SELECT).toContain("valueType(m.endsAt) STARTS WITH 'STRING'");
41
+ });
42
+ it("rebuilds each string bound with datetime() and leaves a null bound alone", () => {
43
+ expect(MEETING_RETYPE_APPLY).toContain("datetime($startsAt)");
44
+ expect(MEETING_RETYPE_APPLY).toContain("datetime($endsAt)");
45
+ expect(MEETING_RETYPE_APPLY).toContain("$startsAt IS NULL");
46
+ expect(MEETING_RETYPE_APPLY).toContain("$endsAt IS NULL");
47
+ });
48
+ it("re-asserts the label and account on the write, not just on the select", () => {
49
+ // Account scope is a property; a write carrying none cannot enforce it.
50
+ expect(MEETING_RETYPE_APPLY).toContain("MATCH (m:Meeting {accountId: $accountId})");
51
+ });
52
+ });
53
+ describe("censusBusyIntervals", () => {
54
+ const meeting = (start, end) => ({ start, end, src: "meeting" });
55
+ const connector = (start, end) => ({ start, end, src: "connector" });
56
+ it("splits the census by source so one total cannot hide an empty meeting leg", () => {
57
+ const census = censusBusyIntervals([
58
+ meeting("2026-07-29T13:30:00Z", "2026-07-29T17:30:00Z"),
59
+ connector("2026-07-30T09:00:00Z", "2026-07-30T10:00:00Z"),
60
+ connector("2026-07-31T09:00:00Z", "2026-07-31T10:00:00Z"),
61
+ ]);
62
+ expect(census.busyMeetings).toBe(1);
63
+ expect(census.busyConnector).toBe(2);
64
+ expect(census.unusable).toBe(0);
65
+ expect(census.usable).toHaveLength(3);
66
+ });
67
+ it("distinguishes three connector intervals from three meetings", () => {
68
+ // `busy=3` could mean either, which is exactly why the old line read as
69
+ // healthy while five meetings were invisible.
70
+ const connectorsOnly = censusBusyIntervals([
71
+ connector("2026-07-29T09:00:00Z", "2026-07-29T10:00:00Z"),
72
+ connector("2026-07-29T11:00:00Z", "2026-07-29T12:00:00Z"),
73
+ connector("2026-07-29T13:00:00Z", "2026-07-29T14:00:00Z"),
74
+ ]);
75
+ expect(connectorsOnly.busyMeetings).toBe(0);
76
+ expect(connectorsOnly.busyConnector).toBe(3);
77
+ });
78
+ it("excludes a row with an unparseable start and counts it", () => {
79
+ const census = censusBusyIntervals([
80
+ meeting("not-a-time", "2026-07-29T17:30:00Z"),
81
+ meeting("2026-07-29T13:30:00Z", "2026-07-29T17:30:00Z"),
82
+ ]);
83
+ expect(census.usable).toEqual([
84
+ { start: "2026-07-29T13:30:00Z", end: "2026-07-29T17:30:00Z" },
85
+ ]);
86
+ expect(census.busyMeetings).toBe(1);
87
+ expect(census.unusable).toBe(1);
88
+ });
89
+ it("gives a meeting with no end the same end the public page gives it", () => {
90
+ // `:Meeting.endsAt` is nullable by schema and the free/busy route substitutes
91
+ // start + durationMins. Dropping the row instead would make a real conflict
92
+ // unreportable — this task's own failure shape.
93
+ const census = censusBusyIntervals([{ start: "2026-07-29T13:30:00Z", end: null, src: "meeting" }], 30);
94
+ expect(census.usable).toEqual([
95
+ { start: "2026-07-29T13:30:00Z", end: "2026-07-29T14:00:00.000Z" },
96
+ ]);
97
+ expect(census.busyMeetings).toBe(1);
98
+ expect(census.unusable).toBe(0);
99
+ });
100
+ it("counts a no-end meeting as unusable only when no duration is configured", () => {
101
+ const census = censusBusyIntervals([{ start: "2026-07-29T13:30:00Z", end: null, src: "meeting" }]);
102
+ expect(census.usable).toEqual([]);
103
+ expect(census.unusable).toBe(1);
104
+ });
105
+ it("reads UNION ALL so two meetings sharing bounds are counted twice", () => {
106
+ // Plain UNION de-duplicates the whole result, so a double booking or a
107
+ // re-ingested export would collapse and the census would undercount.
108
+ expect(BUSY_UNION_SELECT).toContain("UNION ALL");
109
+ });
110
+ it("keeps the connector leg separate, because block-writing depends on it alone", () => {
111
+ // planBlockWrites treats a non-empty busy set as proof the connector sync is
112
+ // alive. Handed the widened set, a deauthorised connector on an account with
113
+ // any meeting reads as healthy and every held block row is deleted.
114
+ const census = censusBusyIntervals([
115
+ meeting("2026-07-29T13:30:00Z", "2026-07-29T17:30:00Z"),
116
+ ]);
117
+ expect(census.connectorOnly).toEqual([]);
118
+ expect(census.usable).toHaveLength(1);
119
+ const plan = planBlockWrites({
120
+ publishedReadable: true,
121
+ busyReadable: true,
122
+ published: [{ start: "2026-07-29T14:00:00Z", end: "2026-07-29T14:30:00Z" }],
123
+ busy: census.connectorOnly,
124
+ taken: new Set(),
125
+ current: [{ bookingId: "blk-1", slotStart: "2026-07-29T14:00:00Z" }],
126
+ nowMs: Date.parse("2026-07-29T09:00:00Z"),
127
+ });
128
+ expect(plan.outcome).toBe("no-busy-data");
129
+ expect(plan.diff).toEqual({ toInsert: [], toDelete: [] });
130
+ });
131
+ it("makes a meeting-only conflict visible to the unchanged classifier", () => {
132
+ // The reported symptom, reduced: Adam's golf afternoon is a :Meeting with no
133
+ // :ConnectorBusy row, and the page published a slot inside it. Against the
134
+ // ConnectorBusy-only read the busy list was empty and conflicts was 0.
135
+ const published = [{ start: "2026-07-29T14:00:00Z", end: "2026-07-29T14:30:00Z" }];
136
+ const census = censusBusyIntervals([meeting("2026-07-29T13:30:00Z", "2026-07-29T17:30:00Z")]);
137
+ expect(classifyPublishedDrift(published, census.usable).conflicts).toBe(1);
138
+ expect(classifyPublishedDrift(published, []).conflicts).toBe(0);
139
+ });
140
+ it("reads both labels in one statement, tagged by source", () => {
141
+ expect(BUSY_UNION_SELECT).toContain("MATCH (m:Meeting {accountId: $accountId})");
142
+ expect(BUSY_UNION_SELECT).toContain("MATCH (b:ConnectorBusy {accountId: $accountId})");
143
+ expect(BUSY_UNION_SELECT).toContain("UNION");
144
+ expect(BUSY_UNION_SELECT).toContain("'meeting' AS src");
145
+ expect(BUSY_UNION_SELECT).toContain("'connector' AS src");
146
+ });
147
+ });
148
+ //# sourceMappingURL=meeting-retype.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-retype.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/meeting-retype.test.ts"],"names":[],"mappings":"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"}
@@ -140,20 +140,97 @@ export interface PublishedDrift {
140
140
  outcome: PublishedDriftOutcome;
141
141
  /** Size of the published-open set the comparison ran against. */
142
142
  published: number;
143
- /** Size of the connector-busy set the comparison ran against. */
143
+ /** Size of the busy set the comparison ran against, both labels together.
144
+ * Task 2148 split the reported census into `busyMeetings` / `busyConnector`
145
+ * at the call site: one total cannot distinguish "3 connector intervals, no
146
+ * meetings" from "3 meetings, no connector", and that ambiguity is what made
147
+ * `busy=3 conflicts=0` read as healthy while five meetings were invisible. */
144
148
  busy: number;
145
149
  /** Published-open slots overlapping any busy interval. Necessarily 0 on the
146
150
  * two degraded outcomes, which is why the outcome token has to be read. */
147
151
  conflicts: number;
148
152
  }
149
153
  /**
150
- * Classify published-open booking slots against the connector-busy set — the
151
- * drift the standing audit reports. `outcome: "verified"` with a nonzero
152
- * `conflicts` means the booking page is currently offering a slot the connector
153
- * shows busy. An empty published set reports `no-published-slots` even when the
154
- * busy set is also empty: the site never publishing is the upstream condition.
154
+ * Classify published-open booking slots against the busy set — the drift the
155
+ * standing audit reports. The busy set is both labels the public free/busy page
156
+ * subtracts, `:Meeting` and `:ConnectorBusy`, so `outcome: "verified"` with a
157
+ * nonzero `conflicts` means the booking page is currently offering a slot that
158
+ * is genuinely taken, whether by a meeting or by a connector block. An empty
159
+ * published set reports `no-published-slots` even when the busy set is also
160
+ * empty: the site never publishing is the upstream condition. `no-busy-data`
161
+ * now means neither label held a usable interval.
155
162
  */
156
163
  export declare function classifyPublishedDrift(published: BusyInterval[], busy: BusyInterval[]): PublishedDrift;
164
+ /** A `:Meeting` with at least one string-typed bound. A null member means that
165
+ * bound already carries a temporal type and must be left alone. */
166
+ export interface MeetingRetypeRow {
167
+ meetingId: string;
168
+ startsAt: string | null;
169
+ endsAt: string | null;
170
+ }
171
+ /** Meetings still holding a string bound. A repaired row stops matching, which
172
+ * is what lets this stay a standing repair rather than a one-off migration. */
173
+ export declare const MEETING_RETYPE_SELECT = "\n MATCH (m:Meeting {accountId: $accountId})\n WHERE valueType(m.startsAt) STARTS WITH 'STRING' OR valueType(m.endsAt) STARTS WITH 'STRING'\n RETURN elementId(m) AS meetingId,\n CASE WHEN valueType(m.startsAt) STARTS WITH 'STRING' THEN m.startsAt ELSE null END AS startsAt,\n CASE WHEN valueType(m.endsAt) STARTS WITH 'STRING' THEN m.endsAt ELSE null END AS endsAt\n";
174
+ /** Rebuild each string bound as a ZONED DATETIME. A null param leaves that
175
+ * bound exactly as it is, so a half-corrupted row is half-repaired and its
176
+ * correctly-typed bound is never rewritten. The label and `accountId` are
177
+ * re-asserted here rather than trusted from the select: account scope is a
178
+ * property, and a write that carries no property cannot enforce it. */
179
+ export declare const MEETING_RETYPE_APPLY = "\n MATCH (m:Meeting {accountId: $accountId}) WHERE elementId(m) = $meetingId\n SET m.startsAt = CASE WHEN $startsAt IS NULL THEN m.startsAt ELSE datetime($startsAt) END,\n m.endsAt = CASE WHEN $endsAt IS NULL THEN m.endsAt ELSE datetime($endsAt) END\n";
180
+ /** Why a scanned row was not repaired. `unparseable` is a value no `datetime()`
181
+ * can rebuild and needs a human; `failed` is the write not landing — a driver
182
+ * timeout, a disconnect — which says nothing about the value and will be
183
+ * retried on the next tick. Neo4j names the difference in the error code, so
184
+ * the two are never reported under one count. */
185
+ export type RetypeFailure = "unparseable" | "failed";
186
+ export declare function classifyRetypeError(err: unknown): RetypeFailure;
187
+ /** A raw busy row, tagged with the label it came from. `end` is nullable here
188
+ * and nowhere downstream: `:Meeting.endsAt` is null when the event carries no
189
+ * end, and `censusBusyIntervals` resolves that before any comparison. */
190
+ export interface BusySourceRow {
191
+ start: string;
192
+ end: string | null;
193
+ src: "meeting" | "connector";
194
+ }
195
+ /** The busy set the public free/busy page computes from: meetings AND connector
196
+ * blocks. The old audit read only the second, so any meeting conflict was
197
+ * outside what it could measure.
198
+ *
199
+ * `UNION ALL`, not `UNION`: plain `UNION` de-duplicates the whole result, so two
200
+ * distinct meetings sharing bounds (a double booking, a re-ingested export)
201
+ * would collapse and be counted once. The census only earns its keep if the
202
+ * count is trustworthy, and the `src` column alone prevents cross-leg collapse,
203
+ * not collapse within a leg. */
204
+ export declare const BUSY_UNION_SELECT = "\n MATCH (m:Meeting {accountId: $accountId})\n RETURN toString(m.startsAt) AS start, toString(m.endsAt) AS end, 'meeting' AS src\n UNION ALL\n MATCH (b:ConnectorBusy {accountId: $accountId})\n RETURN toString(b.startsAt) AS start, toString(b.endsAt) AS end, 'connector' AS src\n";
205
+ export interface BusyCensus {
206
+ /** Every usable interval, both legs — what `classifyPublishedDrift` compares. */
207
+ usable: BusyInterval[];
208
+ /** The connector leg alone. `planBlockWrites` must keep reading this and not
209
+ * `usable`: its empty-set rule is a liveness test for the connector sync, and
210
+ * a set widened with meetings would report a deauthorised connector as live
211
+ * and delete every held block row. */
212
+ connectorOnly: BusyInterval[];
213
+ /** Counts are over `usable` only: a count that included rows the comparison
214
+ * ignored would be the same unqualified number this audit exists to remove. */
215
+ busyMeetings: number;
216
+ busyConnector: number;
217
+ /** Rows excluded for a bound no substitution could resolve. Reported on the
218
+ * audit line — an interval dropped without a count is the silent drop this
219
+ * task exists to remove. */
220
+ unusable: number;
221
+ }
222
+ /**
223
+ * Reduce the raw busy rows to the intervals the comparison can run against.
224
+ *
225
+ * `:Meeting.endsAt` is nullable by schema — `writeMeeting` stores null when an
226
+ * event carries no end — and the public free/busy route substitutes
227
+ * `start + durationMins` for those rows rather than ignoring them. This mirrors
228
+ * that substitution, because a no-end meeting IS busy on the page: dropping it
229
+ * would make a real conflict unreportable, which is this task's own failure
230
+ * shape. `durationMins` comes from the same `calendar-availability.json` the
231
+ * page reads; when it is absent the row has no resolvable end and is counted.
232
+ */
233
+ export declare function censusBusyIntervals(rows: BusySourceRow[], durationMins?: number): BusyCensus;
157
234
  /** A slot as it appears in the published `availability_snapshot` payload. */
158
235
  export interface PublishedSlot {
159
236
  start: string;
@@ -1 +1 @@
1
- {"version":3,"file":"booking-reconcile.d.ts","sourceRoot":"","sources":["../../src/lib/booking-reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"booking-reconcile.d.ts","sourceRoot":"","sources":["../../src/lib/booking-reconcile.ts"],"names":[],"mappings":"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"}
@@ -220,11 +220,14 @@ function intervalsOverlap(a, b) {
220
220
  return aS < bE && bS < aE;
221
221
  }
222
222
  /**
223
- * Classify published-open booking slots against the connector-busy set — the
224
- * drift the standing audit reports. `outcome: "verified"` with a nonzero
225
- * `conflicts` means the booking page is currently offering a slot the connector
226
- * shows busy. An empty published set reports `no-published-slots` even when the
227
- * busy set is also empty: the site never publishing is the upstream condition.
223
+ * Classify published-open booking slots against the busy set — the drift the
224
+ * standing audit reports. The busy set is both labels the public free/busy page
225
+ * subtracts, `:Meeting` and `:ConnectorBusy`, so `outcome: "verified"` with a
226
+ * nonzero `conflicts` means the booking page is currently offering a slot that
227
+ * is genuinely taken, whether by a meeting or by a connector block. An empty
228
+ * published set reports `no-published-slots` even when the busy set is also
229
+ * empty: the site never publishing is the upstream condition. `no-busy-data`
230
+ * now means neither label held a usable interval.
228
231
  */
229
232
  export function classifyPublishedDrift(published, busy) {
230
233
  let conflicts = 0;
@@ -235,6 +238,88 @@ export function classifyPublishedDrift(published, busy) {
235
238
  const outcome = published.length === 0 ? "no-published-slots" : busy.length === 0 ? "no-busy-data" : "verified";
236
239
  return { outcome, published: published.length, busy: busy.length, conflicts };
237
240
  }
241
+ /** Meetings still holding a string bound. A repaired row stops matching, which
242
+ * is what lets this stay a standing repair rather than a one-off migration. */
243
+ export const MEETING_RETYPE_SELECT = `
244
+ MATCH (m:Meeting {accountId: $accountId})
245
+ WHERE valueType(m.startsAt) STARTS WITH 'STRING' OR valueType(m.endsAt) STARTS WITH 'STRING'
246
+ RETURN elementId(m) AS meetingId,
247
+ CASE WHEN valueType(m.startsAt) STARTS WITH 'STRING' THEN m.startsAt ELSE null END AS startsAt,
248
+ CASE WHEN valueType(m.endsAt) STARTS WITH 'STRING' THEN m.endsAt ELSE null END AS endsAt
249
+ `;
250
+ /** Rebuild each string bound as a ZONED DATETIME. A null param leaves that
251
+ * bound exactly as it is, so a half-corrupted row is half-repaired and its
252
+ * correctly-typed bound is never rewritten. The label and `accountId` are
253
+ * re-asserted here rather than trusted from the select: account scope is a
254
+ * property, and a write that carries no property cannot enforce it. */
255
+ export const MEETING_RETYPE_APPLY = `
256
+ MATCH (m:Meeting {accountId: $accountId}) WHERE elementId(m) = $meetingId
257
+ SET m.startsAt = CASE WHEN $startsAt IS NULL THEN m.startsAt ELSE datetime($startsAt) END,
258
+ m.endsAt = CASE WHEN $endsAt IS NULL THEN m.endsAt ELSE datetime($endsAt) END
259
+ `;
260
+ export function classifyRetypeError(err) {
261
+ const code = err?.code;
262
+ return typeof code === "string" && code.startsWith("Neo.ClientError.") ? "unparseable" : "failed";
263
+ }
264
+ /** The busy set the public free/busy page computes from: meetings AND connector
265
+ * blocks. The old audit read only the second, so any meeting conflict was
266
+ * outside what it could measure.
267
+ *
268
+ * `UNION ALL`, not `UNION`: plain `UNION` de-duplicates the whole result, so two
269
+ * distinct meetings sharing bounds (a double booking, a re-ingested export)
270
+ * would collapse and be counted once. The census only earns its keep if the
271
+ * count is trustworthy, and the `src` column alone prevents cross-leg collapse,
272
+ * not collapse within a leg. */
273
+ export const BUSY_UNION_SELECT = `
274
+ MATCH (m:Meeting {accountId: $accountId})
275
+ RETURN toString(m.startsAt) AS start, toString(m.endsAt) AS end, 'meeting' AS src
276
+ UNION ALL
277
+ MATCH (b:ConnectorBusy {accountId: $accountId})
278
+ RETURN toString(b.startsAt) AS start, toString(b.endsAt) AS end, 'connector' AS src
279
+ `;
280
+ /**
281
+ * Reduce the raw busy rows to the intervals the comparison can run against.
282
+ *
283
+ * `:Meeting.endsAt` is nullable by schema — `writeMeeting` stores null when an
284
+ * event carries no end — and the public free/busy route substitutes
285
+ * `start + durationMins` for those rows rather than ignoring them. This mirrors
286
+ * that substitution, because a no-end meeting IS busy on the page: dropping it
287
+ * would make a real conflict unreportable, which is this task's own failure
288
+ * shape. `durationMins` comes from the same `calendar-availability.json` the
289
+ * page reads; when it is absent the row has no resolvable end and is counted.
290
+ */
291
+ export function censusBusyIntervals(rows, durationMins) {
292
+ const usable = [];
293
+ const connectorOnly = [];
294
+ let busyMeetings = 0;
295
+ let busyConnector = 0;
296
+ let unusable = 0;
297
+ for (const row of rows) {
298
+ const startMs = Date.parse(row.start);
299
+ if (Number.isNaN(startMs)) {
300
+ unusable++;
301
+ continue;
302
+ }
303
+ let end = row.end;
304
+ if (end === null || end === undefined || Number.isNaN(Date.parse(end))) {
305
+ if (typeof durationMins !== "number" || !(durationMins > 0)) {
306
+ unusable++;
307
+ continue;
308
+ }
309
+ end = new Date(startMs + durationMins * 60_000).toISOString();
310
+ }
311
+ const interval = { start: row.start, end };
312
+ usable.push(interval);
313
+ if (row.src === "meeting") {
314
+ busyMeetings++;
315
+ }
316
+ else {
317
+ busyConnector++;
318
+ connectorOnly.push(interval);
319
+ }
320
+ }
321
+ return { usable, connectorOnly, busyMeetings, busyConnector, unusable };
322
+ }
238
323
  /**
239
324
  * The published slots to block, given the connector-busy set.
240
325
  *
@@ -1 +1 @@
1
- {"version":3,"file":"booking-reconcile.js","sourceRoot":"","sources":["../../src/lib/booking-reconcile.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiBzC,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,WAAW,SAAS,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAgB,EAChB,SAAiB,EACjB,OAAmB;IAEnB,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC;;;;;;;;;;;;;;;;;;+CAkB2C,EAC3C;QACE,SAAS;QACT,GAAG;QACH,KAAK,EAAE,YAAY,OAAO,CAAC,IAAI,EAAE;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;KACzB,CACF,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAY,CAAC;IAChE,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;IAEnE,qEAAqE;IACrE,yEAAyE;IACzE,wEAAwE;IACxE,oBAAoB;IACpB,MAAM,OAAO,CAAC,GAAG,CACf;;;;;;;0GAOsG,EACtG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CACnE,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAED,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,sCAAsC,CAAC;AAEjF;8EAC8E;AAC9E,MAAM,CAAC,MAAM,uBAAuB,GAClC,oGAAoG,0BAA0B,cAAc,CAAC;AAE/I;yDACyD;AACzD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAgB,EAAE,SAAiB;IAC/E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3B,4FAA4F,EAC5F,EAAE,SAAS,EAAE,CACd,CAAC;IACF,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAS,EACT,WAAwB;IAExB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAqCD;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,QAA2B,EAC3B,WAAqB,EACrB,KAAa;IAEb,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACxD,6EAA6E;IAC7E,6EAA6E;IAC7E,gEAAgE;IAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,OAAO;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SACnC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,gBAAgB,EAAE,QAAQ,CAAC,MAAM;QACjC,mBAAmB,EAAE,OAAO,CAAC,MAAM;QACnC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;QAC5F,mBAAmB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAClG,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAa;IAChD,sEAAsE;IACtE,qEAAqE;IACrE,2EAA2E;CAC5E,CAAC;AAEF;+CAC+C;AAC/C,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;4DAE4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E;;qFAEqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAChC,yFAAyF;IACzF,8FAA8F;IAC9F,+FAA+F;IAC/F,iGAAiG;IACjG,iGAAiG;IACjG,mDAAmD,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAgB,EAChB,SAAiB,EACjB,QAA6B;IAE7B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B;;0BAEsB,EACtB,EAAE,SAAS,EAAE,CACd,CAAC;IACF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAY,CAAC;IAClD,MAAM,CAAC,GACL,GAAG,IAAI,OAAQ,GAAmC,CAAC,QAAQ,KAAK,UAAU;QACxE,CAAC,CAAE,GAAkC,CAAC,QAAQ,EAAE;QAChD,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAExC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,CAAC,GAAG,CACf;;;;;;;;;;;;;;;QAeI,EACJ;QACE,OAAO;QACP,SAAS;QACT,UAAU,EAAE,cAAc;QAC1B,GAAG;QACH,YAAY,EAAE,QAAQ,CAAC,OAAO;QAC9B,gBAAgB,EAAE,QAAQ,CAAC,WAAW;QACtC,WAAW,EAAE,qBAAqB;KACnC,CACF,CAAC;IACF,OAAO,aAAa,CAAC;AACvB,CAAC;AAOD;;+EAE+E;AAC/E,SAAS,gBAAgB,CAAC,CAAe,EAAE,CAAe;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAC5B,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAC5B,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5B,CAAC;AAkBD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAyB,EAAE,IAAoB;IACpF,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAAE,SAAS,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,OAAO,GACX,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC;IAClG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;AAChF,CAAC;AAYD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAA0B,EAC1B,IAAoB,EACpB,KAAkB,EAClB,KAAa;IAEb,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,4EAA4E;QAC5E,6EAA6E;QAC7E,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,KAAK;YAAE,OAAO,KAAK,CAAC;QAC3D,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAaD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,OAAwB,EAAE,OAAmB;IACzE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3E,CAAC;AAED;+EAC+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,8DAA8D,CAAC;AAEhG;gFACgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAC3B,2FAA2F;IAC3F,kDAAkD,CAAC;AAErD;oDACoD;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,0DAA0D,CAAC;AAE3F;8EAC8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,IAAmB,EAAE,SAAiB,EAAE,MAAc;IACtF,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AACzE,CAAC;AAYD;;;;oEAIoE;AACpE,SAAS,gBAAgB,CAAC,EAAgB;IACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,SAAS,GAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAE5D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAC,KAW/B;IACC,IAAI,CAAC,KAAK,CAAC,iBAAiB;QAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACzF,IAAI,CAAC,KAAK,CAAC,YAAY;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtE,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC5F,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC5F,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1F,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"booking-reconcile.js","sourceRoot":"","sources":["../../src/lib/booking-reconcile.ts"],"names":[],"mappings":"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"}
@@ -8,13 +8,15 @@
8
8
  * cannot be told apart from a check that has stopped running.
9
9
  */
10
10
  import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
11
- import { auditRoutineRoster, auditDispatchModeNone, auditNullTimezone, dispatchGapReason, } from "../agent-turn-dispatch.js";
11
+ import { auditRoutineRoster, auditDispatchModeNone, auditNullTimezone, auditStartDateNeverFired, dispatchGapReason, } from "../agent-turn-dispatch.js";
12
12
  import { ROUTINE_ROSTER_KEYS } from "../../../../../../lib/routine-templates/dist/index.js";
13
13
  const ACCT_A = "aaaaaaaa-1111-4111-8111-111111111111";
14
14
  const ACCT_B = "bbbbbbbb-2222-4222-8222-222222222222";
15
15
  /** A driver whose one session returns the given records for every query. */
16
16
  function driverReturning(records) {
17
- const run = vi.fn(async () => ({
17
+ // The stub ignores the query, but it declares the real signature so a test
18
+ // can assert on the Cypher a check sends (Task 2146).
19
+ const run = vi.fn(async (_cypher, _params) => ({
18
20
  records: records.map((r) => ({ get: (k) => r[k] })),
19
21
  }));
20
22
  return { driver: { session: () => ({ run, close: vi.fn(async () => { }) }) }, run };
@@ -186,4 +188,111 @@ describe("auditNullTimezone", () => {
186
188
  expect(lines()[0]).toContain("op=null-timezone-error");
187
189
  });
188
190
  });
191
+ /**
192
+ * Task 2146 — the start date that passed with nothing dispatched.
193
+ *
194
+ * This failure emits nothing of its own: nothing ran, so nothing was logged,
195
+ * and the row reads healthy on every surface (status 'scheduled', a non-null
196
+ * nextRun, no error). Only periodic reconciliation of expected against actual
197
+ * reports it, so the zero line is asserted as hard as the fault line.
198
+ */
199
+ describe("auditStartDateNeverFired", () => {
200
+ // The measured sitedesk row: start 2026-07-26T07:00Z is itself an occurrence
201
+ // of "0 8 * * 0" in Europe/London, and nextRun was stored a week later.
202
+ const SKIPPED = {
203
+ accountId: ACCT_A,
204
+ eventId: "1767d0a8",
205
+ startDate: "2026-07-26T07:00:00.000Z",
206
+ recurrence: "0 8 * * 0",
207
+ timezone: "Europe/London",
208
+ };
209
+ it("names a recurring event whose start date passed with nothing dispatched", async () => {
210
+ const { driver } = driverReturning([SKIPPED]);
211
+ await auditStartDateNeverFired(driver, [ACCT_A]);
212
+ expect(lines()).toEqual([
213
+ "[schedule-audit] op=start-date-never-fired acct=aaaaaaaa count=1 eventIds=[1767d0a8]",
214
+ ]);
215
+ });
216
+ it("does not count a routine created between occurrences", async () => {
217
+ // The query cannot tell this apart from the row above: created on a Monday
218
+ // with a Sunday recurrence, it also has a past start date, a NULL
219
+ // lastTriggered and a nextRun later than its start. Nothing was skipped —
220
+ // its start date was never an occurrence, and its first fire is still
221
+ // ahead. Counting it would put this line above zero for every routine
222
+ // created between occurrences, which is most of them.
223
+ const { driver } = driverReturning([
224
+ { ...SKIPPED, eventId: "healthy", startDate: "2026-07-27T09:15:00.000Z" },
225
+ ]);
226
+ await auditStartDateNeverFired(driver, [ACCT_A]);
227
+ expect(lines()).toEqual([
228
+ "[schedule-audit] op=start-date-never-fired acct=aaaaaaaa count=0 eventIds=[]",
229
+ ]);
230
+ });
231
+ it("counts a start on the BST boundary that its own cron names", async () => {
232
+ // 2026-10-25 is the Sunday BST ends, so 08:00 Europe/London is 08:00 UTC.
233
+ // A zone-naive comparison would read this as an hour off and miss it.
234
+ const { driver } = driverReturning([
235
+ { ...SKIPPED, eventId: "bst", startDate: "2026-10-25T08:00:00.000Z" },
236
+ ]);
237
+ await auditStartDateNeverFired(driver, [ACCT_A]);
238
+ expect(lines()[0]).toContain("count=1 eventIds=[bst]");
239
+ });
240
+ it("does not throw or count on a recurrence that will not parse", async () => {
241
+ // One unparseable row must not lose the census for every account on the
242
+ // tick, and it cannot be shown to have skipped anything.
243
+ const { driver } = driverReturning([{ ...SKIPPED, eventId: "bad", recurrence: "not a cron" }]);
244
+ await auditStartDateNeverFired(driver, [ACCT_A]);
245
+ expect(lines()).toEqual([
246
+ "[schedule-audit] op=start-date-never-fired acct=aaaaaaaa count=0 eventIds=[]",
247
+ ]);
248
+ });
249
+ it("emits count=0 every tick when nothing was skipped", async () => {
250
+ // An event that has fired (lastTriggered set) and an event whose start is
251
+ // still in the future are both excluded by the predicate, so they reach
252
+ // this function as no row at all — which is exactly the tick that must
253
+ // still speak. A check that only speaks when something is wrong cannot be
254
+ // told apart from a check that has stopped running.
255
+ const { driver } = driverReturning([]);
256
+ await auditStartDateNeverFired(driver, [ACCT_A]);
257
+ expect(lines()).toEqual([
258
+ "[schedule-audit] op=start-date-never-fired acct=aaaaaaaa count=0 eventIds=[]",
259
+ ]);
260
+ });
261
+ it("excludes a fired event and a future start, comparing through datetime()", async () => {
262
+ // Three exclusions are query-side and the stub returns whatever it is
263
+ // handed regardless of the Cypher, so they are asserted on the query: an
264
+ // event that has fired carries lastTriggered, an event whose start has not
265
+ // yet passed fails the startDate comparison, and an event seeded correctly
266
+ // has nextRun equal to startDate rather than greater than it.
267
+ //
268
+ // Both comparisons convert through datetime(). startDate and nextRun are
269
+ // ISO STRINGS in mixed shapes on one account (2026-07-26T08:00:00 and
270
+ // 2026-08-02T19:00:00.000+01:00 both occur), so a bare string compared
271
+ // against datetime() is null for every row and would park the counter at
272
+ // zero behind a healthy log line.
273
+ const { driver, run } = driverReturning([]);
274
+ await auditStartDateNeverFired(driver, [ACCT_A]);
275
+ const cypher = String(run.mock.calls[0][0]);
276
+ expect(cypher).toContain("e.lastTriggered IS NULL");
277
+ expect(cypher).toContain("datetime(e.startDate) < datetime($now)");
278
+ expect(cypher).toContain("datetime(e.nextRun) > datetime(e.startDate)");
279
+ });
280
+ it("emits one line per local account, driven by the account list", async () => {
281
+ const { driver } = driverReturning([{ ...SKIPPED, eventId: "e1" }]);
282
+ await auditStartDateNeverFired(driver, [ACCT_A, ACCT_B]);
283
+ expect(lines()).toHaveLength(2);
284
+ expect(lines()[1]).toContain("acct=bbbbbbbb");
285
+ expect(lines()[1]).toContain("count=0");
286
+ });
287
+ it("does nothing when there are no local accounts", async () => {
288
+ const { driver, run } = driverReturning([]);
289
+ await auditStartDateNeverFired(driver, []);
290
+ expect(run).not.toHaveBeenCalled();
291
+ expect(lines()).toEqual([]);
292
+ });
293
+ it("never throws into the sweep", async () => {
294
+ await expect(auditStartDateNeverFired(driverThrowing("bolt down"), [ACCT_A])).resolves.toBeUndefined();
295
+ expect(lines()[0]).toContain("op=start-date-never-fired-error");
296
+ });
297
+ });
189
298
  //# sourceMappingURL=routine-roster-audit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routine-roster-audit.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/routine-roster-audit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routine-roster-audit.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/routine-roster-audit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAC;AAE5F,MAAM,MAAM,GAAG,sCAAsC,CAAC;AACtD,MAAM,MAAM,GAAG,sCAAsC,CAAC;AAEtD,4EAA4E;AAC5E,SAAS,eAAe,CAAC,OAAuC;IAC9D,2EAA2E;IAC3E,sDAAsD;IACtD,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAgB,EAAE,OAAiC,EAAE,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC5D,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;AACrF,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACd,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC,CAAC;YACF,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;SAC7B,CAAC;KACH,CAAC;AACJ,CAAC;AAED,IAAI,MAAmC,CAAC;AACxC,SAAS,KAAK;IACZ,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACrH,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC;AACH,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,WAAW,EAAE,CAAC;IACrB,EAAE,CAAC,aAAa,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,MAAM,kBAAkB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;YACtB,qDAAqD,mBAAmB,CAAC,MAAM,GAAG;gBAChF,WAAW,mBAAmB,CAAC,MAAM,aAAa;SACrD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;QAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,kBAAkB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,0EAA0E;QAC1E,4EAA4E;QAC5E,gCAAgC;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,kBAAkB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,MAAM,kBAAkB,CAAC,MAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,kBAAkB,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC1G,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,UAAU,GAAG,CAAC,IAA6B,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,IAAI;QAClB,gBAAgB,EAAE,IAAI;QACtB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,GAAG,IAAI;KACR,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,qBAAqB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,4EAA4E,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC;YACjC,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;SAC/F,CAAC,CAAC;QACH,MAAM,qBAAqB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,0EAA0E,CAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QACtG,MAAM,qBAAqB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,uEAAuE;QACvE,4EAA4E;QAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClG,MAAM,qBAAqB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,qBAAqB,CAAC,MAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;YACtB,0EAA0E;YAC1E,0EAA0E;SAC3E,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC,WAAW,CAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC7G,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,6EAA6E;IAC7E,yEAAyE;IACzE,8EAA8E;IAC9E,+BAA+B;IAC/B,MAAM,IAAI,GAAG;QACX,YAAY,EAAE,IAAI;QAClB,gBAAgB,EAAE,IAAI;QACtB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;KACjB,CAAC;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CACtG,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrF,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,iBAAiB,CAAC,MAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;YACtB,yDAAyD;YACzD,yDAAyD;SAC1D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,iBAAiB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,iBAAiB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,0BAA0B;QACrC,UAAU,EAAE,WAAW;QACvB,QAAQ,EAAE,eAAe;KAC1B,CAAC;IAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,MAAM,wBAAwB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;YACtB,sFAAsF;SACvF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,2EAA2E;QAC3E,kEAAkE;QAClE,0EAA0E;QAC1E,sEAAsE;QACtE,sEAAsE;QACtE,sDAAsD;QACtD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC;YACjC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,0BAA0B,EAAE;SAC1E,CAAC,CAAC;QACH,MAAM,wBAAwB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;YACtB,8EAA8E;SAC/E,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,0EAA0E;QAC1E,sEAAsE;QACtE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC;YACjC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,0BAA0B,EAAE;SACtE,CAAC,CAAC;QACH,MAAM,wBAAwB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,wEAAwE;QACxE,yDAAyD;QACzD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAC/F,MAAM,wBAAwB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;YACtB,8EAA8E;SAC/E,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,0EAA0E;QAC1E,oDAAoD;QACpD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,wBAAwB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;YACtB,8EAA8E;SAC/E,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,sEAAsE;QACtE,yEAAyE;QACzE,2EAA2E;QAC3E,2EAA2E;QAC3E,8DAA8D;QAC9D,EAAE;QACF,yEAAyE;QACzE,sEAAsE;QACtE,uEAAuE;QACvE,yEAAyE;QACzE,kCAAkC;QAClC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,wBAAwB,CAAC,MAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,wBAAwB,CAAC,MAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,wBAAwB,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,CACV,wBAAwB,CAAC,cAAc,CAAC,WAAW,CAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CACzE,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}