4d1a77be9e
The daily starlanguage card sat on "正在结合你的星盘写今天的星语。" forever for every account whose birth time was usable. Its effect bailed out on birthTimeDisplayState(profile), which returns a value precisely when the birth time is candidate, accepted or confirmed, so the request went out only for accounts that had nothing to read. The guard predates the Agent rewrite and was masked by the written-in client fallback that rewrite deleted. It now gates on personalChartAvailable, the same fact the card uses to render personal content, and retries once before admitting that today has no card. The route stops letting one engine call take the whole card down silently: /api/chart fails into a named reason like the other four layers, and the engine and agent budgets leave room for a cold chart and an observed 30s generation inside the 60s ceiling. The home also had three greeting implementations. The hero heading drew from a static pool while the time-aware greeting lived elsewhere and the Agent's own greeting was overwritten client-side into a field nothing rendered. createStartGreeting now exposes its salutation and question halves, the hero uses both, and the served greeting reaches the hero note. Co-authored-by: Cursor <cursoragent@cursor.com>