Skip to content
Merged
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
cc332c3
fix(settings-sheet): strip time part from date when loading from BFF
important-new Jun 6, 2026
7161089
fix(team): read body.data.members not body.data for team list
important-new Jun 6, 2026
fa08973
feat(team): wire InviteSeatModal to Invite Member button
important-new Jun 6, 2026
36949ba
fix(bff): use valid pageSize=100 for template list in inspection-sett…
important-new Jun 6, 2026
51cbde6
feat(search): lazy-load template picker + server-side search for temp…
important-new Jun 6, 2026
8b21052
sync: merge upstream main (PR #127 squash — B-28/B-29/B-30 data-integ…
important-new Jun 7, 2026
6ed6bc4
sync: merge upstream main (PR #128 squash — stripe saas readiness + e…
important-new Jun 7, 2026
389010e
Merge branch 'InspectorHub:main' into main
important-new Jun 8, 2026
eba638a
Merge branch 'InspectorHub:main' into main
important-new Jun 8, 2026
51396cd
Merge remote-tracking branch 'upstream/main'
important-new Jun 8, 2026
e0e0a43
feat(sms): migration 0025 — channels/sms_body, recipient rename, cons…
important-new Jun 8, 2026
7444090
feat(sms): E.164 phone normalization util
important-new Jun 8, 2026
10a610e
feat(sms): Twilio credential resolution via explicit mode toggle (mir…
important-new Jun 8, 2026
7729c02
feat(sms): Twilio REST send + request-signature validation
important-new Jun 8, 2026
c32a7f8
feat(sms): consent ledger service (grant/revoke/latest-wins) + disclo…
important-new Jun 8, 2026
a929e1d
feat(sms): engine — channels[]/sms_body persistence, channel-aware ad…
important-new Jun 8, 2026
7e88fcd
fix(sms): channels default must not inject on partial update (Task 6 …
important-new Jun 8, 2026
ac6a6d4
feat(sms): flush() Twilio branch (consent gate + render + send) + cro…
important-new Jun 8, 2026
77fc983
feat(sms): add tenant_configs.company_phone for {{company_phone}} in …
important-new Jun 8, 2026
78bf665
test(sms): mirror sms_mode + company_phone into workers inline tenant…
important-new Jun 8, 2026
3a67b0a
feat(sms): ensureClientContact (D6b) — find-or-create + back-link cli…
important-new Jun 8, 2026
cc8da2c
feat(sms): consent capture — opt-in link page, inspector attestation,…
important-new Jun 8, 2026
a164c64
feat(sms): editor multi-channel + run-log badge + Settings SMS config…
important-new Jun 8, 2026
718fb8e
feat(sms): seed compliance-safe sms_body on touchpoints + disclosure v1
important-new Jun 8, 2026
00dcdd8
fix(test): use today's date in reminder due-time test to avoid pre-09…
important-new Jun 9, 2026
da57142
ci: retrigger CI
important-new Jun 9, 2026
e8bd6e4
merge: resolve conflict with upstream/main — keep flakiness fix (toda…
important-new Jun 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions tests/unit/automation-flush-sms.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,14 @@ describe('flush() — derived reminder due-time (Track L Step 3b)', () => {
}

it('processes a reminder whose DERIVED due is now (date=tomorrow) despite a far-future send_at', async () => {
const tomorrow = new Date(Date.now() + 24 * 3600_000).toISOString().slice(0, 10);
const logId = await seedReminder(tomorrow);
// Use today's date so the derived due-time = today@09:00Z − 1440min = yesterday@09:00Z,
// which is always in the past regardless of the time-of-day the test runs.
// Using tomorrow caused flakiness before 09:00 UTC: tomorrow@09:00Z − 1440min =
// today@09:00Z, which is in the future until 09:00 UTC passes.
const today = new Date().toISOString().slice(0, 10);
const logId = await seedReminder(today);
await svc.flush('rk', 'from@x.com', 'Acme', 'https://acme.example.com');
// tomorrow@09:00Z − 1440min(=1 day) ≈ today@09:00Z <= now → due → sent.
// today@09:00Z − 1440min(=1 day) = yesterday@09:00Z now → always due → sent.
expect((await statusOf(logId))?.status).toBe('sent');
expect(fetch).toHaveBeenCalledTimes(1);
});
Expand Down
Loading