| API logic | request-changes | An unrelated membership edit re-derived endDate and retroactively back-dated a grandfathered visit pack | Fixed by the author in b3271dbde |
| API logic | request-changes | Three membership-plan reads lacked brandId scoping and could supply another tenant's plan name | Fixed in fd2c35283 and a0a031647 |
| API logic | request-changes | Un-reversal rebuilt access deadlines from a plan edited after sale | Runtime snapshot preservation landed in d624c57e1 |
| API provenance follow-up | request-changes | A timestamp heuristic could rebuild a genuine snapshot from an edited plan, and a proposed data repair could miss edited or voided legacy rows or clear a genuine post-0179 deadline | Both approaches were rejected and replaced by explicit provenance in f0474243b |
| API inactive-state follow-up | request-changes | Marker-bearing paused or expired access rows bypassed membership_not_restored during failed-refund recovery | Fixed in 945cc5755; the final scoped review returned approve with no findings |
| API logic | request-changes | A plan change anchored the stored entitlement start on UTC today rather than the studio's day | Fixed in c9cec4c21 |
| API logic | minor | A planId-only update audit omitted the five fields the server also derived | Fixed in c9cec4c21 with separate changedFields and derivedFields |
| Widgets | request-changes | Jump to next available skipped the current day and could miss a bookable session under another category | Fixed in bd049a9bf |
| Widgets | major follow-up | A same-day category jump disabled the next studio-midnight rollover | Fixed in 3c12ca6c0 |
| Widgets | request-changes | A visit pack's credit window was sold without pre-purchase disclosure | Fixed in 52344d47b; non-positive imported values aligned with the API in 3c12ca6c0 |
| Widgets | request-changes | The appearance gate collapsed CRM-generated embeds to zero until config settled | Fixed in 7143f9db6 with a 240px reserved floor |
| Security | approve-with-nits | No auth bypass, tenant-isolation gap or credential disclosure found; passwordHash was absent from the projection regression guard | Guard extended in 09c7da16c |
| Security | accepted informational risk | Proof-bearing magic links can land on any path of an allowlisted host, and password rotation preserves the calendar-feed key | Disclosed under Risks; the security reviewer did not treat either as a merge blocker |
| Schema | no blocker | Classes written during a rolling deploy could miss the private-approval carry-over | Fixed by the author in e7eb5f8ff with a legacy-write bridge |
| Schema | no blocker | 0180's claimed replay idempotency could overwrite independently configured private-approval values | Closed in e7eb5f8ff by making the migration explicitly one-time and adding the legacy-write bridge |
| Cross-surface | request-changes | Staff-created and widget-sold memberships did not enforce every new entitlement window | Fixed by the author in 45a99f283 and fbc8b1cdd |
| Widgets | minor follow-up | Explicit names on compact View controls omitted type or metadata and could collide across locations | Fixed in 4f72870f2 across BookingCalendar, Schedule and shared Book controls |
| Widgets | major final review | Schedule's new daily default rendered a live empty-state jump before the initial request resolved | Fixed in 4f72870f2 with a loading gate and deferred-request regression test |
| Widgets | minor final review | One-day fixed-term offers rendered '1 days' in both customer-facing duration strings | Fixed in 4f72870f2 with singular-copy coverage |
| Final exact-head review | approve | The API reversal state machine, migrations, membership windows and final widget remediation were re-read at the pushed head | Two final reviewers approved 4f72870f2; the UTC-day and rolling-deploy convention risks remain disclosed below |