✔ durable exercise favorites are owner-scoped, canonical, bounded, and revision-fenced (29.0556ms) ✔ screen read-model RPCs keep coordinated contracts across versioned cutovers (6.404ms) ✔ screen read-model RPCs are auth-scoped JSONB APIs with prefixed inputs (14.2919ms) ✔ SQL contracts and adapters expose the same bounded packages (4.0669ms) ✔ summary read models exclude raw workout detail row bags (3.5533ms) ✔ Home PR and Volume are materialized and independently callable (7.6804ms) ✔ screen RPCs exclude payload blobs and PR reads the final materialized projection (5.4247ms) ✔ stats workers roll refresh and failed integrity validation back together (23.0229ms) ✔ global stats batches serialize before retaining user advisory locks (8.0442ms) ✔ measured transition and current-state tables encode the domain invariants (7.3467ms) ✔ measured projection tables are owner-readable and service-written (28.6152ms) ✔ projector accepts only exact measured session sets and historical 1RM facts (15.5274ms) ✔ projector collapses same-day maxima and emits strict running-max transitions only (8.356ms) ✔ corrections replay affected exercises atomically and remove obsolete projections (7.207ms) ✔ raw workout deletion cannot be blocked by projection foreign-key cascades (0.9551ms) ✔ active overview, detail, calendar, Home, and session badges use measured projections (85.3774ms) ✔ overview returns five representative rep maxima while detail owns exact 1 through 20 (61.1971ms) ✔ paged detail events expose exact numeric source lineage (19.8208ms) ✔ historical 1RM writes are canonical facts and never direct projection writes (41.9424ms) ✔ cutover removes legacy measured-PR writes and guards reused core readers (42.3639ms) ✔ screen RPC contracts use the shared app performance budgets (1.8885ms) ✔ large-data regression tests consume the shared budgets instead of local limits (0.5049ms) ✔ PR and volume overview retain the same mock latency budget (0.1073ms) ✔ DB screen RPC SQL keeps the documented row caps (7.0422ms) ✔ split Home bootstrap SQL keeps independent fragment row and payload caps (19.2306ms) ✔ split PR detail SQL keeps independent row and payload caps (22.2523ms) ✔ PR overview foreground reads only the bounded applied-generation snapshot (12.0144ms) ✔ profile feed SQL keeps the documented keyset page cap (0.7835ms) ✔ session search SQL keeps the documented bounded index cap (0.5884ms) ✔ app screen paths keep raw detail table fetches forbidden (10.4964ms) ✔ PR overview materialization uses typed header and exercise snapshot tables (22.394ms) ✔ catalog changes invalidate snapshots in O(1) and leave bounded per-user rollover work (34.6285ms) ✔ the final PR summary reader consumes only rows referenced by the applied-generation header (18.9442ms) ✔ the refresh window prebuilds only browser-local today candidates with no dynamic fallback (9.3247ms) ✔ bounded minute rollover keeps the browser-local date window materialized (14.9713ms) ✔ the final stats wrapper preserves existing read models and publishes PR snapshots (8.4441ms) ✔ job completion cannot advance applied_version without a complete three-date snapshot (15.751ms) ✔ screen RPC contract file is the shared source of truth (7.7591ms) ✔ set-bearing RPCs pass through persisted e1RM and conditional max-rep projections (3.8464ms) ✔ log table cell set tokens accept null load (bodyweight) and null reps (time-based) (0.3978ms) ✔ PR history set tokens accept null load (bodyweight) and null reps (time-based) (0.4072ms) ✔ calendar read models keep month reads compact and day reads self-contained (10.196ms) ✔ calendar month adapter accepts exact card ceilings and rejects every overflow path (17.2466ms) ✔ profile feed RPC is bounded, cursor-paginated, and collapses main set details (8.7502ms) ✔ session search RPC is bounded and returns collapsed searchable session cards (11.1374ms) ✔ profile/search hard-cutover cards have byte-safe nested bounds and explicit truncation (65.4351ms) ✔ home dashboard is screen-shaped, bounded, and exposes refresh freshness (19.9972ms) ✔ home dashboard rejects truncated detail disguised as a complete edit source (1.0161ms) ✔ max-row Home plan cards stay inside the initial Home response envelope without planned sets (8.1536ms) ✔ static catalog separates its normal response target from an enforced structural ceiling (90.689ms) ✔ favorite RPC adapters require a complete bounded ordered exercise-ref list (1.5032ms) ✔ plan and completed writes share one hierarchy and its set-count limits (18.7166ms) ✔ planned-session detail is exact, owner-bound, and card reads stay set-free (13.0978ms) ✔ Home and PR projections cap every catalog presentation array (9.7888ms) ✔ refresh generations preserve dirty work and expose an auth-scoped bounded read model (13.157ms) ✔ screen read-model budgets publish explicit performance envelopes (0.6463ms) ✔ PR exercise detail v4 fragments are independently bounded (26.4307ms) ✔ volume overview keeps only bounded aggregate rows (10.4742ms) ✔ volume v3 exposes bounded annual report facts without widening the general top-four rows (1.0248ms) ✔ volume v4 preserves v2/v3 and adds exact period-wide session timing vectors (4.8517ms) ✔ annual report defaults and future clamps use the canonical Seoul app date (3.1823ms) ✔ volume v3 adds exact canonical six-axis taxonomy aggregates without changing v2 (1.6225ms) ✔ set purpose policy is repetition/RPE based while intensity remains percent-of-1RM based (12.6231ms) ✔ volume worst-shape top 4 plus annual, taxonomy and session-timing facts stays under 2.1 MB (109.3767ms) ✔ screen RPC validator reads required paths from the contract definitions (1.0188ms) ✔ dashboard adapters reject inconsistent freshness generations (0.3178ms) ✔ PR overview adapter accepts precomputed strength cutlines and profession composites, and rejects broken ladders (Phase 4-3) (1.7079ms) ✔ dashboard adapters reject refresh errors once generations are fresh (0.1476ms) ✔ screen RPC validator fails when payload and contract diverge (0.8086ms) ✔ screen RPC validator rejects forbidden raw detail paths from summary contracts (0.1794ms) ✔ log table month v3 and selected-cell detail enforce independent hard bounds (2.4866ms) ✔ validator and repository depend on screenRpcContracts instead of local maps (0.2566ms) ✔ completed-session detail v6 enforces exact edit-domain hard bounds (5.9605ms) ✔ completed-session detail is bounded in the DB write model and versioned RPC wrapper (11.6512ms) ✔ completed-session child limits serialize inserts and parent moves (5.403ms) ✔ profile feed note entries are additive: validated when present, bounded to 4, absent pages still adapt (0.5585ms) ✔ static catalog accepts an additive load_multiplier of 1 or 2 and rejects other values (1.1072ms) ℹ tests 77 ℹ suites 0 ℹ pass 77 ℹ fail 0 ℹ cancelled 0 ℹ skipped 0 ℹ todo 0 ℹ duration_ms 1158.3922