Wave 2.4 (VPS half): server-driven tiles + typed hero + /tags — and deploy-proof snapshot jobs#102
Merged
Merged
Conversation
…abulary whoop_summary now emits additive `tiles` (stable-id, ordered, semantically accented) and `hero` blocks derived from its own already-computed fields, so a new VPS metric reaches the phone with zero app changes. Prevention (the safety channel) can only escalate a tile's/hero's colour and severity, never downgrade what readiness itself earned, and always supplies the hero headline when it fires amber/red. Strain naturally drops off the Sabbath because prescribe_strain already reports unavailable that day. Also adds GET /api/v1/whoop/tags/vocabulary (built-in tag suggestions + the user's own past tags) for the "Tag Today" picker — deliberately not reusing the /tags path, which already serves per-day tag history with a different response shape. Bumps COCKPIT_DERIVER_VERSION to whoop-summary-v2 so stored cockpit snapshots regenerate with the new fields, and updates the CI-pinned version assertion.
… coalesce) Live acceptance on the Wave-3-batch-2 deploy found the post-deploy warmup one-shot missed by 18s (double-restart) and removed, and the running build killed mid-flight — leaving the snapshot 8h stale, so /summary fell back to the ~45s live path until the next 3h tick. A 10-minute misfire grace plus coalesce lets a restart-straddled tick still run once. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The last headless Wave-2 seam (REPORT §6 B4/B3), plus a scheduler fix found by batch-2 live acceptance.
Server-driven tiles + hero (
41ce916)core/whoop_tiles.py:/summarynow carriestiles: [{id,label,value,unit,accent,order}]— stable ids, semantic accent tokens, explicit order, composed server-side from the summary's own metrics (no new DB reads). Unavailable metric → no tile. Sabbath → no strain tile, readiness shows Rest. A new VPS metric reaches the phone with zero app changes.heroblock{state, state_color, headline, severity}: amber/red prevention OVERRIDES readiness colour/severity — the safety channel outranks performance.GET /api/v1/whoop/tagsserves the tag vocabulary (read-scope allowed).COCKPIT_DERIVER_VERSION→ "whoop-summary-v2" so stored snapshots regenerate with tiles; the CI pin test updated in the same commit.Snapshot jobs survive deploys (
1df16de)Batch-2 live acceptance caught the post-deploy warmup one-shot missed by 18s (double-restart window) and removed, leaving the snapshot 8h stale — every phone refresh fell back to the ~45s live path until the next 3h tick.
misfire_grace_time=600+coalesceon both snapshot jobs.Verification
tiles,hero); Sabbath semantics pinned by fixture tests; CI contract pins checked at build time.ISA:
PAI/MEMORY/WORK/whoop-bitter-lesson-audit/ISA-wave2.4-tiles.md(7/8; ISC-8 = this PR + live acceptance).🤖 Generated with Claude Code