Add loop-scoped holiday list support

This commit is contained in:
Jacob Dubin
2026-05-19 06:57:09 -05:00
parent 54b32bc9cf
commit 2bc6fec1bf
13 changed files with 469 additions and 31 deletions

View File

@@ -924,6 +924,9 @@ For `1.0.19`:
6. Presence-aware greetings and identity-triggered proactivity - implemented (trigger path, identity-aware reactive/proactive replies, cooldown metadata wiring, focused websocket coverage)
7. Personal report parity track (weather visuals, live news path, commute path, calendar parity matrix) - in progress (`2026-05-10` first live-news provider slice implemented)
8. Holidays and seasonal personality behavior built on the new memory/proactivity foundation
- system holidays should come from an up-to-date provider and merge with loop-scoped custom holiday records
- allow disabled holiday records to suppress reminders for people who do not celebrate a holiday
- birthdays and other personal dates should flow into the same loop-scoped holiday list once authoring is wired up
9. Durable memory persistence path (multi-tenant backing store)
- reference design captured in `docs/persistence-architecture.md`
- store contracts are now tightened around account/loop/device/person scoping, revision tracking, and explicit load/save boundaries

View File

@@ -0,0 +1,22 @@
# Holiday Architecture
Pegasus exposed holidays as a loop-scoped list synchronized into `/jibo/holidays`.
In OpenJibo, the holiday path now follows the same broad model:
- system holidays come from a live holiday source
- custom holidays are loop-scoped
- suppressed holidays are represented as disabled records
- the cloud protocol returns the merged list for `PersonListHolidays`
Current behavior:
- `Person/ListHolidays` uses the loop from the request when available
- if no loop is supplied, the cloud falls back safely instead of throwing
- the merged list is built from system holidays plus any custom loop entries
Notes:
- `IsEnabled = false` can be used to suppress a holiday later
- birthdays and other personal events can be added as loop-scoped custom records
- the current system holiday source uses Nager.Date with a safe local fallback for uptime

View File

@@ -90,6 +90,9 @@ The goal is to port these in small batches, capture the source-backed phrasing w
- port holiday-aware personality responses as a visible extension of the new persona slice
- start with a small, source-backed set (for example birthdays/holidays already represented in legacy data paths)
- ensure holiday responses feel characterful while still routing through stock-compatible payloads
- use a loop-scoped merged holiday list in the cloud protocol so system holidays and custom person holidays can coexist
- source system holidays from a live holiday provider and keep `IsEnabled = false` records available for holiday suppression
- keep birthday/custom holiday authoring aligned with person memory so future proactivity can suppress or promote holidays per loop
### 5. Multi-Tenant Memory Storage Foundation
@@ -111,6 +114,7 @@ The goal is to port these in small batches, capture the source-backed phrasing w
Reference design:
- [persistence-architecture.md](persistence-architecture.md)
- [holiday-architecture.md](holiday-architecture.md)
## First Implemented Slice In `1.0.19`