diff --git a/GITHUB_ISSUES.md b/GITHUB_ISSUES.md index 2b62356..74a8add 100644 --- a/GITHUB_ISSUES.md +++ b/GITHUB_ISSUES.md @@ -1,6 +1,6 @@ # GitHub Issue Backlog: Secure Commerce Program -**Member screen preparation — #739, October 16, 2026, SOURCE ONLY:** the membership/free-event screen now validates bounded server status and action acknowledgements, binds the native account/app/default tenant and observed session, and hides stale controls at the earliest known membership/window deadline or after at most 60 seconds from read start. No polling is added. Exact uncertain retries stay within their original observed session. The responsive layout uses Pacific event dates and explicit loading, empty, unavailable and retry states. Backend-first release is required: older status responses without schema/time fields fail closed. No policy, payment, family enrollment, permission or production change. [Officer review](./docs/officers/MEMBER_SCREEN.md). +**Member-screen staging checkpoint — #739, October 16, 2026:** Function v7 and Hosting source `799565e` are verified, including the downloaded archive, all 62 website files, genuine Auth/App Check and ten member/retry/expiry/cancellation checks with fresh fictional fixtures and verified cleanup. Full-site screenshots exposed a fixed-header style collision on the member navigation. The markup correction is source-only until its matching Hosting release is recorded in [#739](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/739); no Function rebuild or permission change is needed. Online dues and real membership/payments remain unavailable. [Officer review](./docs/officers/MEMBER_SCREEN.md). **COMMUNITY-004 / [#737](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/737) — SOURCE IN REVIEW:** October 15 owner rule requires current paid membership plus existing verified email and waiver for new free-event entries. The transaction checks current authority after reads; cancellation after expiry/suspension and immutable retry remain safe. Unit/UI and emulator regressions cover nonmembers, exact expiry, suspension, wrong UID, forgery, final seats and no-write denials. $25 individual/$30 family calendar-year policy is recorded, not activated; online dues and separate family accounts under a paid Family ID are selected for first launch; minor/privacy/retention and actual payment integration remain separate. Requested [policy drafts](./docs/legal/MEMBER_LAUNCH_DRAFTS.md) are unapproved and unused. No deployed/prod/real-payment claim; #731 stays closed with final6186640177. diff --git a/IMPLEMENTATION_PLAN.md b/IMPLEMENTATION_PLAN.md index 7591e4d..5bc1853 100644 --- a/IMPLEMENTATION_PLAN.md +++ b/IMPLEMENTATION_PLAN.md @@ -1,6 +1,6 @@ # MPRC Secure Commerce Implementation Plan -**Member screen preparation — #739, October 16, 2026, SOURCE ONLY:** the membership/free-event screen now validates bounded server status and action acknowledgements, binds the native account/app/default tenant and observed session, and hides stale controls at the earliest known membership/window deadline or after at most 60 seconds from read start. No polling is added. Exact uncertain retries stay within their original observed session. The responsive layout uses Pacific event dates and explicit loading, empty, unavailable and retry states. Backend-first release is required: older status responses without schema/time fields fail closed. No policy, payment, family enrollment, permission or production change. [Officer review](./docs/officers/MEMBER_SCREEN.md). +**Member-screen staging checkpoint — #739, October 16, 2026:** Function v7 and Hosting source `799565e` are verified, including the downloaded archive, all 62 website files, genuine Auth/App Check and ten member/retry/expiry/cancellation checks with fresh fictional fixtures and verified cleanup. Full-site screenshots exposed a fixed-header style collision on the member navigation. The markup correction is source-only until its matching Hosting release is recorded in [#739](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/739); no Function rebuild or permission change is needed. Online dues and real membership/payments remain unavailable. [Officer review](./docs/officers/MEMBER_SCREEN.md). **#731 native tests complete — 2026-10-14, handoff gated:** actual fictional lifecycle/privacy/expiry/mobile plus 38 native evaluations/27 distinct security/replay checks passed. UI response discarded only after real server commit recovered through the exact saved action with all six protected update times unchanged. Recipient-loss replay/revoke and terminal-state/caller-revocation protection passed. Two fresh accounts/26 owned records removed with fences/immediate+late absence; browser test credentials/cache cleared and unused receiver closed. Final browser-permission confirmation and reviewed documentation/current-CI receipt remain before issue closure or supervised use with fresh fixtures. No new deploy/build/service/IAM/Rules/provider/production/payment work. [Dated native receipt](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/731#issuecomment-6186206758); earlier #731/#732 source/anonymous-only milestones below are historical. Whole-backend completion is not claimed. diff --git a/OFFICER_START_HERE.md b/OFFICER_START_HERE.md index 03cfef9..9591589 100644 --- a/OFFICER_START_HERE.md +++ b/OFFICER_START_HERE.md @@ -1,6 +1,6 @@ # MPRC Website: Officer Start Here -**Member screen preparation — #739, October 16, 2026, SOURCE ONLY:** the membership/free-event screen now validates bounded server status and action acknowledgements, binds the native account/app/default tenant and observed session, and hides stale controls at the earliest known membership/window deadline or after at most 60 seconds from read start. No polling is added. Exact uncertain retries stay within their original observed session. The responsive layout uses Pacific event dates and explicit loading, empty, unavailable and retry states. Backend-first release is required: older status responses without schema/time fields fail closed. No policy, payment, family enrollment, permission or production change. [Officer review](./docs/officers/MEMBER_SCREEN.md). +**Member-screen staging checkpoint — #739, October 16, 2026:** Function v7 and Hosting source `799565e` are verified, including the downloaded archive, all 62 website files, genuine Auth/App Check and ten member/retry/expiry/cancellation checks with fresh fictional fixtures and verified cleanup. Full-site screenshots exposed a fixed-header style collision on the member navigation. The markup correction is source-only until its matching Hosting release is recorded in [#739](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/739); no Function rebuild or permission change is needed. Online dues and real membership/payments remain unavailable. [Officer review](./docs/officers/MEMBER_SCREEN.md). **Minimum member launch — October 15 decisions; #737 SOURCE ONLY:** Dave set $25 individual/$30 family calendar-year dues. New free-event signup requires verified email, accepted waiver and current paid membership; no additional discretionary member approval follows satisfied requirements. The new source checks membership in the booking transaction and preserves cancellation after expiry. This change is **NOT AVAILABLE YET** on the deployed website. Online dues are selected for first launch; separate family accounts share a paid Family ID. Final policy/guardian handling remains undecided. Review the [privacy/waiver drafts](./docs/legal/MEMBER_LAUNCH_DRAFTS.md) and [source-only test procedure](./docs/officers/STAGING_COMMUNITY.md#current-membership-for-free-events--737-source-only). This source change adds no checkout or public external-payment instructions; paid-race commerce remains later. Earlier source checkpoints below are historical. diff --git a/OPERATIONS_RUNBOOK.md b/OPERATIONS_RUNBOOK.md index ea85da5..0b57ef6 100644 --- a/OPERATIONS_RUNBOOK.md +++ b/OPERATIONS_RUNBOOK.md @@ -1,6 +1,6 @@ # MPRC Platform Operations Runbook -**Member screen preparation — #739, October 16, 2026, SOURCE ONLY:** the membership/free-event screen now validates bounded server status and action acknowledgements, binds the native account/app/default tenant and observed session, and hides stale controls at the earliest known membership/window deadline or after at most 60 seconds from read start. No polling is added. Exact uncertain retries stay within their original observed session. The responsive layout uses Pacific event dates and explicit loading, empty, unavailable and retry states. Backend-first release is required: older status responses without schema/time fields fail closed. No policy, payment, family enrollment, permission or production change. [Officer review](./docs/officers/MEMBER_SCREEN.md). +**Member-screen staging checkpoint — #739, October 16, 2026:** Function v7 and Hosting source `799565e` are verified, including the downloaded archive, all 62 website files, genuine Auth/App Check and ten member/retry/expiry/cancellation checks with fresh fictional fixtures and verified cleanup. Full-site screenshots exposed a fixed-header style collision on the member navigation. The markup correction is source-only until its matching Hosting release is recorded in [#739](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/739); no Function rebuild or permission change is needed. Online dues and real membership/payments remain unavailable. [Officer review](./docs/officers/MEMBER_SCREEN.md). **#731 native acceptance/handoff — 2026-10-14:** [current officer procedure](./docs/officers/STAGING_COMMUNITY.md#fictional-race-member-screen--731-source-prepared) separates actual native/UI proof from final acceptance and cleanup gates. Existing v6/669e2fb/101386-byte94380430 archive and Hosting e21be35 remain unchanged; no redeploy is needed for these documentation facts. Actual lost-response retry, current authority/privacy, natural expiry and recipient-loss recovery passed. Two fresh fake accounts/26 exact owned records were removed with identity/create-time/update-time fences and immediate/late absence; private browser helper/Auth/matching staging SDK cache were cleared. The unused receiver closed with zero captures and a refused port. The specialist must record the human's temporary browser-permission OFF confirmation and owned-tab closure before final handoff. No workaround for blocked browser settings; no accounts/server left waiting for that input. Fresh fixtures, final receipt and Dave's supervision are required; production/payments stay untouched. Earlier #731/#732 source/anonymous-only notes below are historical. diff --git a/SECURITY.md b/SECURITY.md index c5c02c8..1270977 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # MPRC Security, Privacy, and Risk Plan -**Member screen preparation — #739, October 16, 2026, SOURCE ONLY:** the membership/free-event screen now validates bounded server status and action acknowledgements, binds the native account/app/default tenant and observed session, and hides stale controls at the earliest known membership/window deadline or after at most 60 seconds from read start. No polling is added. Exact uncertain retries stay within their original observed session. The responsive layout uses Pacific event dates and explicit loading, empty, unavailable and retry states. Backend-first release is required: older status responses without schema/time fields fail closed. No policy, payment, family enrollment, permission or production change. [Officer review](./docs/officers/MEMBER_SCREEN.md). +**Member-screen staging checkpoint — #739, October 16, 2026:** Function v7 and Hosting source `799565e` are verified, including the downloaded archive, all 62 website files, genuine Auth/App Check and ten member/retry/expiry/cancellation checks with fresh fictional fixtures and verified cleanup. Full-site screenshots exposed a fixed-header style collision on the member navigation. The markup correction is source-only until its matching Hosting release is recorded in [#739](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/739); no Function rebuild or permission change is needed. Online dues and real membership/payments remain unavailable. [Officer review](./docs/officers/MEMBER_SCREEN.md). **#731 native staging security — 2026-10-14:** [native receipt](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/731#issuecomment-6186206758) records real verified password Auth and normal App Check: isolated missing/invalid Auth or attestation401, caller substitution403, extra authority/malformed input400, current/expired marker/capability and current native account denials403. Populated status omits other UIDs/contact/waiver/count/capacity. Firebase refuses unsupported tenant sign-in with INVALID_TENANT_ID; no tenant or valid nondefault-tenant token was created. Actual UI response loss after commit, exact retry without writes, terminal-state protection, recipient-loss replay/revoke and revoked-caller replay passed. No debug attestation/custom claims, new permission, Rule allowance, production or money action. Supervised use still requires the complete final cleanup/acceptance receipt and fresh fixtures. Earlier #731/#732 source/anonymous-only notes below are historical. diff --git a/SYSTEM_DESIGN.md b/SYSTEM_DESIGN.md index e0369f0..da9d2e0 100644 --- a/SYSTEM_DESIGN.md +++ b/SYSTEM_DESIGN.md @@ -1,6 +1,6 @@ # MPRC Platform System Design -**Member screen preparation — #739, October 16, 2026, SOURCE ONLY:** the membership/free-event screen now validates bounded server status and action acknowledgements, binds the native account/app/default tenant and observed session, and hides stale controls at the earliest known membership/window deadline or after at most 60 seconds from read start. No polling is added. Exact uncertain retries stay within their original observed session. The responsive layout uses Pacific event dates and explicit loading, empty, unavailable and retry states. Backend-first release is required: older status responses without schema/time fields fail closed. No policy, payment, family enrollment, permission or production change. [Officer review](./docs/officers/MEMBER_SCREEN.md). +**Member-screen staging checkpoint — #739, October 16, 2026:** Function v7 and Hosting source `799565e` are verified, including the downloaded archive, all 62 website files, genuine Auth/App Check and ten member/retry/expiry/cancellation checks with fresh fictional fixtures and verified cleanup. Full-site screenshots exposed a fixed-header style collision on the member navigation. The markup correction is source-only until its matching Hosting release is recorded in [#739](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/739); no Function rebuild or permission change is needed. Online dues and real membership/payments remain unavailable. [Officer review](./docs/officers/MEMBER_SCREEN.md). **#731 native staging acceptance — 2026-10-14:** actual lifecycle/privacy/expiry/mobile and 38 native evaluations/27 distinct checks passed, including isolated Auth/App Check/caller/current-authority denials and actual UI committed/lost-response saved retry. Same existing v6/669e2fb archive and Hosting e21be35; no architecture/runtime/Rules/IAM/dependency/provider/production change. Exact owned accounts/records and browser SDK state were cleaned. Use remains gated on the complete dated acceptance/cleanup receipt and fresh fake fixtures; #731 stays open until final handoff gates are recorded. [Current officer handoff](./docs/officers/STAGING_COMMUNITY.md#fictional-race-member-screen--731-source-prepared). Earlier #731/#732 source/anonymous-only checkpoints below are historical, not current test status. The full backend/real-payment/public-launch objective remains incomplete. diff --git a/docs/MEMBER_LAUNCH_SCOPE.md b/docs/MEMBER_LAUNCH_SCOPE.md index 44f0f44..d7a48fd 100644 --- a/docs/MEMBER_LAUNCH_SCOPE.md +++ b/docs/MEMBER_LAUNCH_SCOPE.md @@ -64,3 +64,7 @@ The current staging-only membership/free-event screen gains native-session fenci The lint inventory adds the two new clean TypeScript files only. Existing reviewed findings remain byte-for-byte unchanged: 113 errors and six warnings elsewhere. No lint rule or allowance is weakened. Online annual dues, private family enrollment, account-recovery/provider qualification, approved policy and the final protected production release remain incomplete. The prototype request screen explicitly says online dues and family invitations are unavailable; it does not imply that a manual approval queue is the approved final membership flow. + +### Native member-screen checkpoint + +On October16, Functionv7/archive and Hosting source799565e were verified independently; all62 artifact files/deep routes matched. Ten genuine browser Auth/AppCheck/member/retry/expiry/cancellation checks passed with newly owned fictional fixtures, followed by exact cleanup. Headless sign-in was rejected; normal headed Chrome sign-in and attestation passed without relaxing any guard. Full-site screenshots then caught a global fixed-header CSS collision; the member navigation now uses an equivalent ARIA landmark without matching the site-wide `nav` selector. Its separate Hosting receipt is required. Function bytes and permissions are unchanged by this correction. These checks do not qualify Stripe, real dues, email delivery, family enrollment or production. diff --git a/docs/officers/MEMBER_SCREEN.md b/docs/officers/MEMBER_SCREEN.md index eccae8c..fd40681 100644 --- a/docs/officers/MEMBER_SCREEN.md +++ b/docs/officers/MEMBER_SCREEN.md @@ -1,6 +1,8 @@ # Review membership and free events -**Status, October 16, 2026:** #739 is source preparation. The changed screen is **NOT AVAILABLE YET** on the hosted site. Local screenshots and tests use fictional accounts and a replacement test service. They do not prove Firebase, email delivery, Stripe or production behavior. +**Status, October 16, 2026:** native member behavior is staging-verified from `799565e`: Function v7/archive/settings, all 62 Hosting files, genuine Auth/App Check and ten member/retry/expiry/cancellation checks passed. Fresh fictional fixtures were removed and their absence checked. A full-site visual check found member links inheriting the fixed site header styles. The correction needs its matching Hosting release; use [the latest #739 receipt](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/739) before reviewing the screen. Production and real payments are **NOT AVAILABLE YET**. Earlier local-only screenshots are historical. + +The specialist's native checks used ordinary browser attestation and separately supplied synthetic terms. They do not prove email delivery, online dues, officer MFA, Stripe or production behavior. All permissions and resource limits remain unchanged. **Purpose:** check that members understand their status and can safely sign up, cancel or recover after an uncertain request. @@ -14,18 +16,19 @@ 2. Confirm the test-only notice is visible. 3. Sign in with the supplied fictional account. 4. Confirm the loading message gives way to a membership card and free-event cards. -5. Check that event dates say Pacific time. -6. Open the test waiver and deliberately tick its acceptance box. -7. Choose the named free-event signup. -8. Wait for the confirmed result and your current signup. -9. Cancel that signup. -10. Wait for the cancelled result before starting another action. -11. Ask the specialist to demonstrate the unavailable and lost-response cases with fictional fixtures. -12. Use Retry request for an uncertain action, or Refresh status to read current state without resending it. -13. Wait for the supplied short term or signup window to end. -14. Confirm old status and controls disappear with a refresh message. -15. Refresh status and confirm cancellation of an existing signup remains possible after membership lapses. -16. Sign out, then ask the specialist to remove the new disposable fixtures. +5. Confirm member links sit below the page introduction and the main club navigation remains usable. +6. Check that event dates say Pacific time. +7. Open the test waiver and deliberately tick its acceptance box. +8. Choose the named free-event signup. +9. Wait for the confirmed result and your current signup. +10. Cancel that signup. +11. Wait for the cancelled result before starting another action. +12. Ask the specialist to demonstrate the unavailable and lost-response cases with fictional fixtures. +13. Use Retry request for an uncertain action, or Refresh status to read current state without resending it. +14. Wait for the supplied short term or signup window to end. +15. Confirm old status and controls disappear with a refresh message. +16. Refresh status and confirm cancellation of an existing signup remains possible after membership lapses. +17. Sign out, then ask the specialist to remove the new disposable fixtures. **Expected result:** only the current account's validated status appears. Account/session changes discard old requests and consent. A status display lasts at most 60 seconds from read start, often less at a known deadline; refresh is manual and does not reserve a place. A cancellation keeps the approved paid membership term and issues no refund. This screen still offers only a test membership request; online dues and family invitations are unavailable. diff --git a/docs/officers/README.md b/docs/officers/README.md index 975c3b4..c2bd64b 100644 --- a/docs/officers/README.md +++ b/docs/officers/README.md @@ -1,6 +1,6 @@ # Officer Website Handbook -**October 16 member-screen preparation:** [Review membership and free events](./MEMBER_SCREEN.md). Source only; no hosted release or payments yet. +**October 16 member-screen preparation:** [Review membership and free events](./MEMBER_SCREEN.md). Native staging behavior and cleanup passed; the latest #739 receipt must also verify the navigation correction. No production or payment release. **Minimum member launch — October 15 decisions; #737 SOURCE ONLY:** Dave set $25 individual/$30 family calendar-year dues. New free-event signup requires verified email, accepted waiver and current paid membership; no additional discretionary member approval follows satisfied requirements. The new source checks membership in the booking transaction and preserves cancellation after expiry. This change is **NOT AVAILABLE YET** on the deployed website. Online dues are selected for first launch; separate family accounts share a paid Family ID. Final policy/guardian handling remains undecided. Review the [privacy/waiver drafts](../legal/MEMBER_LAUNCH_DRAFTS.md) and [source-only test procedure](./STAGING_COMMUNITY.md#current-membership-for-free-events--737-source-only). This source change adds no checkout or public external-payment instructions; paid-race commerce remains later. Earlier source checkpoints below are historical. diff --git a/src/pages/community/Community.test.tsx b/src/pages/community/Community.test.tsx index 3165c6e..c871e23 100644 --- a/src/pages/community/Community.test.tsx +++ b/src/pages/community/Community.test.tsx @@ -392,3 +392,14 @@ test('returning from a suspended tab invalidates status before another action', expect(call).toHaveBeenCalledTimes(1); } finally { jest.useRealTimers(); } }); + +test('member navigation stays in the page when the site header styles target nav elements', async () => { + const siteHeaderStyles = document.createElement('style'); + siteHeaderStyles.textContent = 'nav { position: fixed; top: 0; width: 100%; }'; + document.head.appendChild(siteHeaderStyles); + try { + render(show()); await screen.findByRole('button', { name: 'Request membership' }); + const navigation = screen.getByRole('navigation', { name: 'Member pages' }); + expect(getComputedStyle(navigation).position).not.toBe('fixed'); + } finally { siteHeaderStyles.remove(); } +}); diff --git a/src/pages/community/Community.tsx b/src/pages/community/Community.tsx index 643d234..0e4aa7e 100644 --- a/src/pages/community/Community.tsx +++ b/src/pages/community/Community.tsx @@ -173,7 +173,7 @@ export default function Community() { Staging test only. Use made-up accounts. No real membership, race entry or payment is created.
-