Daily Goals (the daily ritual)
Status: BUILT (E4) — themes the shared Daily framework (../../engine/daily-framework.md) for Zoo Simulator.
Last updated: August 30, 2026
Zoo Simulator — Daily Goals (the daily ritual)
Status: BUILT (E4) — themes the shared Daily framework (../../engine/daily-framework.md) for Zoo Simulator.
Parent: index.md. The shared rhythm (selection, streak, reward delivery, the
dailyNLU surface, the regression shape) lives in the framework; this doc records only the Zoo theme.
Thesis
Zoo Simulator's daily ritual is Daily Goals — one small, fresh management goal that resets at the
UTC date boundary and gives a director a reason to open the skill today. It is built entirely on
counters the zoo already maintains on ZooAccount; no new gameplay telemetry was added.
Selection
PERSONAL (date plus a stable per-player seed) so different directors get different goals on the same
day. DailySelector.pickForDateAndPlayer over a stable three-objective pool; selection stores nothing
and resets at the UTC date boundary.
Objectives (each reads an EXISTING tracker)
| Objective key | Spoken goal | Tracker (existing) | baselineMode | Target |
|---|---|---|---|---|
ZOO_EARN_BUCKS |
earn zoo bucks from your visitors today | ZooAccount.lastDayTotalRevenue (+ lastDayRevenueAt day-stamp) |
ABSOLUTE_TODAY |
1000 |
ZOO_BREED_ANIMAL |
breed a new animal in your zoo | ZooAccount.totalAnimalsBorn (lifetime) |
DELTA_SINCE_DAY_START |
1 |
ZOO_SATISFACTION |
raise your visitor satisfaction | ZooAccount.visitorSatisfactionScore |
ABSOLUTE_TODAY |
80 |
ZOO_EARN_BUCKSreads the per-day revenue snapshot the daily sim already writes (simulation.md § Phase 5, economy.md § Daily Revenue). The provider returns the snapshot only whenlastDayRevenueAtis the current UTC day, so the goal resets daily.ZOO_BREED_ANIMALbinds to the lifetimetotalAnimalsBorncounter viaDELTA_SINCE_DAY_START: the framework snapshots the raw value on first view and reports current minus snapshot, turning the lifetime counter into "bred today" with no new per-day birth counter. (The advance-day breeding output — simulation.md § Phase 3 — incrementstotalAnimalsBorn.)ZOO_SATISFACTIONreads thevisitorSatisfactionScorerecomputed by each advance-day, read directly (ABSOLUTE_TODAY).
Reward (economy-safe)
- Base — soft Zoo Bucks.
DailyReward.soft("ZOO_BUCKS", 500, 100): 500 Zoo Bucks on completion, scaling +100 per consecutive-day streak, capped by the sharedMAX_STREAK_BONUS_DAYS = 7. Delivered through (the per-game financial service) and intentionally NOT in the premium audit ledger — soft currency is high-volume (economy.md § soft carve-out). - Streak milestone — premium Golden Tickets.
getStreakMilestoneReward()=DailyReward.premium("GOLDEN_TICKET", 5, 0)withgetStreakMilestoneInterval() = 7: every seventh consecutive completed day additionally grants 5 Golden Tickets through with sourcePremiumCurrencySource.DAILY_CHALLENGE, which writes the mandatorygame_log.purchase_transactionsaudit row in the same call (economy.md § Premium Currency Mutation Discipline). The boot-time wiring assertion validates both the soft and premium paths, so a half-wired reward cannot ship.
NLU surface
The shared baseline daily / claim daily / start daily / daily streak commands (Tier 6
BASELINE_DAILY*) resolve in any Zoo session. No Zoo-specific synonyms are
added; the baseline surface is the always-reachable entry.
Regression shape
- Provider + reward → JUnit: (deterministic selection, the three
baseline-mode reads, session-invariant reward declarations) and
(soft Zoo Bucks ride ; the Golden Ticket milestone rides
source
DAILY_CHALLENGE). - Player flow → hermetic
game_test.scenario_tests: asserts only the date-independent surface — the stable title "Daily Goals" and the "N of M" progress shape — never the rotating objective text.
Refs
- ../../engine/daily-framework.md — the shared framework (E1).
- economy.md — Zoo currencies, , premium audit path.
- simulation.md — advance-day phases that drive the trackers.
- — the Zoo theme. Queue (E4).