Files
buildfor_life_ops/drizzle/meta/_journal.json
T
grabowski b4108c5a36 feat(maintenance): schema for reminders dedup log
Phase 1 of the maintenance-reminders feature.

- notification_kind: + maintenance_due_soon, maintenance_overdue.
  These are distinct from maintenance_event_recorded (service
  performed) so the bell list can group/filter reminder vs service
  cleanly.
- New maintenance_reminder_kind enum: due_soon | overdue.
- New maintenance_reminders_sent table with UNIQUE(schedule_id,
  kind, due_at). The cron uses INSERT … ON CONFLICT DO NOTHING on
  this composite to make the fire-once-per-window guarantee atomic
  even under concurrent runs. Once the schedule's next_due_at
  advances after a service event, the tuple is fresh and a new
  reminder fires.

No service code yet — Phase 2 wires the readers and orchestrator.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 16:11:34 +07:00

146 lines
3.0 KiB
JSON

{
"version": "7",
"dialect": "postgresql",
"entries": [
{
"idx": 0,
"version": "7",
"when": 1776760498088,
"tag": "0000_init",
"breakpoints": true
},
{
"idx": 1,
"version": "7",
"when": 1776912796532,
"tag": "0001_phase1_assets_properties_documents",
"breakpoints": true
},
{
"idx": 2,
"version": "7",
"when": 1776912900000,
"tag": "0002_phase1_constraints_and_search",
"breakpoints": true
},
{
"idx": 3,
"version": "7",
"when": 1776913896873,
"tag": "0003_phase2_checklists_and_maintenance",
"breakpoints": true
},
{
"idx": 4,
"version": "7",
"when": 1776913950000,
"tag": "0004_phase2_partial_indexes_and_triggers",
"breakpoints": true
},
{
"idx": 5,
"version": "7",
"when": 1776915278123,
"tag": "0005_phase3_projects_and_decisions",
"breakpoints": true
},
{
"idx": 6,
"version": "7",
"when": 1776915350000,
"tag": "0006_phase3_partial_index_and_triggers",
"breakpoints": true
},
{
"idx": 7,
"version": "7",
"when": 1776916197473,
"tag": "0007_phase4_wiki",
"breakpoints": true
},
{
"idx": 8,
"version": "7",
"when": 1776916020000,
"tag": "0008_phase4_wiki_fts_and_uniq",
"breakpoints": true
},
{
"idx": 9,
"version": "7",
"when": 1776918611593,
"tag": "0009_rooms_and_floors",
"breakpoints": true
},
{
"idx": 10,
"version": "7",
"when": 1776918700000,
"tag": "0010_rooms_check_and_triggers",
"breakpoints": true
},
{
"idx": 11,
"version": "7",
"when": 1776919853043,
"tag": "0011_property_accounts",
"breakpoints": true
},
{
"idx": 12,
"version": "7",
"when": 1776919900000,
"tag": "0012_accounts_updated_at_trigger",
"breakpoints": true
},
{
"idx": 13,
"version": "7",
"when": 1776930973516,
"tag": "0013_notifications",
"breakpoints": true
},
{
"idx": 14,
"version": "7",
"when": 1776932841675,
"tag": "0014_property_expenses",
"breakpoints": true
},
{
"idx": 15,
"version": "7",
"when": 1776932900000,
"tag": "0015_expenses_updated_at_trigger",
"breakpoints": true
},
{
"idx": 16,
"version": "7",
"when": 1777268853483,
"tag": "0016_property_parent_id",
"breakpoints": true
},
{
"idx": 17,
"version": "7",
"when": 1777268853484,
"tag": "0017_property_parent_check",
"breakpoints": true
},
{
"idx": 18,
"version": "7",
"when": 1777268985448,
"tag": "0018_checklist_scope_property",
"breakpoints": true
},
{
"idx": 19,
"version": "7",
"when": 1777281036233,
"tag": "0019_maintenance_reminders",
"breakpoints": true
}
]
}