@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.
- package/package.json +1 -1
- package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +26 -0
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +6 -0
- package/payload/platform/plugins/memory/PLUGIN.md +10 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js +5 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js +141 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js +6 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts +45 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js +122 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js +26 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js +201 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +89 -33
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +6 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js +148 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts +83 -6
- package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js +90 -5
- package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +111 -2
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +38 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +116 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +13 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +81 -8
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js +39 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +9 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/scripts/__tests__/check-canonical-tool-names.test.sh +162 -0
- package/payload/platform/scripts/__tests__/check-no-task-id-leaks.test.sh +53 -0
- package/payload/platform/scripts/__tests__/task-id-citation.test.sh +72 -0
- package/payload/platform/scripts/check-canonical-tool-names.mjs +36 -4
- package/payload/platform/scripts/check-no-task-id-leaks.mjs +80 -62
- package/payload/platform/scripts/lib/canonical-tool-names.mjs +130 -26
- package/payload/platform/scripts/lib/task-id-citation.mjs +67 -0
- package/payload/platform/.docs/search-surface-contract.md +0 -58
- package/payload/platform/docs/superpowers/plans/2026-06-02-task-610-follower-202-retry.md +0 -372
- package/payload/platform/docs/superpowers/plans/2026-06-04-public-agent-knowledge-delivery.md +0 -230
- package/payload/platform/docs/superpowers/plans/2026-06-23-account-filesystem-schema.md +0 -544
- package/payload/platform/docs/superpowers/plans/2026-07-11-task-1557-operator-on-behalf-preference-attribution.md +0 -542
- package/payload/platform/docs/superpowers/plans/2026-07-13-account-schema-ontology-projection.md +0 -547
- package/payload/platform/docs/superpowers/plans/2026-07-14-graph-top-level-labels-ontology-single-source.md +0 -458
- package/payload/platform/docs/superpowers/plans/2026-07-17-task-1736-retire-mcp-stderr-tee.md +0 -397
- package/payload/platform/docs/superpowers/plans/2026-07-18-graph-native-ledger.md +0 -807
- package/payload/platform/docs/superpowers/plans/2026-07-18-ledger-write-path-fix.md +0 -109
- package/payload/platform/docs/superpowers/plans/2026-07-20-storage-pages-create.md +0 -82
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1704-data-portal-standing-audit.md +0 -673
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1789-reseat-channel-row-fork.md +0 -1244
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1818-loop-gate-app-routes.md +0 -462
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1819-top-level-label-allowlist.md +0 -321
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1829-platform-ui-typecheck.md +0 -830
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1831-data-portal-class-derived-allowlist.md +0 -2177
- package/payload/platform/docs/superpowers/plans/2026-07-21-graph-caption-resolver.md +0 -124
- package/payload/platform/docs/superpowers/plans/2026-07-21-task-1877-bash-schema-enforcement.md +0 -107
- package/payload/platform/docs/superpowers/plans/2026-07-21-task-1887-reconcile-allowed-top-level.md +0 -205
- package/payload/platform/docs/superpowers/plans/2026-07-22-task-1899-reconcile-report-only.md +0 -748
- package/payload/platform/docs/superpowers/plans/2026-07-22-task-1910-two-way-portal-exchange.md +0 -1716
- package/payload/platform/docs/superpowers/plans/2026-07-23-task-1930-adherence-enforcement.md +0 -422
- package/payload/platform/docs/superpowers/plans/2026-07-24-task-1942-subaccount-switcher-brand-head.md +0 -327
- package/payload/platform/docs/superpowers/plans/2026-07-25-task-1974-uploads-intake-inbox.md +0 -235
- package/payload/platform/docs/superpowers/plans/2026-07-25-task-1976-intra-folder-hygiene.md +0 -215
- package/payload/platform/docs/superpowers/plans/2026-07-26-task-1902-account-owned-entry-declarations.md +0 -555
- package/payload/platform/docs/superpowers/plans/2026-07-26-task-1926-portal-push-concurrency-guard.md +0 -482
- package/payload/platform/docs/superpowers/plans/2026-07-26-task-2023-sidebar-sessions-async-reads.md +0 -394
- package/payload/platform/docs/superpowers/plans/2026-07-27-task-2016-disabled-agent-routing.md +0 -624
- package/payload/platform/docs/superpowers/plans/2026-07-27-task-2028-declared-file-write-deny.md +0 -303
- package/payload/platform/docs/superpowers/plans/2026-07-27-task-2052-account-machinery-write-fence.md +0 -250
- package/payload/platform/docs/superpowers/plans/2026-07-28-task-2097-email-signature-set.md +0 -65
- package/payload/platform/docs/superpowers/specs/2026-06-02-task-610-follower-202-retry-design.md +0 -116
- package/payload/platform/docs/superpowers/specs/2026-06-23-account-filesystem-schema-design.md +0 -170
- package/payload/platform/docs/superpowers/specs/2026-07-11-task-1557-operator-on-behalf-preference-attribution-design.md +0 -90
- package/payload/platform/docs/superpowers/specs/2026-07-13-account-schema-ontology-projection-design.md +0 -178
- package/payload/platform/docs/superpowers/specs/2026-07-14-graph-top-level-labels-ontology-single-source-design.md +0 -119
- package/payload/platform/docs/superpowers/specs/2026-07-17-task-1736-retire-mcp-stderr-tee-design.md +0 -128
- package/payload/platform/docs/superpowers/specs/2026-07-18-graph-native-ledger-design.md +0 -241
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1704-data-portal-standing-audit-design.md +0 -177
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1789-reseat-channel-row-fork-design.md +0 -201
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1818-loop-gate-app-routes-design.md +0 -217
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1819-top-level-label-allowlist-design.md +0 -80
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1820-cpu-triage-admin-tools-design.md +0 -97
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1829-platform-ui-typecheck-design.md +0 -163
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1831-data-portal-class-derived-allowlist-design.md +0 -163
- package/payload/platform/docs/superpowers/specs/2026-07-22-task-1899-reconcile-report-only-design.md +0 -121
- package/payload/platform/docs/superpowers/specs/2026-07-22-task-1910-two-way-portal-exchange-design.md +0 -103
- package/payload/platform/docs/superpowers/specs/2026-07-23-task-1930-adherence-enforcement-design.md +0 -81
- package/payload/platform/docs/superpowers/specs/2026-07-24-task-1942-subaccount-switcher-brand-head-design.md +0 -35
- package/payload/platform/docs/superpowers/specs/2026-07-26-task-1902-account-owned-entry-declarations-design.md +0 -232
- package/payload/platform/docs/superpowers/specs/2026-07-26-task-1926-portal-push-concurrency-guard-design.md +0 -200
- package/payload/platform/docs/superpowers/specs/2026-07-26-task-2014-ui-suite-nondeterminism-design.md +0 -169
- package/payload/platform/docs/superpowers/specs/2026-07-27-task-2016-disabled-agent-routing-design.md +0 -139
- package/payload/platform/docs/superpowers/specs/2026-07-27-task-2028-declared-file-write-deny-design.md +0 -127
- package/payload/platform/docs/superpowers/specs/2026-07-27-task-2052-account-machinery-write-fence-design.md +0 -150
- 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
|
|
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
|
|
151
|
-
*
|
|
152
|
-
* `
|
|
153
|
-
*
|
|
154
|
-
*
|
|
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":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,eAAe,CAAC,CAqD1B;AAMD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,yCAAyC,CAAC;AAEjF;8EAC8E;AAC9E,eAAO,MAAM,uBAAuB,sJAC0G,CAAC;AAE/I;yDACyD;AACzD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMpG;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,IAAI,EAAE,CAAC,EAAE,EACT,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,CAAC,EAAE,CAEL;AAED;;gFAEgF;AAChF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B;;qFAEiF;IACjF,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;;;;;;OAgBG;IACH,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,eAAe,EAAE,EAC3B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,GACZ,WAAW,CAiBb;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAI5C,CAAC;AAEF;+CAC+C;AAC/C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;4DAE4D;AAC5D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/D;AAMD;;qFAEqF;AACrF,eAAO,MAAM,qBAAqB,QAMmB,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,GAAG,qBAAqB,CAAC,CA4ChD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAcD;;8DAE8D;AAC9D,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,cAAc,GAAG,oBAAoB,CAAC;AAEvF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB
|
|
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
|
|
224
|
-
*
|
|
225
|
-
* `
|
|
226
|
-
*
|
|
227
|
-
*
|
|
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;
|
|
1
|
+
{"version":3,"file":"booking-reconcile.js","sourceRoot":"","sources":["../../src/lib/booking-reconcile.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js
CHANGED
|
@@ -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
|
-
|
|
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":"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"}
|