You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Corrects the provider-neutral membership contract so approved term evidence may safely exist before a website account, while website entitlement remains withheld until the exact account is explicitly associated.
Officer impact: No live officer workflow changes. The future manual-onboarding model now represents a paid/current membership before account creation without granting access; all officer steps remain SOURCE ONLY, UNUSED, and NOT AVAILABLE YET.
Officer documentation: docs/officers/EVENTS_SHOP_MEMBERS.md — updated only the provider-neutral membership-authority future-state diagram, text alternative, review steps, proof, and undo guidance. SYSTEM_DESIGN.md §8.0a carries the matching engineering contract.
Deployment evidence: Source commit 2c528b120489e1a13acd5bb07a846d09429ccc0e and local synthetic checks only. Website publication: not performed. runmprc.com: not verified or changed. Firebase: not deployed or changed. Outside providers: not configured or contacted. Migration/production data: none. Production behavior: not verified or changed. A preview or green workflow will not prove any of those surfaces live.
Closes#451
Advances #81, #114, and #115; those parent trackers remain open.
Invariant and result
Membership evidence and account identity remain independent prerequisites.
create -> associate -> term remains valid and unchanged.
create -> term(s) -> associate is now valid; the one-time association preserves the latest term.
Every unlinked record returns not_entitled, even with approved/current evidence.
Only the exact linked UID plus an approved term inside its explicit half-open range returns current_member.
The implementation changes only three ordering guards in membershipAuthority.js. Schema version 1, record/command/result shapes, revision arithmetic, strict input validation, exact-latest retry semantics, one-time UID association, and entitlement logic are unchanged.
RED and compatibility
Before the source change, the new term-first test failed at the first valid revision-1 record_term_decision with MembershipAuthorityError. After the three-guard correction, both orderings and all sibling composition seams pass.
No migration or backfill is needed: the authority module remains unused, is not imported by functions/index.js, and has no persisted snapshots. Existing link-first snapshots stay valid. Future trusted runtime work must still transactionally bind the selected membership document, term receipt, command, and audit; this PR does not supply persistence or global replay/UID uniqueness.
Functions focused/full lint, production build, workflow YAML parsing, git diff --check, runtime-import scan, and clean tracked status passed.
Review
Root self-review covered authorization, entitlement ordering, App/Functions boundaries, PII/secrets/logging, idempotency, revision overflow, impossible state transitions, compatibility, migration, and deployment overclaim.
Three independent adversarial reviews covered state-machine reachability, security/reliability, and officer documentation/tests. Review findings were fixed and re-reviewed clean:
diagrams now evaluate the exact account link before term status, matching the reducer's association-first entitlement result;
an adjacent out-of-scope §8.0b wording edit was reverted; and
the association seam treats duesConfirmed as independent trusted evidence, never as something inferred from an approved authority term.
Explicit exclusions
No emitter/runtime module, Function export, endpoint, Firestore schema/Rules, durable journal, cross-record UID index, Auth claim/token action, payment/provider verification, price/calendar/plan/refund policy, UI, package/workflow, migration, deployment, provider configuration, production data, or live behavior changes.
SELF-REVIEW COMPLETE — no unresolved findings. I compared the GitHub patch byte-for-byte with exact local commit 2c528b1, reviewed all ten changed paths against #451, and rechecked the authority/revision/idempotency/entitlement, hostile-input, PII/logging, compatibility/migration, runtime-import, officer-continuity, and deployment-evidence boundaries. Three independent adversarial reviews covered state-machine, security/reliability, and docs/tests; all findings were fixed and re-reviewed clean. Hosted CI run 29920446311 passed every step of all five blocking jobs on this exact head. Netlify produced a PR preview only; no website/Firebase/provider/production change is claimed.
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
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.
Corrects the provider-neutral membership contract so approved term evidence may safely exist before a website account, while website entitlement remains withheld until the exact account is explicitly associated.
Officer impact: No live officer workflow changes. The future manual-onboarding model now represents a paid/current membership before account creation without granting access; all officer steps remain SOURCE ONLY, UNUSED, and NOT AVAILABLE YET.
Officer documentation:
docs/officers/EVENTS_SHOP_MEMBERS.md— updated only the provider-neutral membership-authority future-state diagram, text alternative, review steps, proof, and undo guidance.SYSTEM_DESIGN.md§8.0a carries the matching engineering contract.Deployment evidence: Source commit
2c528b120489e1a13acd5bb07a846d09429ccc0eand local synthetic checks only. Website publication: not performed.runmprc.com: not verified or changed. Firebase: not deployed or changed. Outside providers: not configured or contacted. Migration/production data: none. Production behavior: not verified or changed. A preview or green workflow will not prove any of those surfaces live.Closes #451
Advances #81, #114, and #115; those parent trackers remain open.
Invariant and result
create -> associate -> termremains valid and unchanged.create -> term(s) -> associateis now valid; the one-time association preserves the latest term.not_entitled, even with approved/current evidence.current_member.The implementation changes only three ordering guards in
membershipAuthority.js. Schema version 1, record/command/result shapes, revision arithmetic, strict input validation, exact-latest retry semantics, one-time UID association, and entitlement logic are unchanged.RED and compatibility
Before the source change, the new term-first test failed at the first valid revision-1
record_term_decisionwithMembershipAuthorityError. After the three-guard correction, both orderings and all sibling composition seams pass.No migration or backfill is needed: the authority module remains unused, is not imported by
functions/index.js, and has no persisted snapshots. Existing link-first snapshots stay valid. Future trusted runtime work must still transactionally bind the selected membership document, term receipt, command, and audit; this PR does not supply persistence or global replay/UID uniqueness.Test evidence
demo-pay002b2-testwith Firestore only.git diff --check, runtime-import scan, and clean tracked status passed.Review
Root self-review covered authorization, entitlement ordering, App/Functions boundaries, PII/secrets/logging, idempotency, revision overflow, impossible state transitions, compatibility, migration, and deployment overclaim.
Three independent adversarial reviews covered state-machine reachability, security/reliability, and officer documentation/tests. Review findings were fixed and re-reviewed clean:
duesConfirmedas independent trusted evidence, never as something inferred from an approved authority term.Explicit exclusions
No emitter/runtime module, Function export, endpoint, Firestore schema/Rules, durable journal, cross-record UID index, Auth claim/token action, payment/provider verification, price/calendar/plan/refund policy, UI, package/workflow, migration, deployment, provider configuration, production data, or live behavior changes.